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