v10i053: wcl -- Widget Creation Library, Part05/11

David E. Smyth david at jpl-devvax.jpl.nasa.gov
Tue Dec 18 13:03:26 AEST 1990


Submitted-by: david at 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 at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.
--
dan
----------------------------------------------------
O'Reilly && Associates   argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.



More information about the Comp.sources.x mailing list