home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume8 / wcl / part02 < prev    next >
Encoding:
Internet Message Format  |  1990-07-06  |  69.8 KB

  1. Path: uunet!mailrus!cs.utexas.edu!sun-barr!newstop!sun!devvax.Jpl.Nasa.Gov
  2. From: david@devvax.Jpl.Nasa.Gov (David E. Smyth)
  3. Newsgroups: comp.sources.x
  4. Subject: v08i032: wcl - Widget Creation Library, Part02/06
  5. Message-ID: <138458@sun.Eng.Sun.COM>
  6. Date: 6 Jul 90 07:40:37 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1934
  9. Approved: argv@sun.com
  10.  
  11. Submitted-by: david@devvax.Jpl.Nasa.Gov (David E. Smyth)
  12. Posting-number: Volume 8, Issue 32
  13. Archive-name: wcl/part02
  14.  
  15. # to unbundle, "sh" this file -- DO NOT use csh
  16. #  SHAR archive format.  Archive created Tue Jul 3 16:48:32 PDT 1990
  17. echo x - Mri.c
  18. sed 's/^X//' > Mri.c <<'+FUNKY+STUFF+'
  19. X/*
  20. X** Copyright (c) 1990 David E. Smyth
  21. X**
  22. X** Redistribution and use in source and binary forms are permitted
  23. X** provided that the above copyright notice and this paragraph are
  24. X** duplicated in all such forms and that any documentation, advertising
  25. X** materials, and other materials related to such distribution and use
  26. X** acknowledge that the software was developed by David E. Smyth.  The
  27. X** name of David E. Smyth may not be used to endorse or promote products
  28. X** derived from this software without specific prior written permission.
  29. X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  30. X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  31. X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  32. X**
  33. X*/
  34. X
  35. X/******************************************************************************
  36. X**
  37. X** SCCS_data: @(#)Mri.c 1.0 ( 19 June 1990 )
  38. X**
  39. X** Description:    This file contains main() for a Motif Resource Interpreter
  40. X**        which allows prototype interfaces to be built from
  41. X**        resource files.  The Widget Creation library is used.
  42. X**
  43. X**        Besides the Motif widgets, Mri also knows about Table
  44. X**        widgets, simply because they are so dang useful!
  45. X**
  46. X** Notes:    This program uses the Xrm (X resource management) database
  47. X**        for widget tree definition and management.  This program
  48. X**        is dependent on the Motif widget set only because the
  49. X**        Motif classes and constructors are registered, which
  50. X**        causes the Motif libs to be linked in.  Someday I'll
  51. X**        get a shared lib version of Motif and the Athena widgets,
  52. X**        and even the OpenLook widget set, and then there will
  53. X**        be no reason that widgets could not be mixed and matched.
  54. X**        Doing that without shared libs makes for a HUGE executable.
  55. X**
  56. X******************************************************************************/
  57. X
  58. X/******************************************************************************
  59. X**   Include_files.
  60. X******************************************************************************/
  61. X
  62. X#include <Xm/Xm.h>
  63. X#include <ctype.h>
  64. X#include <WidgetCreate.h>
  65. X
  66. X#include <Table.h>
  67. X
  68. X/******************************************************************************
  69. X**  Private Functions
  70. X******************************************************************************/
  71. X
  72. Xextern void MriRegisterMotif();
  73. X
  74. Xstatic void RegisterTable ( app )
  75. X    XtAppContext app;
  76. X{
  77. X#define RCN( name, class ) WcRegisterClassName ( app, name, class );
  78. X#define RCP( name, class ) WcRegisterClassPtr  ( app, name, class );
  79. X
  80. X    /* -- register widget classes */
  81. X    RCN( "Table",                       tableWidgetClass                );
  82. X    RCP( "tableWidgetClass",            tableWidgetClass                );
  83. X
  84. X#undef  RCN
  85. X#undef  RCP
  86. X}
  87. X
  88. X/******************************************************************************
  89. X*   MAIN function
  90. X******************************************************************************/
  91. X
  92. Xmain ( argc, argv )
  93. X    int argc;
  94. X    char* argv[];
  95. X{   
  96. X    char*        appClass;
  97. X    XtAppContext app;
  98. X    Widget       appShell;
  99. X
  100. X    appClass = (char*) XtMalloc ( strlen ( argv[0] ) + 1 );
  101. X    strcpy (appClass, argv[0]);
  102. X    /* initialize first letter to make class, or first two if
  103. X    ** first is already capitalized, or don't worry about it.
  104. X    */
  105. X    if (islower(appClass[0]))
  106. X    appClass[0] = toupper(appClass[0]);
  107. X    else if (islower(appClass[1]))
  108. X        appClass[1] = toupper(appClass[1]);
  109. X    
  110. X    /*  -- Intialize Toolkit creating the application shell */
  111. X    appShell = XtInitialize ( 
  112. X    argv[0], appClass,        /* app name and class */
  113. X    NULL, 0,             /* description of cmd line options */
  114. X    &argc, argv 
  115. X    );
  116. X    app = XtWidgetToApplicationContext(appShell);
  117. X
  118. X    /*  -- Register all application specific callbacks and widget classes */
  119. X    RegisterTable ( app );
  120. X
  121. X    /*  -- Register all Motif classes and constructors */
  122. X    MriRegisterMotif ( app );
  123. X
  124. X    /*  -- Create widget tree below toplevel shell using Xrm database */
  125. X    WcWidgetCreation ( appShell );
  126. X
  127. X    /*  -- Realize the widget tree and enter the main application loop */
  128. X    XtRealizeWidget ( appShell );
  129. X    XtMainLoop ( );
  130. X}
  131. +FUNKY+STUFF+
  132. echo '-rw-r--r--  1 david        4092 Jun 28 09:13 Mri.c    (as sent)'
  133. chmod u=rw,g=r,o=r Mri.c
  134. ls -l Mri.c
  135. echo x - Mri01.HelloWorld
  136. sed 's/^X//' > Mri01.HelloWorld <<'+FUNKY+STUFF+'
  137. X#ifdef Xrm_COMMENT
  138. X----------------------------------------------------------------------
  139. X
  140. XThis resource file represents a very basic application: a single
  141. Xbutton which, when pressed, causes the application to exit.
  142. X
  143. XNote that you can use familiar constructs such as #ifdef-endif
  144. Xpairs, and C style /* comments */.  `#' as a first character
  145. Xalso works, because it really indicates a cpp directive, and
  146. Xcpp quitely ignores (does not pass on) any unrecognized directives.
  147. X
  148. X----------------------------------------------------------------------
  149. X#endif
  150. X
  151. XMri.wcChildren:        push
  152. X
  153. X*push.wcClass:        xmPushButtonWidgetClass
  154. X*push.labelString:    Hello World
  155. X*push.activateCallback:    WcExitCB(1)
  156. +FUNKY+STUFF+
  157. echo '-rw-r--r--  1 david         680 Jun 28 09:13 Mri01.HelloWorld    (as sent)'
  158. chmod u=rw,g=r,o=r Mri01.HelloWorld
  159. ls -l Mri01.HelloWorld
  160. echo x - Mri02.GoodbyeWorld
  161. sed 's/^X//' > Mri02.GoodbyeWorld <<'+FUNKY+STUFF+'
  162. X#ifdef Xrm_COMMENT
  163. X----------------------------------------------------------------------
  164. X
  165. XThis resource file represents a very basic application: a single button
  166. Xwhich changes its own behavior and label.  The first time it is
  167. Xpressed, it changes its label and its activate callback.  The second
  168. Xtime it is pressed, it causes the application to exit.
  169. X
  170. XThis example uses WcSetValueCB().  The argument looks exactly like a
  171. Xresource specification.  The WcSetValueCB() callback actually does
  172. Xan XtSetValue to set the value in the target (named) widget.
  173. X
  174. XNote that if there are multiple callbacks being invoked in a callback
  175. Xlist, as in the button's activateCallback resource below, then each
  176. Xspecification is separated by a comma.  In the below example, the
  177. Xspecifications are also put on separate lines (the `\' escapes the
  178. Xnewline in resource files just like in C), with additional whitepspace
  179. X(tabs and blanks) for stylistic reasons.
  180. X
  181. X----------------------------------------------------------------------
  182. X#endif
  183. X
  184. XMri.wcChildren:        push
  185. X
  186. X*push.wcClass:        xmPushButtonWidgetClass
  187. X*push.labelString:    Hello World
  188. X*push.activateCallback: WcSetValueCB( *push.activateCallback: WcExitCB(1) ), \
  189. X            WcSetValueCB( *push.labelString:      Goodbye! )
  190. +FUNKY+STUFF+
  191. echo '-rw-r--r--  1 david        1238 Jun 28 09:13 Mri02.GoodbyeWorld    (as sent)'
  192. chmod u=rw,g=r,o=r Mri02.GoodbyeWorld
  193. ls -l Mri02.GoodbyeWorld
  194. echo x - Mri03.Pulldowns
  195. sed 's/^X//' > Mri03.Pulldowns <<'+FUNKY+STUFF+'
  196. X#ifdef Xrm_COMMENT
  197. X----------------------------------------------------------------------
  198. X
  199. XOrdering:
  200. X--------
  201. X
  202. XThe order of the lines in the resource file are completely stylistic: a
  203. Xmatter of taste.  The ordering is lost when the resources are loaded
  204. Xinto the Xrm database, and the Widget Creation library works only from
  205. Xthe database, not directy from the resource files.
  206. X
  207. XNote that the ordering of the names within the wcChildren resources is
  208. Xsignificant: it is the order the children will be created, from left to
  209. Xright, depth first.  One needs to consider this in several cases:
  210. Xpulldown menus are a good example.
  211. X
  212. XPulldown Menus
  213. X--------------
  214. X
  215. XThe pulldowns can be created before or after their activating cascade
  216. Xbutton: as an example, lets look at the difference between the
  217. XmenuBar.file and menuBar.fileMenu specifications versus the
  218. XmenuBar.help and menuBar.helpMenu specifications.  
  219. X
  220. XThe *menuBar.wcChildren resource specifies that the first of its
  221. Xchildren to be created is `file' (which has no children), then
  222. X`fileMenu' and all its children, then `helpMenu' and all its children,
  223. Xand finally `help'.
  224. X
  225. X    *menuBar.wcChildren:    file, fileMenu, helpMenu, help
  226. X
  227. XThe `fileMenu', being created after the `file' cascade, sets the subMenuId
  228. Xresource on the `file' cascade when it is created:
  229. X
  230. X    *fileMenu.wcCallback:    WcSetValueCB(*file.subMenuId: this)
  231. X
  232. XThe `help' cascade is created after the `helpMenu', so it can specify the
  233. X`helpMenu' as its subMenuId directly:
  234. X
  235. X    *help.subMenuId:        *helpMenu
  236. X
  237. XNote that the pulldown menus are NOT managed when they are created. They
  238. Xare automagically managed by the cascade buttons.  
  239. X
  240. XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
  241. XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
  242. Xinstead one must leave the Xm off the front.  Also, the values are
  243. Xcase insensitive.
  244. X
  245. XMultiple Level Cascading Menus
  246. X------------------------------
  247. X
  248. XThe saveAsMenu pulldown connected to the saveAs button demonstrates 
  249. Xthis.  See the discussion below.
  250. X
  251. X----------------------------------------------------------------------
  252. X#endif
  253. X
  254. X#*wcTrace:        True
  255. X
  256. XMri.wcChildren:        menuBar
  257. X
  258. X*menuBar.wcConstructor:    XmCreateMenuBar
  259. X*menuBar.wcChildren:    file, fileMenu, helpMenu, help
  260. X
  261. X*file.wcConstructor:    XmCreateCascadeButton
  262. X*file.labelString:    File
  263. X*file.mnemonic:        F
  264. X
  265. X*fileMenu.wcConstructor: XmCreatePulldownMenu
  266. X*fileMenu.wcManaged:     False
  267. X*fileMenu.wcCallback:     WcSetValueCB(*file.subMenuId: this)
  268. X*fileMenu.wcChildren:    load, sep1, save, saveAsMenu, saveAs, sep2, quit
  269. X
  270. X*helpMenu.wcConstructor: XmCreatePulldownMenu
  271. X*helpMenu.wcManaged:     False
  272. X*helpMenu.wcChildren:    mbHelp, cpHelp, daHelp, tHelp
  273. X
  274. X*helpMenu.mbHelp.wcConstructor:    XmCreateCascadeButton
  275. X*helpMenu.mbHelp.labelString:    on Menu Bar
  276. X*helpMenu.mbHelp.mnemonic:    M
  277. X
  278. X*helpMenu.cpHelp.wcConstructor:    XmCreateCascadeButton
  279. X*helpMenu.cpHelp.labelString:    on Control Panel
  280. X*helpMenu.cpHelp.mnemonic:    C
  281. X
  282. X*helpMenu.daHelp.wcConstructor:    XmCreateCascadeButton
  283. X*helpMenu.daHelp.labelString:    on Drawing Area
  284. X*helpMenu.daHelp.mnemonic:    D
  285. X
  286. X*helpMenu.tHelp.wcConstructor:    XmCreateCascadeButton
  287. X*helpMenu.tHelp.labelString:    on Text Area
  288. X*helpMenu.tHelp.mnemonic:    T
  289. X
  290. X*help.wcConstructor:    XmCreateCascadeButton
  291. X*help.subMenuId:    *helpMenu
  292. X*help.labelString:    Help
  293. X*help.mnemonic:        H
  294. X
  295. X*load.wcConstructor:    XmCreateCascadeButton
  296. X*load.labelString:    Load ...
  297. X*load.mnemonic:        L
  298. X
  299. X*sep1.wcConstructor:    XmCreateSeparator
  300. X*sep1.separatorType:    Shadow_Etched_In
  301. X
  302. X*save.wcConstructor:    XmCreateCascadeButton
  303. X*save.labelString:    Save
  304. X*save.mnemonic:        S
  305. X
  306. X#
  307. X# The saveAsMenu has already been created. 
  308. X# It is specified at the bottom of this file.
  309. X#
  310. X*saveAs.wcConstructor:    XmCreateCascadeButton
  311. X*saveAs.labelString:    Save As
  312. X*saveAs.mnemonic:    A
  313. X*saveAs.subMenuId:    *saveAsMenu
  314. X
  315. X*sep2.wcConstructor:    XmCreateSeparator
  316. X*sep2.separatorType:    DOUBLE_DASHED_LINE
  317. X
  318. X*quit.wcConstructor:    XmCreateCascadeButton
  319. X*quit.labelString:    Quit
  320. X*quit.mnemonic:        Q
  321. X*quit.activateCallback:    WcExitCB
  322. X
  323. X#ifdef Xrm_COMMENT
  324. X----------------------------------------------------------------------
  325. X
  326. XMore on Callback Functions
  327. X--------------------------
  328. X
  329. XOne does not strictly need to specify any arguments to callbacks, nor
  330. Xthe parenthesis.  For example:
  331. X
  332. X    *quit.activateCallback:     WcExitCB
  333. X
  334. XIn this situation, a NULL string is passed to the callback function as
  335. Xclient data.  WcExitCB invokes exit(0) when it gets a NULL argument.
  336. X
  337. XIt is up to the callback to decide the appropriate action when a NULL
  338. Xstring is received as client data.  The Wc library does guarantee that
  339. Xthe callback will receive a NULL string (the first character is a
  340. X'\0'), and not a null pointer (pointer == 0).
  341. X
  342. XMultiple Level Cascading Menus
  343. X------------------------------
  344. X
  345. X----------------------------------------------------------------------
  346. X#endif
  347. X
  348. X#
  349. X# All of the nested menus in this example have two buttons:
  350. X# Go and More to come.  Note that we must be specific about
  351. X# which pulldown menu gets tied to each one!
  352. X#
  353. X
  354. X*go.wcConstructor:    XmCreateCascadeButton
  355. X*go.labelString:    Go
  356. X
  357. X*more.wcConstructor:    XmCreateCascadeButton
  358. X*more.labelString:    More to come
  359. X
  360. X*saveAsMenu.wcConstructor:    XmCreatePulldownMenu
  361. X*saveAsMenu.wcManaged:        False
  362. X*saveAsMenu.wcChildren:        level3, go, more
  363. X*saveAsMenu.more.subMenuId:    *level3
  364. X
  365. X*level3.wcConstructor:    XmCreatePulldownMenu
  366. X*level3.wcManaged:    False
  367. X*level3.wcChildren:    level4, go, more
  368. X*level3.more.subMenuId:    *level4
  369. X
  370. X*level4.wcConstructor:    XmCreatePulldownMenu
  371. X*level4.wcManaged:    False
  372. X*level4.wcChildren:    level5, go, more
  373. X*level4.more.subMenuId:    *level5
  374. X
  375. X*level5.wcConstructor:    XmCreatePulldownMenu
  376. X*level5.wcManaged:    False
  377. X*level5.wcChildren:    level6, go, more
  378. X*level5.more.subMenuId:    *level6
  379. X
  380. X*level6.wcConstructor:    XmCreatePulldownMenu
  381. X*level6.wcManaged:    False
  382. X*level6.wcChildren:    level7, go, more
  383. X*level6.more.subMenuId:    *level7
  384. X
  385. X*level7.wcConstructor:    XmCreatePulldownMenu
  386. X*level7.wcManaged:    False
  387. X*level7.wcChildren:    go, more
  388. X*level7.go.labelString:        You could go on forever like this...
  389. X*level7.more.labelString:    But please don't!
  390. +FUNKY+STUFF+
  391. echo '-rw-r--r--  1 david        6014 Jun 28 09:13 Mri03.Pulldowns    (as sent)'
  392. chmod u=rw,g=r,o=r Mri03.Pulldowns
  393. ls -l Mri03.Pulldowns
  394. echo x - Mri04.OptMenu
  395. sed 's/^X//' > Mri04.OptMenu <<'+FUNKY+STUFF+'
  396. X#ifdef Xrm_COMMENT
  397. X----------------------------------------------------------------------
  398. X
  399. XOption Menus are a topic which deserves special consideration, because
  400. Xthey are abit different from what you might expect.  As the Pulldown
  401. Xexample resource file demonstrates, one may create a cascade button
  402. Xbefore or after the menu which is controlled by the cascade.  One might
  403. Xreasonably assume that the same is true for option menus.
  404. X
  405. XUnfortunately, this is an incorrect assumption.  One MUST first create
  406. Xthe pulldown menu which displays the available options, and THEN invoke
  407. Xthe convenience function XmCreateOptionMenu.  This may or may not be a
  408. Xbug, depending on your point of view.
  409. X
  410. XThe widget called an OptionMenu is really a row column with two managed
  411. Xchildren: a label, and a cascade.  The significant issue is the size of
  412. Xthe cascade: it is forced to be wide enough for the longest selection
  413. Xon the pulldown menu.  One cannot after the fact set the subMenuId on
  414. Xthe cascade, because the cascade does not generally size itself based
  415. Xon the subMenu elements: cascade size themselves based on their label.
  416. X
  417. XOne might assume that the RowColumn created by XmCreateOptionMenu would
  418. Xhave a special set_values() method which does the appropriate thing
  419. Xwhen subMenuId is set, but this is clearly not the case: the
  420. Xset_values() mentof does something, but it certainly is not
  421. Xappropriate.  Expect a core dump if you try it.
  422. X
  423. XSo, if you want to use option menus, do it as shown in this example:
  424. Xfirst create the pulldown menu using XmCreatePulldownMenu, then create
  425. Xthe `OptionMenu' using XmCreateOptionMenu.  The order of creation is
  426. Xdetermined by the order of the widget names in the parent's wcChildren
  427. Xresource:
  428. X
  429. X    *com.wcChildren:        doMenu, undoMenu, doOption, undoOption
  430. X
  431. XOh: a troble shooting tip: if you use XmCreateOptionMenu and the
  432. Xcascade button's label is `<optMenName>_cascadeBtn' then you do not
  433. Xhave the subMenuId set properly on the option menu.  Check for spelling
  434. Xon the resource name, on the resource value, and possibly use
  435. X`*wcTrace: True' to make sure you give the right name for the pulldown
  436. Xmenu.
  437. X
  438. XAlso, remember to make the menu's initially unmanaged by setting
  439. XwcManaged: False on each menu.  You can't do this globally,
  440. Xunfortunately, because there is no actual Motif widget class named
  441. XXmPulldownMenu.  Sigh.
  442. X
  443. X----------------------------------------------------------------------
  444. X#endif
  445. X
  446. X#*wcTrace:        True
  447. X
  448. XMri.wcChildren:        com
  449. X
  450. X*com.wcClassName: XmRowColumn
  451. X*com.wcChildren:  quit, doMenu, undoMenu, nextMenu, doOption, undoOption, next
  452. X
  453. X*quit.wcClassName:        XmPushButton
  454. X*quit.labelString:        Quit
  455. X*quit.activateCallback:        WcExitCB
  456. X
  457. X*doOption.wcConstructor:    XmCreateOptionMenu
  458. X*doOption.labelString:        Do It
  459. X*doOption.subMenuId:        *doMenu
  460. X
  461. X*undoOption.wcConstructor:    XmCreateOptionMenu
  462. X*undoOption.labelString:    Undo It
  463. X*undoOption.subMenuId:        *undoMenu
  464. X
  465. X*next.wcConstructor:        XmCreateOptionMenu
  466. X*next.subMenuId:        *nextMenu
  467. X
  468. X*doMenu.wcConstructor:        XmCreatePulldownMenu
  469. X*doMenu.wcManaged:        False
  470. X*doMenu.wcChildren:        opt1, opt2
  471. X
  472. X*undoMenu.wcConstructor:    XmCreatePulldownMenu
  473. X*undoMenu.wcManaged:        False
  474. X*undoMenu.wcChildren:        opt1, opt2, opt3
  475. X
  476. X*nextMenu.wcConstructor:    XmCreatePulldownMenu
  477. X*nextMenu.wcManaged:        False
  478. X*nextMenu.wcChildren:        opt2, opt1, opt2, opt3, opt1
  479. X
  480. X/*
  481. X** Note that the specification for buttons opt1 and opt2 are actually used
  482. X** twice each: both menus have children named opt1 and opt2, so the
  483. X** children of both menus will have these same resources, and thus, will
  484. X** use the following resource specifications:
  485. X*/
  486. X
  487. X*opt1.wcClassName:    XmPushButton
  488. X*opt1.labelString:    Now
  489. X
  490. X*opt2.wcClassName:    XmPushButton
  491. X*opt2.labelString:    Wat's the rush!!
  492. X
  493. X*opt3.wcClassName:    XmPushButton
  494. X*opt3.labelString:    My Mistake...
  495. +FUNKY+STUFF+
  496. echo '-rw-r--r--  1 david        3755 Jul  3 16:33 Mri04.OptMenu    (as sent)'
  497. chmod u=rw,g=r,o=r Mri04.OptMenu
  498. ls -l Mri04.OptMenu
  499. echo x - Mri05.Dialogs
  500. sed 's/^X//' > Mri05.Dialogs <<'+FUNKY+STUFF+'
  501. X#ifdef Xrm_COMMENT
  502. X----------------------------------------------------------------------
  503. X
  504. XDialogs
  505. X-------
  506. X
  507. XMotif constructors often introduce extra widgets.  File Selection
  508. XDialogs are a good example.  In this example, the `Load' and `Save As'
  509. Xbuttons on the `fileMenu' cause File Selection Dialogs to be managed
  510. X(popped-up).  Note the names required:
  511. X
  512. X    *load.activateCallback:    WcManageCB( *loadSelect.loadSelect )
  513. X
  514. XThis seemingly strange naming can be detected using the wcTrace
  515. Xresource.  The XmCreateFileSelectionDialog constructor creates a dialog
  516. Xshell named `loadSelect' and a file selection box which is also named
  517. X`loadSelect'.  The file selection box is a child of the dialog shell.  In
  518. Xorder to see the file selection box, it must be managed, not just the
  519. Xdialog shell.  A common error is the following:
  520. X
  521. X    *load.activateCallback:    WcManageCB( *loadSelect )
  522. X
  523. XThis simply causes the dialog shell to pop-up, but it will be empty: its
  524. Xchild, the file selection box, is still not managed and so will not be
  525. Xvisible.
  526. X
  527. X----------------------------------------------------------------------
  528. X#endif
  529. X
  530. X#*wcTrace:        True
  531. XMri.wcChildren:        menuBar, loadSelect, saveSelect
  532. X
  533. X*loadSelect.wcConstructor:    XmCreateFileSelectionDialog
  534. X*loadSelect.wcManaged:        False
  535. X*loadSelect.wcTrace:        True
  536. X*loadSelect.cancelCallback:    WcUnmanageCB(this)
  537. X*loadSelect.okCallback:        WcUnmanageCB(this)
  538. X*saveSelect.wcConstructor:    XmCreateFileSelectionDialog
  539. X*saveSelect.wcManaged:        False
  540. X*saveSelect.cancelCallback:    WcUnmanageCB(this)
  541. X*saveSelect.okCallback:        WcUnmanageCB(this)
  542. X
  543. X*load.activateCallback:        WcManageCB( *loadSelect.loadSelect )
  544. X*saveAs.activateCallback:    WcManageCB(*saveSelect.saveSelect)
  545. X
  546. X#ifdef Xrm_COMMENT
  547. X----------------------------------------------------------------------
  548. X
  549. XBelow are the resources for the menuBar and all its children.
  550. X
  551. XPulldown Menus
  552. X--------------
  553. X
  554. XThe pulldowns can be created before or after their activating cascade
  555. Xbutton: as an example, lets look at the difference between the
  556. XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
  557. XmenuBar.helpMenu specifications.  The *menuBar.wcChildren resource
  558. Xspecifies that the first of its children to be created is file (which
  559. Xhas no children), then fileMenu and all its children, then helpMenu and
  560. Xall its children, and finally help.
  561. X
  562. X    *menuBar.wcChildren:    file, fileMenu, helpMenu, help
  563. X
  564. XThe fileMenu, being created after the file cascade, sets the subMenuId
  565. Xresource on the file cascade when it is created:
  566. X
  567. X    *fileMenu.wcCallback:    WcSetValueCB(*file.subMenuId: this)
  568. X
  569. XThe help cascade is created after the helpMenu, so it can specify the
  570. XhelpMenu as its subMenuId directly:
  571. X
  572. X    *help.subMenuId:        *helpMenu
  573. X
  574. XNote that the pulldown menus are NOT managed when they are created. They
  575. Xare automagically managed by the cascade buttons.  
  576. X
  577. XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
  578. XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
  579. Xinstead one must leave the Xm off the front.  Also, the values are
  580. Xcase insensitive.
  581. X
  582. X----------------------------------------------------------------------
  583. X#endif
  584. X
  585. X*menuBar.wcConstructor:    XmCreateMenuBar
  586. X*menuBar.wcChildren:    file, fileMenu, helpMenu, help
  587. X
  588. X*file.wcConstructor:    XmCreateCascadeButton
  589. X*file.labelString:    File
  590. X*file.mnemonic:        F
  591. X
  592. X*fileMenu.wcConstructor: XmCreatePulldownMenu
  593. X*fileMenu.wcManaged:     False
  594. X*fileMenu.wcCallback:     WcSetValueCB(*file.subMenuId: this)
  595. X*fileMenu.wcChildren:    load, sep1, save, saveAs, sep2, quit
  596. X
  597. X*helpMenu.wcConstructor: XmCreatePulldownMenu
  598. X*helpMenu.wcManaged:     False
  599. X*helpMenu.wcChildren:    mbHelp, cpHelp, daHelp, tHelp
  600. X
  601. X*helpMenu.mbHelp.wcConstructor:    XmCreateCascadeButton
  602. X*helpMenu.mbHelp.labelString:    on Menu Bar
  603. X*helpMenu.mbHelp.mnemonic:    M
  604. X
  605. X*helpMenu.cpHelp.wcConstructor:    XmCreateCascadeButton
  606. X*helpMenu.cpHelp.labelString:    on Control Panel
  607. X*helpMenu.cpHelp.mnemonic:    C
  608. X
  609. X*helpMenu.daHelp.wcConstructor:    XmCreateCascadeButton
  610. X*helpMenu.daHelp.labelString:    on Drawing Area
  611. X*helpMenu.daHelp.mnemonic:    D
  612. X
  613. X*helpMenu.tHelp.wcConstructor:    XmCreateCascadeButton
  614. X*helpMenu.tHelp.labelString:    on Text Area
  615. X*helpMenu.tHelp.mnemonic:    T
  616. X
  617. X*help.wcConstructor:    XmCreateCascadeButton
  618. X*help.subMenuId:    *helpMenu
  619. X*help.labelString:    Help
  620. X*help.mnemonic:        H
  621. X
  622. X*load.wcConstructor:    XmCreateCascadeButton
  623. X*load.labelString:    Load ...
  624. X*load.mnemonic:        L
  625. X
  626. X*sep1.wcConstructor:    XmCreateSeparator
  627. X*sep1.separatorType:    Shadow_Etched_In
  628. X
  629. X*save.wcConstructor:    XmCreateCascadeButton
  630. X*save.labelString:    Save
  631. X*save.mnemonic:        S
  632. X
  633. X*saveAs.wcConstructor:    XmCreateCascadeButton
  634. X*saveAs.labelString:    Save As ...
  635. X*saveAs.mnemonic:    A
  636. X
  637. X*sep2.wcConstructor:    XmCreateSeparator
  638. X*sep2.separatorType:    DOUBLE_DASHED_LINE
  639. X
  640. X*quit.wcConstructor:    XmCreateCascadeButton
  641. X*quit.labelString:    Quit
  642. X*quit.mnemonic:        Q
  643. X*quit.activateCallback:    WcExitCB
  644. +FUNKY+STUFF+
  645. echo '-rw-r--r--  1 david        4803 Jun 28 09:13 Mri05.Dialogs    (as sent)'
  646. chmod u=rw,g=r,o=r Mri05.Dialogs
  647. ls -l Mri05.Dialogs
  648. echo x - Mri06.MainWindow
  649. sed 's/^X//' > Mri06.MainWindow <<'+FUNKY+STUFF+'
  650. X#ifdef Xrm_COMMENT
  651. X----------------------------------------------------------------------
  652. X
  653. XMain Window
  654. X-----------
  655. X
  656. XMotif's MainWindow widget type supports one of the classic "looks"
  657. Xof a window application, and of the Motif Style Guide in particular.
  658. X
  659. X----------------------------------------------------------------------
  660. X#endif
  661. X
  662. XMri.wcChildren:        main, loadSelect, saveSelect
  663. X
  664. X*main.wcConstructor:    XmCreateMainWindow
  665. X*main.wcChildren:    menuBar, commandWindow, workWindow, vscroll
  666. X
  667. X*menuBar.shadowThickness:    3
  668. X*XmFrame.shadowThickness:    3
  669. X*XmFrame.shadowType:        SHADOW_OUT
  670. X
  671. X#ifdef Xrm_COMMENT
  672. X----------------------------------------------------------------------
  673. X
  674. XDialogs
  675. X-------
  676. X
  677. XMotif constructors often introduce extra widgets.  File Selection
  678. XDialogs are a good example.  In this example, the `Load' and `Save As'
  679. Xbuttons on the `fileMenu' cause File Selection Dialogs to be managed
  680. X(popped-up).  Note the names required:
  681. X
  682. X    *load.activateCallback:    WcManageCB( *loadSelect.loadSelect )
  683. X
  684. XThis seemingly strange naming can be detected using the wcTrace
  685. Xresource.  The XmCreateFileSelectionDialog constructor creates a dialog
  686. Xshell named `loadSelect' and a file selection box which is also named
  687. X`loadSelect'.  The file selection box is a child of the dialog shell.
  688. XIn order to see the file selection box, it must be managed, not just
  689. Xthe dialog shell.  A common error is the following:
  690. X
  691. X    *load.activateCallback:    WcManageCB( *loadSelect )
  692. X
  693. XThis simply causes the dialog shell to pop-up, but it will be empty: its
  694. Xchild, the file selection box, is still not managed and so will not be
  695. Xvisible.
  696. X
  697. XMore on Callbacks
  698. X-----------------
  699. X
  700. XAny callback which accepts a widget name as client data can use the Wc 
  701. Xlibrary function WcFullNameToWidget() to convert the string into a
  702. Xwidget id.  A special value recognized by this function is `this' 
  703. Xwhich is converted to be the widget id of the widget causing the
  704. Xcallback.  For example,
  705. X
  706. X    *saveSelect.cancelCallback:     WcUnmanageCB(this)
  707. X
  708. Xcauses the saveSelect dialog widget to become unmanaged, and
  709. X
  710. X    *loadSelect.okCallback:         WcUnmanageCB(this)
  711. X
  712. Xcauses the loadSelect dialog widget to become unmanaged.
  713. X
  714. X----------------------------------------------------------------------
  715. X#endif
  716. X
  717. X*loadSelect.wcConstructor:    XmCreateFileSelectionDialog
  718. X*loadSelect.wcManaged:        False
  719. X*loadSelect.cancelCallback:    WcUnmanageCB(this)
  720. X*loadSelect.okCallback:        WcUnmanageCB(this)
  721. X*saveSelect.wcConstructor:    XmCreateFileSelectionDialog
  722. X*saveSelect.wcManaged:        False
  723. X*saveSelect.cancelCallback:    WcUnmanageCB(this)
  724. X*saveSelect.okCallback:        WcUnmanageCB(this)
  725. X
  726. X*load.activateCallback:        WcManageCB( *loadSelect.loadSelect )
  727. X*saveAs.activateCallback:    WcManageCB(*saveSelect.saveSelect)
  728. X
  729. X#ifdef Xrm_COMMENT
  730. X----------------------------------------------------------------------
  731. X
  732. XBelow are the resources for the menuBar and all its children.  This
  733. XmenuBar is a child of a Motif MainWindow, and so must register itself
  734. Xwith the MainWindow (named *main).
  735. X
  736. XPulldown Menus
  737. X--------------
  738. X
  739. XThe pulldowns can be created before or after their activating cascade
  740. Xbutton: as an example, lets look at the difference between the
  741. XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
  742. XmenuBar.helpMenu specifications.  The *menuBar.wcChildren resource
  743. Xspecifies that the first of its children to be created is file (which
  744. Xhas no children), then fileMenu and all its children, then helpMenu and
  745. Xall its children, and finally help.
  746. X
  747. X    *menuBar.wcChildren:    file, fileMenu, helpMenu, help
  748. X
  749. XThe fileMenu, being created after the file cascade, sets the subMenuId
  750. Xresource on the file cascade when it is created:
  751. X
  752. X    *fileMenu.wcCallback:    WcSetValueCB(*file.subMenuId: this)
  753. X
  754. XThe help cascade is created after the helpMenu, so it can specify the
  755. XhelpMenu as its subMenuId directly:
  756. X
  757. X    *help.subMenuId:        *helpMenu
  758. X
  759. XNote that the pulldown menus are NOT managed when they are created. They
  760. Xare automagically managed by the cascade buttons.  
  761. X
  762. XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
  763. XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
  764. Xinstead one must leave the Xm off the front.  Also, the values are
  765. Xcase insensitive.
  766. X
  767. X----------------------------------------------------------------------
  768. X#endif
  769. X
  770. X*menuBar.wcConstructor:    XmCreateMenuBar
  771. X*menuBar.wcChildren:    file, fileMenu, viewMenu, view, helpMenu, help
  772. X*menuBar.wcCallback:    WcSetValueCB( *main.menuBar: this )
  773. X
  774. X*file.wcConstructor:    XmCreateCascadeButton
  775. X*file.labelString:    File
  776. X*file.mnemonic:        F
  777. X
  778. X*fileMenu.wcConstructor: XmCreatePulldownMenu
  779. X*fileMenu.wcManaged:     False
  780. X*fileMenu.wcCallback:     WcSetValueCB(*file.subMenuId: this)
  781. X*fileMenu.wcChildren:    load, sep, save, saveAs, sep, quit
  782. X
  783. X*sep.wcConstructor:    XmCreateSeparator
  784. X
  785. X*load.wcConstructor:    XmCreateCascadeButton
  786. X*load.labelString:    Load ...
  787. X*load.mnemonic:        L
  788. X
  789. X*save.wcConstructor:    XmCreateCascadeButton
  790. X*save.labelString:    Save
  791. X*save.mnemonic:        S
  792. X
  793. X*saveAs.wcConstructor:    XmCreateCascadeButton
  794. X*saveAs.labelString:    Save As ...
  795. X*saveAs.mnemonic:    A
  796. X
  797. X*quit.wcConstructor:    XmCreateCascadeButton
  798. X*quit.labelString:    Quit
  799. X*quit.mnemonic:        Q
  800. X*quit.activateCallback:    WcExitCB
  801. X
  802. X*viewMenu.wcConstructor: XmCreatePulldownMenu
  803. X*viewMenu.wcManaged:     False
  804. X*viewMenu.wcChildren:    reset, sep, msgGone, msgRestore
  805. X
  806. X*viewMenu.reset.wcConstructor:        XmCreateCascadeButton
  807. X*viewMenu.reset.labelString:        Reset All Query Parameters
  808. X
  809. X*viewMenu.msgGone.wcConstructor:    XmCreateCascadeButton
  810. X*viewMenu.msgGone.labelString:        Remove Message Window
  811. X*viewMenu.msgGone.activateCallback:    WcUnmanageCB( *main.workWindow ),\
  812. X                    WcSetSensitiveCB( *msgRestore ), \
  813. X                    WcSetInsensitiveCB ( this )
  814. X
  815. X*viewMenu.msgRestore.wcConstructor:    XmCreateCascadeButton
  816. X*viewMenu.msgRestore.labelString:    Display Message Window
  817. X*viewMenu.msgRestore.sensitive:        False
  818. X*viewMenu.msgRestore.activateCallback:    WcManageCB( *main.workWindow ),    \
  819. X                    WcSetSensitiveCB( *msgGone ),    \
  820. X                    WcSetInsensitiveCB( this )
  821. X
  822. X*view.wcConstructor:    XmCreateCascadeButton
  823. X*view.subMenuId:    *viewMenu
  824. X*view.labelString:    View
  825. X*view.mnemonic:        V
  826. X
  827. X*helpMenu.wcConstructor: XmCreatePulldownMenu
  828. X*helpMenu.wcManaged:     False
  829. X*helpMenu.wcChildren:    mbHelp, cpHelp, daHelp, tHelp
  830. X
  831. X*helpMenu.mbHelp.wcConstructor:    XmCreateCascadeButton
  832. X*helpMenu.mbHelp.labelString:    on Menu Bar
  833. X*helpMenu.mbHelp.mnemonic:    M
  834. X
  835. X*helpMenu.cpHelp.wcConstructor:    XmCreateCascadeButton
  836. X*helpMenu.cpHelp.labelString:    on Control Panel
  837. X*helpMenu.cpHelp.mnemonic:    C
  838. X
  839. X*helpMenu.daHelp.wcConstructor:    XmCreateCascadeButton
  840. X*helpMenu.daHelp.labelString:    on Drawing Area
  841. X*helpMenu.daHelp.mnemonic:    D
  842. X
  843. X*helpMenu.tHelp.wcConstructor:    XmCreateCascadeButton
  844. X*helpMenu.tHelp.labelString:    on Text Area
  845. X*helpMenu.tHelp.mnemonic:    T
  846. X
  847. X*help.wcConstructor:    XmCreateCascadeButton
  848. X*help.wcCallback:    WcSetValueCB(*menuBar.menuHelpWidget: this )
  849. X*help.subMenuId:    *helpMenu
  850. X*help.labelString:    Help
  851. X*help.mnemonic:        H
  852. X
  853. X#ifdef Xrm_COMMENT
  854. X----------------------------------------------------------------------
  855. X
  856. XThis section provides the resource specifications for the commandWindow
  857. Xchild of the main window.  The command window provides a
  858. Xdirect-manipulation interface to Tot, the TDS_Output_Tool.
  859. X
  860. XThe commandWindow is a row column widget with stacked children.  The
  861. Xtop child contains a description of the query to be performed.  The
  862. Xsecond child contains the submit controls, including a radio box and
  863. X`submit' and `stop' buttons.  The third child contains the time
  864. Xranges.  The fourth child is used to actually specify the data types,
  865. Xdata transformations, and the data sinks using a graphic representing
  866. Xthe flow of data.
  867. X
  868. X----------------------------------------------------------------------
  869. X#endif
  870. X
  871. X#commandWindow*wcTrace:        True
  872. X
  873. X*commandWindow.wcConstructor:    XmCreateRowColumn
  874. X*commandWindow.wcCallback:    WcSetValueCB( *main.commandWindow: this )
  875. X*commandWindow.wcChildren:    descr, submitCtrl, timeRange, panel
  876. X*commandWindow.spacing:        10
  877. X*commandWindow.marginWidth:    10
  878. X*commandWindow.marginHeight:    10
  879. X
  880. X#
  881. X# Description
  882. X#
  883. X# Note that descr.text must be created AFTER the descr.label for two
  884. X# reasons: XmForm is braindamaged when handling children which are not
  885. X# created in a left-to-right, top-to-bottom manner, AND because the
  886. X# descr.text widget refers to the descr.label widget as its attachment,
  887. X# and the descr.label widget must exist when the following line is
  888. X# converted from String to Widget during descr.text creation:
  889. X#
  890. X#   *descr.text.topWidget:          *descr.label
  891. X#
  892. X
  893. X*descr.wcConstructor:        XmCreateForm
  894. X*descr.wcChildren:        label, text
  895. X
  896. X*descr.label.wcConstructor:    XmCreateLabel
  897. X*descr.label.labelString:    Query Description
  898. X*descr.label.leftAttachment:    ATTACH_FORM
  899. X*descr.label.topAttachment:    ATTACH_FORM
  900. X
  901. X*descr.text.wcConstructor:    XmCreateText
  902. X*descr.text.topWidget:        *descr.label
  903. X*descr.text.topAttachment:    ATTACH_WIDGET
  904. X*descr.text.leftAttachment:    ATTACH_FORM
  905. X*descr.text.rightAttachment:    ATTACH_FORM
  906. X
  907. X#
  908. X# Submit Control Frame
  909. X#
  910. X
  911. X#submitCtrl*wcTrace:        True
  912. X
  913. X*submitCtrl.wcConstructor:    XmCreateFrame
  914. X*submitCtrl.wcChildren:        scRC
  915. X
  916. X*scRC.wcConstructor:        XmCreateRowColumn
  917. X*scRC.orientation:        HORIZONTAL
  918. X*scRC.wcChildren:        startStop, rtRange
  919. X
  920. X*startStop.wcConstructor:    XmCreateRowColumn
  921. X*startStop.wcChildren:        start, stop
  922. X
  923. X*startStop.start.wcConstructor:    XmCreatePushButton
  924. X*startStop.start.labelString:    Submit Query
  925. X*startStop.start.activateCallback:    WcSetInsensitiveCB( this ), \
  926. X                    WcSetSensitiveCB  ( *startStop.stop )
  927. X
  928. X*startStop.stop.wcConstructor:    XmCreatePushButton
  929. X*startStop.stop.labelString:    Stop Query
  930. X*startStop.stop.sensitive:    False
  931. X*startStop.stop.activateCallback:    WcSetInsensitiveCB( this ), \
  932. X                                        WcSetSensitiveCB  ( *startStop.start )
  933. X
  934. X*rtRange.wcConstructor:        XmCreateRadioBox
  935. X*rtRange.wcChildren:        rtToggle, trToggle
  936. X
  937. X#
  938. X# NOTE: The timeRC widget must exist before the WcSetInsensitiveCB
  939. X# is invoked, but this will clearly be the case: the timeRC widget
  940. X# is not deferred, and so will be created before any of these widgets
  941. X# get realized, and the user can't very well press a toggle button
  942. X# which is not yet mapped to the screen!
  943. X#
  944. X*rtToggle.wcConstructor:    XmCreateToggleButtonGadget
  945. X*rtToggle.labelString:        Real Time Stream
  946. X*rtToggle.set:            True
  947. X*rtToggle.armCallback:        WcSetInsensitiveCB ( *timeRC )
  948. X
  949. X*trToggle.wcConstructor:    XmCreateToggleButtonGadget
  950. X*trToggle.labelString:        Query Time Range
  951. X*trToggle.armCallback:        WcSetSensitiveCB   ( *timeRC )
  952. X
  953. X#
  954. X# Time Range Frame
  955. X#
  956. X
  957. X#timeRange*wcTrace:        True
  958. X
  959. X*timeRange.wcConstructor:    XmCreateFrame
  960. X*timeRange.wcChildren:        timeRC
  961. X
  962. X*timeRC.wcConstructor:        XmCreateRowColumn
  963. X*timeRC.wcChildren:        fromRC, toRC
  964. X*timeRC.sensitive:        False
  965. X
  966. X*timeRC.fromRC.wcConstructor:    XmCreateRowColumn
  967. X*timeRC.fromRC.wcChildren:    label, time, type
  968. X*timeRC.toRC.wcConstructor:    XmCreateRowColumn
  969. X*timeRC.toRC.wcChildren:    label, time, type
  970. X
  971. X#timeRC.XmRowColumn.wcChildren:    label, time, type
  972. X*timeRC.XmRowColumn.orientation: HORIZONTAL
  973. X
  974. X*timeRC.XmRowColumn.label.wcConstructor:    XmCreateLabel
  975. X*timeRC.fromRC.label.labelString:        Begin Time:
  976. X*timeRC.toRC.label.labelString:            End Time  :
  977. X
  978. X*timeRC.XmRowColumn.time.wcConstructor:    XmCreateText
  979. X
  980. X*timeRC.XmRowColumn.type.wcConstructor:    XmCreateRadioBox
  981. X*timeRC.XmRowColumn.type.wcChildren:    sclk, scet, ert, mst, rct
  982. X*timeRC.XmRowColumn.type.orientation:    HORIZONTAL
  983. X
  984. X#
  985. X# Radio Boxes complain if the children are not XmToggleButtonGadgets
  986. X#
  987. X*timeRC*type.sclk.set:            True
  988. X*timeRC*type.sclk.wcConstructor:    XmCreateToggleButtonGadget
  989. X*timeRC*type.scet.wcConstructor:    XmCreateToggleButtonGadget
  990. X*timeRC*type.ert.wcConstructor:        XmCreateToggleButtonGadget
  991. X*timeRC*type.mst.wcConstructor:        XmCreateToggleButtonGadget
  992. X*timeRC*type.rct.wcConstructor:        XmCreateToggleButtonGadget
  993. X
  994. X#ifdef Xrm_COMMENT
  995. X----------------------------------------------------------------------
  996. X
  997. XThis section provides the resource specifications for the direct
  998. Xmanipulation panel which allows a user to specify a set of data
  999. Xtypes, data transforms, and data sinks, along with the data flows
  1000. Xwhich connect each of the foregoing.
  1001. X
  1002. XAlong the left side are three row columns, left to right.  The leftmost
  1003. Xrow column contains buttons representing the different data types which
  1004. Xcan be queried.  This will certainly change per mission, and probably
  1005. Xper user.  
  1006. X
  1007. XThe second row column contains buttons representing the different
  1008. Xtransformations which may be applied to the data.  Several are basically
  1009. Xmission independent, such as WSE filtering and DMD.  Others may be
  1010. Xadded on a per mission basis, and some details may be frequently
  1011. Xspecified on a per user basis.
  1012. X
  1013. XThe third row column contains buttons representing the different
  1014. Xdata sinks which are available.  These are probably never changed.
  1015. X
  1016. X----------------------------------------------------------------------
  1017. X#endif
  1018. X
  1019. X*panel.wcConstructor:        XmCreateForm
  1020. X*panel.wcChildren:        controlFrame, displaySW
  1021. X
  1022. X*controlFrame.wcConstructor:    XmCreateFrame
  1023. X*controlFrame.wcChildren:    controlRC
  1024. X*controlFrame.topAttachment:    ATTACH_FORM
  1025. X*controlFrame.leftAttachment:    ATTACH_FORM
  1026. X#controlFrame.bottomAttachment:    ATTACH_FORM
  1027. X
  1028. X*controlRC.wcConstructor:    XmCreateRowColumn
  1029. X*controlRC.orientation:        HORIZONTAL
  1030. X#controlRC.packing:        PACK_COLUMN
  1031. X*controlRC.wcChildren:        dataRC, transRC, sinkRC
  1032. X
  1033. X#
  1034. X# Data Instantiation Buttons
  1035. X#
  1036. X
  1037. X*dataRC.wcConstructor:        XmCreateRowColumn
  1038. X*dataRC.wcChildren:        d1,d2,d3,d4,d5,d6,d7,
  1039. X
  1040. X*dataRC.d1.wcConstructor:    XmCreatePushButtonGadget
  1041. X*dataRC.d2.wcConstructor:    XmCreatePushButtonGadget
  1042. X*dataRC.d3.wcConstructor:    XmCreatePushButtonGadget
  1043. X*dataRC.d4.wcConstructor:    XmCreatePushButtonGadget
  1044. X*dataRC.d5.wcConstructor:    XmCreatePushButtonGadget
  1045. X*dataRC.d6.wcConstructor:    XmCreatePushButtonGadget
  1046. X*dataRC.d7.wcConstructor:    XmCreatePushButtonGadget
  1047. X
  1048. X*dataRC.d1.labelString:        CR5A
  1049. X*dataRC.d2.labelString:        CR7A
  1050. X*dataRC.d3.labelString:        GS4B
  1051. X*dataRC.d4.labelString:        GS08
  1052. X*dataRC.d5.labelString:        GS10
  1053. X*dataRC.d6.labelString:        GS10A
  1054. X*dataRC.d7.labelString:        UV5A
  1055. X
  1056. X#
  1057. X# Trans Instantiation Buttons
  1058. X#
  1059. X
  1060. X*transRC.wcConstructor:        XmCreateRowColumn
  1061. X*transRC.wcChildren:        t1,t2,t3,t4,t5,t6, t7
  1062. X
  1063. X*transRC.t1.wcConstructor:    XmCreatePushButtonGadget
  1064. X*transRC.t2.wcConstructor:    XmCreatePushButtonGadget
  1065. X*transRC.t3.wcConstructor:    XmCreatePushButtonGadget
  1066. X*transRC.t4.wcConstructor:    XmCreatePushButtonGadget
  1067. X*transRC.t5.wcConstructor:    XmCreatePushButtonGadget
  1068. X*transRC.t6.wcConstructor:    XmCreatePushButtonGadget
  1069. X*transRC.t7.wcConstructor:    XmCreatePushButtonGadget
  1070. X
  1071. X*transRC.t1.labelString:    Channelize
  1072. X*transRC.t2.labelString:    Generate ECDRs
  1073. X*transRC.t3.labelString:    Filter SFDUs
  1074. X*transRC.t4.labelString:    Generate IDFs
  1075. X*transRC.t5.labelString:    Display on DMD
  1076. X*transRC.t6.labelString:    Template
  1077. X*transRC.t7.labelString:    SFDU Browser
  1078. X
  1079. X#
  1080. X# Sink Instantiation Buttons
  1081. X#
  1082. X
  1083. X*sinkRC.wcConstructor:        XmCreateRowColumn
  1084. X*sinkRC.wcChildren:        s1,s2,s3,s4,s5,s6,s7
  1085. X
  1086. X*sinkRC.s1.wcConstructor:    XmCreatePushButtonGadget
  1087. X*sinkRC.s2.wcConstructor:    XmCreatePushButtonGadget
  1088. X*sinkRC.s3.wcConstructor:    XmCreatePushButtonGadget
  1089. X*sinkRC.s4.wcConstructor:    XmCreatePushButtonGadget
  1090. X*sinkRC.s5.wcConstructor:    XmCreatePushButtonGadget
  1091. X*sinkRC.s6.wcConstructor:    XmCreatePushButtonGadget
  1092. X*sinkRC.s7.wcConstructor:    XmCreatePushButtonGadget
  1093. X
  1094. X*sinkRC.s1.labelString:        UNIX stdout
  1095. X*sinkRC.s2.labelString:        UNIX file
  1096. X*sinkRC.s3.labelString:        UNIX pipe
  1097. X*sinkRC.s4.labelString:        CDA spooler
  1098. X*sinkRC.s5.labelString:        DTS virtual circuit
  1099. X*sinkRC.s6.labelString:        DTS Broadcast
  1100. X*sinkRC.s7.labelString:        TCP/IP socket
  1101. X
  1102. X#
  1103. X# Scrolled Data Flow `Drawing' Area
  1104. X#
  1105. X
  1106. X*displaySW.wcConstructor:        XmCreateScrolledWindow
  1107. X*displaySW.scrollingPolicy:        AUTOMATIC
  1108. X*displaySW.scrollBarDisplayPolicy:    AS_NEEDED
  1109. X*displaySW.wcChildren:            drawing
  1110. X*displaySW.topAttachment:        ATTACH_FORM
  1111. X*displaySW.leftAttachment:        ATTACH_WIDGET
  1112. X*displaySW.leftWidget:            *controlFrame
  1113. X*displaySW.leftOffset:            10
  1114. X*displaySW.bottomAttachment:        ATTACH_FORM
  1115. X*displaySW.rightAttachment:        ATTACH_FORM
  1116. X
  1117. X*drawing.wcConstructor:        XmCreateDrawingArea
  1118. X*drawing.width:            200
  1119. X*drawing.height:        700
  1120. X*drawing.wcCallback:        WcSetValueCB(*displaySW.workWindow: this )
  1121. X
  1122. X#ifdef Xrm_COMMENT
  1123. X----------------------------------------------------------------------
  1124. X
  1125. XThis section provides the resource specifications for the workWindow
  1126. Xand vertical scrollbar children of the main window.
  1127. X
  1128. X----------------------------------------------------------------------
  1129. X#endif
  1130. X
  1131. X*main.workWindow.wcConstructor:    XmCreateText
  1132. X*main.workWindow.wcCallback:    WcSetValueCB( *main.workWindow: this )
  1133. X
  1134. X*main.vscroll.wcConstructor:    XmCreateScrollBar
  1135. X*main.vscroll.wcCallback:    WcSetValueCB( *main.verticalScrollBar: this )
  1136. +FUNKY+STUFF+
  1137. echo '-rw-r--r--  1 david       16505 Jun 28 09:13 Mri06.MainWindow    (as sent)'
  1138. chmod u=rw,g=r,o=r Mri06.MainWindow
  1139. ls -l Mri06.MainWindow
  1140. echo x - Mri07.PDWidgets
  1141. sed 's/^X//' > Mri07.PDWidgets <<'+FUNKY+STUFF+'
  1142. X#ifdef Xrm_COMMENT
  1143. X----------------------------------------------------------------------
  1144. X
  1145. XThis resource file explores the use of public domain widgets mixed
  1146. Xin with Motif widgets.  Specifically, a Table widget is used in
  1147. Xplace of a XmRowColumn.  The announcement for the Table widget:
  1148. X
  1149. XTable - Geometry Management Widget for the X Toolkit
  1150. X
  1151. XTable is a composite widget designed to manage the size and location
  1152. Xof its children.  The widget uses an array model to simplify the
  1153. Xarrangement of child widgets.  Widgets are placed at row and column
  1154. Xlocations in a variable sized array.  Widgets may span more than one
  1155. Xrow or column.  The array automatically expands or contracts as
  1156. Xneeded.  There are options to control justification and place size
  1157. Xrestrictions on rows or columns in the array.  The widget is directly
  1158. Xderived from the core and composite widgets provided by the X Toolkit
  1159. Xand can be used with any widget set.  It has been tested using the
  1160. XAthena widget set.
  1161. X
  1162. XSource for the Table widget is available through anonymous ftp to
  1163. Xshambhala.Berkeley.EDU (128.32.132.54).  Instructions are given below:
  1164. X
  1165. X        % ftp shambhala.Berkeley.EDU
  1166. X        Name: anonymous
  1167. X        Password: <anything non-null>
  1168. X        ftp> cd pub
  1169. X        ftp> binary
  1170. X        ftp> get Table.tar.Z
  1171. X        ftp> quit
  1172. X        % uncompress Table.tar.Z
  1173. X        % tar xf Table.tar
  1174. X
  1175. XThose without ftp access can obtain the source for the Table widget
  1176. Xusing a mail archive system I have installed on dent.Berkeley.EDU
  1177. X(courtesy of Brian Reid at Digital).  An example is given below:
  1178. X
  1179. X        To: ucbvax!dent!archive-server
  1180. X        Subject: send programs Table.shar.01 Table.shar.02
  1181. X
  1182. XThe archive server will send you these files as time and load
  1183. Xpermits.  They are standard shell archives that can be unpacked
  1184. Xby running them through /bin/sh (in order).  If you would like
  1185. Xto know more about the mail server, send a message with a subject
  1186. Xof "help".
  1187. X
  1188. XAfter unpacking the files, you will find a README file in the directory
  1189. Xthat contains installation instructions.
  1190. X
  1191. X                        David Harrison
  1192. X                        UC Berkeley Electronics Research Lab
  1193. X                        (davidh@ic.Berkeley.EDU, ...!ucbvax!ucbcad!davidh)
  1194. X
  1195. XThe Table widget has proven to be so useful, it is included in the
  1196. XWc distribution and is registered by the WcRegisterMotif() function.
  1197. XVery minor edits were required to make Table compatible with Motif.
  1198. X
  1199. XAppearance Defaults
  1200. X-------------------
  1201. X
  1202. XBelow are application wide defaults vor various widgets.
  1203. X
  1204. XN.B.:  If you change the colors from B&W, you should change the
  1205. XborderColor of the Table widget.  Someday, I will probably hack
  1206. Xthe Table widget to have Margin resources like XmRowColumn and
  1207. Xthen it won't be necessary
  1208. X
  1209. X----------------------------------------------------------------------
  1210. X#endif
  1211. X
  1212. X*menuBar.shadowThickness:       3
  1213. X*XmFrame.shadowThickness:       3
  1214. X*XmText.shadowThickness:        3
  1215. X*XmDrawingArea.shadowThickness: 3
  1216. X*XmScrollBar.shadowThickness:   3
  1217. X*XmFrame.shadowType:            SHADOW_OUT
  1218. X*Table.borderWidth:             0
  1219. X
  1220. X*Table.borderColor:        XtDefaultBackground
  1221. X
  1222. X#ifdef Xrm_COMMENT
  1223. X----------------------------------------------------------------------
  1224. X
  1225. XMain Window
  1226. X-----------
  1227. X
  1228. XMotif's MainWindow widget type supports one of the classic "looks"
  1229. Xof a window application, and of the Motif Style Guide in particular.
  1230. X
  1231. X----------------------------------------------------------------------
  1232. X#endif
  1233. X
  1234. XMri.wcChildren:        main, loadSelect, saveSelect
  1235. X
  1236. X*main.wcConstructor:    XmCreateMainWindow
  1237. X*main.wcChildren:    menuBar, commandWindow, msgWindow, vscroll
  1238. X
  1239. X#ifdef Xrm_COMMENT
  1240. X----------------------------------------------------------------------
  1241. X
  1242. XDialogs
  1243. X-------
  1244. X
  1245. XMotif constructors often introduce extra widgets.  File Selection Dialogs
  1246. Xare a good example.  In this example, the Load and Save As buttons on the
  1247. XFile menu cause File Selection Dialogs to be managed (popped-up).  Note
  1248. Xthe names required:
  1249. X
  1250. X    *load.activateCallback:    WcManageCB( *loadSelect.loadSelect )
  1251. X
  1252. XThis seemingly strange naming can be detected using the wcTrace resource.  The
  1253. XXmCreateFileSelectionDialog constructor creates a dialog shell named
  1254. XloadSelect and a file selection box which is also named loadSelect.  The
  1255. Xfile selection box is a child of the dialog shell.  In order to see the
  1256. Xfile selection box, it must be managed, not just the dialog shell.
  1257. XA common error is the following:
  1258. X
  1259. X    *load.activateCallback:    WcManageCB( *loadSelect )
  1260. X
  1261. XThis simply causes the dialog shell to pop-up, but it will be empty: its
  1262. Xchild, the file selection box, is still not managed and so will not be
  1263. Xvisible.
  1264. X
  1265. X----------------------------------------------------------------------
  1266. X#endif
  1267. X
  1268. X*loadSelect.wcConstructor:    XmCreateFileSelectionDialog
  1269. X*loadSelect.wcManaged:        False
  1270. X*loadSelect.cancelCallback:    WcUnmanageCB(this)
  1271. X*loadSelect.okCallback:        WcUnmanageCB(this)
  1272. X*saveSelect.wcConstructor:    XmCreateFileSelectionDialog
  1273. X*saveSelect.wcManaged:        False
  1274. X*saveSelect.cancelCallback:    WcUnmanageCB(this)
  1275. X*saveSelect.okCallback:        WcUnmanageCB(this)
  1276. X
  1277. X*load.activateCallback:        WcManageCB( *loadSelect.loadSelect )
  1278. X*saveAs.activateCallback:    WcManageCB(*saveSelect.saveSelect)
  1279. X
  1280. X#ifdef Xrm_COMMENT
  1281. X----------------------------------------------------------------------
  1282. X
  1283. XBelow are the resources for the menuBar and all its children.  This
  1284. XmenuBar is a child of a Motif MainWindow, and so must register itself
  1285. Xwith the MainWindow (named *main).
  1286. X
  1287. XPulldown Menus
  1288. X--------------
  1289. X
  1290. XThe pulldowns can be created before or after their activating cascade
  1291. Xbutton: as an example, lets look at the difference between the
  1292. XmenuBar.file & menuBar.fileMenu specification versus the menuBar.help &
  1293. XmenuBar.helpMenu specifications.  The *menuBar.wcChildren resource
  1294. Xspecifies that the first of its children to be created is file (which
  1295. Xhas no children), then fileMenu and all its children, then helpMenu and
  1296. Xall its children, and finally help.
  1297. X
  1298. X    *menuBar.wcChildren:    file, fileMenu, helpMenu, help
  1299. X
  1300. XThe fileMenu, being created after the file cascade, sets the subMenuId
  1301. Xresource on the file cascade when it is created:
  1302. X
  1303. X    *fileMenu.wcCallback:    WcSetValueCB(*file.subMenuId: this)
  1304. X
  1305. XThe help cascade is created after the helpMenu, so it can specify the
  1306. XhelpMenu as its subMenuId directly:
  1307. X
  1308. X    *help.subMenuId:        *helpMenu
  1309. X
  1310. XNote that the pulldown menus are NOT managed when they are created. They
  1311. Xare automagically managed by the cascade buttons.  
  1312. X
  1313. XNote also that the separator types are NOT XmSHADOW_ETCHED_IN and
  1314. XXmDOUBLE_DASHED_LINE as one might guess from Motif documents, but
  1315. Xinstead one must leave the Xm off the front.  Also, the values are
  1316. Xcase insensitive.
  1317. X
  1318. X----------------------------------------------------------------------
  1319. X#endif
  1320. X
  1321. X#menuBar*wcTrace:    True
  1322. X
  1323. X*menuBar.wcConstructor:    XmCreateMenuBar
  1324. X*menuBar.wcChildren:    file, fileMenu, viewMenu, view, helpMenu, help
  1325. X*menuBar.wcCallback:    WcSetValueCB( *main.menuBar: this )
  1326. X
  1327. X*file.wcConstructor:    XmCreateCascadeButton
  1328. X*file.labelString:    File
  1329. X*file.mnemonic:        F
  1330. X
  1331. X*fileMenu.wcConstructor: XmCreatePulldownMenu
  1332. X*fileMenu.wcManaged:     False
  1333. X*fileMenu.wcCallback:     WcSetValueCB(*file.subMenuId: this)
  1334. X*fileMenu.wcChildren:    load, sep, save, saveAs, sep, quit
  1335. X
  1336. X*sep.wcConstructor:    XmCreateSeparator
  1337. X
  1338. X*load.wcConstructor:    XmCreateCascadeButton
  1339. X*load.labelString:    Load ...
  1340. X*load.mnemonic:        L
  1341. X
  1342. X*save.wcConstructor:    XmCreateCascadeButton
  1343. X*save.labelString:    Save
  1344. X*save.mnemonic:        S
  1345. X
  1346. X*saveAs.wcConstructor:    XmCreateCascadeButton
  1347. X*saveAs.labelString:    Save As ...
  1348. X*saveAs.mnemonic:    A
  1349. X
  1350. X*quit.wcConstructor:    XmCreateCascadeButton
  1351. X*quit.labelString:    Quit
  1352. X*quit.mnemonic:        Q
  1353. X*quit.activateCallback:    WcExitCB
  1354. X
  1355. X*viewMenu.wcConstructor: XmCreatePulldownMenu
  1356. X*viewMenu.wcManaged:     False
  1357. X*viewMenu.wcChildren:    reset, sep, msgGone, msgRestore
  1358. X
  1359. X*viewMenu.reset.wcConstructor:        XmCreateCascadeButton
  1360. X*viewMenu.reset.labelString:        Reset All Query Parameters
  1361. X
  1362. X*viewMenu.msgGone.wcConstructor:    XmCreateCascadeButton
  1363. X*viewMenu.msgGone.labelString:        Remove Message Window
  1364. X*viewMenu.msgGone.activateCallback:    WcUnmanageCB( *main.msgWindow ),\
  1365. X                    WcSetSensitiveCB( *msgRestore ), \
  1366. X                    WcSetInsensitiveCB ( this )
  1367. X
  1368. X*viewMenu.msgRestore.wcConstructor:    XmCreateCascadeButton
  1369. X*viewMenu.msgRestore.labelString:    Display Message Window
  1370. X*viewMenu.msgRestore.sensitive:        False
  1371. X*viewMenu.msgRestore.activateCallback:    WcManageCB( *main.msgWindow ),    \
  1372. X                    WcSetSensitiveCB( *msgGone ),    \
  1373. X                    WcSetInsensitiveCB( this )
  1374. X
  1375. X*view.wcConstructor:    XmCreateCascadeButton
  1376. X*view.subMenuId:    *viewMenu
  1377. X*view.labelString:    View
  1378. X*view.mnemonic:        V
  1379. X
  1380. X*helpMenu.wcConstructor: XmCreatePulldownMenu
  1381. X*helpMenu.wcManaged:     False
  1382. X*helpMenu.wcChildren:    mbHelp, cpHelp, daHelp, tHelp
  1383. X
  1384. X*helpMenu.mbHelp.wcConstructor:    XmCreateCascadeButton
  1385. X*helpMenu.mbHelp.labelString:    on Menu Bar
  1386. X*helpMenu.mbHelp.mnemonic:    M
  1387. X
  1388. X*helpMenu.cpHelp.wcConstructor:    XmCreateCascadeButton
  1389. X*helpMenu.cpHelp.labelString:    on Control Panel
  1390. X*helpMenu.cpHelp.mnemonic:    C
  1391. X
  1392. X*helpMenu.daHelp.wcConstructor:    XmCreateCascadeButton
  1393. X*helpMenu.daHelp.labelString:    on Drawing Area
  1394. X*helpMenu.daHelp.mnemonic:    D
  1395. X
  1396. X*helpMenu.tHelp.wcConstructor:    XmCreateCascadeButton
  1397. X*helpMenu.tHelp.labelString:    on Text Area
  1398. X*helpMenu.tHelp.mnemonic:    T
  1399. X
  1400. X*help.wcConstructor:    XmCreateCascadeButton
  1401. X*help.wcCallback:    WcSetValueCB(*menuBar.menuHelpWidget: this )
  1402. X*help.subMenuId:    *helpMenu
  1403. X*help.labelString:    Help
  1404. X*help.mnemonic:        H
  1405. X
  1406. X#ifdef Xrm_COMMENT
  1407. X----------------------------------------------------------------------
  1408. X
  1409. XThis section provides the resource specifications for the commandWindow
  1410. Xchild of the main window.  The command window provides a
  1411. Xdirect-manipulation interface to Tot, the TDS_Output_Tool.
  1412. X
  1413. XThe commandWindow is a Table widget with three stacked children.  The
  1414. Xtop child contains a description of the query to be performed.  The
  1415. Xsecond child contains the submit controls including the time range to
  1416. Xbe queried.  The third child is used to actually specify the data
  1417. Xtypes, data transformations, and the data sinks using a graphic
  1418. Xrepresenting the flow of data.
  1419. X
  1420. X----------------------------------------------------------------------
  1421. X#endif
  1422. X
  1423. X#commandWindow*wcTrace:        True
  1424. X
  1425. X*commandWindow.wcClass:        tableWidgetClass
  1426. X*commandWindow.wcCallback:    WcSetValueCB( *main.commandWindow: this )
  1427. X*commandWindow.wcChildren:    descr, submitCtrl, panel
  1428. X#                                   c r cs rs opts
  1429. X*commandWindow.layout:    descr        0 0  1  1   hH ;\
  1430. X            submitCtrl  0 1  1  1   hH ;\
  1431. X            panel       0 2  1  1 
  1432. X
  1433. X*commandWindow.columnSpacing:    10
  1434. X*commandWindow.rowSpacing:    10
  1435. X*commandWindow.borderWidth:    10
  1436. X
  1437. X#
  1438. X# Description
  1439. X#
  1440. X
  1441. X*descr.wcConstructor:        XmCreateForm
  1442. X*descr.wcChildren:        label, text
  1443. X
  1444. X*descr.label.wcConstructor:    XmCreateLabel
  1445. X*descr.label.labelString:    Query Description
  1446. X*descr.label.leftAttachment:    ATTACH_FORM
  1447. X*descr.label.topAttachment:    ATTACH_FORM
  1448. X
  1449. X*descr.text.wcConstructor:    XmCreateText
  1450. X*descr.text.topWidget:        *descr.label
  1451. X*descr.text.topAttachment:    ATTACH_WIDGET
  1452. X*descr.text.leftAttachment:    ATTACH_FORM
  1453. X*descr.text.rightAttachment:    ATTACH_FORM
  1454. X
  1455. X#ifdef Xrm_COMMENT
  1456. X----------------------------------------------------------------------
  1457. X
  1458. XThis section provides the resource specifications for the Submit
  1459. XControl portion of the commandWindow.  A Table widget is used as the
  1460. Xmanager widget because Row Column just can't do the job here, where we
  1461. Xmix types of widgets with differing heights in a row, AND types of
  1462. Xwidgets with differing widths in a column.  XmRowColumn gets fascist in
  1463. Xsuch situations, and makes every cell the same width and height.  We
  1464. Xdon't want that (wastes ALOT of real estate in this case).  So, we'll
  1465. Xtry the Table Widget.
  1466. X
  1467. X----------------------------------------------------------------------
  1468. X#endif
  1469. X
  1470. X#submitCtrl*wcTrace:        True
  1471. X
  1472. X*submitCtrl.wcConstructor:    XmCreateFrame
  1473. X*submitCtrl.wcChildren:        table
  1474. X*submitCtrl.marginWidth:    6
  1475. X*submitCtrl.marginHeight:    6
  1476. X
  1477. X*table.wcClassName:        Table
  1478. X*table.borderWidth:    0
  1479. X*table.wcChildren:    start, rtRadio, fromLabel, fromTime, fromType,   \
  1480. X            stop,           toLabel,   toTime,   toType
  1481. X#                  c r cs rs opts
  1482. X*table.layout:        start     0 0  1  1 wWhH ;\
  1483. X            stop      0 1  1  1   hH ;\
  1484. X            rtRadio   1 0  1  2 wW   ;\
  1485. X            fromLabel 2 0  1  1 wW   ;\
  1486. X            toLabel   2 1  1  1      ;\
  1487. X            fromTime  3 0  1  1      ;\
  1488. X            toTime    3 1  1  1      ;\
  1489. X            fromType  4 0  1  1 wW   ;\
  1490. X            toType    4 1  1  1
  1491. X
  1492. X*table.start.wcConstructor:    XmCreatePushButton
  1493. X*table.start.labelString:    Submit Query
  1494. X*table.start.activateCallback:    WcSetInsensitiveCB( this ), \
  1495. X                WcSetSensitiveCB  ( *table.stop )
  1496. X
  1497. X*table.stop.wcConstructor:    XmCreatePushButton
  1498. X*table.stop.labelString:    Stop Query
  1499. X*table.stop.sensitive:        False
  1500. X*table.stop.activateCallback:    WcSetInsensitiveCB( this ), \
  1501. X                                WcSetSensitiveCB  ( *table.start )
  1502. X
  1503. X*rtRadio.wcConstructor:        XmCreateRadioBox
  1504. X*rtRadio.wcChildren:        trToggle, rtToggle
  1505. X
  1506. X*trToggle.wcConstructor:    XmCreateToggleButtonGadget
  1507. X*trToggle.labelString:        Query Time Range
  1508. X*trToggle.set:            True
  1509. X*trToggle.armCallback:        WcSetSensitiveCB   ( *fromLabel, *fromTime, \
  1510. X                    *fromType, *toLabel, *toTime, *toType)
  1511. X
  1512. X*rtToggle.wcConstructor:    XmCreateToggleButtonGadget
  1513. X*rtToggle.labelString:        Real Time Stream
  1514. X*rtToggle.armCallback:        WcSetInsensitiveCB ( *fromLabel, *fromTime, \
  1515. X                    *fromType, *toLabel, *toTime, *toType)
  1516. X
  1517. X*fromLabel.wcConstructor:    XmCreateLabel
  1518. X*fromLabel.labelString:        Begin Time:
  1519. X*fromLabel.alignment:        ALIGNMENT_END
  1520. X
  1521. X*toLabel.wcConstructor:        XmCreateLabel
  1522. X*toLabel.labelString:        End Time:
  1523. X*toLabel.alignment:        ALIGNMENT_END
  1524. X
  1525. X*fromTime.wcConstructor:    XmCreateText
  1526. X*toTime.wcConstructor:        XmCreateText
  1527. X
  1528. X*fromType.wcConstructor:    XmCreateRadioBox
  1529. X*fromType.orientation:        HORIZONTAL
  1530. X*fromType.wcChildren:        sclk, scet, ert, mst, rct
  1531. X
  1532. X*toType.wcConstructor:        XmCreateRadioBox
  1533. X*toType.orientation:        HORIZONTAL
  1534. X*toType.wcChildren:        sclk, scet, ert, mst, rct
  1535. X
  1536. X*table*sclk.set:        True
  1537. X*table*sclk.wcConstructor:    XmCreateToggleButtonGadget
  1538. X*table*scet.wcConstructor:    XmCreateToggleButtonGadget
  1539. X*table*ert.wcConstructor:    XmCreateToggleButtonGadget
  1540. X*table*mst.wcConstructor:    XmCreateToggleButtonGadget
  1541. X*table*rct.wcConstructor:    XmCreateToggleButtonGadget
  1542. X
  1543. X#ifdef Xrm_COMMENT
  1544. X----------------------------------------------------------------------
  1545. X
  1546. XThis section provides the resource specifications for the direct
  1547. Xmanipulation panel which allows a user to specify a set of data
  1548. Xtypes, data transforms, and data sinks, along with the data flows
  1549. Xwhich connect each of the foregoing.
  1550. X
  1551. XAlong the left side are three row columns, left to right.  The leftmost
  1552. Xrow column contains buttons representing the different data types which
  1553. Xcan be queried.  This will certainly change per mission, and probably
  1554. Xper user.  
  1555. X
  1556. XThe second row column contains buttons representing the different
  1557. Xtransformations which may be applied to the data.  Several are basically
  1558. Xmission independent, such as WSE filtering and DMD.  Others may be
  1559. Xadded on a per mission basis, and some details may be frequently
  1560. Xspecified on a per user basis.
  1561. X
  1562. XThe third row column contains buttons representing the different
  1563. Xdata sinks which are available.  These are probably never changed.
  1564. X
  1565. X----------------------------------------------------------------------
  1566. X#endif
  1567. X
  1568. X*panel.wcConstructor:        XmCreateForm
  1569. X*panel.wcChildren:        controlFrame, displaySW
  1570. X
  1571. X*controlFrame.wcConstructor:    XmCreateFrame
  1572. X*controlFrame.wcChildren:    controlRC
  1573. X*controlFrame.topAttachment:    ATTACH_FORM
  1574. X*controlFrame.leftAttachment:    ATTACH_FORM
  1575. X#controlFrame.bottomAttachment:    ATTACH_FORM
  1576. X
  1577. X*controlRC.wcConstructor:    XmCreateRowColumn
  1578. X*controlRC.orientation:        HORIZONTAL
  1579. X#controlRC.packing:        PACK_COLUMN
  1580. X*controlRC.wcChildren:        dataRC, transRC, sinkRC
  1581. X
  1582. X#
  1583. X# Data Instantiation Buttons
  1584. X#
  1585. X
  1586. X*dataRC.wcConstructor:        XmCreateRowColumn
  1587. X*dataRC.wcChildren:        d1,d2,d3,d4,d5,d6,d7
  1588. X
  1589. X*dataRC.d1.wcConstructor:    XmCreatePushButtonGadget
  1590. X*dataRC.d2.wcConstructor:    XmCreatePushButtonGadget
  1591. X*dataRC.d3.wcConstructor:    XmCreatePushButtonGadget
  1592. X*dataRC.d4.wcConstructor:    XmCreatePushButtonGadget
  1593. X*dataRC.d5.wcConstructor:    XmCreatePushButtonGadget
  1594. X*dataRC.d6.wcConstructor:    XmCreatePushButtonGadget
  1595. X*dataRC.d7.wcConstructor:    XmCreatePushButtonGadget
  1596. X
  1597. X*dataRC.d1.labelString:        CR5A
  1598. X*dataRC.d2.labelString:        CR7A
  1599. X*dataRC.d3.labelString:        GS4B
  1600. X*dataRC.d4.labelString:        GS08
  1601. X*dataRC.d5.labelString:        GS10
  1602. X*dataRC.d6.labelString:        GS10A
  1603. X*dataRC.d7.labelString:        UV5A
  1604. X
  1605. X#
  1606. X# Trans Instantiation Buttons
  1607. X#
  1608. X
  1609. X*transRC.wcConstructor:        XmCreateRowColumn
  1610. X*transRC.wcChildren:        t1,t2,t3,t4,t5,t6, t7
  1611. X
  1612. X*transRC.t1.wcConstructor:    XmCreatePushButtonGadget
  1613. X*transRC.t2.wcConstructor:    XmCreatePushButtonGadget
  1614. X*transRC.t3.wcConstructor:    XmCreatePushButtonGadget
  1615. X*transRC.t4.wcConstructor:    XmCreatePushButtonGadget
  1616. X*transRC.t5.wcConstructor:    XmCreatePushButtonGadget
  1617. X*transRC.t6.wcConstructor:    XmCreatePushButtonGadget
  1618. X*transRC.t7.wcConstructor:    XmCreatePushButtonGadget
  1619. X
  1620. X*transRC.t1.labelString:    Channelize
  1621. X*transRC.t2.labelString:    Generate ECDRs
  1622. X*transRC.t3.labelString:    Filter SFDUs
  1623. X*transRC.t4.labelString:    Generate IDFs
  1624. X*transRC.t5.labelString:    Display on DMD
  1625. X*transRC.t6.labelString:    Template
  1626. X*transRC.t7.labelString:    SFDU Browser
  1627. X
  1628. X#
  1629. X# Sink Instantiation Buttons
  1630. X#
  1631. X
  1632. X*sinkRC.wcConstructor:        XmCreateRowColumn
  1633. X*sinkRC.wcChildren:        s1,s2,s3,s4,s5,s6,s7
  1634. X
  1635. X*sinkRC.s1.wcConstructor:    XmCreatePushButtonGadget
  1636. X*sinkRC.s2.wcConstructor:    XmCreatePushButtonGadget
  1637. X*sinkRC.s3.wcConstructor:    XmCreatePushButtonGadget
  1638. X*sinkRC.s4.wcConstructor:    XmCreatePushButtonGadget
  1639. X*sinkRC.s5.wcConstructor:    XmCreatePushButtonGadget
  1640. X*sinkRC.s6.wcConstructor:    XmCreatePushButtonGadget
  1641. X*sinkRC.s7.wcConstructor:    XmCreatePushButtonGadget
  1642. X
  1643. X*sinkRC.s1.labelString:        UNIX stdout
  1644. X*sinkRC.s2.labelString:        UNIX file
  1645. X*sinkRC.s3.labelString:        UNIX pipe
  1646. X*sinkRC.s4.labelString:        CDA spooler
  1647. X*sinkRC.s5.labelString:        DTS virtual circuit
  1648. X*sinkRC.s6.labelString:        DTS Broadcast
  1649. X*sinkRC.s7.labelString:        TCP/IP socket
  1650. X
  1651. X#
  1652. X# Scrolled Data Flow `Drawing' Area
  1653. X#
  1654. X
  1655. X*displaySW.wcConstructor:        XmCreateScrolledWindow
  1656. X*displaySW.scrollingPolicy:        AUTOMATIC
  1657. X*displaySW.scrollBarDisplayPolicy:    AS_NEEDED
  1658. X*displaySW.wcChildren:            drawing
  1659. X*displaySW.topAttachment:        ATTACH_FORM
  1660. X*displaySW.leftAttachment:        ATTACH_WIDGET
  1661. X*displaySW.leftWidget:            *controlFrame
  1662. X*displaySW.leftOffset:            10
  1663. X*displaySW.bottomAttachment:        ATTACH_FORM
  1664. X*displaySW.rightAttachment:        ATTACH_FORM
  1665. X
  1666. X*drawing.wcConstructor:        XmCreateDrawingArea
  1667. X*drawing.width:            700
  1668. X*drawing.height:        700
  1669. X*drawing.wcCallback:        WcSetValueCB(*displaySW.workWindow: this )
  1670. X
  1671. X#ifdef Xrm_COMMENT
  1672. X----------------------------------------------------------------------
  1673. X
  1674. XThis section provides the resource specifications for the msgWindow, a
  1675. Xscrolled text window for trace, heartbeat, warning, and error messages.
  1676. X
  1677. X----------------------------------------------------------------------
  1678. X#endif
  1679. X
  1680. X*main.msgWindow.wcConstructor:    XmCreateText
  1681. X*main.msgWindow.wcCallback:    WcSetValueCB(*main.workWindow: this)
  1682. X
  1683. X*main.vscroll.wcConstructor:    XmCreateScrollBar
  1684. X*main.vscroll.wcCallback:       WcSetValueCB( *main.verticalScrollBar: this )
  1685. +FUNKY+STUFF+
  1686. echo '-rw-r--r--  1 david       18920 Jun 28 09:13 Mri07.PDWidgets    (as sent)'
  1687. chmod u=rw,g=r,o=r Mri07.PDWidgets
  1688. ls -l Mri07.PDWidgets
  1689. echo x - MriRegMotif.c
  1690. sed 's/^X//' > MriRegMotif.c <<'+FUNKY+STUFF+'
  1691. X/*
  1692. X** Copyright (c) 1990 David E. Smyth
  1693. X**
  1694. X** This file was derived from work performed by Martin Brunecky at
  1695. X** Auto-trol Technology Corporation, Denver, Colorado, under the
  1696. X** following copyright:
  1697. X**
  1698. X*******************************************************************************
  1699. X* Copyright 1990 by Auto-trol Technology Corporation, Denver, Colorado.
  1700. X*
  1701. X*                        All Rights Reserved
  1702. X*
  1703. X* Permission to use, copy, modify, and distribute this software and its
  1704. X* documentation for any purpose and without fee is hereby granted, provided
  1705. X* that the above copyright notice appears on all copies and that both the
  1706. X* copyright and this permission notice appear in supporting documentation
  1707. X* and that the name of Auto-trol not be used in advertising or publicity
  1708. X* pertaining to distribution of the software without specific, prior written
  1709. X* permission.
  1710. X*
  1711. X* Auto-trol disclaims all warranties with regard to this software, including
  1712. X* all implied warranties of merchantability and fitness, in no event shall
  1713. X* Auto-trol be liable for any special, indirect or consequential damages or
  1714. X* any damages whatsoever resulting from loss of use, data or profits, whether
  1715. X* in an action of contract, negligence or other tortious action, arising out
  1716. X* of or in connection with the use or performance of this software.
  1717. X*******************************************************************************
  1718. X**
  1719. X** Redistribution and use in source and binary forms are permitted
  1720. X** provided that the above copyright notice and this paragraph are
  1721. X** duplicated in all such forms and that any documentation, advertising
  1722. X** materials, and other materials related to such distribution and use
  1723. X** acknowledge that the software was developed by David E. Smyth.  The
  1724. X** name of David E. Smyth may not be used to endorse or promote products
  1725. X** derived from this software without specific prior written permission.
  1726. X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  1727. X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  1728. X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1729. X**
  1730. X*/
  1731. X
  1732. X/*
  1733. X* SCCS_data: @(#)MriRegisterMotif.c 1.0 ( 19 June 1990 )
  1734. X*
  1735. X* Subsystem_group:
  1736. X*
  1737. X*     Widget Creation Library - Motif Resource Interpreter
  1738. X*
  1739. X* Module_description:
  1740. X*
  1741. X*     This module contains registration routine for all Motif
  1742. X*     widget/gadget constructors and classes.
  1743. X*
  1744. X* Module_interface_summary: 
  1745. X*
  1746. X*     void MriRegisterMotif ( XtAppContext app )
  1747. X*
  1748. X* Module_history:
  1749. X*                                                  
  1750. X*   mm/dd/yy  initials  function  action
  1751. X*   --------  --------  --------  ---------------------------------------------
  1752. X*   04/03/90  MarBru    Create..
  1753. X*
  1754. X* Design_notes:
  1755. X*
  1756. X*******************************************************************************
  1757. X*/
  1758. X/*
  1759. X*******************************************************************************
  1760. X* Include_files.
  1761. X*******************************************************************************
  1762. X*/
  1763. X
  1764. X#ifdef MOTIF
  1765. X
  1766. X#include <Xm/Xm.h>
  1767. X
  1768. X#include <Xm/ArrowB.h>
  1769. X#include <Xm/ArrowBG.h>
  1770. X#include <Xm/BulletinB.h>
  1771. X#include <Xm/CascadeB.h>
  1772. X#include <Xm/CascadeBG.h>
  1773. X#include <Xm/Command.h>
  1774. X#include <Xm/DialogS.h>
  1775. X#include <Xm/DrawingA.h>
  1776. X#include <Xm/DrawnB.h>
  1777. X#include <Xm/FileSB.h>
  1778. X#include <Xm/Form.h>
  1779. X#include <Xm/Frame.h>
  1780. X#include <Xm/Label.h>
  1781. X#include <Xm/LabelG.h>
  1782. X#include <Xm/List.h>
  1783. X#include <Xm/MainW.h>
  1784. X#include <Xm/MenuShell.h>
  1785. X#include <Xm/MessageB.h>
  1786. X#include <Xm/PanedW.h>
  1787. X#include <Xm/PushB.h>
  1788. X#include <Xm/PushBG.h>
  1789. X#include <Xm/RowColumn.h>
  1790. X#include <Xm/Scale.h>
  1791. X#include <Xm/ScrollBar.h>
  1792. X#include <Xm/ScrolledW.h>
  1793. X#include <Xm/SelectioB.h>
  1794. X#include <Xm/SeparatoG.h>
  1795. X#include <Xm/Separator.h>
  1796. X#include <Xm/Text.h>
  1797. X#include <Xm/ToggleB.h>
  1798. X#include <Xm/ToggleBG.h>
  1799. X
  1800. Xvoid MriRegisterMotif ( app )
  1801. X    XtAppContext app;
  1802. X{
  1803. X#define RCONST( name, func ) WcRegisterConstructor ( app, name, func )
  1804. X#define RCN( name, class )   WcRegisterClassName ( app, name, class )
  1805. X#define RCP( name, class )   WcRegisterClassPtr  ( app, name, class )
  1806. X
  1807. X/* -- register all Motif constructors */
  1808. X RCONST( "XmCreateArrowButton",        XmCreateArrowButton        );
  1809. X RCONST( "XmCreateArrowButtonGadget",    XmCreateArrowButtonGadget    );
  1810. X RCONST( "XmCreateBulletinBoard",    XmCreateBulletinBoard        );
  1811. X RCONST( "XmCreateBulletinBoardDialog",    XmCreateBulletinBoardDialog    );
  1812. X RCONST( "XmCreateCascadeButton",    XmCreateCascadeButton        );
  1813. X RCONST( "XmCreateCascadeButtonGadget",    XmCreateCascadeButtonGadget    );
  1814. X RCONST( "XmCreateCommand",        XmCreateCommand            );
  1815. X RCONST( "XmCreateDialogShell",        XmCreateDialogShell        );
  1816. X RCONST( "XmCreateDrawingArea",        XmCreateDrawingArea        );
  1817. X RCONST( "XmCreateDrawnButton",        XmCreateDrawnButton        );
  1818. X RCONST( "XmCreateErrorDialog",        XmCreateErrorDialog        );
  1819. X RCONST( "XmCreateFileSelectionBox",    XmCreateFileSelectionBox    );
  1820. X RCONST( "XmCreateFileSelectionDialog",    XmCreateFileSelectionDialog    );
  1821. X RCONST( "XmCreateForm",        XmCreateForm            );
  1822. X RCONST( "XmCreateFormDialog",        XmCreateFormDialog        );
  1823. X RCONST( "XmCreateFrame",        XmCreateFrame            );
  1824. X RCONST( "XmCreateInformationDialog",    XmCreateInformationDialog    );
  1825. X RCONST( "XmCreateLabel",        XmCreateLabel            );
  1826. X RCONST( "XmCreateLabelGadget",        XmCreateLabelGadget        );
  1827. X RCONST( "XmCreateList",        XmCreateList            );
  1828. X RCONST( "XmCreateMainWindow",        XmCreateMainWindow        );
  1829. X RCONST( "XmCreateMenuBar",        XmCreateMenuBar            );
  1830. X RCONST( "XmCreateMenuShell",        XmCreateMenuShell        );
  1831. X RCONST( "XmCreateMessageBox",        XmCreateMessageBox        );
  1832. X RCONST( "XmCreateMessageDialog",    XmCreateMessageDialog        );
  1833. X RCONST( "XmCreateOptionMenu",        XmCreateOptionMenu        );
  1834. X RCONST( "XmCreatePanedWindow",        XmCreatePanedWindow        );
  1835. X RCONST( "XmCreatePopupMenu",        XmCreatePopupMenu        );
  1836. X RCONST( "XmCreatePromptDialog",    XmCreatePromptDialog        );
  1837. X RCONST( "XmCreatePulldownMenu",    XmCreatePulldownMenu        );
  1838. X RCONST( "XmCreatePushButton",        XmCreatePushButton        );
  1839. X RCONST( "XmCreatePushButtonGadget",    XmCreatePushButtonGadget    );
  1840. X RCONST( "XmCreateQuestionDialog",    XmCreateQuestionDialog        );
  1841. X RCONST( "XmCreateRadioBox",        XmCreateRadioBox        );
  1842. X RCONST( "XmCreateRowColumn",        XmCreateRowColumn        );
  1843. X RCONST( "XmCreateScale",        XmCreateScale            );
  1844. X RCONST( "XmCreateScrollBar",        XmCreateScrollBar        );
  1845. X RCONST( "XmCreateScrolledList",    XmCreateScrolledList        );
  1846. X RCONST( "XmCreateScrolledText",    XmCreateScrolledText        );
  1847. X RCONST( "XmCreateScrolledWindow",    XmCreateScrolledWindow        );
  1848. X RCONST( "XmCreateSelectionBox",    XmCreateSelectionBox        );
  1849. X RCONST( "XmCreateSelectionDialog",    XmCreateSelectionDialog        );
  1850. X RCONST( "XmCreateSeparator",        XmCreateSeparator        );
  1851. X RCONST( "XmCreateSeparatorGadget",    XmCreateSeparatorGadget        );
  1852. X RCONST( "XmCreateText",        XmCreateText            );
  1853. X RCONST( "XmCreateToggleButton",    XmCreateToggleButton        );
  1854. X RCONST( "XmCreateToggleButtonGadget",    XmCreateToggleButtonGadget    );
  1855. X RCONST( "XmCreateWarningDialog",    XmCreateWarningDialog        );
  1856. X RCONST( "XmCreateWorkingDialog",    XmCreateWorkingDialog        );
  1857. X
  1858. X/* -- register Motif widget classes */
  1859. X   RCP("xmArrowButtonWidgetClass",    xmArrowButtonWidgetClass    );
  1860. X   RCN("XmArrowButton",            xmArrowButtonWidgetClass    );
  1861. X   RCP("xmArrowButtonGadgetClass",    xmArrowButtonGadgetClass    );
  1862. X   RCN("XmArrowButtonGadget",        xmArrowButtonGadgetClass    );
  1863. X   RCP("xmBulletinBoardWidgetClass",    xmBulletinBoardWidgetClass    );
  1864. X   RCN("XmBulletinBoard",        xmBulletinBoardWidgetClass    );
  1865. X   RCP("xmCascadeButtonWidgetClass",    xmCascadeButtonWidgetClass    );
  1866. X   RCN("XmCascadeButton",        xmCascadeButtonWidgetClass    );
  1867. X   RCP("xmCascadeButtonGadgetClass",    xmCascadeButtonGadgetClass    );
  1868. X   RCN("XmCascadeButtonGadget",        xmCascadeButtonGadgetClass    );
  1869. X   RCP("xmCommandWidgetClass",        xmCommandWidgetClass        );
  1870. X   RCN("XmCommand",            xmCommandWidgetClass        );
  1871. X   RCP("xmDialogShellWidgetClass",    xmDialogShellWidgetClass    );
  1872. X   RCN("XmDialogShell",            xmDialogShellWidgetClass    );
  1873. X   RCP("xmDrawingAreaWidgetClass",    xmDrawingAreaWidgetClass    );
  1874. X   RCN("XmDrawingArea",            xmDrawingAreaWidgetClass    );
  1875. X   RCP("xmDrawnButtonWidgetClass",    xmDrawnButtonWidgetClass    );
  1876. X   RCN("XmDrawnButton",            xmDrawnButtonWidgetClass    );
  1877. X   RCP("xmFileSelectionBoxWidgetClass",    xmFileSelectionBoxWidgetClass    );
  1878. X   RCN("XmFileSelectionBox",        xmFileSelectionBoxWidgetClass    );
  1879. X   RCP("xmFormWidgetClass",        xmFormWidgetClass        );
  1880. X   RCN("XmForm",            xmFormWidgetClass        );
  1881. X   RCP("xmFrameWidgetClass",        xmFrameWidgetClass        );
  1882. X   RCN("XmFrame",            xmFrameWidgetClass        );
  1883. X   RCP("xmGadgetClass",            xmGadgetClass            );
  1884. X   RCN("XmGadget",            xmGadgetClass            );
  1885. X   RCP("xmLabelWidgetClass",        xmLabelWidgetClass        );
  1886. X   RCN("XmLabel",            xmLabelWidgetClass        );
  1887. X   RCP("xmLabelGadgetClass",        xmLabelGadgetClass        );
  1888. X   RCN("XmLabelGadget",            xmLabelGadgetClass        );
  1889. X   RCP("xmListWidgetClass",        xmListWidgetClass        );
  1890. X   RCN("XmList",            xmListWidgetClass        );
  1891. X   RCP("xmMainWindowWidgetClass",    xmMainWindowWidgetClass        );
  1892. X   RCN("XmMainWindow",            xmMainWindowWidgetClass        );
  1893. X   RCP("xmManagerWidgetClass",        xmManagerWidgetClass        );
  1894. X   RCN("XmManager",            xmManagerWidgetClass        );
  1895. X   RCP("xmMenuShellWidgetClass",    xmMenuShellWidgetClass        );
  1896. X   RCN("XmMenuShell",            xmMenuShellWidgetClass        );
  1897. X   RCP("xmMessageBoxWidgetClass",    xmMessageBoxWidgetClass        );
  1898. X   RCN("XmMessageBox",            xmMessageBoxWidgetClass        );
  1899. X   RCP("xmPanedWindowWidgetClass",    xmPanedWindowWidgetClass    );
  1900. X   RCN("XmPanedWindow",            xmPanedWindowWidgetClass    );
  1901. X   RCP("xmPrimitiveWidgetClass",    xmPrimitiveWidgetClass        );
  1902. X   RCN("XmPrimitive",            xmPrimitiveWidgetClass        );
  1903. X   RCP("xmPushButtonWidgetClass",    xmPushButtonWidgetClass        );
  1904. X   RCN("XmPushButton",            xmPushButtonWidgetClass        );
  1905. X   RCP("xmPushButtonGadgetClass",    xmPushButtonGadgetClass        );
  1906. X   RCN("XmPushButtonGadget",        xmPushButtonGadgetClass        );
  1907. X   RCP("xmRowColumnWidgetClass",    xmRowColumnWidgetClass        );
  1908. X   RCN("XmRowColumn",            xmRowColumnWidgetClass        );
  1909. X/* RCP("xmSashWidgetClass",        xmSashWidgetClass        );  */
  1910. X/* RCN("XmSash",            xmSashWidgetClass        );  */
  1911. X   RCP("xmScaleWidgetClass",        xmScaleWidgetClass        );
  1912. X   RCN("XmScale",            xmScaleWidgetClass        );
  1913. X   RCP("xmScrollBarWidgetClass",    xmScrollBarWidgetClass        );
  1914. X   RCN("XmScrollBar",            xmScrollBarWidgetClass        );
  1915. X   RCP("xmScrolledWindowWidgetClass",    xmScrolledWindowWidgetClass    );
  1916. X   RCN("XmScrolledWindow",        xmScrolledWindowWidgetClass    );
  1917. X   RCP("xmSelectionBoxWidgetClass",    xmSelectionBoxWidgetClass    );
  1918. X   RCN("XmSelectionBox",        xmSelectionBoxWidgetClass    );
  1919. X   RCP("xmSeparatorWidgetClass",    xmSeparatorWidgetClass        );
  1920. X   RCN("XmSeparator",            xmSeparatorWidgetClass        );
  1921. X   RCP("xmSeparatorGadgetClass",    xmSeparatorGadgetClass        );
  1922. X   RCN("XmSeparatorGadget",        xmSeparatorGadgetClass        );
  1923. X   RCP("xmTextWidgetClass",        xmTextWidgetClass        );
  1924. X   RCN("XmText",            xmTextWidgetClass        );
  1925. X   RCP("xmToggleButtonWidgetClass",    xmToggleButtonWidgetClass    );
  1926. X   RCN("XmToggleButton",        xmToggleButtonWidgetClass    );
  1927. X   RCP("xmToggleButtonGadgetClass",    xmToggleButtonGadgetClass    );
  1928. X   RCN("XmToggleButtonGadget",        xmToggleButtonGadgetClass    );
  1929. X
  1930. X#undef  RCONST
  1931. X#undef  RCN
  1932. X#undef  RCP
  1933. X}
  1934. X#endif MOTIF
  1935. +FUNKY+STUFF+
  1936. echo '-rw-r--r--  1 david       10868 Jun 28 09:13 MriRegMotif.c    (as sent)'
  1937. chmod u=rw,g=r,o=r MriRegMotif.c
  1938. ls -l MriRegMotif.c
  1939. exit 0
  1940.  
  1941. dan
  1942. ----------------------------------------------------
  1943. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1944. Opinions expressed reflect those of the author only.
  1945.