david@jpl-devvax.jpl.nasa.gov (David E. Smyth) (12/18/90)
Submitted-by: david@jpl-devvax.jpl.nasa.gov (David E. Smyth) Posting-number: Volume 10, Issue 53 Archive-name: wcl/part05 # to unbundle, "sh" this file -- DO NOT use csh # SHAR archive format. Archive created Fri Oct 19 09:32:30 PDT 1990 echo x - M5.Dialogs sed 's/^X//' > M5.Dialogs <<'+FUNKY+STUFF+' X Dialogs X ------- X X This example allows instances of each type of Motif dialog to be X selected from a pulldown menu. Both statically created and dynamically X created dialogs are demonstrated. X X Funny Names Due To Motif Constructors X ------------------------------------- X X Motif constructors often introduce extra widgets. In this example, the X buttons on the menus cause various types of dialog boxes to be managed X (popped-up). Note the names required: X X *pd.activateCallback: WcManageCB( *PromptDialog.PromptDialog ) X X This seemingly strange naming can be detected using the wcTrace X resource. The XmCreatePromptDialog constructor creates a dialog shell X named `PromptDialog' and a SelectionBox child which is also named X `PromptDialog'. In order to see the SelectionBox, it must be managed, X not just the dialog shell. A common error is the following: X X *pd.activateCallback: WcManageCB( *PromptDialog ) X X This simply causes the dialog shell to pop-up, but it will be empty: X its child, the SelectionBox, is still not managed and so will not be X visible. X X Note also that not all dialog constructors create pop-up shells X using the same naming conventions in Motif 1.0. X X************************************************************************* X** NOTE! Motif 1.1 will use a common and different naming convention: ** X** shells built be XmCreate*Dialog will be named <name>_popup !!!!!!!! ** X************************************************************************* X X X Widgets Statically Created By XmCreate*Dialog Should Be Unmanaged X ----------------------------------------------------------------- X X Otherwise, they will appear at widget creation time in the upper X left location of the screen (at least when using mwm). Probably X not what you had in mind. X X X Dynamically Created Widgets X --------------------------- X X Most of the dialogs in this example are dynamically created. X When they are created, the WcCreateChildrenCB() specifies X the parentage of the dynamically created widget. The dynamcially X created children are NOT listed in any wcChildren resource. X X o The heirarchy of statically (initially) created X widgets is specified by wcChildren resources. X X o The parentage of dynamically created widgets X is specified by the first argument to the X WcCreateChildrenCB() callback function. X X Multiple Identical Widgets X -------------------------- X X This example allows multiple identical copies of the dynamically X created dialog boxes. The buttons on such dynamic dialos X invoke WcDestroyCB, which is effectively XtDestroy(). X X Dynamically Created Once Only X ----------------------------- X X The WorkingDialog presents an example of a common use of dynamically X created widgets. The WorkingDialog is dynamically created the first X time it is asked for, and from then on it is simply unmanaged and X re-managed. X X ---------------------------------------------------------------------- X X# The dialogs listed as children of Mri are the statically created dialogs: X# XMri.wcChildren: menuBar, BulletinBoardDialog, ErrorDialog XMri.title: Mri using M5.Dialogs X X# Only the first two dialogs are statically created, with exactly X# one instance existing throughout the life of the process. X# X# The button's callback unmanages the BulletinBoardDialog X# child of the shell. X# X*BulletinBoardDialog.wcConstructor: XmCreateBulletinBoardDialog X*BulletinBoardDialog.wcManaged: False X*BulletinBoardDialog.wcTrace: True X*BulletinBoardDialog.wcChildren: bbButton X*bbButton.wcConstructor: XmCreatePushButton X*bbButton.labelString: Button on a BulletinBoardDialog X*bbButton.activateCallback: WcUnmanageCB( ~BulletinBoardDialog ) X X# Statically created, so buttons just unmanage: X# X*ErrorDialog.wcConstructor: XmCreateErrorDialog X*ErrorDialog.wcTrace: True X*ErrorDialog.wcManaged: False X*ErrorDialog.cancelCallback: WcUnmanageCB(this) X*ErrorDialog.helpCallback: WcUnmanageCB(this) X*ErrorDialog.okCallback: WcUnmanageCB(this) X X# All the other dialogs are dynamically created, so they start out X# managed, and the std buttons destroy the pop-up (parent) shell: X X*cancelCallback: WcDestroyCB( ~ ) X*helpCallback: WcDestroyCB( ~ ) X*okCallback: WcDestroyCB( ~ ) X X*FileSelectionDialog.wcConstructor: XmCreateFileSelectionDialog X*FileSelectionDialog.wcTrace: True X X# X# The button's callback destroys the parent of the parent of the button X# which is the dialog shell. X# X*FormDialog.wcConstructor: XmCreateFormDialog X*FormDialog.wcTrace: True X*FormDialog.wcChildren: fdButton X*fdButton.wcConstructor: XmCreatePushButton X*fdButton.labelString: Button on a FormDialog X*fdButton.activateCallback: WcDestroyCB( ^^ ) X X*InformationDialog.wcConstructor: XmCreateInformationDialog X*InformationDialog.wcTrace: True X X*MessageDialog.wcConstructor: XmCreateMessageDialog X*MessageDialog.wcTrace: True X X*PromptDialog.wcConstructor: XmCreatePromptDialog X*PromptDialog.wcTrace: True X X*QuestionDialog.wcConstructor: XmCreateQuestionDialog X*QuestionDialog.wcTrace: True X X*SelectionDialog.wcConstructor: XmCreateSelectionDialog X*SelectionDialog.wcTrace: True X X*WarningDialog.wcConstructor: XmCreateWarningDialog X*WarningDialog.wcTrace: True X X! Note: this dialog is dynamically created, and then X! simply unmanaged and remanaged. X! X*WorkingDialog.wcConstructor: XmCreateWorkingDialog X*WorkingDialog.wcTrace: True X*WorkingDialog.cancelCallback: WcUnmanageCB( this ) X*WorkingDialog.helpCallback: WcUnmanageCB( this ) X*WorkingDialog.okCallback: WcUnmanageCB( this ) X X ---------------------------------------------------------------------- X X Below are the resources for the menuBar and all its children. X X ---------------------------------------------------------------------- X X*menuBar.wcConstructor: XmCreateMenuBar X*menuBar.wcChildren: fileMenu, file, \ X staticDialogMenu, staticDialogs, \ X dynamicDialogMenu, dynamicDialogs X X! fileMenu contains only a quit button X X*fileMenu.wcConstructor: XmCreatePulldownMenu X*fileMenu.wcManaged: False X*fileMenu.wcChildren: quit X X*quit.wcConstructor: XmCreateCascadeButton X*quit.labelString: Quit X*quit.activateCallback: WcExitCB X X*file.wcConstructor: XmCreateCascadeButton X*file.labelString: File X*file.subMenuId: *fileMenu X X! staticDialogMenu contains one button for each dialog X! which is statically (initially) created. These dialogs X! are managed (popped-up) when the cascade button is activated. X X*staticDialogs.wcConstructor: XmCreateCascadeButton X*staticDialogs.labelString: Manage Existing Dialogs X*staticDialogs.subMenuId: *staticDialogMenu X X*staticDialogMenu.wcConstructor: XmCreatePulldownMenu X*staticDialogMenu.wcManaged: False X*staticDialogMenu.wcChildren: bb, ed X X! The BulletinBoardDialog was statically created, so we just need to X! manage it. X! Note unexpected wierdness of name: X X*bb.wcConstructor: XmCreateCascadeButton X*bb.labelString: Manage BulletinBoardDialog X*bb.activateCallback: WcManageCB( \ X *BulletinBoardDialog_popup.BulletinBoardDialog) X X! Statically created, just manage the ErrorDialog to make it pop-up. X! Note that only one ErrorDialog widget exists, so once it is managed X! subsequent menu button selection have no apparent effect. X X*ed.wcConstructor: XmCreateCascadeButton X*ed.labelString: Manage ErrorDialog X*ed.activateCallback: WcManageCB(*ErrorDialog.ErrorDialog) X X! dynamicDialogMenu contains one button for each dialog X! which can be dynamically created. These dialogs are X! created when the appropriate cascade button is activated. X X*dynamicDialogs.wcConstructor: XmCreateCascadeButton X*dynamicDialogs.labelString: Create New Dialogs X*dynamicDialogs.subMenuId: *dynamicDialogMenu X X*dynamicDialogMenu.wcConstructor: XmCreatePulldownMenu X*dynamicDialogMenu.wcManaged: False X*dynamicDialogMenu.wcChildren: fsd, fd, id, md, pd, \ X qd, sd, warn, sep, work X X*sep.wcConstructor: XmCreateSeparatorGadget X X! For all the rest of the dialogs, they are created, not just managed. X! X! This causes a new FileSelectionDialog to be created as a child of X! the application shell. X X*fsd.wcConstructor: XmCreateCascadeButton X*fsd.labelString: Create FileSelectionDialog X*fsd.activateCallback: WcCreateChildrenCB( Mri, FileSelectionDialog ) X X! The form dialog will be the child of the parent of the menu shell X! which is the ancestor of the `fd' cascade button. X! X*fd.wcConstructor: XmCreateCascadeButton X*fd.labelString: Create FormDialog X*fd.activateCallback: WcCreateChildrenCB( ~^, FormDialog) X X*id.wcConstructor: XmCreateCascadeButton X*id.labelString: Create InformationDialog X*id.activateCallback: WcCreateChildrenCB( Mri, InformationDialog) X X*md.wcConstructor: XmCreateCascadeButton X*md.labelString: Create MessageDialog X*md.activateCallback: WcCreateChildrenCB( Mri, MessageDialog) X X*pd.wcConstructor: XmCreateCascadeButton X*pd.labelString: Create PromptDialog X*pd.activateCallback: WcCreateChildrenCB( Mri, PromptDialog) X X*qd.wcConstructor: XmCreateCascadeButton X*qd.labelString: Create QuestionDialog X*qd.activateCallback: WcCreateChildrenCB( Mri, QuestionDialog) X X*sd.wcConstructor: XmCreateCascadeButton X*sd.labelString: Create SelectionDialog X*sd.activateCallback: WcCreateChildrenCB( Mri, SelectionDialog) X X*warn.wcConstructor: XmCreateCascadeButton X*warn.labelString: Create WarningDialog X*warn.activateCallback: WcCreateChildrenCB( Mri, WarningDialog) X X! Here is something different: On the first push, the working dialog X! is created. On subsequent pushes, it is just managed. X! X*work.wcConstructor: XmCreateCascadeButton X*work.labelString: Create WorkingDialog X*work.activateCallback: WcCreateChildrenCB( Mri, WorkingDialog), \ X WcSetValueCB( *work.labelString: Manage WorkingDialog), \ X WcSetValueCB( *work.activateCallback: \ X WcManageCB( *WorkingDialog.WorkingDialog) ) X X*dialogs.wcConstructor: XmCreateCascadeButton X*dialogs.subMenuId: *dialogMenu X*dialogs.labelString: Dialogs +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 9874 Aug 6 09:36 M5.Dialogs (as sent)' chmod u=rw,g=r,o=r M5.Dialogs ls -l M5.Dialogs echo x - M6.ListRowCol sed 's/^X//' > M6.ListRowCol <<'+FUNKY+STUFF+' X Scrolled Lists X -------------- X X This resource file presents the way one must deal with scrolled lists X inside of XmRowColumn widgets. Its actually pretty easy now. X X Note, however that XmRowColumn does not do such a good job of X resizing the scrolled window widget. X X ---------------------------------------------------------------------- X X#*wcTrace: True X XMri.wcChildren: rc XMri.title: M6.ListRowCol X X*rc.wcConstructor: XmCreateRowColumn X*rc.wcChildren: quit, slist X*rc.entryAlignment: ALIGNMENT_CENTER X X*quit.wcConstructor: XmCreatePushButton X*quit.activateCallback: WcExitCB X*quit.labelString: Push To Exit X X*slist.wcConstructor: XmCreateScrolledList X*slist.items: This demo uses the XmRowColumn,\ X widget. Try resizing the window.,\ X You will see the list gets wider\\,,\ X but not longer.,\ X foo,bar, baz is a nice item,\ X zorp,the,quick,brown,fox,\ X jumped,over,the, lazy, dog, and, blew,\ X the, candle, out. This\\, and that, and,\ X more,to,come. That's all. X*slist.itemCount: 26 X*slist.visibleItemCount: 11 X*slist.selectionPolicy: EXTENDED_SELECT +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 1097 Aug 6 09:36 M6.ListRowCol (as sent)' chmod u=rw,g=r,o=r M6.ListRowCol ls -l M6.ListRowCol echo x - M6.ListTable sed 's/^X//' > M6.ListTable <<'+FUNKY+STUFF+' X Scrolled Lists in Tables X ------------------------ X X This resource file presents the way one must deal with scrolled lists X which are managed by Table widgets. In the layout resource for the X Table widget, we must name the scrolled window, NOT the list: X X *table.layout: quit 0 0 1 1 hH ;\ X slistSW 0 1 1 1 X X If we simply said "slist" instead of "slistSW" then nothing X appears, because slist is not one of the children of table. X Rather, slistSW is the child of table, and slist is the X child of slistSW. X X As an aside, the layout options hH on the quit button allow X resizing to work nicely. Compare the behavior of the Table X with the resize behavior of XmRowColumn. I think you will X prefer Table over XmRowColumn. X X ---------------------------------------------------------------------- X X#*wcTrace: True X XMri.wcChildren: table XMri.title: M6.ListTable X X*table.wcClassName: Table X*table.wcChildren: quit, slist X*table.layout: quit 0 0 1 1 hH ;\ X slistSW 0 1 1 1 X X*quit.wcConstructor: XmCreatePushButton X*quit.activateCallback: WcExitCB X*quit.labelString: Push To Exit X X*slist.wcConstructor: XmCreateScrolledList X*slist.items: This demo uses the Table widget.,\ X Try resizing the window.,\ X You will see the list gets wider\\,,\ X AND longer - unlike with XmRowColumn.,\ X foo,bar, baz is a nice item,\ X zorp,the,quick,brown,fox,\ X jumped,over,the, lazy, dog, and, blew,\ X the, candle, out. This\\, and that, and,\ X more,to,come. That's all. X*slist.itemCount: 26 X*slist.visibleItemCount: 11 X*slist.selectionPolicy: EXTENDED_SELECT +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 1636 Aug 6 09:36 M6.ListTable (as sent)' chmod u=rw,g=r,o=r M6.ListTable ls -l M6.ListTable echo x - M7.Periodic sed 's/^X//' > M7.Periodic <<'+FUNKY+STUFF+' X! This example is taken from the periodic demo which came with Motif 1.0 X! and was developed by Michael K. Yee at OSF. To quote the original X! README: X! X! Periodic is a demo of the displayable widgets in X! Motif. Periodic presents many Motif widgets for X! your visual and sensual enjoyment. X! X XMri.wcChildren: main XMri.title: Mri using M7.Periodic X X*background: Turquoise X*fontList: -adobe-new century schoolbook-medium-r-normal--10-* X X*main.wcConstructor: XmCreateMainWindow X*main.wcChildren: menuBar, table X X# If you want scrollbars, uncomment this line X#*main.scrollingPolicy: AUTOMATIC X X################################################################## X# Minimal menu bar X################################################################## X X*menuBar.wcConstructor: XmCreateMenuBar X*menuBar.wcCallback: WcSetValueCB(*main.menuBar: this) X*menuBar.wcChildren: fileMenu, File, Edit, Help X*menuBar*fontList: -b&h-lucida-medium-i-normal-sans-12-120-* X X*fileMenu.wcConstructor: XmCreatePulldownMenu X*fileMenu.wcChildren: Quit X*fileMenu.wcManaged: false X X*Quit.wcConstructor: XmCreateCascadeButton X*Quit.activateCallback: WcExitCB X X*File.wcConstructor: XmCreateCascadeButton X*File.subMenuId: *fileMenu X X*Edit.wcConstructor: XmCreateCascadeButton X X*Help.wcConstructor: XmCreateCascadeButton X*Help.wcCallback: WcSetValueCB( ^.menuHelpWidget: this ) X X################################################################## X# Table Widget for Periodic Table X################################################################## X X*table.wcClassName: Table X*table.wcCallback: WcSetValueCB(*main.workWindow: this) X*table.wcChildren: title, \ X 02, 03, 04, 05, 06, 62, \ X 17, 27, 47, 57, \ X Ia, 1, 2, 3, 4, 5, \ X IIa, 6, 7, 8, 9, \ X IIIb, 10, \ X IVa, 11, 12, 16, \ X Va, 13, 14, 15, dialogs, 19 X# name c r cs rs opt X*table.layout: title 2 1 4 1 ;\ X Ia 1 1;\ X02 0 2; 1 1 2; IIa 2 2; Va 5 2; 62 6 2;\ X03 0 3; 2 1 3; 6 2 3; IIIb 3 3; IVa 4 3; 13 5 3;\ X04 0 4; 3 1 4; 7 2 4; 10 3 4 1 3; 11 4 4; 14 5 4;\ X05 0 5; 4 1 5; 8 2 5; 12 4 5; 15 5 5;\ X06 0 6; 5 1 6; 9 2 6; 16 4 6 2 1;\ X 17 1 7; 27 2 7; 47 4 7; 57 5 7;\ X dialogs 1 8 5 1;\ X 19 1 9; X X*title.wcConstructor: XmCreateLabel X*title.labelString: The Periodic Table Of Motif Widgets X*title.fontList: -b&h-lucida-bold-i-normal-sans-34-240-* X X# The following are simply for spacing. Composite is X# perhaps the simplest Motif widget which can be created. X*table.Composite.Width: 120 X*table.Composite.Height: 120 X*table.Composite.borderWidth: 0 X*table.02.wcClassName: Composite X*table.02.width: 20 X*table.03.wcClassName: Composite X*table.03.width: 20 X*table.04.wcClassName: Composite X*table.04.width: 20 X*table.05.wcClassName: Composite X*table.05.width: 20 X*table.06.wcClassName: Composite X*table.06.width: 20 X*table.62.wcClassName: Composite X*table.62.width: 20 X*table.17.wcClassName: Composite X*table.17.height: 20 X*table.27.wcClassName: Composite X*table.27.height: 20 X*table.47.wcClassName: Composite X*table.47.height: 20 X*table.57.wcClassName: Composite X*table.57.height: 20 X*table.19.wcClassName: Composite X*table.19.height: 20 X X# Labels above the columns: I use the same "display box" X# as for widget types, but I just null out the label strings X# and change the type fo the bottom widget to label. X X*filler.wcClassName: XmLabel X*filler.labelString: X X*table.Ia.wcClassName: Table X*table.Ia.wcChildren: filler, Ia X*table.Ia.layout: filler 0 0; Ia 0 1 hH; X*table.Ia.borderWidth: 0 X*table.Ia.Ia.wcClassName: XmLabel X X*table.IIa.wcClassName: Table X*table.IIa.wcChildren: filler, IIa X*table.IIa.layout: filler 0 0; IIa 0 1 hH; X*table.IIa.borderWidth: 0 X*table.IIa.IIa.wcClassName: XmLabel X X*table.IIIb.wcClassName: Table X*table.IIIb.wcChildren: filler, IIIb X*table.IIIb.layout: filler 0 0; IIIb 0 1 hH; X*table.IIIb.borderWidth: 0 X*table.IIIb.IIIb.wcClassName: XmLabel X X*table.IVa.wcClassName: Table X*table.IVa.wcChildren: filler, IVa X*table.IVa.layout: filler 0 0; IVa 0 1 hH; X*table.IVa.borderWidth: 0 X*table.IVa.IVa.wcClassName: XmLabel X X*table.Va.wcClassName: Table X*table.Va.wcChildren: filler, Va X*table.Va.layout: filler 0 0; Va 0 1 hH; X*table.Va.borderWidth: 0 X*table.Va.Va.wcClassName: XmLabel X X# These are the widget display boxes: X X*table*Table.wcChildren: an, w, n X*table*Table.Layout: an 1 0 1 1 hH; w 0 1 2 1 ; n 0 2 2 1 hH; X*table*Table.rowSpacing: 10 X*table*Table.borderWidth: 1 X*table.Table.an.wcClassName: XmLabel X*table.Table.an.alignment: ALIGNMENT_END X*table*Table.n.wcClassName: XmPushButton X X*1.wcClassName: Table X*1.wcChildren: an, w, n X*1.an.labelString: 1 X*1.w.wcClassName: XmSeparator X*1.n.labelString: XmSeparator X X*2.wcClassName: Table X*2.wcChildren: an, w, n X*2.an.labelString: 2 X*2.w.wcClassName: XmArrowButton X*2.n.labelString: XmArrowButton X X*3.wcClassName: Table X*3.wcChildren: an, w, n X*3.an.labelString: 3 X*3.w.wcClassName: XmPushButton X*3.w.labelString: Format Disk X*3.n.labelString: XmPushButton X X*4.wcClassName: Table X*4.wcChildren: an, w, n X*4.an.labelString: 4 X*4.w.wcClassName: XmToggleButton X*4.w.labelString: Lights X*4.n.labelString: XmToggleButton X X*5.wcClassName: Table X*5.wcChildren: an, w, n X*5.an.labelString: 5 X*5.w.wcClassName: XmLabel X*5.w.labelString: Don't Panic X*5.n.labelString: XmLabel X X*6.wcClassName: Table X*6.wcChildren: an, colorOptions, w, n X*6.an.labelString: 6 X*6.colorOptions.wcConstructor: XmCreatePulldownMenu X*6.colorOptions.wcManaged: False X*6.colorOptions.wcChildren: red, orange, yellow, green, blue, purple X*6*colorOptions.red.wcClassName: XmPushButton X*6*colorOptions.orange.wcClassName: XmPushButton X*6*colorOptions.yellow.wcClassName: XmPushButton X*6*colorOptions.green.wcClassName: XmPushButton X*6*colorOptions.blue.wcClassName: XmPushButton X*6*colorOptions.purple.wcClassName: XmPushButton X# ^ Note the asterisk needed here!! colorOptions is actually X# a child of a menu shell created by XmCreatePulldownMenu. X*6.w.wcConstructor: XmCreateOptionMenu X*6.w.labelString: color X*6.w.subMenuId: *6*colorOptions X*6.n.labelString: XmOptionMenu X X*7.wcClassName: Table X*7.wcChildren: an, w, n X*7.an.labelString: 7 X*7.w.wcClassName: XmScale X*7.w.wcChildren: min, |, max X*7.w.decimalPoints: 1 X*7.w.maximum: 50 X*7.w.orientation: HORIZONTAL X*7.w.processingDirection: MAX_ON_RIGHT X*7.w.showValue: True X*7.w.titleString: Warp Factor X*7.w.min.wcClassName: XmLabel X*7.w.min.labelString: 0 X*7.w.|.wcClassName: XmLabel X*7.w.max.wcClassName: XmLabel X*7.w.max.labelString: 5 X*7.n.labelString: XmScale X X*8.wcClassName: Table X*8.wcChildren: an, w, n X*8.an.labelString: 8 X*8.w.wcConstructor: XmCreateRadioBox X*8.w.wcChildren: WFNX, WCRB, WHKY X*8.w.WFNX.wcClassName: XmToggleButtonGadget X*8.w.WCRB.wcClassName: XmToggleButtonGadget X*8.w.WHKY.wcClassName: XmToggleButtonGadget X*8.n.labelString: XmRadioBox X X*9.wcClassName: Table X*9.wcChildren: an, w, n X*9.an.labelString: 9 X*9.w.wcClassName: XmText X*9.w.value: Hello World X*9.n.labelString: XmText X X*10.wcClassName: Table X*10.wcChildren: an, w, n X*10.an.labelString: 10 X*10.w.wcClassName: XmFileSelectionBox X*10.w.dirMask: *.c X*10.n.labelString: XmFileSelectionBox X X*11.wcClassName: Table X*11.wcChildren: an, w, n X*table.11.rowSpacing: 30 X*11.an.labelString: 11 X*11.w.wcClassName: XmScrollBar X*11.w.orientation: HORIZONTAL X*11.w.height: 20 X*11.n.labelString: XmScrollBar X X# Remember that XmCreateScrolledList creates an intermediate X# parent named wSW, and that is the widget the table lays out. X# X*12.wcClassName: Table X*12.wcChildren: an, w, n X*table.12.layout: an 1 0 1 1 hH; wSW 0 1 2 1 ; n 0 2 2 1 hH; X*12.an.labelString: 12 X*12.w.wcConstructor: XmCreateScrolledList X*12*w.items: Foobar, Mumble, Glorp, Reggae, Rock, and, Roll X*12*w.itemCount: 7 X*12*w.visibleItemCount: 3 X*12*w.listMarginWidth: 3 X*12.n.labelString: XmScrolledList X X# Note that the XmCascadeButton which pops-up the demoMenu X# MUST be a child of an XmRowColumn. I used XmCreateMenuBar X# to create the row column, because that it usually what X# you will use when you've got pull-down menus. If the X# cascade button is not a child of an XmRowColumn, you X# will get a core dump in Motif. Sorry, I can't fix that here. X# X*13.wcClassName: Table X*13.wcChildren: an, w, n X*13.an.labelString: 13 X*13.n.labelString: XmPulldownMenu X*13.w.wcConstructor: XmCreateMenuBar X*13.w.wcChildren: demoMenu, menuButton X*13.w.menuButton.wcClassName: XmCascadeButton X*13.w.menuButton.labelString: Press For Menu X*13.w.menuButton.subMenuId: *13.w*demoMenu X*13.w.demoMenu.wcConstructor: XmCreatePulldownMenu X*13.w.demoMenu.wcManaged: False X*13.w.demoMenu.wcChildren: title, Black, Blue, Coral, LimeGreen, \ X Cyan, Goldenrod, Magenta, Pink X*13.w*demoMenu.title.wcConstructor: XmCreateLabel X*13.w*demoMenu.title.labelString: Choose Color of XmDrawingArea: X*13.w*demoMenu.title.fontList: -b&h-lucida-bold-i-normal-sans-12-120-* X*13.w*demoMenu*FontList: -b&h-lucida-medium-r-normal-sans-12-120-* X# ^ Note the asterisk needed here!! demoMenu is actually X# a child of a menu shell created by XmCreatePulldownMenu. X X X*13*Black.wcClassName: XmCascadeButton X*13*Blue.wcClassName: XmCascadeButton X*13*Coral.wcClassName: XmCascadeButton X*13*LimeGreen.wcClassName: XmCascadeButton X*13*Cyan.wcClassName: XmCascadeButton X*13*Goldenrod.wcClassName: XmCascadeButton X*13*Magenta.wcClassName: XmCascadeButton X*13*Pink.wcClassName: XmCascadeButton X X*13*Black.activateCallback: WcSetValueCB(*14.w.background: Black) X*13*Blue.activateCallback: WcSetValueCB(*14.w.background: Blue) X*13*Coral.activateCallback: WcSetValueCB(*14.w.background: Coral) X*13*LimeGreen.activateCallback: WcSetValueCB(*14.w.background: LimeGreen) X*13*Cyan.activateCallback: WcSetValueCB(*14.w.background: Cyan) X*13*Goldenrod.activateCallback: WcSetValueCB(*14.w.background: Goldenrod) X*13*Magenta.activateCallback: WcSetValueCB(*14.w.background: Magenta) X*13*Pink.activateCallback: WcSetValueCB(*14.w.background: Pink) X X*14.wcClassName: Table X*14.wcChildren: an, w, n X*14.an.labelString: 14 X*14.w.wcClassName: XmDrawingArea X*14.w.background: RoyalBlue X*14.n.labelString: XmDrawingArea X X*15.wcClassName: Table X*15.wcChildren: an, w, n X*15.an.labelString: 15 X*15.w.wcClassName: XmDrawnButton X*15.n.labelString: XmDrawnButton X X*16.wcClassName: Table X*16.wcChildren: an, w, n X*16.an.labelString: 16 X*16.w.wcClassName: XmPanedWindow X*16.w.wcChildren: text1, text2 X*16.w.text1.wcClassName: XmText X*16.w.text1.value: Motif Resource Interpreter X*16.w.text2.wcClassName: XmText X*16.w.text2.value: Version 1.04 X*16.n.labelString: XmPanedWindow X X*dialogs.wcClassName: Table X*dialogs.wcChildren: error, info, question, warn, work X*table.dialogs.borderWidth: 0 X*table.dialogs.layout: error 0 0; info 1 0; question 2 0; warn 3 0; work 4 0; X*table.dialogs.columnSpacing: 10 X X*dialogs.XmMessageBox.borderWidth: 1 X X*error.wcClassName: XmMessageBox X*error.dialogType: DIALOG_ERROR X*error.messageString: Error Dialog X X*info.wcClassName: XmMessageBox X*info.dialogType: DIALOG_INFORMATION X*info.messageString: Information Dialog X X*message.wcClassName: XmMessageBox X*message.dialogType: DIALOG_MESSAGE X*message.messageString: Message Dialog X X*question.wcClassName: XmMessageBox X*question.dialogType: DIALOG_QUESTION X*question.messageString: Question Dialog X X*warn.wcClassName: XmMessageBox X*warn.dialogType: DIALOG_WARNING X*warn.messageString: Warning Dialog X X*work.wcClassName: XmMessageBox X*work.dialogType: DIALOG_WORKING X*work.messageString: Working Dialog +FUNKY+STUFF+ echo '-rw-rw-r-- 1 david 11427 Oct 12 16:49 M7.Periodic (as sent)' chmod u=rw,g=rw,o=r M7.Periodic ls -l M7.Periodic echo x - M8.Multi sed 's/^X//' > M8.Multi <<'+FUNKY+STUFF+' X Multiple Resource Files X ----------------------- X X This resource file explores the use multiple resource files which X describe a single user interface. X X Appearance Defaults X ------------------- X X Below are application wide defaults for various widgets. Note that X we can set resource values for things which are not themselves described X in this resource file. X X N.B.: If you change the colors from B&W, you should change the X borderColor of the Table widget. Someday, I will probably hack X the Table widget to have Margin resources like XmRowColumn and X then it won't be necessary X X ---------------------------------------------------------------------- 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*background: Wheat X*Table.borderColor: Wheat X X ---------------------------------------------------------------------- X X Main Window X ----------- X X Motif's MainWindow widget type supports one of the classic "looks" X of a window application, and of the Motif Style Guide in particular. X X ---------------------------------------------------------------------- X XMri.wcChildren: main, loadSelect, saveSelect XMri.title: Mri using M8.Multi X X*main.wcConstructor: XmCreateMainWindow X*main.wcChildren: menuBar, commandWindow, msgWindow, vscroll X X ---------------------------------------------------------------------- X X It is probably good practice to put all the resource file X specifications in the top level (initial) resource file. This makes it X easier to find which resource files are used, and makes it easier to X change them when required. For example, I've got an application which X requires adaptation for different spacecraft missions. Some of the X interface components stay the same, some change. I can re-write the X top level resource file, and just name different sub-resource files. X None of the sub-resource files need to be changed. X X ---------------------------------------------------------------------- X XMri.loadSelect.wcResFile: M8_Dialogs XMri.saveSelect.wcResFile: M8_Dialogs X X*main.menuBar.wcResFile: M8_MenuBar X*main.commandWindow.wcResFile: M8_Comm X*main.msgWindow.wcResFile: M8_Text X*main.vscroll.wcResFile: M8_Text +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 2378 Aug 6 09:36 M8.Multi (as sent)' chmod u=rw,g=r,o=r M8.Multi ls -l M8.Multi echo x - M8_Comm sed 's/^X//' > M8_Comm <<'+FUNKY+STUFF+' X ---------------------------------------------------------------------- X X The commandWindow is a Table widget with three stacked children. The X top child contains a description of the query to be performed. The X second child contains the submit controls including the time range to X be queried. The third child is used to actually specify the data X types, data transformations, and the data sinks using a graphic X representing the flow of data. X X ---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- X X We describe the Submit Control and panel portions of the commandWindow X in separate files. X X ---------------------------------------------------------------------- X X*submitCtrl.wcResFile: M8_Submit X*panel.wcResFile: M8_Direct +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 1742 Aug 6 09:36 M8_Comm (as sent)' chmod u=rw,g=r,o=r M8_Comm ls -l M8_Comm echo x - M8_Dialogs sed 's/^X//' > M8_Dialogs <<'+FUNKY+STUFF+' X ---------------------------------------------------------------------- X X Note that this file describes two separate widgets. The loading X function of Wc is smart enough to know that the file gets loaded X exactly once. X X ---------------------------------------------------------------------- X X*loadSelect.wcTrace: True X*saveSelect.wcTrace: True 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) +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 707 Aug 6 09:36 M8_Dialogs (as sent)' chmod u=rw,g=r,o=r M8_Dialogs ls -l M8_Dialogs echo x - M8_Direct sed 's/^X//' > M8_Direct <<'+FUNKY+STUFF+' X ---------------------------------------------------------------------- X X This section provides the resource specifications for the direct X manipulation panel which allows a user to specify a set of data X types, data transforms, and data sinks, along with the data flows X which connect each of the foregoing. X X Along the left side are three row columns, left to right. The leftmost X row column contains buttons representing the different data types which X can be queried. This will certainly change per mission, and probably X per user. X X The second row column contains buttons representing the different X transformations which may be applied to the data. Several are basically X mission independent, such as WSE filtering and DMD. Others may be X added on a per mission basis, and some details may be frequently X specified on a per user basis. X X The third row column contains buttons representing the different X data sinks which are available. These are probably never changed. X X ---------------------------------------------------------------------- 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 ) +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 4306 Aug 6 09:36 M8_Direct (as sent)' chmod u=rw,g=r,o=r M8_Direct ls -l M8_Direct echo x - M8_MenuBar sed 's/^X//' > M8_MenuBar <<'+FUNKY+STUFF+' X Menu Bar X -------- X X Below are the resources for the menuBar and all its children. This X menuBar is a child of a Motif MainWindow, and so must register itself X with the MainWindow (named *main). X X Referencing Widgets In Other Files X ---------------------------------- X X The buttons *load and *saveAs cause dialog widgets to be managed. X These dialog widgets are defined in a separate file. Since the X callbacks will not be invoked until all the widgets are created, X including the dialog widgets, the widgets will exist then, even if they X are not yet created when the buttons are created. X X ---------------------------------------------------------------------- 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*load.activateCallback: WcManageCB( *loadSelect.loadSelect ) 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*saveAs.activateCallback: WcManageCB(*saveSelect.saveSelect) 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 +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 3438 Aug 6 09:36 M8_MenuBar (as sent)' chmod u=rw,g=r,o=r M8_MenuBar ls -l M8_MenuBar echo x - M8_Submit sed 's/^X//' > M8_Submit <<'+FUNKY+STUFF+' X X This section provides the resource specifications for the Submit X Control portion of the commandWindow. A Table widget is used as the X manager widget because Row Column just can't do the job here, where we X mix types of widgets with differing heights in a row, AND types of X widgets with differing widths in a column. XmRowColumn gets fascist in X such situations, and makes every cell the same width and height. We X don't want that (wastes ALOT of real estate in this case). So, we'll X try the Table Widget. X X ---------------------------------------------------------------------- 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 +FUNKY+STUFF+ echo '-rw-r--r-- 1 david 3012 Aug 6 09:36 M8_Submit (as sent)' chmod u=rw,g=r,o=r M8_Submit ls -l M8_Submit echo x - M8_Text sed 's/^X//' > M8_Text <<'+FUNKY+STUFF+' X This section provides the resource specifications for the msgWindow, a X scrolled text window for trace, heartbeat, warning, and error messages. X X ---------------------------------------------------------------------- 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 460 Aug 6 09:36 M8_Text (as sent)' chmod u=rw,g=r,o=r M8_Text ls -l M8_Text echo x - M9.Colors sed 's/^X//' > M9.Colors <<'+FUNKY+STUFF+' X X#*wcTrace: True X XMri.wcChildren: main XMri.title: Mri using M9.Colors X X*background: Turquoise X*fontList: -adobe-new century schoolbook-medium-r-normal--10-100-* X X*main.wcConstructor: XmCreateMainWindow X*main.wcChildren: menuBar, wa X X################################################################## X# Minimal menu bar X################################################################## X X*menuBar.wcConstructor: XmCreateMenuBar X*menuBar.wcChildren: fileMenu, File, Edit, Help X*menuBar*fontList: -b&h-lucida-medium-i-normal-sans-12-120-* X X*fileMenu.wcConstructor: XmCreatePulldownMenu X*fileMenu.wcChildren: Quit X*fileMenu.wcManaged: false X X*Quit.wcConstructor: XmCreateCascadeButton X*Quit.activateCallback: WcExitCB X X*File.wcConstructor: XmCreateCascadeButton X*File.subMenuId: *fileMenu X X*Edit.wcConstructor: XmCreateCascadeButton X X*Help.wcConstructor: XmCreateCascadeButton X*Help.wcCallback: WcSetValueCB( ^.menuHelpWidget: this ) X X################################################################## X# Work area consists of a table widget managing three identical X# table widget children, layout left to right. X################################################################## X*wa.wcClassName: Table X*wa.wcCallback: WcSetValueCB(*main.workWindow: this) X*wa.wcChildren: left, middle, right X*wa.layout: left 0 0 ; middle 1 0 ; right 2 0 X X################################################################## X# Table Widget : Three identical ones, which contain color buttons X# and a drawing area. X################################################################## X X*left.wcClassName: Table X*left.wcChildren: RC, drawing X*middle.wcClassName: Table X*middle.wcChildren: RC, drawing X*right.wcClassName: Table X*right.wcChildren: RC, drawing X*wa.Table.layout: RC 0 0 1 1 hH; drawing 0 1 X X*drawing.wcClassName: XmDrawingArea X*drawing.background: RoyalBlue X X*RC.wcConstructor: XmCreateRadioBox X*RC.wcChildren: Aquamarine, Black, Blue, BlueViolet, \ X Brown, CadetBlue, Coral, CornflowerBlue, Cyan, DarkGreen, \ X DarkOliveGreen, DarkOrchid, DarkSlateBlue, DarkSlateGray, \ X DarkTurquoise, DimGray, Firebrick, ForestGreen, Gold, Goldenrod, \ X Gray, Green, GreenYellow, IndianRed, Khaki, LightBlue, LightGray, \ X LightSteelBlue, LimeGreen, Magenta, Maroon, MediumAquamarine, \ X MediumBlue, MediumForestGreen, MediumGoldenrod, MediumOrchid, \ X MediumSeaGreen, MediumSlateBlue, MediumTurquoise, MediumVioletRed, \ X MidnightBlue, NavyBlue, Orange, OrangeRed, Orchid, PaleGreen, \ X Pink, Plum, Red, Salmon, SeaGreen, Sienna, SkyBlue, SlateBlue, \ X SpringGreen, SteelBlue, Tan, Thistle, Transparent, Turquoise, Violet, \ X VioletRed, Wheat, White, Yellow, YellowGreen X*RC.numColumns: 3 X*RC.packing: PACK_COLUMN X X*Aquamarine.wcClassName: XmToggleButtonGadget X*Black.wcClassName: XmToggleButtonGadget X*Blue.wcClassName: XmToggleButtonGadget X*BlueViolet.wcClassName: XmToggleButtonGadget X*Brown.wcClassName: XmToggleButtonGadget X*CadetBlue.wcClassName: XmToggleButtonGadget X*Coral.wcClassName: XmToggleButtonGadget X*CornflowerBlue.wcClassName: XmToggleButtonGadget X*Cyan.wcClassName: XmToggleButtonGadget X*DarkGreen.wcClassName: XmToggleButtonGadget X*DarkOliveGreen.wcClassName: XmToggleButtonGadget X*DarkOrchid.wcClassName: XmToggleButtonGadget X*DarkSlateBlue.wcClassName: XmToggleButtonGadget X*DarkSlateGray.wcClassName: XmToggleButtonGadget X*DarkTurquoise.wcClassName: XmToggleButtonGadget X*DimGray.wcClassName: XmToggleButtonGadget X*Firebrick.wcClassName: XmToggleButtonGadget X*ForestGreen.wcClassName: XmToggleButtonGadget X*Gold.wcClassName: XmToggleButtonGadget X*Goldenrod.wcClassName: XmToggleButtonGadget X*Gray.wcClassName: XmToggleButtonGadget X*Green.wcClassName: XmToggleButtonGadget X*GreenYellow.wcClassName: XmToggleButtonGadget X*IndianRed.wcClassName: XmToggleButtonGadget X*Khaki.wcClassName: XmToggleButtonGadget X*LightBlue.wcClassName: XmToggleButtonGadget X*LightGray.wcClassName: XmToggleButtonGadget X*LightSteelBlue.wcClassName: XmToggleButtonGadget X*LimeGreen.wcClassName: XmToggleButtonGadget X*Magenta.wcClassName: XmToggleButtonGadget X*Maroon.wcClassName: XmToggleButtonGadget X*MediumAquamarine.wcClassName: XmToggleButtonGadget X*MediumBlue.wcClassName: XmToggleButtonGadget X*MediumForestGreen.wcClassName: XmToggleButtonGadget X*MediumGoldenrod.wcClassName: XmToggleButtonGadget X*MediumOrchid.wcClassName: XmToggleButtonGadget X*MediumSeaGreen.wcClassName: XmToggleButtonGadget X*MediumSlateBlue.wcClassName: XmToggleButtonGadget X*MediumTurquoise.wcClassName: XmToggleButtonGadget X*MediumVioletRed.wcClassName: XmToggleButtonGadget X*MidnightBlue.wcClassName: XmToggleButtonGadget X*NavyBlue.wcClassName: XmToggleButtonGadget X*Orange.wcClassName: XmToggleButtonGadget X*OrangeRed.wcClassName: XmToggleButtonGadget X*Orchid.wcClassName: XmToggleButtonGadget X*PaleGreen.wcClassName: XmToggleButtonGadget X*Pink.wcClassName: XmToggleButtonGadget X*Plum.wcClassName: XmToggleButtonGadget X*Red.wcClassName: XmToggleButtonGadget X*Salmon.wcClassName: XmToggleButtonGadget X*SeaGreen.wcClassName: XmToggleButtonGadget X*Sienna.wcClassName: XmToggleButtonGadget X*SkyBlue.wcClassName: XmToggleButtonGadget X*SlateBlue.wcClassName: XmToggleButtonGadget X*SpringGreen.wcClassName: XmToggleButtonGadget X*SteelBlue.wcClassName: XmToggleButtonGadget X*Tan.wcClassName: XmToggleButtonGadget X*Thistle.wcClassName: XmToggleButtonGadget X*Transparent.wcClassName: XmToggleButtonGadget X*Turquoise.wcClassName: XmToggleButtonGadget X*Violet.wcClassName: XmToggleButtonGadget X*VioletRed.wcClassName: XmToggleButtonGadget X*Wheat.wcClassName: XmToggleButtonGadget X*White.wcClassName: XmToggleButtonGadget X*Yellow.wcClassName: XmToggleButtonGadget X*YellowGreen.wcClassName: XmToggleButtonGadget X X*Aquamarine.armCallback: WcSetValueCB( ^^drawing.background: Aquamarine ) X*Black.armCallback: WcSetValueCB( ^^drawing.background: Black ) X*Blue.armCallback: WcSetValueCB( ^^drawing.background: Blue ) X*BlueViolet.armCallback: WcSetValueCB( ^^drawing.background: BlueViolet ) X*Brown.armCallback: WcSetValueCB( ^^drawing.background: Brown ) X*CadetBlue.armCallback: WcSetValueCB( ^^drawing.background: CadetBlue ) X*Coral.armCallback: WcSetValueCB( ^^drawing.background: Coral ) X*CornflowerBlue.armCallback: WcSetValueCB( ^^drawing.background: CornflowerBlue ) X*Cyan.armCallback: WcSetValueCB( ^^drawing.background: Cyan ) X*DarkGreen.armCallback: WcSetValueCB( ^^drawing.background: DarkGreen ) X*DarkOliveGreen.armCallback: WcSetValueCB( ^^drawing.background: DarkOliveGreen ) X*DarkOrchid.armCallback: WcSetValueCB( ^^drawing.background: DarkOrchid ) X*DarkSlateBlue.armCallback: WcSetValueCB( ^^drawing.background: DarkSlateBlue ) X*DarkSlateGray.armCallback: WcSetValueCB( ^^drawing.background: DarkSlateGray ) X*DarkTurquoise.armCallback: WcSetValueCB( ^^drawing.background: DarkTurquoise ) X*DimGray.armCallback: WcSetValueCB( ^^drawing.background: DimGray ) X*Firebrick.armCallback: WcSetValueCB( ^^drawing.background: Firebrick ) X*ForestGreen.armCallback: WcSetValueCB( ^^drawing.background: ForestGreen ) X*Gold.armCallback: WcSetValueCB( ^^drawing.background: Gold ) X*Goldenrod.armCallback: WcSetValueCB( ^^drawing.background: Goldenrod ) X*Gray.armCallback: WcSetValueCB( ^^drawing.background: Gray ) X*Green.armCallback: WcSetValueCB( ^^drawing.background: Green ) X*GreenYellow.armCallback: WcSetValueCB( ^^drawing.background: GreenYellow ) X*IndianRed.armCallback: WcSetValueCB( ^^drawing.background: IndianRed ) X*Khaki.armCallback: WcSetValueCB( ^^drawing.background: Khaki ) X*LightBlue.armCallback: WcSetValueCB( ^^drawing.background: LightBlue ) X*LightGray.armCallback: WcSetValueCB( ^^drawing.background: LightGray ) X*LightSteelBlue.armCallback: WcSetValueCB( ^^drawing.background: LightSteelBlue ) X*LimeGreen.armCallback: WcSetValueCB( ^^drawing.background: LimeGreen ) X*Magenta.armCallback: WcSetValueCB( ^^drawing.background: Magenta ) X*Maroon.armCallback: WcSetValueCB( ^^drawing.background: Maroon ) X*MediumAquamarine.armCallback: WcSetValueCB( ^^drawing.background: MediumAquamarine ) X*MediumBlue.armCallback: WcSetValueCB( ^^drawing.background: MediumBlue ) X*MediumForestGreen.armCallback: WcSetValueCB( ^^drawing.background: MediumForestGreen ) X*MediumGoldenrod.armCallback: WcSetValueCB( ^^drawing.background: MediumGoldenrod ) X*MediumOrchid.armCallback: WcSetValueCB( ^^drawing.background: MediumOrchid ) X*MediumSeaGreen.armCallback: WcSetValueCB( ^^drawing.background: MediumSeaGreen ) X*MediumSlateBlue.armCallback: WcSetValueCB( ^^drawing.background: MediumSlateBlue ) X*MediumTurquoise.armCallback: WcSetValueCB( ^^drawing.background: MediumTurquoise ) X*MediumVioletRed.armCallback: WcSetValueCB( ^^drawing.background: MediumVioletRed ) X*MidnightBlue.armCallback: WcSetValueCB( ^^drawing.background: MidnightBlue ) X*NavyBlue.armCallback: WcSetValueCB( ^^drawing.background: NavyBlue ) X*Orange.armCallback: WcSetValueCB( ^^drawing.background: Orange ) X*OrangeRed.armCallback: WcSetValueCB( ^^drawing.background: OrangeRed ) X*Orchid.armCallback: WcSetValueCB( ^^drawing.background: Orchid ) X*PaleGreen.armCallback: WcSetValueCB( ^^drawing.background: PaleGreen ) X*Pink.armCallback: WcSetValueCB( ^^drawing.background: Pink ) X*Plum.armCallback: WcSetValueCB( ^^drawing.background: Plum ) X*Red.armCallback: WcSetValueCB( ^^drawing.background: Red ) X*Salmon.armCallback: WcSetValueCB( ^^drawing.background: Salmon ) X*SeaGreen.armCallback: WcSetValueCB( ^^drawing.background: SeaGreen ) X*Sienna.armCallback: WcSetValueCB( ^^drawing.background: Sienna ) X*SkyBlue.armCallback: WcSetValueCB( ^^drawing.background: SkyBlue ) X*SlateBlue.armCallback: WcSetValueCB( ^^drawing.background: SlateBlue ) X*SpringGreen.armCallback: WcSetValueCB( ^^drawing.background: SpringGreen ) X*SteelBlue.armCallback: WcSetValueCB( ^^drawing.background: SteelBlue ) X*Tan.armCallback: WcSetValueCB( ^^drawing.background: Tan ) X*Thistle.armCallback: WcSetValueCB( ^^drawing.background: Thistle ) X*Transparent.armCallback: WcSetValueCB( ^^drawing.background: Transparent ) X*Turquoise.armCallback: WcSetValueCB( ^^drawing.background: Turquoise ) X*Violet.armCallback: WcSetValueCB( ^^drawing.background: Violet ) X*VioletRed.armCallback: WcSetValueCB( ^^drawing.background: VioletRed ) X*Wheat.armCallback: WcSetValueCB( ^^drawing.background: Wheat) X*White.armCallback: WcSetValueCB( ^^drawing.background: White) X*Yellow.armCallback: WcSetValueCB( ^^drawing.background: Yellow) X*YellowGreen.armCallback: WcSetValueCB( ^^drawing.background: YellowGreen) +FUNKY+STUFF+ echo '-rw-rw-r-- 1 david 10524 Aug 6 09:36 M9.Colors (as sent)' chmod u=rw,g=rw,o=r M9.Colors ls -l M9.Colors echo x - MD sed 's/^X//' > MD <<'+FUNKY+STUFF+' X# X# Motif Widgets for Multi-Display Demo X# X XMDmotif.wcChildren: rc X X*rc.wcClassName: XmRowColumn X*rc.wcChildren: exit, close, bugs, snap, crackle, pop X X*exit.wcConstructor: XmCreatePushButton X*exit.activateCallback: WcExitCB X X*close.wcConstructor: XmCreatePushButton X*close.activateCallback: KillWidgetTreeOnDisplay X X*bugs.wcConstructor: XmCreatePushButton X*bugs.activateCallback: NewWidgetTreeOnDisplay( bugs:0.0 ) X X*snap.wcConstructor: XmCreatePushButton X*snap.activateCallback: NewWidgetTreeOnDisplay( snap:0.0 ) X X*crackle.wcConstructor: XmCreatePushButton X*crackle.activateCallback: NewWidgetTreeOnDisplay( crackle:0.0 ) X X*pop.wcConstructor: XmCreatePushButton X*pop.activateCallback: NewWidgetTreeOnDisplay( pop:0.0 ) X X# X# Athena Widgets for Multi-Display Demo X# X XMDathena.wcChildren: table X X*table.wcClassName: Table X*table.wcChildren: aexit, aclose, abugs, asnap, acrackle, apop X# child c r cs rs opts X*table.layout: aexit 0 0 1 1 ;\ X aclose 0 1 1 1 ;\ X abugs 0 2 1 1 ;\ X asnap 0 3 1 1 ;\ X acrackle 0 4 1 1 ;\ X apop 0 5 1 1 X X*aexit.wcClass: commandWidgetClass X*aexit.label: exit X*aexit.callback: WcExitCB X X*aclose.wcClass: commandWidgetClass X*aclose.label: close X*aclose.callback: KillWidgetTreeOnDisplay X X*abugs.wcClass: commandWidgetClass X*abugs.label: bugs X*abugs.callback: NewWidgetTreeOnDisplay( bugs:0.0 ) X X*asnap.wcClass: commandWidgetClass X*asnap.label: snap X*asnap.callback: NewWidgetTreeOnDisplay( snap:0.0 ) X X*acrackle.wcClass: commandWidgetClass X*acrackle.label: crackle X*acrackle.callback: NewWidgetTreeOnDisplay( crackle:0.0 ) X X*apop.wcClass: commandWidgetClass X*apop.label: pop X*apop.callback: NewWidgetTreeOnDisplay( pop:0.0 ) X +FUNKY+STUFF+ echo '-rw-rw-r-- 1 david 1703 Aug 6 09:36 MD (as sent)' chmod u=rw,g=rw,o=r MD ls -l MD exit 0 dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only. -- dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.