home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!mailrus!cs.utexas.edu!sun-barr!newstop!sun!devvax.Jpl.Nasa.Gov
- From: david@devvax.Jpl.Nasa.Gov (David E. Smyth)
- Newsgroups: comp.sources.x
- Subject: v08i032: wcl - Widget Creation Library, Part02/06
- Message-ID: <138458@sun.Eng.Sun.COM>
- Date: 6 Jul 90 07:40:37 GMT
- Sender: news@sun.Eng.Sun.COM
- Lines: 1934
- Approved: argv@sun.com
-
- Submitted-by: david@devvax.Jpl.Nasa.Gov (David E. Smyth)
- Posting-number: Volume 8, Issue 32
- Archive-name: wcl/part02
-
- # to unbundle, "sh" this file -- DO NOT use csh
- # SHAR archive format. Archive created Tue Jul 3 16:48:32 PDT 1990
- echo x - Mri.c
- sed 's/^X//' > Mri.c <<'+FUNKY+STUFF+'
- X/*
- X** Copyright (c) 1990 David E. Smyth
- X**
- X** Redistribution and use in source and binary forms are permitted
- X** provided that the above copyright notice and this paragraph are
- X** duplicated in all such forms and that any documentation, advertising
- X** materials, and other materials related to such distribution and use
- X** acknowledge that the software was developed by David E. Smyth. The
- X** name of David E. Smyth may not be used to endorse or promote products
- X** derived from this software without specific prior written permission.
- X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X**
- X*/
- X
- X/******************************************************************************
- X**
- X** SCCS_data: @(#)Mri.c 1.0 ( 19 June 1990 )
- X**
- X** Description: This file contains main() for a Motif Resource Interpreter
- X** which allows prototype interfaces to be built from
- X** resource files. The Widget Creation library is used.
- X**
- X** Besides the Motif widgets, Mri also knows about Table
- X** widgets, simply because they are so dang useful!
- X**
- X** Notes: This program uses the Xrm (X resource management) database
- X** for widget tree definition and management. This program
- X** is dependent on the Motif widget set only because the
- X** Motif classes and constructors are registered, which
- X** causes the Motif libs to be linked in. Someday I'll
- X** get a shared lib version of Motif and the Athena widgets,
- X** and even the OpenLook widget set, and then there will
- X** be no reason that widgets could not be mixed and matched.
- X** Doing that without shared libs makes for a HUGE executable.
- X**
- X******************************************************************************/
- X
- X/******************************************************************************
- X** Include_files.
- X******************************************************************************/
- X
- X#include <Xm/Xm.h>
- X#include <ctype.h>
- X#include <WidgetCreate.h>
- X
- X#include <Table.h>
- X
- X/******************************************************************************
- X** Private Functions
- X******************************************************************************/
- X
- Xextern void MriRegisterMotif();
- X
- Xstatic void RegisterTable ( app )
- X XtAppContext app;
- X{
- X#define RCN( name, class ) WcRegisterClassName ( app, name, class );
- X#define RCP( name, class ) WcRegisterClassPtr ( app, name, class );
- X
- X /* -- register widget classes */
- X RCN( "Table", tableWidgetClass );
- X RCP( "tableWidgetClass", tableWidgetClass );
- X
- X#undef RCN
- X#undef RCP
- X}
- X
- X/******************************************************************************
- X* MAIN function
- X******************************************************************************/
- X
- Xmain ( argc, argv )
- X int argc;
- X char* argv[];
- X{
- X char* appClass;
- X XtAppContext app;
- X Widget appShell;
- X
- X appClass = (char*) XtMalloc ( strlen ( argv[0] ) + 1 );
- X strcpy (appClass, argv[0]);
- X /* initialize first letter to make class, or first two if
- X ** first is already capitalized, or don't worry about it.
- X */
- X if (islower(appClass[0]))
- X appClass[0] = toupper(appClass[0]);
- X else if (islower(appClass[1]))
- X appClass[1] = toupper(appClass[1]);
- X
- X /* -- Intialize Toolkit creating the application shell */
- X appShell = XtInitialize (
- X argv[0], appClass, /* app name and class */
- X NULL, 0, /* description of cmd line options */
- X &argc, argv
- X );
- X app = XtWidgetToApplicationContext(appShell);
- X
- X /* -- Register all application specific callbacks and widget classes */
- X RegisterTable ( app );
- X
- X /* -- Register all Motif classes and constructors */
- X MriRegisterMotif ( app );
- X
- X /* -- Create widget tree below toplevel shell using Xrm database */
- X WcWidgetCreation ( appShell );
- X
- X /* -- Realize the widget tree and enter the main application loop */
- X XtRealizeWidget ( appShell );
- X XtMainLoop ( );
- X}
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 4092 Jun 28 09:13 Mri.c (as sent)'
- chmod u=rw,g=r,o=r Mri.c
- ls -l Mri.c
- echo x - Mri01.HelloWorld
- sed 's/^X//' > Mri01.HelloWorld <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis resource file represents a very basic application: a single
- Xbutton which, when pressed, causes the application to exit.
- X
- XNote that you can use familiar constructs such as #ifdef-endif
- Xpairs, and C style /* comments */. `#' as a first character
- Xalso works, because it really indicates a cpp directive, and
- Xcpp quitely ignores (does not pass on) any unrecognized directives.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- XMri.wcChildren: push
- X
- X*push.wcClass: xmPushButtonWidgetClass
- X*push.labelString: Hello World
- X*push.activateCallback: WcExitCB(1)
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 680 Jun 28 09:13 Mri01.HelloWorld (as sent)'
- chmod u=rw,g=r,o=r Mri01.HelloWorld
- ls -l Mri01.HelloWorld
- echo x - Mri02.GoodbyeWorld
- sed 's/^X//' > Mri02.GoodbyeWorld <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis resource file represents a very basic application: a single button
- Xwhich changes its own behavior and label. The first time it is
- Xpressed, it changes its label and its activate callback. The second
- Xtime it is pressed, it causes the application to exit.
- X
- XThis example uses WcSetValueCB(). The argument looks exactly like a
- Xresource specification. The WcSetValueCB() callback actually does
- Xan XtSetValue to set the value in the target (named) widget.
- X
- XNote that if there are multiple callbacks being invoked in a callback
- Xlist, as in the button's activateCallback resource below, then each
- Xspecification is separated by a comma. In the below example, the
- Xspecifications are also put on separate lines (the `\' escapes the
- Xnewline in resource files just like in C), with additional whitepspace
- X(tabs and blanks) for stylistic reasons.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- XMri.wcChildren: push
- X
- X*push.wcClass: xmPushButtonWidgetClass
- X*push.labelString: Hello World
- X*push.activateCallback: WcSetValueCB( *push.activateCallback: WcExitCB(1) ), \
- X WcSetValueCB( *push.labelString: Goodbye! )
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 1238 Jun 28 09:13 Mri02.GoodbyeWorld (as sent)'
- chmod u=rw,g=r,o=r Mri02.GoodbyeWorld
- ls -l Mri02.GoodbyeWorld
- echo x - Mri03.Pulldowns
- sed 's/^X//' > Mri03.Pulldowns <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XOrdering:
- X--------
- X
- XThe order of the lines in the resource file are completely stylistic: a
- Xmatter of taste. The ordering is lost when the resources are loaded
- Xinto the Xrm database, and the Widget Creation library works only from
- Xthe database, not directy from the resource files.
- X
- XNote that the ordering of the names within the wcChildren resources is
- Xsignificant: it is the order the children will be created, from left to
- Xright, depth first. One needs to consider this in several cases:
- Xpulldown menus are a good example.
- X
- XPulldown Menus
- X--------------
- X
- XThe pulldowns can be created before or after their activating cascade
- Xbutton: as an example, lets look at the difference between the
- XmenuBar.file and menuBar.fileMenu specifications versus the
- XmenuBar.help and menuBar.helpMenu specifications.
- X
- XThe *menuBar.wcChildren resource specifies that the first of its
- Xchildren to be created is `file' (which has no children), then
- X`fileMenu' and all its children, then `helpMenu' and all its children,
- Xand finally `help'.
- X
- X *menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- XThe `fileMenu', being created after the `file' cascade, sets the subMenuId
- Xresource on the `file' cascade when it is created:
- X
- X *fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X
- XThe `help' cascade is created after the `helpMenu', so it can specify the
- X`helpMenu' as its subMenuId directly:
- X
- X *help.subMenuId: *helpMenu
- X
- XNote that the pulldown menus are NOT managed when they are created. They
- Xare automagically managed by the cascade buttons.
- X
- XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
- XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
- Xinstead one must leave the Xm off the front. Also, the values are
- Xcase insensitive.
- X
- XMultiple Level Cascading Menus
- X------------------------------
- X
- XThe saveAsMenu pulldown connected to the saveAs button demonstrates
- Xthis. See the discussion below.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#*wcTrace: True
- X
- XMri.wcChildren: menuBar
- X
- X*menuBar.wcConstructor: XmCreateMenuBar
- X*menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- X*file.wcConstructor: XmCreateCascadeButton
- X*file.labelString: File
- X*file.mnemonic: F
- X
- X*fileMenu.wcConstructor: XmCreatePulldownMenu
- X*fileMenu.wcManaged: False
- X*fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X*fileMenu.wcChildren: load, sep1, save, saveAsMenu, saveAs, sep2, quit
- X
- X*helpMenu.wcConstructor: XmCreatePulldownMenu
- X*helpMenu.wcManaged: False
- X*helpMenu.wcChildren: mbHelp, cpHelp, daHelp, tHelp
- X
- X*helpMenu.mbHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.mbHelp.labelString: on Menu Bar
- X*helpMenu.mbHelp.mnemonic: M
- X
- X*helpMenu.cpHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.cpHelp.labelString: on Control Panel
- X*helpMenu.cpHelp.mnemonic: C
- X
- X*helpMenu.daHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.daHelp.labelString: on Drawing Area
- X*helpMenu.daHelp.mnemonic: D
- X
- X*helpMenu.tHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.tHelp.labelString: on Text Area
- X*helpMenu.tHelp.mnemonic: T
- X
- X*help.wcConstructor: XmCreateCascadeButton
- X*help.subMenuId: *helpMenu
- X*help.labelString: Help
- X*help.mnemonic: H
- X
- X*load.wcConstructor: XmCreateCascadeButton
- X*load.labelString: Load ...
- X*load.mnemonic: L
- X
- X*sep1.wcConstructor: XmCreateSeparator
- X*sep1.separatorType: Shadow_Etched_In
- X
- X*save.wcConstructor: XmCreateCascadeButton
- X*save.labelString: Save
- X*save.mnemonic: S
- X
- X#
- X# The saveAsMenu has already been created.
- X# It is specified at the bottom of this file.
- X#
- X*saveAs.wcConstructor: XmCreateCascadeButton
- X*saveAs.labelString: Save As
- X*saveAs.mnemonic: A
- X*saveAs.subMenuId: *saveAsMenu
- X
- X*sep2.wcConstructor: XmCreateSeparator
- X*sep2.separatorType: DOUBLE_DASHED_LINE
- X
- X*quit.wcConstructor: XmCreateCascadeButton
- X*quit.labelString: Quit
- X*quit.mnemonic: Q
- X*quit.activateCallback: WcExitCB
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XMore on Callback Functions
- X--------------------------
- X
- XOne does not strictly need to specify any arguments to callbacks, nor
- Xthe parenthesis. For example:
- X
- X *quit.activateCallback: WcExitCB
- X
- XIn this situation, a NULL string is passed to the callback function as
- Xclient data. WcExitCB invokes exit(0) when it gets a NULL argument.
- X
- XIt is up to the callback to decide the appropriate action when a NULL
- Xstring is received as client data. The Wc library does guarantee that
- Xthe callback will receive a NULL string (the first character is a
- X'\0'), and not a null pointer (pointer == 0).
- X
- XMultiple Level Cascading Menus
- X------------------------------
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#
- X# All of the nested menus in this example have two buttons:
- X# Go and More to come. Note that we must be specific about
- X# which pulldown menu gets tied to each one!
- X#
- X
- X*go.wcConstructor: XmCreateCascadeButton
- X*go.labelString: Go
- X
- X*more.wcConstructor: XmCreateCascadeButton
- X*more.labelString: More to come
- X
- X*saveAsMenu.wcConstructor: XmCreatePulldownMenu
- X*saveAsMenu.wcManaged: False
- X*saveAsMenu.wcChildren: level3, go, more
- X*saveAsMenu.more.subMenuId: *level3
- X
- X*level3.wcConstructor: XmCreatePulldownMenu
- X*level3.wcManaged: False
- X*level3.wcChildren: level4, go, more
- X*level3.more.subMenuId: *level4
- X
- X*level4.wcConstructor: XmCreatePulldownMenu
- X*level4.wcManaged: False
- X*level4.wcChildren: level5, go, more
- X*level4.more.subMenuId: *level5
- X
- X*level5.wcConstructor: XmCreatePulldownMenu
- X*level5.wcManaged: False
- X*level5.wcChildren: level6, go, more
- X*level5.more.subMenuId: *level6
- X
- X*level6.wcConstructor: XmCreatePulldownMenu
- X*level6.wcManaged: False
- X*level6.wcChildren: level7, go, more
- X*level6.more.subMenuId: *level7
- X
- X*level7.wcConstructor: XmCreatePulldownMenu
- X*level7.wcManaged: False
- X*level7.wcChildren: go, more
- X*level7.go.labelString: You could go on forever like this...
- X*level7.more.labelString: But please don't!
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 6014 Jun 28 09:13 Mri03.Pulldowns (as sent)'
- chmod u=rw,g=r,o=r Mri03.Pulldowns
- ls -l Mri03.Pulldowns
- echo x - Mri04.OptMenu
- sed 's/^X//' > Mri04.OptMenu <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XOption Menus are a topic which deserves special consideration, because
- Xthey are abit different from what you might expect. As the Pulldown
- Xexample resource file demonstrates, one may create a cascade button
- Xbefore or after the menu which is controlled by the cascade. One might
- Xreasonably assume that the same is true for option menus.
- X
- XUnfortunately, this is an incorrect assumption. One MUST first create
- Xthe pulldown menu which displays the available options, and THEN invoke
- Xthe convenience function XmCreateOptionMenu. This may or may not be a
- Xbug, depending on your point of view.
- X
- XThe widget called an OptionMenu is really a row column with two managed
- Xchildren: a label, and a cascade. The significant issue is the size of
- Xthe cascade: it is forced to be wide enough for the longest selection
- Xon the pulldown menu. One cannot after the fact set the subMenuId on
- Xthe cascade, because the cascade does not generally size itself based
- Xon the subMenu elements: cascade size themselves based on their label.
- X
- XOne might assume that the RowColumn created by XmCreateOptionMenu would
- Xhave a special set_values() method which does the appropriate thing
- Xwhen subMenuId is set, but this is clearly not the case: the
- Xset_values() mentof does something, but it certainly is not
- Xappropriate. Expect a core dump if you try it.
- X
- XSo, if you want to use option menus, do it as shown in this example:
- Xfirst create the pulldown menu using XmCreatePulldownMenu, then create
- Xthe `OptionMenu' using XmCreateOptionMenu. The order of creation is
- Xdetermined by the order of the widget names in the parent's wcChildren
- Xresource:
- X
- X *com.wcChildren: doMenu, undoMenu, doOption, undoOption
- X
- XOh: a troble shooting tip: if you use XmCreateOptionMenu and the
- Xcascade button's label is `<optMenName>_cascadeBtn' then you do not
- Xhave the subMenuId set properly on the option menu. Check for spelling
- Xon the resource name, on the resource value, and possibly use
- X`*wcTrace: True' to make sure you give the right name for the pulldown
- Xmenu.
- X
- XAlso, remember to make the menu's initially unmanaged by setting
- XwcManaged: False on each menu. You can't do this globally,
- Xunfortunately, because there is no actual Motif widget class named
- XXmPulldownMenu. Sigh.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#*wcTrace: True
- X
- XMri.wcChildren: com
- X
- X*com.wcClassName: XmRowColumn
- X*com.wcChildren: quit, doMenu, undoMenu, nextMenu, doOption, undoOption, next
- X
- X*quit.wcClassName: XmPushButton
- X*quit.labelString: Quit
- X*quit.activateCallback: WcExitCB
- X
- X*doOption.wcConstructor: XmCreateOptionMenu
- X*doOption.labelString: Do It
- X*doOption.subMenuId: *doMenu
- X
- X*undoOption.wcConstructor: XmCreateOptionMenu
- X*undoOption.labelString: Undo It
- X*undoOption.subMenuId: *undoMenu
- X
- X*next.wcConstructor: XmCreateOptionMenu
- X*next.subMenuId: *nextMenu
- X
- X*doMenu.wcConstructor: XmCreatePulldownMenu
- X*doMenu.wcManaged: False
- X*doMenu.wcChildren: opt1, opt2
- X
- X*undoMenu.wcConstructor: XmCreatePulldownMenu
- X*undoMenu.wcManaged: False
- X*undoMenu.wcChildren: opt1, opt2, opt3
- X
- X*nextMenu.wcConstructor: XmCreatePulldownMenu
- X*nextMenu.wcManaged: False
- X*nextMenu.wcChildren: opt2, opt1, opt2, opt3, opt1
- X
- X/*
- X** Note that the specification for buttons opt1 and opt2 are actually used
- X** twice each: both menus have children named opt1 and opt2, so the
- X** children of both menus will have these same resources, and thus, will
- X** use the following resource specifications:
- X*/
- X
- X*opt1.wcClassName: XmPushButton
- X*opt1.labelString: Now
- X
- X*opt2.wcClassName: XmPushButton
- X*opt2.labelString: Wat's the rush!!
- X
- X*opt3.wcClassName: XmPushButton
- X*opt3.labelString: My Mistake...
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 3755 Jul 3 16:33 Mri04.OptMenu (as sent)'
- chmod u=rw,g=r,o=r Mri04.OptMenu
- ls -l Mri04.OptMenu
- echo x - Mri05.Dialogs
- sed 's/^X//' > Mri05.Dialogs <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XDialogs
- X-------
- X
- XMotif constructors often introduce extra widgets. File Selection
- XDialogs are a good example. In this example, the `Load' and `Save As'
- Xbuttons on the `fileMenu' cause File Selection Dialogs to be managed
- X(popped-up). Note the names required:
- X
- X *load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X
- XThis seemingly strange naming can be detected using the wcTrace
- Xresource. The XmCreateFileSelectionDialog constructor creates a dialog
- Xshell named `loadSelect' and a file selection box which is also named
- X`loadSelect'. The file selection box is a child of the dialog shell. In
- Xorder to see the file selection box, it must be managed, not just the
- Xdialog shell. A common error is the following:
- X
- X *load.activateCallback: WcManageCB( *loadSelect )
- X
- XThis simply causes the dialog shell to pop-up, but it will be empty: its
- Xchild, the file selection box, is still not managed and so will not be
- Xvisible.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#*wcTrace: True
- XMri.wcChildren: menuBar, loadSelect, saveSelect
- X
- X*loadSelect.wcConstructor: XmCreateFileSelectionDialog
- X*loadSelect.wcManaged: False
- X*loadSelect.wcTrace: True
- X*loadSelect.cancelCallback: WcUnmanageCB(this)
- X*loadSelect.okCallback: WcUnmanageCB(this)
- X*saveSelect.wcConstructor: XmCreateFileSelectionDialog
- X*saveSelect.wcManaged: False
- X*saveSelect.cancelCallback: WcUnmanageCB(this)
- X*saveSelect.okCallback: WcUnmanageCB(this)
- X
- X*load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X*saveAs.activateCallback: WcManageCB(*saveSelect.saveSelect)
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XBelow are the resources for the menuBar and all its children.
- X
- XPulldown Menus
- X--------------
- X
- XThe pulldowns can be created before or after their activating cascade
- Xbutton: as an example, lets look at the difference between the
- XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
- XmenuBar.helpMenu specifications. The *menuBar.wcChildren resource
- Xspecifies that the first of its children to be created is file (which
- Xhas no children), then fileMenu and all its children, then helpMenu and
- Xall its children, and finally help.
- X
- X *menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- XThe fileMenu, being created after the file cascade, sets the subMenuId
- Xresource on the file cascade when it is created:
- X
- X *fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X
- XThe help cascade is created after the helpMenu, so it can specify the
- XhelpMenu as its subMenuId directly:
- X
- X *help.subMenuId: *helpMenu
- X
- XNote that the pulldown menus are NOT managed when they are created. They
- Xare automagically managed by the cascade buttons.
- X
- XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
- XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
- Xinstead one must leave the Xm off the front. Also, the values are
- Xcase insensitive.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*menuBar.wcConstructor: XmCreateMenuBar
- X*menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- X*file.wcConstructor: XmCreateCascadeButton
- X*file.labelString: File
- X*file.mnemonic: F
- X
- X*fileMenu.wcConstructor: XmCreatePulldownMenu
- X*fileMenu.wcManaged: False
- X*fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X*fileMenu.wcChildren: load, sep1, save, saveAs, sep2, quit
- X
- X*helpMenu.wcConstructor: XmCreatePulldownMenu
- X*helpMenu.wcManaged: False
- X*helpMenu.wcChildren: mbHelp, cpHelp, daHelp, tHelp
- X
- X*helpMenu.mbHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.mbHelp.labelString: on Menu Bar
- X*helpMenu.mbHelp.mnemonic: M
- X
- X*helpMenu.cpHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.cpHelp.labelString: on Control Panel
- X*helpMenu.cpHelp.mnemonic: C
- X
- X*helpMenu.daHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.daHelp.labelString: on Drawing Area
- X*helpMenu.daHelp.mnemonic: D
- X
- X*helpMenu.tHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.tHelp.labelString: on Text Area
- X*helpMenu.tHelp.mnemonic: T
- X
- X*help.wcConstructor: XmCreateCascadeButton
- X*help.subMenuId: *helpMenu
- X*help.labelString: Help
- X*help.mnemonic: H
- X
- X*load.wcConstructor: XmCreateCascadeButton
- X*load.labelString: Load ...
- X*load.mnemonic: L
- X
- X*sep1.wcConstructor: XmCreateSeparator
- X*sep1.separatorType: Shadow_Etched_In
- X
- X*save.wcConstructor: XmCreateCascadeButton
- X*save.labelString: Save
- X*save.mnemonic: S
- X
- X*saveAs.wcConstructor: XmCreateCascadeButton
- X*saveAs.labelString: Save As ...
- X*saveAs.mnemonic: A
- X
- X*sep2.wcConstructor: XmCreateSeparator
- X*sep2.separatorType: DOUBLE_DASHED_LINE
- X
- X*quit.wcConstructor: XmCreateCascadeButton
- X*quit.labelString: Quit
- X*quit.mnemonic: Q
- X*quit.activateCallback: WcExitCB
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 4803 Jun 28 09:13 Mri05.Dialogs (as sent)'
- chmod u=rw,g=r,o=r Mri05.Dialogs
- ls -l Mri05.Dialogs
- echo x - Mri06.MainWindow
- sed 's/^X//' > Mri06.MainWindow <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XMain Window
- X-----------
- X
- XMotif's MainWindow widget type supports one of the classic "looks"
- Xof a window application, and of the Motif Style Guide in particular.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- XMri.wcChildren: main, loadSelect, saveSelect
- X
- X*main.wcConstructor: XmCreateMainWindow
- X*main.wcChildren: menuBar, commandWindow, workWindow, vscroll
- X
- X*menuBar.shadowThickness: 3
- X*XmFrame.shadowThickness: 3
- X*XmFrame.shadowType: SHADOW_OUT
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XDialogs
- X-------
- X
- XMotif constructors often introduce extra widgets. File Selection
- XDialogs are a good example. In this example, the `Load' and `Save As'
- Xbuttons on the `fileMenu' cause File Selection Dialogs to be managed
- X(popped-up). Note the names required:
- X
- X *load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X
- XThis seemingly strange naming can be detected using the wcTrace
- Xresource. The XmCreateFileSelectionDialog constructor creates a dialog
- Xshell named `loadSelect' and a file selection box which is also named
- X`loadSelect'. The file selection box is a child of the dialog shell.
- XIn order to see the file selection box, it must be managed, not just
- Xthe dialog shell. A common error is the following:
- X
- X *load.activateCallback: WcManageCB( *loadSelect )
- X
- XThis simply causes the dialog shell to pop-up, but it will be empty: its
- Xchild, the file selection box, is still not managed and so will not be
- Xvisible.
- X
- XMore on Callbacks
- X-----------------
- X
- XAny callback which accepts a widget name as client data can use the Wc
- Xlibrary function WcFullNameToWidget() to convert the string into a
- Xwidget id. A special value recognized by this function is `this'
- Xwhich is converted to be the widget id of the widget causing the
- Xcallback. For example,
- X
- X *saveSelect.cancelCallback: WcUnmanageCB(this)
- X
- Xcauses the saveSelect dialog widget to become unmanaged, and
- X
- X *loadSelect.okCallback: WcUnmanageCB(this)
- X
- Xcauses the loadSelect dialog widget to become unmanaged.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*loadSelect.wcConstructor: XmCreateFileSelectionDialog
- X*loadSelect.wcManaged: False
- X*loadSelect.cancelCallback: WcUnmanageCB(this)
- X*loadSelect.okCallback: WcUnmanageCB(this)
- X*saveSelect.wcConstructor: XmCreateFileSelectionDialog
- X*saveSelect.wcManaged: False
- X*saveSelect.cancelCallback: WcUnmanageCB(this)
- X*saveSelect.okCallback: WcUnmanageCB(this)
- X
- X*load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X*saveAs.activateCallback: WcManageCB(*saveSelect.saveSelect)
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XBelow are the resources for the menuBar and all its children. This
- XmenuBar is a child of a Motif MainWindow, and so must register itself
- Xwith the MainWindow (named *main).
- X
- XPulldown Menus
- X--------------
- X
- XThe pulldowns can be created before or after their activating cascade
- Xbutton: as an example, lets look at the difference between the
- XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
- XmenuBar.helpMenu specifications. The *menuBar.wcChildren resource
- Xspecifies that the first of its children to be created is file (which
- Xhas no children), then fileMenu and all its children, then helpMenu and
- Xall its children, and finally help.
- X
- X *menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- XThe fileMenu, being created after the file cascade, sets the subMenuId
- Xresource on the file cascade when it is created:
- X
- X *fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X
- XThe help cascade is created after the helpMenu, so it can specify the
- XhelpMenu as its subMenuId directly:
- X
- X *help.subMenuId: *helpMenu
- X
- XNote that the pulldown menus are NOT managed when they are created. They
- Xare automagically managed by the cascade buttons.
- X
- XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
- XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
- Xinstead one must leave the Xm off the front. Also, the values are
- Xcase insensitive.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*menuBar.wcConstructor: XmCreateMenuBar
- X*menuBar.wcChildren: file, fileMenu, viewMenu, view, helpMenu, help
- X*menuBar.wcCallback: WcSetValueCB( *main.menuBar: this )
- X
- X*file.wcConstructor: XmCreateCascadeButton
- X*file.labelString: File
- X*file.mnemonic: F
- X
- X*fileMenu.wcConstructor: XmCreatePulldownMenu
- X*fileMenu.wcManaged: False
- X*fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X*fileMenu.wcChildren: load, sep, save, saveAs, sep, quit
- X
- X*sep.wcConstructor: XmCreateSeparator
- X
- X*load.wcConstructor: XmCreateCascadeButton
- X*load.labelString: Load ...
- X*load.mnemonic: L
- X
- X*save.wcConstructor: XmCreateCascadeButton
- X*save.labelString: Save
- X*save.mnemonic: S
- X
- X*saveAs.wcConstructor: XmCreateCascadeButton
- X*saveAs.labelString: Save As ...
- X*saveAs.mnemonic: A
- X
- X*quit.wcConstructor: XmCreateCascadeButton
- X*quit.labelString: Quit
- X*quit.mnemonic: Q
- X*quit.activateCallback: WcExitCB
- X
- X*viewMenu.wcConstructor: XmCreatePulldownMenu
- X*viewMenu.wcManaged: False
- X*viewMenu.wcChildren: reset, sep, msgGone, msgRestore
- X
- X*viewMenu.reset.wcConstructor: XmCreateCascadeButton
- X*viewMenu.reset.labelString: Reset All Query Parameters
- X
- X*viewMenu.msgGone.wcConstructor: XmCreateCascadeButton
- X*viewMenu.msgGone.labelString: Remove Message Window
- X*viewMenu.msgGone.activateCallback: WcUnmanageCB( *main.workWindow ),\
- X WcSetSensitiveCB( *msgRestore ), \
- X WcSetInsensitiveCB ( this )
- X
- X*viewMenu.msgRestore.wcConstructor: XmCreateCascadeButton
- X*viewMenu.msgRestore.labelString: Display Message Window
- X*viewMenu.msgRestore.sensitive: False
- X*viewMenu.msgRestore.activateCallback: WcManageCB( *main.workWindow ), \
- X WcSetSensitiveCB( *msgGone ), \
- X WcSetInsensitiveCB( this )
- X
- X*view.wcConstructor: XmCreateCascadeButton
- X*view.subMenuId: *viewMenu
- X*view.labelString: View
- X*view.mnemonic: V
- X
- X*helpMenu.wcConstructor: XmCreatePulldownMenu
- X*helpMenu.wcManaged: False
- X*helpMenu.wcChildren: mbHelp, cpHelp, daHelp, tHelp
- X
- X*helpMenu.mbHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.mbHelp.labelString: on Menu Bar
- X*helpMenu.mbHelp.mnemonic: M
- X
- X*helpMenu.cpHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.cpHelp.labelString: on Control Panel
- X*helpMenu.cpHelp.mnemonic: C
- X
- X*helpMenu.daHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.daHelp.labelString: on Drawing Area
- X*helpMenu.daHelp.mnemonic: D
- X
- X*helpMenu.tHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.tHelp.labelString: on Text Area
- X*helpMenu.tHelp.mnemonic: T
- X
- X*help.wcConstructor: XmCreateCascadeButton
- X*help.wcCallback: WcSetValueCB(*menuBar.menuHelpWidget: this )
- X*help.subMenuId: *helpMenu
- X*help.labelString: Help
- X*help.mnemonic: H
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the commandWindow
- Xchild of the main window. The command window provides a
- Xdirect-manipulation interface to Tot, the TDS_Output_Tool.
- X
- XThe commandWindow is a row column widget with stacked children. The
- Xtop child contains a description of the query to be performed. The
- Xsecond child contains the submit controls, including a radio box and
- X`submit' and `stop' buttons. The third child contains the time
- Xranges. The fourth child is used to actually specify the data types,
- Xdata transformations, and the data sinks using a graphic representing
- Xthe flow of data.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#commandWindow*wcTrace: True
- X
- X*commandWindow.wcConstructor: XmCreateRowColumn
- X*commandWindow.wcCallback: WcSetValueCB( *main.commandWindow: this )
- X*commandWindow.wcChildren: descr, submitCtrl, timeRange, panel
- X*commandWindow.spacing: 10
- X*commandWindow.marginWidth: 10
- X*commandWindow.marginHeight: 10
- X
- X#
- X# Description
- X#
- X# Note that descr.text must be created AFTER the descr.label for two
- X# reasons: XmForm is braindamaged when handling children which are not
- X# created in a left-to-right, top-to-bottom manner, AND because the
- X# descr.text widget refers to the descr.label widget as its attachment,
- X# and the descr.label widget must exist when the following line is
- X# converted from String to Widget during descr.text creation:
- X#
- X# *descr.text.topWidget: *descr.label
- X#
- X
- X*descr.wcConstructor: XmCreateForm
- X*descr.wcChildren: label, text
- X
- X*descr.label.wcConstructor: XmCreateLabel
- X*descr.label.labelString: Query Description
- X*descr.label.leftAttachment: ATTACH_FORM
- X*descr.label.topAttachment: ATTACH_FORM
- X
- X*descr.text.wcConstructor: XmCreateText
- X*descr.text.topWidget: *descr.label
- X*descr.text.topAttachment: ATTACH_WIDGET
- X*descr.text.leftAttachment: ATTACH_FORM
- X*descr.text.rightAttachment: ATTACH_FORM
- X
- X#
- X# Submit Control Frame
- X#
- X
- X#submitCtrl*wcTrace: True
- X
- X*submitCtrl.wcConstructor: XmCreateFrame
- X*submitCtrl.wcChildren: scRC
- X
- X*scRC.wcConstructor: XmCreateRowColumn
- X*scRC.orientation: HORIZONTAL
- X*scRC.wcChildren: startStop, rtRange
- X
- X*startStop.wcConstructor: XmCreateRowColumn
- X*startStop.wcChildren: start, stop
- X
- X*startStop.start.wcConstructor: XmCreatePushButton
- X*startStop.start.labelString: Submit Query
- X*startStop.start.activateCallback: WcSetInsensitiveCB( this ), \
- X WcSetSensitiveCB ( *startStop.stop )
- X
- X*startStop.stop.wcConstructor: XmCreatePushButton
- X*startStop.stop.labelString: Stop Query
- X*startStop.stop.sensitive: False
- X*startStop.stop.activateCallback: WcSetInsensitiveCB( this ), \
- X WcSetSensitiveCB ( *startStop.start )
- X
- X*rtRange.wcConstructor: XmCreateRadioBox
- X*rtRange.wcChildren: rtToggle, trToggle
- X
- X#
- X# NOTE: The timeRC widget must exist before the WcSetInsensitiveCB
- X# is invoked, but this will clearly be the case: the timeRC widget
- X# is not deferred, and so will be created before any of these widgets
- X# get realized, and the user can't very well press a toggle button
- X# which is not yet mapped to the screen!
- X#
- X*rtToggle.wcConstructor: XmCreateToggleButtonGadget
- X*rtToggle.labelString: Real Time Stream
- X*rtToggle.set: True
- X*rtToggle.armCallback: WcSetInsensitiveCB ( *timeRC )
- X
- X*trToggle.wcConstructor: XmCreateToggleButtonGadget
- X*trToggle.labelString: Query Time Range
- X*trToggle.armCallback: WcSetSensitiveCB ( *timeRC )
- X
- X#
- X# Time Range Frame
- X#
- X
- X#timeRange*wcTrace: True
- X
- X*timeRange.wcConstructor: XmCreateFrame
- X*timeRange.wcChildren: timeRC
- X
- X*timeRC.wcConstructor: XmCreateRowColumn
- X*timeRC.wcChildren: fromRC, toRC
- X*timeRC.sensitive: False
- X
- X*timeRC.fromRC.wcConstructor: XmCreateRowColumn
- X*timeRC.fromRC.wcChildren: label, time, type
- X*timeRC.toRC.wcConstructor: XmCreateRowColumn
- X*timeRC.toRC.wcChildren: label, time, type
- X
- X#timeRC.XmRowColumn.wcChildren: label, time, type
- X*timeRC.XmRowColumn.orientation: HORIZONTAL
- X
- X*timeRC.XmRowColumn.label.wcConstructor: XmCreateLabel
- X*timeRC.fromRC.label.labelString: Begin Time:
- X*timeRC.toRC.label.labelString: End Time :
- X
- X*timeRC.XmRowColumn.time.wcConstructor: XmCreateText
- X
- X*timeRC.XmRowColumn.type.wcConstructor: XmCreateRadioBox
- X*timeRC.XmRowColumn.type.wcChildren: sclk, scet, ert, mst, rct
- X*timeRC.XmRowColumn.type.orientation: HORIZONTAL
- X
- X#
- X# Radio Boxes complain if the children are not XmToggleButtonGadgets
- X#
- X*timeRC*type.sclk.set: True
- X*timeRC*type.sclk.wcConstructor: XmCreateToggleButtonGadget
- X*timeRC*type.scet.wcConstructor: XmCreateToggleButtonGadget
- X*timeRC*type.ert.wcConstructor: XmCreateToggleButtonGadget
- X*timeRC*type.mst.wcConstructor: XmCreateToggleButtonGadget
- X*timeRC*type.rct.wcConstructor: XmCreateToggleButtonGadget
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the direct
- Xmanipulation panel which allows a user to specify a set of data
- Xtypes, data transforms, and data sinks, along with the data flows
- Xwhich connect each of the foregoing.
- X
- XAlong the left side are three row columns, left to right. The leftmost
- Xrow column contains buttons representing the different data types which
- Xcan be queried. This will certainly change per mission, and probably
- Xper user.
- X
- XThe second row column contains buttons representing the different
- Xtransformations which may be applied to the data. Several are basically
- Xmission independent, such as WSE filtering and DMD. Others may be
- Xadded on a per mission basis, and some details may be frequently
- Xspecified on a per user basis.
- X
- XThe third row column contains buttons representing the different
- Xdata sinks which are available. These are probably never changed.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*panel.wcConstructor: XmCreateForm
- X*panel.wcChildren: controlFrame, displaySW
- X
- X*controlFrame.wcConstructor: XmCreateFrame
- X*controlFrame.wcChildren: controlRC
- X*controlFrame.topAttachment: ATTACH_FORM
- X*controlFrame.leftAttachment: ATTACH_FORM
- X#controlFrame.bottomAttachment: ATTACH_FORM
- X
- X*controlRC.wcConstructor: XmCreateRowColumn
- X*controlRC.orientation: HORIZONTAL
- X#controlRC.packing: PACK_COLUMN
- X*controlRC.wcChildren: dataRC, transRC, sinkRC
- X
- X#
- X# Data Instantiation Buttons
- X#
- X
- X*dataRC.wcConstructor: XmCreateRowColumn
- X*dataRC.wcChildren: d1,d2,d3,d4,d5,d6,d7,
- X
- X*dataRC.d1.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d2.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d3.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d4.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d5.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d6.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d7.wcConstructor: XmCreatePushButtonGadget
- X
- X*dataRC.d1.labelString: CR5A
- X*dataRC.d2.labelString: CR7A
- X*dataRC.d3.labelString: GS4B
- X*dataRC.d4.labelString: GS08
- X*dataRC.d5.labelString: GS10
- X*dataRC.d6.labelString: GS10A
- X*dataRC.d7.labelString: UV5A
- X
- X#
- X# Trans Instantiation Buttons
- X#
- X
- X*transRC.wcConstructor: XmCreateRowColumn
- X*transRC.wcChildren: t1,t2,t3,t4,t5,t6, t7
- X
- X*transRC.t1.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t2.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t3.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t4.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t5.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t6.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t7.wcConstructor: XmCreatePushButtonGadget
- X
- X*transRC.t1.labelString: Channelize
- X*transRC.t2.labelString: Generate ECDRs
- X*transRC.t3.labelString: Filter SFDUs
- X*transRC.t4.labelString: Generate IDFs
- X*transRC.t5.labelString: Display on DMD
- X*transRC.t6.labelString: Template
- X*transRC.t7.labelString: SFDU Browser
- X
- X#
- X# Sink Instantiation Buttons
- X#
- X
- X*sinkRC.wcConstructor: XmCreateRowColumn
- X*sinkRC.wcChildren: s1,s2,s3,s4,s5,s6,s7
- X
- X*sinkRC.s1.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s2.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s3.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s4.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s5.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s6.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s7.wcConstructor: XmCreatePushButtonGadget
- X
- X*sinkRC.s1.labelString: UNIX stdout
- X*sinkRC.s2.labelString: UNIX file
- X*sinkRC.s3.labelString: UNIX pipe
- X*sinkRC.s4.labelString: CDA spooler
- X*sinkRC.s5.labelString: DTS virtual circuit
- X*sinkRC.s6.labelString: DTS Broadcast
- X*sinkRC.s7.labelString: TCP/IP socket
- X
- X#
- X# Scrolled Data Flow `Drawing' Area
- X#
- X
- X*displaySW.wcConstructor: XmCreateScrolledWindow
- X*displaySW.scrollingPolicy: AUTOMATIC
- X*displaySW.scrollBarDisplayPolicy: AS_NEEDED
- X*displaySW.wcChildren: drawing
- X*displaySW.topAttachment: ATTACH_FORM
- X*displaySW.leftAttachment: ATTACH_WIDGET
- X*displaySW.leftWidget: *controlFrame
- X*displaySW.leftOffset: 10
- X*displaySW.bottomAttachment: ATTACH_FORM
- X*displaySW.rightAttachment: ATTACH_FORM
- X
- X*drawing.wcConstructor: XmCreateDrawingArea
- X*drawing.width: 200
- X*drawing.height: 700
- X*drawing.wcCallback: WcSetValueCB(*displaySW.workWindow: this )
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the workWindow
- Xand vertical scrollbar children of the main window.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*main.workWindow.wcConstructor: XmCreateText
- X*main.workWindow.wcCallback: WcSetValueCB( *main.workWindow: this )
- X
- X*main.vscroll.wcConstructor: XmCreateScrollBar
- X*main.vscroll.wcCallback: WcSetValueCB( *main.verticalScrollBar: this )
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 16505 Jun 28 09:13 Mri06.MainWindow (as sent)'
- chmod u=rw,g=r,o=r Mri06.MainWindow
- ls -l Mri06.MainWindow
- echo x - Mri07.PDWidgets
- sed 's/^X//' > Mri07.PDWidgets <<'+FUNKY+STUFF+'
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis resource file explores the use of public domain widgets mixed
- Xin with Motif widgets. Specifically, a Table widget is used in
- Xplace of a XmRowColumn. The announcement for the Table widget:
- X
- XTable - Geometry Management Widget for the X Toolkit
- X
- XTable is a composite widget designed to manage the size and location
- Xof its children. The widget uses an array model to simplify the
- Xarrangement of child widgets. Widgets are placed at row and column
- Xlocations in a variable sized array. Widgets may span more than one
- Xrow or column. The array automatically expands or contracts as
- Xneeded. There are options to control justification and place size
- Xrestrictions on rows or columns in the array. The widget is directly
- Xderived from the core and composite widgets provided by the X Toolkit
- Xand can be used with any widget set. It has been tested using the
- XAthena widget set.
- X
- XSource for the Table widget is available through anonymous ftp to
- Xshambhala.Berkeley.EDU (128.32.132.54). Instructions are given below:
- X
- X % ftp shambhala.Berkeley.EDU
- X Name: anonymous
- X Password: <anything non-null>
- X ftp> cd pub
- X ftp> binary
- X ftp> get Table.tar.Z
- X ftp> quit
- X % uncompress Table.tar.Z
- X % tar xf Table.tar
- X
- XThose without ftp access can obtain the source for the Table widget
- Xusing a mail archive system I have installed on dent.Berkeley.EDU
- X(courtesy of Brian Reid at Digital). An example is given below:
- X
- X To: ucbvax!dent!archive-server
- X Subject: send programs Table.shar.01 Table.shar.02
- X
- XThe archive server will send you these files as time and load
- Xpermits. They are standard shell archives that can be unpacked
- Xby running them through /bin/sh (in order). If you would like
- Xto know more about the mail server, send a message with a subject
- Xof "help".
- X
- XAfter unpacking the files, you will find a README file in the directory
- Xthat contains installation instructions.
- X
- X David Harrison
- X UC Berkeley Electronics Research Lab
- X (davidh@ic.Berkeley.EDU, ...!ucbvax!ucbcad!davidh)
- X
- XThe Table widget has proven to be so useful, it is included in the
- XWc distribution and is registered by the WcRegisterMotif() function.
- XVery minor edits were required to make Table compatible with Motif.
- X
- XAppearance Defaults
- X-------------------
- X
- XBelow are application wide defaults vor various widgets.
- X
- XN.B.: If you change the colors from B&W, you should change the
- XborderColor of the Table widget. Someday, I will probably hack
- Xthe Table widget to have Margin resources like XmRowColumn and
- Xthen it won't be necessary
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*menuBar.shadowThickness: 3
- X*XmFrame.shadowThickness: 3
- X*XmText.shadowThickness: 3
- X*XmDrawingArea.shadowThickness: 3
- X*XmScrollBar.shadowThickness: 3
- X*XmFrame.shadowType: SHADOW_OUT
- X*Table.borderWidth: 0
- X
- X*Table.borderColor: XtDefaultBackground
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XMain Window
- X-----------
- X
- XMotif's MainWindow widget type supports one of the classic "looks"
- Xof a window application, and of the Motif Style Guide in particular.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- XMri.wcChildren: main, loadSelect, saveSelect
- X
- X*main.wcConstructor: XmCreateMainWindow
- X*main.wcChildren: menuBar, commandWindow, msgWindow, vscroll
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XDialogs
- X-------
- X
- XMotif constructors often introduce extra widgets. File Selection Dialogs
- Xare a good example. In this example, the Load and Save As buttons on the
- XFile menu cause File Selection Dialogs to be managed (popped-up). Note
- Xthe names required:
- X
- X *load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X
- XThis seemingly strange naming can be detected using the wcTrace resource. The
- XXmCreateFileSelectionDialog constructor creates a dialog shell named
- XloadSelect and a file selection box which is also named loadSelect. The
- Xfile selection box is a child of the dialog shell. In order to see the
- Xfile selection box, it must be managed, not just the dialog shell.
- XA common error is the following:
- X
- X *load.activateCallback: WcManageCB( *loadSelect )
- X
- XThis simply causes the dialog shell to pop-up, but it will be empty: its
- Xchild, the file selection box, is still not managed and so will not be
- Xvisible.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*loadSelect.wcConstructor: XmCreateFileSelectionDialog
- X*loadSelect.wcManaged: False
- X*loadSelect.cancelCallback: WcUnmanageCB(this)
- X*loadSelect.okCallback: WcUnmanageCB(this)
- X*saveSelect.wcConstructor: XmCreateFileSelectionDialog
- X*saveSelect.wcManaged: False
- X*saveSelect.cancelCallback: WcUnmanageCB(this)
- X*saveSelect.okCallback: WcUnmanageCB(this)
- X
- X*load.activateCallback: WcManageCB( *loadSelect.loadSelect )
- X*saveAs.activateCallback: WcManageCB(*saveSelect.saveSelect)
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XBelow are the resources for the menuBar and all its children. This
- XmenuBar is a child of a Motif MainWindow, and so must register itself
- Xwith the MainWindow (named *main).
- X
- XPulldown Menus
- X--------------
- X
- XThe pulldowns can be created before or after their activating cascade
- Xbutton: as an example, lets look at the difference between the
- XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
- XmenuBar.helpMenu specifications. The *menuBar.wcChildren resource
- Xspecifies that the first of its children to be created is file (which
- Xhas no children), then fileMenu and all its children, then helpMenu and
- Xall its children, and finally help.
- X
- X *menuBar.wcChildren: file, fileMenu, helpMenu, help
- X
- XThe fileMenu, being created after the file cascade, sets the subMenuId
- Xresource on the file cascade when it is created:
- X
- X *fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X
- XThe help cascade is created after the helpMenu, so it can specify the
- XhelpMenu as its subMenuId directly:
- X
- X *help.subMenuId: *helpMenu
- X
- XNote that the pulldown menus are NOT managed when they are created. They
- Xare automagically managed by the cascade buttons.
- X
- XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
- XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
- Xinstead one must leave the Xm off the front. Also, the values are
- Xcase insensitive.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#menuBar*wcTrace: True
- X
- X*menuBar.wcConstructor: XmCreateMenuBar
- X*menuBar.wcChildren: file, fileMenu, viewMenu, view, helpMenu, help
- X*menuBar.wcCallback: WcSetValueCB( *main.menuBar: this )
- X
- X*file.wcConstructor: XmCreateCascadeButton
- X*file.labelString: File
- X*file.mnemonic: F
- X
- X*fileMenu.wcConstructor: XmCreatePulldownMenu
- X*fileMenu.wcManaged: False
- X*fileMenu.wcCallback: WcSetValueCB(*file.subMenuId: this)
- X*fileMenu.wcChildren: load, sep, save, saveAs, sep, quit
- X
- X*sep.wcConstructor: XmCreateSeparator
- X
- X*load.wcConstructor: XmCreateCascadeButton
- X*load.labelString: Load ...
- X*load.mnemonic: L
- X
- X*save.wcConstructor: XmCreateCascadeButton
- X*save.labelString: Save
- X*save.mnemonic: S
- X
- X*saveAs.wcConstructor: XmCreateCascadeButton
- X*saveAs.labelString: Save As ...
- X*saveAs.mnemonic: A
- X
- X*quit.wcConstructor: XmCreateCascadeButton
- X*quit.labelString: Quit
- X*quit.mnemonic: Q
- X*quit.activateCallback: WcExitCB
- X
- X*viewMenu.wcConstructor: XmCreatePulldownMenu
- X*viewMenu.wcManaged: False
- X*viewMenu.wcChildren: reset, sep, msgGone, msgRestore
- X
- X*viewMenu.reset.wcConstructor: XmCreateCascadeButton
- X*viewMenu.reset.labelString: Reset All Query Parameters
- X
- X*viewMenu.msgGone.wcConstructor: XmCreateCascadeButton
- X*viewMenu.msgGone.labelString: Remove Message Window
- X*viewMenu.msgGone.activateCallback: WcUnmanageCB( *main.msgWindow ),\
- X WcSetSensitiveCB( *msgRestore ), \
- X WcSetInsensitiveCB ( this )
- X
- X*viewMenu.msgRestore.wcConstructor: XmCreateCascadeButton
- X*viewMenu.msgRestore.labelString: Display Message Window
- X*viewMenu.msgRestore.sensitive: False
- X*viewMenu.msgRestore.activateCallback: WcManageCB( *main.msgWindow ), \
- X WcSetSensitiveCB( *msgGone ), \
- X WcSetInsensitiveCB( this )
- X
- X*view.wcConstructor: XmCreateCascadeButton
- X*view.subMenuId: *viewMenu
- X*view.labelString: View
- X*view.mnemonic: V
- X
- X*helpMenu.wcConstructor: XmCreatePulldownMenu
- X*helpMenu.wcManaged: False
- X*helpMenu.wcChildren: mbHelp, cpHelp, daHelp, tHelp
- X
- X*helpMenu.mbHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.mbHelp.labelString: on Menu Bar
- X*helpMenu.mbHelp.mnemonic: M
- X
- X*helpMenu.cpHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.cpHelp.labelString: on Control Panel
- X*helpMenu.cpHelp.mnemonic: C
- X
- X*helpMenu.daHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.daHelp.labelString: on Drawing Area
- X*helpMenu.daHelp.mnemonic: D
- X
- X*helpMenu.tHelp.wcConstructor: XmCreateCascadeButton
- X*helpMenu.tHelp.labelString: on Text Area
- X*helpMenu.tHelp.mnemonic: T
- X
- X*help.wcConstructor: XmCreateCascadeButton
- X*help.wcCallback: WcSetValueCB(*menuBar.menuHelpWidget: this )
- X*help.subMenuId: *helpMenu
- X*help.labelString: Help
- X*help.mnemonic: H
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the commandWindow
- Xchild of the main window. The command window provides a
- Xdirect-manipulation interface to Tot, the TDS_Output_Tool.
- X
- XThe commandWindow is a Table widget with three stacked children. The
- Xtop child contains a description of the query to be performed. The
- Xsecond child contains the submit controls including the time range to
- Xbe queried. The third child is used to actually specify the data
- Xtypes, data transformations, and the data sinks using a graphic
- Xrepresenting the flow of data.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#commandWindow*wcTrace: True
- X
- X*commandWindow.wcClass: tableWidgetClass
- X*commandWindow.wcCallback: WcSetValueCB( *main.commandWindow: this )
- X*commandWindow.wcChildren: descr, submitCtrl, panel
- X# c r cs rs opts
- X*commandWindow.layout: descr 0 0 1 1 hH ;\
- X submitCtrl 0 1 1 1 hH ;\
- X panel 0 2 1 1
- X
- X*commandWindow.columnSpacing: 10
- X*commandWindow.rowSpacing: 10
- X*commandWindow.borderWidth: 10
- X
- X#
- X# Description
- X#
- X
- X*descr.wcConstructor: XmCreateForm
- X*descr.wcChildren: label, text
- X
- X*descr.label.wcConstructor: XmCreateLabel
- X*descr.label.labelString: Query Description
- X*descr.label.leftAttachment: ATTACH_FORM
- X*descr.label.topAttachment: ATTACH_FORM
- X
- X*descr.text.wcConstructor: XmCreateText
- X*descr.text.topWidget: *descr.label
- X*descr.text.topAttachment: ATTACH_WIDGET
- X*descr.text.leftAttachment: ATTACH_FORM
- X*descr.text.rightAttachment: ATTACH_FORM
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the Submit
- XControl portion of the commandWindow. A Table widget is used as the
- Xmanager widget because Row Column just can't do the job here, where we
- Xmix types of widgets with differing heights in a row, AND types of
- Xwidgets with differing widths in a column. XmRowColumn gets fascist in
- Xsuch situations, and makes every cell the same width and height. We
- Xdon't want that (wastes ALOT of real estate in this case). So, we'll
- Xtry the Table Widget.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X#submitCtrl*wcTrace: True
- X
- X*submitCtrl.wcConstructor: XmCreateFrame
- X*submitCtrl.wcChildren: table
- X*submitCtrl.marginWidth: 6
- X*submitCtrl.marginHeight: 6
- X
- X*table.wcClassName: Table
- X*table.borderWidth: 0
- X*table.wcChildren: start, rtRadio, fromLabel, fromTime, fromType, \
- X stop, toLabel, toTime, toType
- X# c r cs rs opts
- X*table.layout: start 0 0 1 1 wWhH ;\
- X stop 0 1 1 1 hH ;\
- X rtRadio 1 0 1 2 wW ;\
- X fromLabel 2 0 1 1 wW ;\
- X toLabel 2 1 1 1 ;\
- X fromTime 3 0 1 1 ;\
- X toTime 3 1 1 1 ;\
- X fromType 4 0 1 1 wW ;\
- X toType 4 1 1 1
- X
- X*table.start.wcConstructor: XmCreatePushButton
- X*table.start.labelString: Submit Query
- X*table.start.activateCallback: WcSetInsensitiveCB( this ), \
- X WcSetSensitiveCB ( *table.stop )
- X
- X*table.stop.wcConstructor: XmCreatePushButton
- X*table.stop.labelString: Stop Query
- X*table.stop.sensitive: False
- X*table.stop.activateCallback: WcSetInsensitiveCB( this ), \
- X WcSetSensitiveCB ( *table.start )
- X
- X*rtRadio.wcConstructor: XmCreateRadioBox
- X*rtRadio.wcChildren: trToggle, rtToggle
- X
- X*trToggle.wcConstructor: XmCreateToggleButtonGadget
- X*trToggle.labelString: Query Time Range
- X*trToggle.set: True
- X*trToggle.armCallback: WcSetSensitiveCB ( *fromLabel, *fromTime, \
- X *fromType, *toLabel, *toTime, *toType)
- X
- X*rtToggle.wcConstructor: XmCreateToggleButtonGadget
- X*rtToggle.labelString: Real Time Stream
- X*rtToggle.armCallback: WcSetInsensitiveCB ( *fromLabel, *fromTime, \
- X *fromType, *toLabel, *toTime, *toType)
- X
- X*fromLabel.wcConstructor: XmCreateLabel
- X*fromLabel.labelString: Begin Time:
- X*fromLabel.alignment: ALIGNMENT_END
- X
- X*toLabel.wcConstructor: XmCreateLabel
- X*toLabel.labelString: End Time:
- X*toLabel.alignment: ALIGNMENT_END
- X
- X*fromTime.wcConstructor: XmCreateText
- X*toTime.wcConstructor: XmCreateText
- X
- X*fromType.wcConstructor: XmCreateRadioBox
- X*fromType.orientation: HORIZONTAL
- X*fromType.wcChildren: sclk, scet, ert, mst, rct
- X
- X*toType.wcConstructor: XmCreateRadioBox
- X*toType.orientation: HORIZONTAL
- X*toType.wcChildren: sclk, scet, ert, mst, rct
- X
- X*table*sclk.set: True
- X*table*sclk.wcConstructor: XmCreateToggleButtonGadget
- X*table*scet.wcConstructor: XmCreateToggleButtonGadget
- X*table*ert.wcConstructor: XmCreateToggleButtonGadget
- X*table*mst.wcConstructor: XmCreateToggleButtonGadget
- X*table*rct.wcConstructor: XmCreateToggleButtonGadget
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the direct
- Xmanipulation panel which allows a user to specify a set of data
- Xtypes, data transforms, and data sinks, along with the data flows
- Xwhich connect each of the foregoing.
- X
- XAlong the left side are three row columns, left to right. The leftmost
- Xrow column contains buttons representing the different data types which
- Xcan be queried. This will certainly change per mission, and probably
- Xper user.
- X
- XThe second row column contains buttons representing the different
- Xtransformations which may be applied to the data. Several are basically
- Xmission independent, such as WSE filtering and DMD. Others may be
- Xadded on a per mission basis, and some details may be frequently
- Xspecified on a per user basis.
- X
- XThe third row column contains buttons representing the different
- Xdata sinks which are available. These are probably never changed.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*panel.wcConstructor: XmCreateForm
- X*panel.wcChildren: controlFrame, displaySW
- X
- X*controlFrame.wcConstructor: XmCreateFrame
- X*controlFrame.wcChildren: controlRC
- X*controlFrame.topAttachment: ATTACH_FORM
- X*controlFrame.leftAttachment: ATTACH_FORM
- X#controlFrame.bottomAttachment: ATTACH_FORM
- X
- X*controlRC.wcConstructor: XmCreateRowColumn
- X*controlRC.orientation: HORIZONTAL
- X#controlRC.packing: PACK_COLUMN
- X*controlRC.wcChildren: dataRC, transRC, sinkRC
- X
- X#
- X# Data Instantiation Buttons
- X#
- X
- X*dataRC.wcConstructor: XmCreateRowColumn
- X*dataRC.wcChildren: d1,d2,d3,d4,d5,d6,d7
- X
- X*dataRC.d1.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d2.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d3.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d4.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d5.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d6.wcConstructor: XmCreatePushButtonGadget
- X*dataRC.d7.wcConstructor: XmCreatePushButtonGadget
- X
- X*dataRC.d1.labelString: CR5A
- X*dataRC.d2.labelString: CR7A
- X*dataRC.d3.labelString: GS4B
- X*dataRC.d4.labelString: GS08
- X*dataRC.d5.labelString: GS10
- X*dataRC.d6.labelString: GS10A
- X*dataRC.d7.labelString: UV5A
- X
- X#
- X# Trans Instantiation Buttons
- X#
- X
- X*transRC.wcConstructor: XmCreateRowColumn
- X*transRC.wcChildren: t1,t2,t3,t4,t5,t6, t7
- X
- X*transRC.t1.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t2.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t3.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t4.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t5.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t6.wcConstructor: XmCreatePushButtonGadget
- X*transRC.t7.wcConstructor: XmCreatePushButtonGadget
- X
- X*transRC.t1.labelString: Channelize
- X*transRC.t2.labelString: Generate ECDRs
- X*transRC.t3.labelString: Filter SFDUs
- X*transRC.t4.labelString: Generate IDFs
- X*transRC.t5.labelString: Display on DMD
- X*transRC.t6.labelString: Template
- X*transRC.t7.labelString: SFDU Browser
- X
- X#
- X# Sink Instantiation Buttons
- X#
- X
- X*sinkRC.wcConstructor: XmCreateRowColumn
- X*sinkRC.wcChildren: s1,s2,s3,s4,s5,s6,s7
- X
- X*sinkRC.s1.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s2.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s3.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s4.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s5.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s6.wcConstructor: XmCreatePushButtonGadget
- X*sinkRC.s7.wcConstructor: XmCreatePushButtonGadget
- X
- X*sinkRC.s1.labelString: UNIX stdout
- X*sinkRC.s2.labelString: UNIX file
- X*sinkRC.s3.labelString: UNIX pipe
- X*sinkRC.s4.labelString: CDA spooler
- X*sinkRC.s5.labelString: DTS virtual circuit
- X*sinkRC.s6.labelString: DTS Broadcast
- X*sinkRC.s7.labelString: TCP/IP socket
- X
- X#
- X# Scrolled Data Flow `Drawing' Area
- X#
- X
- X*displaySW.wcConstructor: XmCreateScrolledWindow
- X*displaySW.scrollingPolicy: AUTOMATIC
- X*displaySW.scrollBarDisplayPolicy: AS_NEEDED
- X*displaySW.wcChildren: drawing
- X*displaySW.topAttachment: ATTACH_FORM
- X*displaySW.leftAttachment: ATTACH_WIDGET
- X*displaySW.leftWidget: *controlFrame
- X*displaySW.leftOffset: 10
- X*displaySW.bottomAttachment: ATTACH_FORM
- X*displaySW.rightAttachment: ATTACH_FORM
- X
- X*drawing.wcConstructor: XmCreateDrawingArea
- X*drawing.width: 700
- X*drawing.height: 700
- X*drawing.wcCallback: WcSetValueCB(*displaySW.workWindow: this )
- X
- X#ifdef Xrm_COMMENT
- X----------------------------------------------------------------------
- X
- XThis section provides the resource specifications for the msgWindow, a
- Xscrolled text window for trace, heartbeat, warning, and error messages.
- X
- X----------------------------------------------------------------------
- X#endif
- X
- X*main.msgWindow.wcConstructor: XmCreateText
- X*main.msgWindow.wcCallback: WcSetValueCB(*main.workWindow: this)
- X
- X*main.vscroll.wcConstructor: XmCreateScrollBar
- X*main.vscroll.wcCallback: WcSetValueCB( *main.verticalScrollBar: this )
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 18920 Jun 28 09:13 Mri07.PDWidgets (as sent)'
- chmod u=rw,g=r,o=r Mri07.PDWidgets
- ls -l Mri07.PDWidgets
- echo x - MriRegMotif.c
- sed 's/^X//' > MriRegMotif.c <<'+FUNKY+STUFF+'
- X/*
- X** Copyright (c) 1990 David E. Smyth
- X**
- X** This file was derived from work performed by Martin Brunecky at
- X** Auto-trol Technology Corporation, Denver, Colorado, under the
- X** following copyright:
- X**
- X*******************************************************************************
- X* Copyright 1990 by Auto-trol Technology Corporation, Denver, Colorado.
- X*
- X* All Rights Reserved
- X*
- X* Permission to use, copy, modify, and distribute this software and its
- X* documentation for any purpose and without fee is hereby granted, provided
- X* that the above copyright notice appears on all copies and that both the
- X* copyright and this permission notice appear in supporting documentation
- X* and that the name of Auto-trol not be used in advertising or publicity
- X* pertaining to distribution of the software without specific, prior written
- X* permission.
- X*
- X* Auto-trol disclaims all warranties with regard to this software, including
- X* all implied warranties of merchantability and fitness, in no event shall
- X* Auto-trol be liable for any special, indirect or consequential damages or
- X* any damages whatsoever resulting from loss of use, data or profits, whether
- X* in an action of contract, negligence or other tortious action, arising out
- X* of or in connection with the use or performance of this software.
- X*******************************************************************************
- X**
- X** Redistribution and use in source and binary forms are permitted
- X** provided that the above copyright notice and this paragraph are
- X** duplicated in all such forms and that any documentation, advertising
- X** materials, and other materials related to such distribution and use
- X** acknowledge that the software was developed by David E. Smyth. The
- X** name of David E. Smyth may not be used to endorse or promote products
- X** derived from this software without specific prior written permission.
- X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X**
- X*/
- X
- X/*
- X* SCCS_data: @(#)MriRegisterMotif.c 1.0 ( 19 June 1990 )
- X*
- X* Subsystem_group:
- X*
- X* Widget Creation Library - Motif Resource Interpreter
- X*
- X* Module_description:
- X*
- X* This module contains registration routine for all Motif
- X* widget/gadget constructors and classes.
- X*
- X* Module_interface_summary:
- X*
- X* void MriRegisterMotif ( XtAppContext app )
- X*
- X* Module_history:
- X*
- X* mm/dd/yy initials function action
- X* -------- -------- -------- ---------------------------------------------
- X* 04/03/90 MarBru Create..
- X*
- X* Design_notes:
- X*
- X*******************************************************************************
- X*/
- X/*
- X*******************************************************************************
- X* Include_files.
- X*******************************************************************************
- X*/
- X
- X#ifdef MOTIF
- X
- X#include <Xm/Xm.h>
- X
- X#include <Xm/ArrowB.h>
- X#include <Xm/ArrowBG.h>
- X#include <Xm/BulletinB.h>
- X#include <Xm/CascadeB.h>
- X#include <Xm/CascadeBG.h>
- X#include <Xm/Command.h>
- X#include <Xm/DialogS.h>
- X#include <Xm/DrawingA.h>
- X#include <Xm/DrawnB.h>
- X#include <Xm/FileSB.h>
- X#include <Xm/Form.h>
- X#include <Xm/Frame.h>
- X#include <Xm/Label.h>
- X#include <Xm/LabelG.h>
- X#include <Xm/List.h>
- X#include <Xm/MainW.h>
- X#include <Xm/MenuShell.h>
- X#include <Xm/MessageB.h>
- X#include <Xm/PanedW.h>
- X#include <Xm/PushB.h>
- X#include <Xm/PushBG.h>
- X#include <Xm/RowColumn.h>
- X#include <Xm/Scale.h>
- X#include <Xm/ScrollBar.h>
- X#include <Xm/ScrolledW.h>
- X#include <Xm/SelectioB.h>
- X#include <Xm/SeparatoG.h>
- X#include <Xm/Separator.h>
- X#include <Xm/Text.h>
- X#include <Xm/ToggleB.h>
- X#include <Xm/ToggleBG.h>
- X
- Xvoid MriRegisterMotif ( app )
- X XtAppContext app;
- X{
- X#define RCONST( name, func ) WcRegisterConstructor ( app, name, func )
- X#define RCN( name, class ) WcRegisterClassName ( app, name, class )
- X#define RCP( name, class ) WcRegisterClassPtr ( app, name, class )
- X
- X/* -- register all Motif constructors */
- X RCONST( "XmCreateArrowButton", XmCreateArrowButton );
- X RCONST( "XmCreateArrowButtonGadget", XmCreateArrowButtonGadget );
- X RCONST( "XmCreateBulletinBoard", XmCreateBulletinBoard );
- X RCONST( "XmCreateBulletinBoardDialog", XmCreateBulletinBoardDialog );
- X RCONST( "XmCreateCascadeButton", XmCreateCascadeButton );
- X RCONST( "XmCreateCascadeButtonGadget", XmCreateCascadeButtonGadget );
- X RCONST( "XmCreateCommand", XmCreateCommand );
- X RCONST( "XmCreateDialogShell", XmCreateDialogShell );
- X RCONST( "XmCreateDrawingArea", XmCreateDrawingArea );
- X RCONST( "XmCreateDrawnButton", XmCreateDrawnButton );
- X RCONST( "XmCreateErrorDialog", XmCreateErrorDialog );
- X RCONST( "XmCreateFileSelectionBox", XmCreateFileSelectionBox );
- X RCONST( "XmCreateFileSelectionDialog", XmCreateFileSelectionDialog );
- X RCONST( "XmCreateForm", XmCreateForm );
- X RCONST( "XmCreateFormDialog", XmCreateFormDialog );
- X RCONST( "XmCreateFrame", XmCreateFrame );
- X RCONST( "XmCreateInformationDialog", XmCreateInformationDialog );
- X RCONST( "XmCreateLabel", XmCreateLabel );
- X RCONST( "XmCreateLabelGadget", XmCreateLabelGadget );
- X RCONST( "XmCreateList", XmCreateList );
- X RCONST( "XmCreateMainWindow", XmCreateMainWindow );
- X RCONST( "XmCreateMenuBar", XmCreateMenuBar );
- X RCONST( "XmCreateMenuShell", XmCreateMenuShell );
- X RCONST( "XmCreateMessageBox", XmCreateMessageBox );
- X RCONST( "XmCreateMessageDialog", XmCreateMessageDialog );
- X RCONST( "XmCreateOptionMenu", XmCreateOptionMenu );
- X RCONST( "XmCreatePanedWindow", XmCreatePanedWindow );
- X RCONST( "XmCreatePopupMenu", XmCreatePopupMenu );
- X RCONST( "XmCreatePromptDialog", XmCreatePromptDialog );
- X RCONST( "XmCreatePulldownMenu", XmCreatePulldownMenu );
- X RCONST( "XmCreatePushButton", XmCreatePushButton );
- X RCONST( "XmCreatePushButtonGadget", XmCreatePushButtonGadget );
- X RCONST( "XmCreateQuestionDialog", XmCreateQuestionDialog );
- X RCONST( "XmCreateRadioBox", XmCreateRadioBox );
- X RCONST( "XmCreateRowColumn", XmCreateRowColumn );
- X RCONST( "XmCreateScale", XmCreateScale );
- X RCONST( "XmCreateScrollBar", XmCreateScrollBar );
- X RCONST( "XmCreateScrolledList", XmCreateScrolledList );
- X RCONST( "XmCreateScrolledText", XmCreateScrolledText );
- X RCONST( "XmCreateScrolledWindow", XmCreateScrolledWindow );
- X RCONST( "XmCreateSelectionBox", XmCreateSelectionBox );
- X RCONST( "XmCreateSelectionDialog", XmCreateSelectionDialog );
- X RCONST( "XmCreateSeparator", XmCreateSeparator );
- X RCONST( "XmCreateSeparatorGadget", XmCreateSeparatorGadget );
- X RCONST( "XmCreateText", XmCreateText );
- X RCONST( "XmCreateToggleButton", XmCreateToggleButton );
- X RCONST( "XmCreateToggleButtonGadget", XmCreateToggleButtonGadget );
- X RCONST( "XmCreateWarningDialog", XmCreateWarningDialog );
- X RCONST( "XmCreateWorkingDialog", XmCreateWorkingDialog );
- X
- X/* -- register Motif widget classes */
- X RCP("xmArrowButtonWidgetClass", xmArrowButtonWidgetClass );
- X RCN("XmArrowButton", xmArrowButtonWidgetClass );
- X RCP("xmArrowButtonGadgetClass", xmArrowButtonGadgetClass );
- X RCN("XmArrowButtonGadget", xmArrowButtonGadgetClass );
- X RCP("xmBulletinBoardWidgetClass", xmBulletinBoardWidgetClass );
- X RCN("XmBulletinBoard", xmBulletinBoardWidgetClass );
- X RCP("xmCascadeButtonWidgetClass", xmCascadeButtonWidgetClass );
- X RCN("XmCascadeButton", xmCascadeButtonWidgetClass );
- X RCP("xmCascadeButtonGadgetClass", xmCascadeButtonGadgetClass );
- X RCN("XmCascadeButtonGadget", xmCascadeButtonGadgetClass );
- X RCP("xmCommandWidgetClass", xmCommandWidgetClass );
- X RCN("XmCommand", xmCommandWidgetClass );
- X RCP("xmDialogShellWidgetClass", xmDialogShellWidgetClass );
- X RCN("XmDialogShell", xmDialogShellWidgetClass );
- X RCP("xmDrawingAreaWidgetClass", xmDrawingAreaWidgetClass );
- X RCN("XmDrawingArea", xmDrawingAreaWidgetClass );
- X RCP("xmDrawnButtonWidgetClass", xmDrawnButtonWidgetClass );
- X RCN("XmDrawnButton", xmDrawnButtonWidgetClass );
- X RCP("xmFileSelectionBoxWidgetClass", xmFileSelectionBoxWidgetClass );
- X RCN("XmFileSelectionBox", xmFileSelectionBoxWidgetClass );
- X RCP("xmFormWidgetClass", xmFormWidgetClass );
- X RCN("XmForm", xmFormWidgetClass );
- X RCP("xmFrameWidgetClass", xmFrameWidgetClass );
- X RCN("XmFrame", xmFrameWidgetClass );
- X RCP("xmGadgetClass", xmGadgetClass );
- X RCN("XmGadget", xmGadgetClass );
- X RCP("xmLabelWidgetClass", xmLabelWidgetClass );
- X RCN("XmLabel", xmLabelWidgetClass );
- X RCP("xmLabelGadgetClass", xmLabelGadgetClass );
- X RCN("XmLabelGadget", xmLabelGadgetClass );
- X RCP("xmListWidgetClass", xmListWidgetClass );
- X RCN("XmList", xmListWidgetClass );
- X RCP("xmMainWindowWidgetClass", xmMainWindowWidgetClass );
- X RCN("XmMainWindow", xmMainWindowWidgetClass );
- X RCP("xmManagerWidgetClass", xmManagerWidgetClass );
- X RCN("XmManager", xmManagerWidgetClass );
- X RCP("xmMenuShellWidgetClass", xmMenuShellWidgetClass );
- X RCN("XmMenuShell", xmMenuShellWidgetClass );
- X RCP("xmMessageBoxWidgetClass", xmMessageBoxWidgetClass );
- X RCN("XmMessageBox", xmMessageBoxWidgetClass );
- X RCP("xmPanedWindowWidgetClass", xmPanedWindowWidgetClass );
- X RCN("XmPanedWindow", xmPanedWindowWidgetClass );
- X RCP("xmPrimitiveWidgetClass", xmPrimitiveWidgetClass );
- X RCN("XmPrimitive", xmPrimitiveWidgetClass );
- X RCP("xmPushButtonWidgetClass", xmPushButtonWidgetClass );
- X RCN("XmPushButton", xmPushButtonWidgetClass );
- X RCP("xmPushButtonGadgetClass", xmPushButtonGadgetClass );
- X RCN("XmPushButtonGadget", xmPushButtonGadgetClass );
- X RCP("xmRowColumnWidgetClass", xmRowColumnWidgetClass );
- X RCN("XmRowColumn", xmRowColumnWidgetClass );
- X/* RCP("xmSashWidgetClass", xmSashWidgetClass ); */
- X/* RCN("XmSash", xmSashWidgetClass ); */
- X RCP("xmScaleWidgetClass", xmScaleWidgetClass );
- X RCN("XmScale", xmScaleWidgetClass );
- X RCP("xmScrollBarWidgetClass", xmScrollBarWidgetClass );
- X RCN("XmScrollBar", xmScrollBarWidgetClass );
- X RCP("xmScrolledWindowWidgetClass", xmScrolledWindowWidgetClass );
- X RCN("XmScrolledWindow", xmScrolledWindowWidgetClass );
- X RCP("xmSelectionBoxWidgetClass", xmSelectionBoxWidgetClass );
- X RCN("XmSelectionBox", xmSelectionBoxWidgetClass );
- X RCP("xmSeparatorWidgetClass", xmSeparatorWidgetClass );
- X RCN("XmSeparator", xmSeparatorWidgetClass );
- X RCP("xmSeparatorGadgetClass", xmSeparatorGadgetClass );
- X RCN("XmSeparatorGadget", xmSeparatorGadgetClass );
- X RCP("xmTextWidgetClass", xmTextWidgetClass );
- X RCN("XmText", xmTextWidgetClass );
- X RCP("xmToggleButtonWidgetClass", xmToggleButtonWidgetClass );
- X RCN("XmToggleButton", xmToggleButtonWidgetClass );
- X RCP("xmToggleButtonGadgetClass", xmToggleButtonGadgetClass );
- X RCN("XmToggleButtonGadget", xmToggleButtonGadgetClass );
- X
- X#undef RCONST
- X#undef RCN
- X#undef RCP
- X}
- X#endif MOTIF
- +FUNKY+STUFF+
- echo '-rw-r--r-- 1 david 10868 Jun 28 09:13 MriRegMotif.c (as sent)'
- chmod u=rw,g=r,o=r MriRegMotif.c
- ls -l MriRegMotif.c
- exit 0
-
- dan
- ----------------------------------------------------
- O'Reilly && Associates argv@sun.com / argv@ora.com
- Opinions expressed reflect those of the author only.
-