http://ftp.x.org/contrib/applications/xscreensaver-3.23.tar.gz
[xscreensaver] / driver / demo-Xm-widgets.c
1 /* demo-Xm.c --- implements the interactive demo-mode and options dialogs.
2  * xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation.  No representations are made about the suitability of this
9  * software for any purpose.  It is provided "as is" without express or 
10  * implied warranty.
11  */
12
13 #ifdef HAVE_CONFIG_H
14 # include "config.h"
15 #endif
16
17 #include <X11/Xatom.h>
18 #include <X11/Intrinsic.h>
19
20 #include <X11/IntrinsicP.h>  /* just for debug info */
21 #include <X11/ShellP.h>
22
23 #include <X11/Shell.h>
24 #include <Xm/Xm.h>
25 #include <Xm/MainW.h>
26 #include <Xm/Form.h>
27 #include <Xm/Frame.h>
28 #include <Xm/ScrolledW.h>
29 #include <Xm/List.h>
30 #include <Xm/PushB.h>
31 #include <Xm/PushBG.h>
32 #include <Xm/Text.h>
33 #include <Xm/TextF.h>
34 #include <Xm/ToggleBG.h>
35 #include <Xm/CascadeBG.h>
36 #include <Xm/RowColumn.h>
37 #include <Xm/LabelG.h>
38 #include <Xm/SeparatoG.h>
39 #include <Xm/SelectioB.h>
40
41 #ifdef HAVE_XMCOMBOBOX          /* a Motif 2.0 widget */
42 # include <Xm/ComboBox.h>
43 # ifndef XmNtextField           /* Lesstif 0.89.4 bug */
44 #  undef HAVE_XMCOMBOBOX
45 # endif
46 #endif /* HAVE_XMCOMBOBOX */
47
48 #include <stdio.h>
49
50
51
52 const char *visual_menu[] = {
53   "Any", "Best", "Default", "Default-N", "GL", "TrueColor", "PseudoColor",
54   "StaticGray", "GrayScale", "DirectColor", "Color", "Gray", "Mono", 0 
55 };
56
57
58
59 static Widget create_demos_page (Widget parent);
60 static Widget create_options_page (Widget parent);
61
62 static void
63 tab_cb (Widget button, XtPointer client_data, XtPointer ignored)
64 {
65   Widget parent = XtParent(button);
66   Widget tabber = XtNameToWidget (parent, "*folder");
67   Widget this_tab = (Widget) client_data;
68   Widget *kids = 0;
69   Cardinal nkids = 0;
70   if (!tabber) abort();
71   
72   XtVaGetValues (tabber, XmNnumChildren, &nkids, XmNchildren, &kids, 0);
73   if (!kids) abort();
74   if (nkids > 0)
75     XtUnmanageChildren (kids, nkids);
76
77   XtManageChild (this_tab);
78 }
79
80
81 Widget
82 create_xscreensaver_demo (Widget parent)
83 {
84   /* MainWindow
85        Form
86          Menubar
87          DemoTab
88          OptionsTab
89          HR
90          Tabber
91            (demo page)
92            (options page)
93    */
94
95   Widget mainw, form, menubar;
96   Widget demo_tab, options_tab, hr, tabber, demos, options;
97   Arg av[100];
98   int ac = 0;
99
100   mainw = XmCreateMainWindow (parent, "demoForm", av, ac);
101   form = XmCreateForm (mainw, "form", av, ac);
102   menubar = XmCreateSimpleMenuBar (form, "menubar", av, ac);
103   XtVaSetValues (menubar,
104                  XmNtopAttachment, XmATTACH_FORM,
105                  XmNleftAttachment, XmATTACH_FORM,
106                  XmNrightAttachment, XmATTACH_FORM,
107                  0);
108
109   {
110     Widget menu = 0, item = 0;
111     char *menus[] = {
112       "*file", "blank", "lock", "kill", "restart", "-", "exit",
113       "*edit", "cut", "copy", "paste",
114       "*help", "about", "docMenu" };
115     int i;
116     for (i = 0; i < sizeof(menus)/sizeof(*menus); i++)
117       {
118         ac = 0;
119         if (menus[i][0] == '-')
120           item = XmCreateSeparatorGadget (menu, "separator", av, ac);
121         else if (menus[i][0] != '*')
122           item = XmCreatePushButtonGadget (menu, menus[i], av, ac);
123         else
124           {
125             menu = XmCreatePulldownMenu (parent, menus[i]+1, av, ac);
126             XtSetArg (av [ac], XmNsubMenuId, menu); ac++;
127             item = XmCreateCascadeButtonGadget (menubar, menus[i]+1, av, ac);
128
129             if (!strcmp (menus[i]+1, "help"))
130               XtVaSetValues(menubar, XmNmenuHelpWidget, item, 0);
131           }
132         XtManageChild (item);
133       }
134     ac = 0;
135   }
136
137   demo_tab = XmCreatePushButtonGadget (form, "demoTab", av, ac);
138   XtVaSetValues (demo_tab,
139                  XmNleftAttachment, XmATTACH_FORM,
140                  XmNtopAttachment, XmATTACH_WIDGET,
141                  XmNtopWidget, menubar,
142                  0);
143
144   options_tab = XmCreatePushButtonGadget (form, "optionsTab", av, ac);
145   XtVaSetValues (options_tab,
146                  XmNleftAttachment, XmATTACH_WIDGET,
147                  XmNleftWidget, demo_tab,
148                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
149                  XmNtopWidget, demo_tab,
150                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
151                  XmNbottomWidget, demo_tab,
152                  0);
153
154   hr = XmCreateSeparatorGadget (form, "hr", av, ac);
155   XtVaSetValues (hr,
156                  XmNleftAttachment, XmATTACH_FORM,
157                  XmNrightAttachment, XmATTACH_FORM,
158                  XmNtopAttachment, XmATTACH_WIDGET,
159                  XmNtopWidget, demo_tab,
160                  0);
161
162   tabber = XmCreateForm (form, "folder", av, ac);
163   XtVaSetValues (tabber,
164                  XmNtopAttachment, XmATTACH_WIDGET,
165                  XmNtopWidget, hr,
166                  XmNleftAttachment, XmATTACH_FORM,
167                  XmNrightAttachment, XmATTACH_FORM,
168                  XmNbottomAttachment, XmATTACH_FORM,
169                  0);
170
171   demos = create_demos_page (tabber);
172   options = create_options_page (tabber);
173
174   XtAddCallback (demo_tab, XmNactivateCallback, tab_cb, demos);
175   XtAddCallback (options_tab, XmNactivateCallback, tab_cb, options);
176
177   XtManageChild (demos);
178   XtManageChild (options);
179
180   XtManageChild (demo_tab);
181   XtManageChild (options_tab);
182   XtManageChild (hr);
183   XtManageChild (menubar);
184   XtManageChild (tabber);
185   XtManageChild (form);
186
187 #if 1
188   XtUnmanageChild (options);
189   XtManageChild (demos);
190 #endif
191
192   return mainw;
193 }
194
195
196 static Widget
197 create_demos_page (Widget parent)
198 {
199   /* Form1 (horizontal)
200        Form2 (vertical)
201          Scroller
202            List
203          ButtonBox1 (vertical)
204            Button ("Down")
205            Button ("Up")
206        Form3 (vertical)
207          Frame
208            Label
209            TextArea (doc)
210          Label
211          Text ("Command Line")
212          Form4 (horizontal)
213            Checkbox ("Enabled")
214            Label ("Visual")
215            ComboBox
216          HR
217          ButtonBox2 (vertical)
218            Button ("Demo")
219            Button ("Documentation")
220    */
221   Widget form1, form2, form3, form4;
222   Widget scroller, list, buttonbox1, down, up;
223   Widget frame, frame_label, doc, cmd_label, cmd_text, enabled, vis_label;
224   Widget   combo;
225   Widget hr, buttonbox2, demo, man;
226   Arg av[100];
227   int ac = 0;
228   int i;
229
230   form1 = XmCreateForm (parent, "form1", av, ac);
231   form2 = XmCreateForm (form1, "form2", av, ac);
232   XtVaSetValues (form2,
233                  XmNtopAttachment, XmATTACH_FORM,
234                  XmNleftAttachment, XmATTACH_FORM,
235                  XmNbottomAttachment, XmATTACH_FORM,
236                  0);
237
238   scroller = XmCreateScrolledWindow (form2, "scroller", av, ac);
239   XtVaSetValues (scroller,
240                  XmNtopAttachment, XmATTACH_FORM,
241                  XmNleftAttachment, XmATTACH_FORM,
242                  XmNrightAttachment, XmATTACH_FORM,
243                  XmNbottomAttachment, XmATTACH_WIDGET,
244                  0);
245   list = XmCreateList (scroller, "list", av, ac);
246
247   buttonbox1 = XmCreateForm (form2, "buttonbox1", av, ac);
248   XtVaSetValues (buttonbox1,
249                  XmNleftAttachment, XmATTACH_FORM,
250                  XmNrightAttachment, XmATTACH_FORM,
251                  XmNbottomAttachment, XmATTACH_FORM,
252                  0);
253   XtVaSetValues (scroller, XmNbottomWidget, buttonbox1, 0);
254
255   down = XmCreatePushButton (buttonbox1, "down", av, ac);
256   XtVaSetValues (down,
257                  XmNleftAttachment, XmATTACH_FORM,
258                  XmNtopAttachment, XmATTACH_FORM,
259                  XmNbottomAttachment, XmATTACH_FORM,
260                  0);
261   up = XmCreatePushButton (buttonbox1, "up", av, ac);
262   XtVaSetValues (up,
263                  XmNleftAttachment, XmATTACH_WIDGET,
264                  XmNleftWidget, down,
265                  XmNtopAttachment, XmATTACH_FORM,
266                  XmNbottomAttachment, XmATTACH_FORM,
267                  0);
268
269   form3 = XmCreateForm (form1, "form3", av, ac);
270   XtVaSetValues (form3,
271                  XmNtopAttachment, XmATTACH_FORM,
272                  XmNleftAttachment, XmATTACH_WIDGET,
273                  XmNleftWidget, form2,
274                  XmNrightAttachment, XmATTACH_FORM,
275                  XmNbottomAttachment, XmATTACH_FORM,
276                  0);
277   frame = XmCreateFrame (form3, "frame", av, ac);
278
279   ac = 0;
280   XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++;
281   frame_label = XmCreateLabelGadget (frame, "frameLabel", av, ac);
282
283   ac = 0;
284   XtVaSetValues (frame,
285                  XmNtopAttachment, XmATTACH_FORM,
286                  XmNleftAttachment, XmATTACH_FORM,
287                  XmNrightAttachment, XmATTACH_FORM,
288                  XmNbottomAttachment, XmATTACH_WIDGET,
289                  0);
290
291   ac = 0;
292   XtSetArg (av [ac], XmNchildType, XmFRAME_WORKAREA_CHILD); ac++;
293   doc = XmCreateText (frame, "doc", av, ac);
294
295   ac = 0;
296   XtVaSetValues (doc,
297                  XmNeditable, FALSE,
298                  XmNcursorPositionVisible, FALSE,
299                  XmNwordWrap, TRUE,
300                  XmNeditMode, XmMULTI_LINE_EDIT,
301                  XmNshadowThickness, 0,
302                  0);
303
304   cmd_label = XmCreateLabelGadget (form3, "cmdLabel", av, ac);
305   XtVaSetValues (cmd_label,
306                  XmNleftAttachment, XmATTACH_FORM,
307                  XmNrightAttachment, XmATTACH_FORM,
308                  XmNbottomAttachment, XmATTACH_WIDGET,
309                  0);
310   XtVaSetValues (frame, XmNbottomWidget, cmd_label, 0);
311
312   cmd_text = XmCreateTextField (form3, "cmdText", av, ac);
313   XtVaSetValues (cmd_text,
314                  XmNleftAttachment, XmATTACH_FORM,
315                  XmNrightAttachment, XmATTACH_FORM,
316                  XmNbottomAttachment, XmATTACH_WIDGET,
317                  0);
318   XtVaSetValues (cmd_label, XmNbottomWidget, cmd_text, 0);
319
320   form4 = XmCreateForm (form3, "form4", av, ac);
321   XtVaSetValues (form4,
322                  XmNleftAttachment, XmATTACH_FORM,
323                  XmNrightAttachment, XmATTACH_FORM,
324                  XmNbottomAttachment, XmATTACH_WIDGET,
325                  0);
326   XtVaSetValues (cmd_text, XmNbottomWidget, form4, 0);
327
328   enabled = XmCreateToggleButtonGadget (form4, "enabled", av, ac);
329   XtVaSetValues (enabled,
330                  XmNtopAttachment, XmATTACH_FORM,
331                  XmNleftAttachment, XmATTACH_FORM,
332                  XmNbottomAttachment, XmATTACH_FORM,
333                  0);
334   vis_label = XmCreateLabelGadget (form4, "visLabel", av, ac);
335   XtVaSetValues (vis_label,
336                  XmNtopAttachment, XmATTACH_FORM,
337                  XmNleftAttachment, XmATTACH_WIDGET,
338                  XmNleftWidget, enabled,
339                  XmNbottomAttachment, XmATTACH_FORM,
340                  0);
341 #ifdef HAVE_XMCOMBOBOX
342   {
343     Widget list;
344     ac = 0;
345     XtSetArg (av [ac], XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX); ac++;
346     combo = XmCreateComboBox (form4, "combo", av, ac);
347     for (i = 0; visual_menu[i]; i++)
348       {
349         XmString xs = XmStringCreate ((char *) visual_menu[i],
350                                       XmSTRING_DEFAULT_CHARSET);
351         XmComboBoxAddItem (combo, xs, 0, False);
352         XmStringFree (xs);
353       }
354     XtVaGetValues (combo, XmNlist, &list, 0);
355     XtVaSetValues (list, XmNvisibleItemCount, i, 0);
356   }
357 #else /* !HAVE_XMCOMBOBOX */
358   {
359     Widget popup_menu = XmCreatePulldownMenu (parent, "menu", av, ac);
360     Widget kids[100];
361     for (i = 0; visual_menu[i]; i++)
362       {
363         XmString xs = XmStringCreate ((char *) visual_menu[i],
364                                       XmSTRING_DEFAULT_CHARSET);
365         ac = 0;
366         XtSetArg (av [ac], XmNlabelString, xs); ac++;
367         kids[i] = XmCreatePushButtonGadget (popup_menu, "button", av, ac);
368         /* XtAddCallback (combo, XmNactivateCallback, visual_popup_cb,
369            combo); */
370         XmStringFree (xs);
371       }
372     XtManageChildren (kids, i);
373
374     ac = 0;
375     XtSetArg (av [ac], XmNsubMenuId, popup_menu); ac++;
376     combo = XmCreateOptionMenu (form4, "combo", av, ac);
377     ac = 0;
378   }
379 #endif /* !HAVE_XMCOMBOBOX */
380
381   XtVaSetValues (combo,
382                  XmNtopAttachment, XmATTACH_FORM,
383                  XmNleftAttachment, XmATTACH_WIDGET,
384                  XmNleftWidget, vis_label,
385                  XmNbottomAttachment, XmATTACH_FORM,
386                  0);
387
388   hr = XmCreateSeparatorGadget (form3, "hr", av, ac);
389   XtVaSetValues (hr,
390                  XmNleftAttachment, XmATTACH_FORM,
391                  XmNrightAttachment, XmATTACH_FORM,
392                  XmNbottomAttachment, XmATTACH_WIDGET,
393                  0);
394   XtVaSetValues (form4, XmNbottomWidget, hr, 0);
395
396   buttonbox2 = XmCreateForm (form3, "buttonbox2", av, ac);
397   XtVaSetValues (buttonbox2,
398                  XmNleftAttachment, XmATTACH_FORM,
399                  XmNrightAttachment, XmATTACH_FORM,
400                  XmNbottomAttachment, XmATTACH_FORM,
401                  0);
402   XtVaSetValues (hr, XmNbottomWidget, buttonbox2, 0);
403
404   demo = XmCreatePushButtonGadget (buttonbox2, "demo", av, ac);
405   XtVaSetValues (demo,
406                  XmNleftAttachment, XmATTACH_FORM,
407                  XmNtopAttachment, XmATTACH_FORM,
408                  XmNbottomAttachment, XmATTACH_FORM,
409                  0);
410   man = XmCreatePushButtonGadget (buttonbox2, "man", av, ac);
411   XtVaSetValues (man,
412                  XmNrightAttachment, XmATTACH_FORM,
413                  XmNtopAttachment, XmATTACH_FORM,
414                  XmNbottomAttachment, XmATTACH_FORM,
415                  0);
416
417   XtManageChild (demo);
418   XtManageChild (man);
419   XtManageChild (buttonbox2);
420   XtManageChild (hr);
421
422   XtManageChild (combo);
423   XtManageChild (vis_label);
424   XtManageChild (enabled);
425   XtManageChild (form4);
426
427   XtManageChild (cmd_text);
428   XtManageChild (cmd_label);
429
430   XtManageChild (doc);
431   XtManageChild (frame_label);
432   XtManageChild (frame);
433   XtManageChild (form3);
434
435   XtManageChild (up);
436   XtManageChild (down);
437   XtManageChild (buttonbox1);
438
439   XtManageChild (list);
440   XtManageChild (scroller);
441   XtManageChild (form2);
442
443   XtManageChild (form1);
444
445   XtVaSetValues (form1,
446                  XmNleftAttachment, XmATTACH_FORM,
447                  XmNrightAttachment, XmATTACH_FORM,
448                  XmNtopAttachment, XmATTACH_FORM,
449                  XmNbottomAttachment, XmATTACH_FORM,
450                  0);
451
452   return form1;
453 }
454
455
456
457 static Widget
458 create_options_page (Widget parent)
459 {
460   Arg av[64];
461   int ac = 0;
462   Widget children[100];
463   Widget timeout_label, cycle_label, fade_seconds_label, fade_ticks_label;
464   Widget lock_label, passwd_label, hr;
465   Widget preferences_form;
466
467   Widget timeout_text, cycle_text, fade_text, fade_ticks_text;
468   Widget lock_timeout_text, passwd_timeout_text, verbose_toggle;
469   Widget install_cmap_toggle, fade_toggle, unfade_toggle;
470   Widget lock_toggle, prefs_done, prefs_cancel;
471
472   ac = 0;
473   XtSetArg (av [ac], XmNdialogType, XmDIALOG_PROMPT); ac++;
474
475   ac = 0;
476   XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++;
477   XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
478   XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++;
479   XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++;
480   preferences_form = XmCreateForm (parent, "preferencesForm", av, ac);
481   XtManageChild (preferences_form);
482
483   ac = 0;
484
485   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
486   timeout_label = XmCreateLabelGadget (preferences_form, "timeoutLabel",
487                                        av, ac);
488   ac = 0;
489   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
490   cycle_label = XmCreateLabelGadget (preferences_form, "cycleLabel",
491                                      av, ac);
492   ac = 0;
493   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
494   fade_seconds_label = XmCreateLabelGadget (preferences_form,
495                                             "fadeSecondsLabel", av, ac);
496   ac = 0;
497   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
498   fade_ticks_label = XmCreateLabelGadget (preferences_form, "fadeTicksLabel",
499                                           av, ac);
500   ac = 0;
501   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
502   lock_label = XmCreateLabelGadget (preferences_form, "lockLabel", av, ac);
503   ac = 0;
504   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
505   passwd_label = XmCreateLabelGadget (preferences_form, "passwdLabel", av, ac);
506   ac = 0;
507   timeout_text = XmCreateTextField (preferences_form, "timeoutText", av, ac);
508   cycle_text = XmCreateTextField (preferences_form, "cycleText", av, ac);
509   fade_text = XmCreateTextField (preferences_form, "fadeSecondsText", av, ac);
510   fade_ticks_text = XmCreateTextField (preferences_form, "fadeTicksText",
511                                        av, ac);
512   lock_timeout_text = XmCreateTextField (preferences_form, "lockText",
513                                          av, ac);
514   passwd_timeout_text = XmCreateTextField (preferences_form, "passwdText",
515                                            av, ac);
516   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
517   verbose_toggle = XmCreateToggleButtonGadget (preferences_form,
518                                                "verboseToggle", av, ac);
519   ac = 0;
520   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
521   install_cmap_toggle = XmCreateToggleButtonGadget (preferences_form,
522                                                     "cmapToggle", av, ac);
523   ac = 0;
524   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
525   fade_toggle = XmCreateToggleButtonGadget (preferences_form, "fadeToggle",
526                                             av, ac);
527   ac = 0;
528   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
529   unfade_toggle = XmCreateToggleButtonGadget (preferences_form, "unfadeToggle",
530                                               av,ac);
531   ac = 0;
532   XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
533   lock_toggle = XmCreateToggleButtonGadget (preferences_form, "lockToggle",
534                                             av, ac);
535   ac = 0;
536   hr = XmCreateSeparatorGadget (preferences_form, "separator", av, ac);
537
538   prefs_done = XmCreatePushButtonGadget (preferences_form, "OK", av, ac);
539   prefs_cancel = XmCreatePushButtonGadget (preferences_form, "Cancel", av, ac);
540
541   XtVaSetValues (timeout_label,
542                  XmNtopAttachment, XmATTACH_FORM,
543                  XmNtopOffset, 4,
544                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
545                  XmNbottomWidget, timeout_text,
546                  XmNleftAttachment, XmATTACH_FORM,
547                  XmNleftOffset, 20,
548                  XmNrightAttachment, XmATTACH_WIDGET,
549                  XmNrightOffset, 4,
550                  XmNrightWidget, timeout_text,
551                  0);
552
553   XtVaSetValues (cycle_label,
554                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
555                  XmNtopOffset, 0,
556                  XmNtopWidget, cycle_text,
557                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
558                  XmNbottomOffset, 0,
559                  XmNbottomWidget, cycle_text,
560                  XmNleftAttachment, XmATTACH_FORM,
561                  XmNleftOffset, 20,
562                  XmNrightAttachment, XmATTACH_WIDGET,
563                  XmNrightOffset, 4,
564                  XmNrightWidget, cycle_text,
565                  0);
566
567   XtVaSetValues (fade_seconds_label,
568                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
569                  XmNtopOffset, 0,
570                  XmNtopWidget, fade_text,
571                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
572                  XmNbottomOffset, 0,
573                  XmNbottomWidget, fade_text,
574                  XmNleftAttachment, XmATTACH_FORM,
575                  XmNleftOffset, 20,
576                  XmNrightAttachment, XmATTACH_WIDGET,
577                  XmNrightOffset, 4,
578                  XmNrightWidget, fade_text,
579                  0);
580
581   XtVaSetValues (fade_ticks_label,
582                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
583                  XmNtopOffset, 0,
584                  XmNtopWidget, fade_ticks_text,
585                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
586                  XmNbottomOffset, 0,
587                  XmNbottomWidget, fade_ticks_text,
588                  XmNleftAttachment, XmATTACH_FORM,
589                  XmNleftOffset, 20,
590                  XmNrightAttachment, XmATTACH_WIDGET,
591                  XmNrightOffset, 4,
592                  XmNrightWidget, fade_ticks_text,
593                  0);
594
595   XtVaSetValues (lock_label,
596                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
597                  XmNtopOffset, 0,
598                  XmNtopWidget, lock_timeout_text,
599                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
600                  XmNbottomOffset, 0,
601                  XmNbottomWidget, lock_timeout_text,
602                  XmNleftAttachment, XmATTACH_FORM,
603                  XmNleftOffset, 19,
604                  XmNrightAttachment, XmATTACH_WIDGET,
605                  XmNrightOffset, 4,
606                  XmNrightWidget, lock_timeout_text,
607                  0);
608
609   XtVaSetValues (passwd_label,
610                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
611                  XmNtopOffset, 0,
612                  XmNtopWidget, passwd_timeout_text,
613                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
614                  XmNbottomOffset, 0,
615                  XmNbottomWidget, passwd_timeout_text,
616                  XmNleftAttachment, XmATTACH_FORM,
617                  XmNleftOffset, 14,
618                  XmNrightAttachment, XmATTACH_WIDGET,
619                  XmNrightOffset, 4,
620                  XmNrightWidget, passwd_timeout_text,
621                  0);
622
623   XtVaSetValues (timeout_text,
624                  XmNtopAttachment, XmATTACH_FORM,
625                  XmNtopOffset, 4,
626                  XmNleftAttachment, XmATTACH_FORM,
627                  XmNleftOffset, 141,
628                  0);
629
630   XtVaSetValues (cycle_text,
631                  XmNtopAttachment, XmATTACH_WIDGET,
632                  XmNtopOffset, 2,
633                  XmNtopWidget, timeout_text,
634                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
635                  XmNleftOffset, 0,
636                  XmNleftWidget, timeout_text,
637                  0);
638
639   XtVaSetValues (fade_text,
640                  XmNtopAttachment, XmATTACH_WIDGET,
641                  XmNtopOffset, 2,
642                  XmNtopWidget, cycle_text,
643                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
644                  XmNleftOffset, 0,
645                  XmNleftWidget, cycle_text,
646                  0);
647
648   XtVaSetValues (fade_ticks_text,
649                  XmNtopAttachment, XmATTACH_WIDGET,
650                  XmNtopOffset, 2,
651                  XmNtopWidget, fade_text,
652                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
653                  XmNleftOffset, 0,
654                  XmNleftWidget, fade_text,
655                  0);
656
657   XtVaSetValues (lock_timeout_text,
658                  XmNtopAttachment, XmATTACH_WIDGET,
659                  XmNtopOffset, 2,
660                  XmNtopWidget, fade_ticks_text,
661                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
662                  XmNleftOffset, 0,
663                  XmNleftWidget, fade_ticks_text,
664                  0);
665
666   XtVaSetValues (passwd_timeout_text,
667                  XmNtopAttachment, XmATTACH_WIDGET,
668                  XmNtopOffset, 4,
669                  XmNtopWidget, lock_timeout_text,
670                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
671                  XmNleftOffset, 0,
672                  XmNleftWidget, lock_timeout_text,
673                  0);
674
675   XtVaSetValues (verbose_toggle,
676                  XmNtopAttachment, XmATTACH_FORM,
677                  XmNtopOffset, 4,
678                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
679                  XmNbottomOffset, 0,
680                  XmNbottomWidget, timeout_text,
681                  XmNleftAttachment, XmATTACH_WIDGET,
682                  XmNleftOffset, 20,
683                  XmNleftWidget, timeout_text,
684                  XmNrightAttachment, XmATTACH_FORM,
685                  XmNrightOffset, 20,
686                  0);
687
688   XtVaSetValues (install_cmap_toggle,
689                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
690                  XmNtopOffset, 0,
691                  XmNtopWidget, cycle_text,
692                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
693                  XmNbottomOffset, 0,
694                  XmNbottomWidget, cycle_text,
695                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
696                  XmNleftOffset, 0,
697                  XmNleftWidget, verbose_toggle,
698                  XmNrightAttachment, XmATTACH_FORM,
699                  XmNrightOffset, 20,
700                  0);
701
702   XtVaSetValues (fade_toggle,
703                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
704                  XmNtopOffset, 0,
705                  XmNtopWidget, fade_text,
706                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
707                  XmNbottomOffset, 0,
708                  XmNbottomWidget, fade_text,
709                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
710                  XmNleftOffset, 0,
711                  XmNleftWidget, install_cmap_toggle,
712                  XmNrightAttachment, XmATTACH_FORM,
713                  XmNrightOffset, 20,
714                  0);
715
716   XtVaSetValues (unfade_toggle,
717                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
718                  XmNtopOffset, 0,
719                  XmNtopWidget, fade_ticks_text,
720                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
721                  XmNbottomOffset, 0,
722                  XmNbottomWidget, fade_ticks_text,
723                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
724                  XmNleftOffset, 0,
725                  XmNleftWidget, fade_toggle,
726                  XmNrightAttachment, XmATTACH_FORM,
727                  XmNrightOffset, 20,
728                  0);
729
730   XtVaSetValues (lock_toggle,
731                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
732                  XmNtopOffset, 0,
733                  XmNtopWidget, lock_timeout_text,
734                  XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
735                  XmNbottomOffset, 0,
736                  XmNbottomWidget, lock_timeout_text,
737                  XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
738                  XmNleftOffset, 0,
739                  XmNleftWidget, unfade_toggle,
740                  XmNrightAttachment, XmATTACH_FORM,
741                  XmNrightOffset, 20,
742                  0);
743
744   XtVaSetValues (hr,
745                  XmNtopWidget, passwd_timeout_text,
746                  XmNbottomAttachment, XmATTACH_FORM,
747                  XmNbottomOffset, 4,
748                  XmNleftAttachment, XmATTACH_FORM,
749                  XmNrightAttachment, XmATTACH_FORM,
750                  0);
751
752   XtVaSetValues (prefs_done,
753                  XmNleftAttachment, XmATTACH_FORM,
754                  XmNbottomAttachment, XmATTACH_FORM,
755                  0);
756   XtVaSetValues (prefs_cancel,
757                  XmNrightAttachment, XmATTACH_FORM,
758                  XmNbottomAttachment, XmATTACH_FORM,
759                  0);
760   XtVaSetValues (hr,
761                  XmNbottomAttachment, XmATTACH_WIDGET,
762                  XmNbottomWidget, prefs_done,
763                  0);
764
765   ac = 0;
766   children[ac++] = timeout_label;
767   children[ac++] = cycle_label;
768   children[ac++] = fade_seconds_label;
769   children[ac++] = fade_ticks_label;
770   children[ac++] = lock_label;
771   children[ac++] = passwd_label;
772   children[ac++] = timeout_text;
773   children[ac++] = cycle_text;
774   children[ac++] = fade_text;
775   children[ac++] = fade_ticks_text;
776   children[ac++] = lock_timeout_text;
777   children[ac++] = passwd_timeout_text;
778   children[ac++] = verbose_toggle;
779   children[ac++] = install_cmap_toggle;
780   children[ac++] = fade_toggle;
781   children[ac++] = unfade_toggle;
782   children[ac++] = lock_toggle;
783   children[ac++] = hr;
784
785   XtManageChildren(children, ac);
786   ac = 0;
787
788   XtManageChild (prefs_done);
789   XtManageChild (prefs_cancel);
790
791   XtManageChild (preferences_form);
792
793   XtVaSetValues (preferences_form,
794                  XmNleftAttachment, XmATTACH_FORM,
795                  XmNrightAttachment, XmATTACH_FORM,
796                  XmNtopAttachment, XmATTACH_FORM,
797                  XmNbottomAttachment, XmATTACH_FORM,
798                  0);
799
800   return preferences_form;
801 }