| • |
What is TeleUSE ? ^ RETURN TO TOP ^
|
| |
TeleUSE is a true UIMS (User Interface Management System). A UIMS is designed to manage the graphical user interface efficiently during the life cycle of an application. TeleUSE is one of the leading Motif GUI builders in the industry today.
|
| • |
Where can I get TeleUSE product information from? ^ RETURN TO TOP ^
|
| |
| Aonix |
| 5930 Cornerstone Court West, Suite 250 |
| San Diego, CA 92121 |
| Tel: 858-457-2700 |
| Fax: 858-824-0212 |
| Web: www.aonix.com |
|
|
| • |
On what platforms is TeleUSE available?
^ RETURN TO TOP ^
|
| |
This table shows the platform/OS and the compatible TeleUSE version.
|
Platform |
OS Version |
TeleUSE Version |
|
Intel x86 |
Windows 2000/XP
(with Visual C++ .NET 2003) |
3.2.4 |
|
IBM RS/6000 |
AIX 5.3 |
3.2.4 |
|
Intel x86 |
Red Hat Enterprise 3.0 and Fedora Core 2.0 Linux |
3.2.4 |
|
Intel x86 |
Solaris 8 |
3.2.3 |
|
Sun SPARCstation |
Solaris 8 and 9 |
3.2.3 |
|
DEC Alpha |
Compaq Tru64 UNIX 5.1 |
3.2.3 |
|
HP9000/700 |
HP-UX 11.0 |
3.2.3 |
|
SGI Irix |
Irix 6.5.10f |
3.2.3 |
|
IBM RS/6000 |
AIX 4.3.3 and 5.0 |
3.2.3 |
|
Intel x86 |
Windows 98/ME/NT 4.0/2000
(with Visual C++ 6.0) |
3.2.3 |
|
Intel x86 |
Red Hat Linux 7.0 and 7.1 |
3.2.3 |
|
Sun SPARCstation |
Solaris 7 |
3.2.1 |
|
DEC Alpha |
Digital UNIX 4.0D |
3.2 |
|
HP9000/700 |
HP-UX 11.0 |
3.2 |
|
IBM RS/6000 |
AIX 4.3.1 |
3.2 |
|
SGI Irix |
Irix 6.5.1 |
3.2 |
|
Sun SPARCstation |
Solaris 2.6 |
3.2 |
|
Intel x86 |
Red Hat Linux 5.x /6.x |
3.2 |
|
Intel x86 |
Windows 95/98/NT 4.0 |
3.2.1 |
|
| • |
What other FAQs should I refer to ?
^ RETURN TO TOP ^
|
| |
www.motifdeveloper.com
http://www.faqs.org/faqs/x-faq/
|
| • |
Does TeleUSE generate C and/or C++ ?
^ RETURN TO TOP ^
|
| |
Yes, TeleUSE generates code in C and C++. You can configure TeleUSE to generate code in either KRC, ansi style C, or C++. The code generator can create C++ classes for any specified widget hierarchies (templates) that you have developed. You can also specify that widget descendants in the hierarchy should be available in the private/protected/public section of the C++ class. In addition, you can specify what resources for any widget in the hierarchy will be available via get/set member functions in the C++ generated class.
|
| • |
Does TeleUSE have an Ada integration?
^ RETURN TO TOP ^
|
| |
Yes, TeleUSE provides the Ada Lightning Integration Package which provides an easy interface between the D language modules and Ada application code. This package supports the current ObjectAda releases.
|
| • |
Do I need the TeleUSE library to execute an application?
^ RETURN TO TOP ^
|
| |
If system A and system B have the same platform/same OS, then if you link the application statically, you can move the executable to the other machine that does NOT have TeleUSE libraries and execute it there. By default, the TeleUSE libraries will be required to re-build the application. So if you need to move to another platform, you need to have the TeleUSE libraries available on that target. You can purchase them from Aonix if the target is a platform that we already support or you can build them yourself since the source code to the runtime libraries is included free with TeleUSE. Alternatively, you have to tell the TeleUSE code generator to generate code that is NOT dependent on any runtime libraries, but in order to use this 'pure-c' mode you will not be able to take advantage of some of the TeleUSE features, such as D, C++, UserDefinedAttributes, in your application.
|
| • |
Is there a D-mode for emacs/lemacs/xemacs?
^ RETURN TO TOP ^
|
| |
Yes, you will find the file that defines one in the $TeleUSE/TeleUSE/lib/emacs [where $TeleUSE is the directory in which you have installed TeleUSE]
|
| • |
What versions of Motif do I need to use with TeleUSE?
^ RETURN TO TOP ^
|
| |
|
TeleUSE Version |
Motif Version |
|
2.1.x |
1.1 |
|
3.0.x |
1.2 |
|
3.1 |
1.2 |
|
3.2 |
2.1 (1.2 on some platforms) |
|
3.2.1 |
2.1 |
|
3.2.3 |
2.1 |
|
3.2.4 |
OpenMotif 2.2.3-2 | See the Release Notes for the specific version for more details.
|
| • |
In an attribute window, what is the meaning of a gray marker?
^ RETURN TO TOP ^
|
| |
A gray setting marker indicates that the value shown is inherited.
|
| • |
Does VIP allow you to add comments to a particular template? If so, how?
^ RETURN TO TOP ^
|
| |
If the widget is selected in the work area, you can enter text as comments in the right hand side of the status area (above the work area). These comments are saved in the pcd file as a 'comments' attribute. If the status area does not show, you can view it by selecting it under the View menu.
|
| • |
How do you use the Dragon, or "Drag-On," box? What is the purpose of the drag-on box in the value windows (colors, pixmaps, fonts)?
^ RETURN TO TOP ^
|
| |
You can drag templates icons from a module, nodes from a tree, or widgets in the work area into a drag-on box. In the Value Window, the drag-on box can be used to add to the list of values on the left hand side of the Value Window. For example, if a template is using colors that are defined into VIP, you can drag the template into the drag-on box for the Color Value Window and the new colors will be added to the list of colors on the left side of the Value Window.
|
| • |
What is the purpose of the 'opaque' type?
^ RETURN TO TOP ^
|
| |
The opaque type is primarily intended for holding pointers returned by C function calls. But it can hold anything that is of the same size as a pointer. If an opaque variable holds an address, there is no way, in D, to reference the object being pointed to.
|
| • |
What is the difference between LANGUAGE C and LANGUAGE KRC in an AIM file?
^ RETURN TO TOP ^
|
| |
With C, the INCLUDE section is used, with KRC the INCLUDE section is ignored. With C, all enteries must be prototyped in a header file that is included and all structure definition must be in header file. If you are using any new features, such as structures or globals you need to use LANGUAGE C.
|
| • |
What is a D event field? How can it be accessed in D ?
^ RETURN TO TOP ^
|
| |
A D event field is a defined parameter for Data carried with a D event. It is accessed in D using the form:
<d-event>.<d-event-field>
|
| • |
What is the difference between a D event and a rule?
^ RETURN TO TOP ^
|
| |
A D event is a "signal" (not in the UNIX sense!) that something has occurred, which contains certain contextual data. It can also be thought of as a notification object (instance) that has certain data associated with it, and that when it is "sent" it will notify all "rules" that have registered with it.
A rule is simply a body of code that will be run when its condition (i.e. the part before the keyword "does") is true. Normally, the condition contains the name of a D event, so that when that D event is sent, it will notify the rule and the rule will execute it's body of code. Note that if multiple rules are registered to the same D event, their order of execution is undefined.
|
| • |
Why is it that the D events attached to my "createCallback" attributes aren't always sent?
^ RETURN TO TOP ^
|
| |
The problem isn't that the D event isn't sent, it's that your rule hasn't been registered for that D event yet. In TeleUSE, each D module is initialized separately, and it is during this "init" process that each rule is registered with its specific D event, local data is created, and the D module's INITIALLY rule is run. Thus, if the first D module initialized is the one that creates the widgets, then the other Dm odules won't have had a chance to register their rules yet, therefore the createCallbacks appear to get lost. The simple solution is to not create widgets in your INITIALLY rule (creating and initializing local variables is ok!). Instead, do the following in one of your D modules (I usually create a separate D module called "Main" for this and other generic D event handlers): devents:
MainInit :local [];
locals:
top_w : widget;
rules:
INITIALLY does
send (MainInit); -- allow all INITIALLY's to run first !!
end does;
MainInit does
top_w := create widget ("MyApplShell", nil, nil);
top_w.show;
--
-- ... whatever else needs to be done ...
--
end does;
|
| • |
Where can you look up the widget class specific pre-defined event fields ?
^ RETURN TO TOP ^
|
| |
Each of the members of the callback structure is available as a D event field. These callback structures can be found in the Motif Programmer's Reference for any given widget class, under "Callback Information" or you can use 'man' or 'tuqref' on the widget class.
|
| • |
What is the scope of a D event field for a given D event?
^ RETURN TO TOP ^
|
| |
The scope of a D event field is limited to the associated rule. It is possible to assign to another D event's D event field before sending the D event but it is erroneous to read another D event's event field.
|
| • |
If there is no callback available for a particular event of interest, how can we attach a D event to it?
^ RETURN TO TOP ^
|
| |
A translation can be used with a D translation event. Also an event handler can be used which ties a C function to an X event. The event handler (C function) could 'send' a D event.
|
| • |
Can any C routine be called from D ? What are the limitations?
^ RETURN TO TOP ^
|
| |
If and only if the parameters and the return value can be accurately represented in D.
|
| • |
Are type conversions in D the same as type casting in C ?
^ RETURN TO TOP ^
|
| |
Type conversion in D actually changes the underlying bit representation of the object where casting does not.
|
| • |
Is it possible to declare a D event that is global across more than one D modules ?
^ RETURN TO TOP ^
|
| |
Yes. Specify it in a D events file (.de file). The D devent can also be declared in both D modules but both declarations must be identical and they must not be declared as 'local'. The latter method is not recommended.
|
| • |
Is it possible to declare a D variable that is global across more than one D module?
^ RETURN TO TOP ^
|
| |
A local variable in a D module instance can be declared exported which makes it accessible from other D module instances. This is described in Chapter 3, "Declaration Parts" in Developing Dialog Components. The same is true for D events. By using the exported feature, there is probably no need to use .de files. The ability to export local variables was introduced with TeleUSE 3.0. Although D variables are still not directly share-able, you CAN access another D modules local variables
1) IF they are exported and 2) IF you have a handle to the D module instance.
|
| • |
If I have a string in D that represents the name of a D event, how can I send the D event?
^ RETURN TO TOP ^
|
| |
Here is an example:
devents:
SomeCallback[];
foo :local[]
locals:
x: string;
d: devent;
rules:
SomeCallback does
x := "foo";
d := self.(x);
send(d);
end does;
foo does
printf("In foo\n");
end does;
If you have a UDA of type string that represents the name of a D event field, you can use:
x := SomeCallback.source_widget.StringUDA;
d := self.(x);
send(d);
-- or simply:
d := self.(SomeCallback.source_widget.StringUDA);
send(d);
|
| • |
What is the purpose of a user-defined attribute?
^ RETURN TO TOP ^
|
| |
A User-Defined Attribute allows a widget to carry data with it. They are useful to use instead of having to maintain so many local variables in a D module.
|
| • |
What are the valid UDA types that I can define?
^ RETURN TO TOP ^
|
| |
The list provided in the Vip "Define User Attributes" window is only a subset of the possible choices ... not exactly intuitive! Basically, you can use any valid X resource type that has been registered with the XtConvert mechanism (at the time 'vip' was built!). So you can use types like: Alignment (XmRAlignment)
SiblingWidget (TuRSiblingWidget)
WidgetChild (TuRWidgetChild)
Cursor (XtRCursor)
XRectangleList (TuRXRectangleList)
IntTable (TuRIntTable)
StringTable (XtRStringTable)
Pointer (XtRPointer)
... etc ...
When you define UDAs in D code (e.g. "w.define("Name", "XType");"), you may use any valid D datatype, including any "User Datatypes" defined in your AIM files, as well as all the X resource types.
|
| • |
Is there a way in d-code to check for the existence of a user-defined attribute before accessing it ?
^ RETURN TO TOP ^
|
| |
If you are using TeleUSE 3.0.2 or later, you can use the predefined operation "is_defined()" on the widget datatype. Actually, it returns the type of the attribute, but if it hasn't been defined it returns "nil". And this works for normal widget attributes as well as UDAs. So basically you can test for existence like this: if (my_w.is_defined("MyUDA") != nil) then
-- the UDA exists
end if;
|
| • |
How to access and set UDAs in C?
^ RETURN TO TOP ^
|
| |
In $TeleUSE/include/teleuse/tk_widops.h you will find 2 undocumented routines. These routines allow you to set/get UDAs from c code: extern void tk_get_widget_attr(); /* Widget widget; */ /* tu_string attr; */ /* tu_string * prtype; */ /* tu_pointer * pvalue; */ /* tu_status_t * status; */
extern void tk_set_widget_attr(); /* Widget widget; */ /* tu_string attr; */ /* tu_string rtype; */ /* tu_pointer value; */ /* tu_status_t * status; */
Example:
tu_string uda_type; tu_pointer uda_value; tu_status_t status;
/* My_UDA is a string UDA */
/* To get UDA: */
char *result_str;
tk_get_widget_attr(wid, "My_UDA", &uda_type, &uda_value, &status); result_str = (char *)uda_value;
/* To Set UDA: */
tk_set_widget_attr (wid, "Other_UDA", XtRString, uda_value, &status); ^^^^^^^^^ Found in $TeleUSE/X11R5/include/StringDefs.h
|
| • |
What 3 things must be true in order for a widget to be visible?
^ RETURN TO TOP ^
|
| |
It must be realized, managed, and mapped. If a widget has no parent, though, managing it is meaningless. A widget needs to be explicitly realized ONLY if none of its ancestors have been realized or it has no ancestors. Non-shell widget are managed automatically when they are created so no explicit managing is necessary. TopLevelShell and ApplicationShells should be opened/closed, after they have been realized, using: top_shell.do_popup(); <-- opens shell
top_shell.do_popdown; <-- closes shell
|
| • |
When I try to turn off the file list in the XmFileSelectionBox by setting 'showList' to false, I get an empty square window in the upper left corner of the FileSelectionBox. How can I remove it?
^ RETURN TO TOP ^
|
| |
The problem is occurring because XmScrolledWindow parent of the file list needs to be unmapped.
To remove the problem, use: dmodule main #include < teleuse/teleuse.h>
...
INITIALLY does
top := create widget ...
list_wid : widget := XmFileSelectionBoxGetChild(top->FSB, XmDIALOG_LIST);
list_wid.parent.mapped := false;
^^^^^^
Set the XmScrolledWindow not just the XmList. Also, use the following option in your uxb.conf file:
DINCLUDEDIR $TeleUSE/include
to locate teleuse/teleuse.h for D.
|
| • |
When I set the background color on a ScrolledWindow, I still can see the default color in some areas of the ScrolledWindow. Especially when the contents of the ScrolledWindow do not fill the ScrolledWindow. How can I set the whole ScrolledWindow's background?
^ RETURN TO TOP ^
|
| |
You can set the background of the WHOLE scrolledWindow in D using: top->ScrolledWindowClipWindow.background := top->scrolledWindow.background;
top->VertScrollBar.background := top->scrolledWindow.background;
top->HorScrollBar.background := top->scrolledWindow.background;
The internal widget names for a scrolledWindow are: ScrolledWindowClipWindow VertScrollBar HorScrollBar
|
| • |
Can I use the xm_string_list operations directly on the resources of the XmList ?
^ RETURN TO TOP ^
|
| |
Is the following code valid ? top->nameScrolledList.selectedItems.rewind;
if (top->nameScrolledList.selectedItems.more) then
sv := top->nameScrolledList.selectedItems.next;
end if;
Syntatically it is correct but you should not do such operations (like rewind) directly on the scrolled list. Load top->nameScrolledList.selectedItems to a local variable before operating on it. This is because this expression invokes a function call and stores the result in a temporary variable. Operating on the temporary variable is useless.
|
| • |
What does AIM stand for?
^ RETURN TO TOP ^
|
| |
Application Interface Mapping. AIM files are used for defining the C functions and global variables that are to be called or referenced from D.
|
| • |
How can the UI builder generate an AIM file?
^ RETURN TO TOP ^
|
| |
The AIMEXTR entry in the configuration file specifies this behavior. You must have access to the C source code in order for UXB to be able to generate the aim file.
|
| • |
What does "uxb guess" do?
^ RETURN TO TOP ^
|
| |
This command creates a file called uxb.conf based on the files it finds in the local directory.
|
| • |
If I have a string in the uxb.conf file that matches my platform name such as 'sun,' uxb does not accept it. How can I get around this?
^ RETURN TO TOP ^
|
| |
You can put the following in uxb.conf to undefine the word 'sun' in case user need that word in the config file. Example: if a directory has xxx/xxx/sun/xxx/xxx #ifdef sun #undef sun #define sun sun #endif
|
| • |
Can I use the string_list operators directly on a C global variable of type char **?
^ RETURN TO TOP ^
|
| |
No. Globals can only be modified by direct assignment. Dot operators will not work on globals directly. If you want to use the string_list operations, you must use a temporary local variable and then assign it to the global.
Example:
If 'global_String_list' is declared in an aim file as: TYPE
"char **" <--> string_list;
ENTRY
global_string_list : "char **"; In D use: -- build the string_list:
local_string_list := create string_list();
local_string_list.insert("item1",0);
local_string_list.insert("item2",0);
local_string_list.insert("item3",0);
local_string_list.insert("item4",0);
-- assign to the global:
global_string_list := local_string_list;
|
| • |
What is the difference between 'c' and 'pure-c' mode ?
^ RETURN TO TOP ^
|
| |
In 'pure-c' mode, no TeleUSE runtime calls are made from the generated c file. In this mode, no D can be used.
|
| • |
How can I allow for the ehdb file to be in another directory besides the current working directory?
^ RETURN TO TOP ^
|
| |
In order to allow for the ehdb file to be in another directory you can use the DESTDIR option in the configuration file. Then run: > uxb -- to build
> uxb install -- to move the file to the DESTDIR
The DESTDIR configuration option changes the automatically generated uxb_mainc.c so that the ehdb file is referenced in the destination directory. The user can rely on an environment variable to find the file in the directory, or the path can be fixed.
|
| • |
How can I set resources on the eht help windows?
^ RETURN TO TOP ^
|
| |
You can set resources for the Help Windows in a resource file. The name of the eht help window TopLevelShell widget is 'eht'.
To set the iconPixmap of the help windows in a resource file use: *eht*iconPixmap:
To set the fontList for the buttons in the help window use: *eht*fontlist: < font specification>
To set the fontlist for a help window frame use: *eht*help_text.fontlist: < font specification>
|
| • |
How can I specify the geometry of an application from the command-line? When I use the -geometry option with a TeleUSE generated application (e.g., < app> -geometry 600x800+50+50), the option is ignored.
^ RETURN TO TOP ^
|
| |
The "-geometry" command-line option is defined by Xt as ".geometry", not "*geometry". When TeleUSE builds an application, it places an "invisible" shell above all your shells to provide a consistent way of naming resources; therefore, your "-geometry" specification is being applied to this invisible shell instead of to the one you had intended.
Instead, use the -xrm option (e.g., < app> -xrm "*geometry: 600x800+50+50"). The downside of this approach is that it will affect ALL TopLevelShells that are in your application for which the size/position is not hard-coded! You can limit this problem if you know the name of the shell at the top of the widget tree (assuming you know its name). In that case, replace the "*" with "*widget_name." (e.g., < app> -xrm "*AppShell.geometry: 600x800+50+50").
|
| • |
Which 3rd party widgets have been integrated with TeleUSE?
^ RETURN TO TOP ^
|
| |
Name : XRT widgets Vendor : Quest Software Description : Integrations are maintained by Aonix for:
XRT/3d The easiest way to build informative and dynamic 3-D charts and graphs into Motif applications. XRT/field The easiest way to build professional data-entry fields into Motif applications. XRT/gear The essential collection of add-on widgets and utilities for Motif. XRT/graph The easiest way to build powerful 2-D charts and graphs into Motif applications. XRT/table The essential multi-purpose widget for displaying and editing lists, tables and forms. Email : Home Page : http://www.quest.com Download Integration: ftp://ftp.aonix.com/pub/tuts/outgoing/3rd_party_int/tu_xrt_rev11/TUXRTKIT.TAR.Z
Name : Xbae Vendor : Public Domain Description : XbaeMatrix is a Motif widget which presents an editable array of string data to the user in a scrollable table similar to a spreadsheet. XbaeCaption is a simple Motif manager widget used to associate an XmLabel (caption) with it's single child. Source : ftp://ftp.x.org/contrib/widgets/motif/Xbae-4.6.2.tar.gz
Download Integration: ftp://ftp.aonix.com/pub/web/teleuse/tu_xbae_4_2.tar.Z
Name : Tuw Widgets Description : TuwItemBox Container that manages special kinds of objects called Tuw items. A Tuw item can consist of an icon and an optional name. TuwItemMenu Designed to handle the common situation requiring a dynamic menu, one in which the number of items varies as the application executes. TuwSource Displays a text file with line numbers in front of each line. TuwSource widget was developed to support source display in a debugger. TuwTree Displays a tree structure of nodes. TuwTable Allows you to build tables with different kinds of objects. Source : Included with TeleUSE in $TeleUSE/conf/examples/tuw
Name : DT Widgets Description : SpinButton A widget that allows you to cycle through a list of values in the forward or reverse direction. ComboBox A widget that contains a text and an arrow which posts a list of options for selection upon button press. Source : Included with TeleUSE $TeleUSE/conf/examples/cde
Name : EnhancementPak Widgets Vendor : ICS Description : A collection of general purpose widgets, consisting of controls, geometry managers, and resource editors. Email : Home Page : http://www.ics.com/Products/Epak/epak.html
|