0daa7b352ba9484fdf9ff0e095049aadbf0bf7dd
[xscreensaver] / driver / dialogs-Xm.c
1 /* dialogs-Xm.c --- Motif widgets for demo, options, and password dialogs.
2  * xscreensaver, Copyright (c) 1993-1997 Jamie Zawinski <jwz@netscape.com>
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 /* The code in this file started off its life as the output of XDesigner,
14    but I've since hacked it by hand...  It's a mess, avert your eyes.
15  */
16
17 #ifdef HAVE_CONFIG_H
18 # include "config.h"
19 #endif
20
21 #include <X11/Xatom.h>
22 #include <X11/Intrinsic.h>
23 #include <X11/Shell.h>
24
25 #include <Xm/Xm.h>
26 #include <Xm/DialogS.h>
27 #include <Xm/DrawnB.h>
28 #include <Xm/Form.h>
29 #include <Xm/Label.h>
30 #include <Xm/List.h>
31 #include <Xm/PushB.h>
32 #include <Xm/ScrollBar.h>
33 #include <Xm/Separator.h>
34 #include <Xm/TextF.h>
35 #include <Xm/ToggleB.h>
36
37 #include <Xm/SelectioB.h>
38
39 #include <stdio.h>
40
41 #include "visual.h"     /* for visual_depth() */
42
43 Widget passwd_dialog;
44 Widget passwd_form;
45 Widget roger_label;
46 Widget passwd_label1;
47 Widget passwd_label3;
48 Widget passwd_text;
49 Widget passwd_done;
50 Widget passwd_cancel;
51
52 Widget resources_dialog;
53 Widget resources_form;
54 Widget timeout_text;
55 Widget cycle_text;
56 Widget fade_text;
57 Widget ticks_text;
58 Widget lock_time_text;
59 Widget passwd_time_text;
60 Widget verbose_toggle;
61 Widget cmap_toggle;
62 Widget fade_toggle;
63 Widget unfade_toggle;
64 Widget lock_toggle;
65 Widget res_done;
66 Widget res_cancel;
67
68 Widget demo_dialog;
69 Widget demo_form;
70 Widget label1;
71 Widget label2;
72 Widget text_area;
73 Widget demo_list;
74 Widget text_line;
75 Widget vline;
76 Widget next;
77 Widget prev;
78 Widget edit;
79 Widget done;
80 Widget restart;
81 Widget spacer;
82
83
84 void
85 create_passwd_dialog(Widget parent, Visual *visual, Colormap colormap)
86 {
87   Widget shell;
88   Widget  form1;
89   Widget   roger;
90   Widget   dialog;
91   Widget    form2;
92   Widget     label1, label2, label3;
93   Widget    text;
94   Widget    ok, cancel;
95   Widget w;
96   Arg al[64];
97   int ac = 0;
98
99   ac = 0;
100   XtSetArg (al[ac], XmNvisual, visual); ac++;
101   XtSetArg (al[ac], XmNcolormap, colormap); ac++;
102   XtSetArg (al[ac], XmNdepth, visual_depth(XtScreen(parent), visual)); ac++;
103
104   shell = XmCreateDialogShell (parent, "passwdDialog", al, ac);
105
106   form1 = XmCreateForm (shell, "form", 0, 0);
107
108   roger = XmCreateDrawnButton (form1, "rogerLabel", 0, 0);
109
110   dialog = XmCreateSelectionBox (form1, "passwdForm", al, ac);
111
112   form2 = XmCreateForm ( dialog, "form", 0, 0);
113   label1 = XmCreateLabel ( form2, "passwdLabel1", 0, 0);
114   label2 = XmCreateLabel ( form2, "passwdLabel2", 0, 0);
115   label3 = XmCreateLabel ( form2, "passwdLabel3", 0, 0);
116
117   text = XmSelectionBoxGetChild (dialog, XmDIALOG_TEXT);
118   ok = XmSelectionBoxGetChild (dialog, XmDIALOG_OK_BUTTON);
119   cancel = XmSelectionBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON);
120
121   w = XmSelectionBoxGetChild (dialog, XmDIALOG_LIST_LABEL);
122   if (w) XtUnmanageChild (w);
123   w = XmSelectionBoxGetChild (dialog, XmDIALOG_LIST);
124   if (w) XtUnmanageChild (XtParent(w));
125   w = XmSelectionBoxGetChild (dialog, XmDIALOG_SELECTION_LABEL);
126   if (w) XtUnmanageChild (w);
127   w = XmSelectionBoxGetChild (dialog, XmDIALOG_SEPARATOR);
128   if (w) XtUnmanageChild (w);
129   w = XmSelectionBoxGetChild (dialog, XmDIALOG_APPLY_BUTTON);
130   if (w) XtUnmanageChild (w);
131   w = XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON);
132   if (w) XtUnmanageChild (w);
133
134   XtVaSetValues(label1,
135                 XmNtopAttachment, XmATTACH_FORM,
136                 XmNleftAttachment, XmATTACH_FORM,
137                 XmNrightAttachment, XmATTACH_FORM,
138                 XmNbottomAttachment, XmATTACH_NONE,
139                 0);
140   XtVaSetValues(label2,
141                 XmNtopAttachment, XmATTACH_WIDGET,
142                 XmNtopWidget, label1,
143                 XmNleftAttachment, XmATTACH_FORM,
144                 XmNrightAttachment, XmATTACH_FORM,
145                 XmNbottomAttachment, XmATTACH_NONE,
146                 0);
147   XtVaSetValues(label3,
148                 XmNtopAttachment, XmATTACH_WIDGET,
149                 XmNtopWidget, label2,
150                 XmNleftAttachment, XmATTACH_FORM,
151                 XmNrightAttachment, XmATTACH_FORM,
152                 XmNbottomAttachment, XmATTACH_FORM,
153                 0);
154
155   XtVaSetValues(roger,
156                 XmNsensitive, FALSE,
157                 XmNtopAttachment, XmATTACH_FORM,
158                 XmNleftAttachment, XmATTACH_FORM,
159                 XmNrightAttachment, XmATTACH_NONE,
160                 XmNbottomAttachment, XmATTACH_FORM,
161                 0);
162   XtVaSetValues(dialog,
163                 XmNtopAttachment, XmATTACH_FORM,
164                 XmNleftAttachment, XmATTACH_WIDGET,
165                 XmNleftWidget, roger,
166                 XmNrightAttachment, XmATTACH_FORM,
167                 XmNbottomAttachment, XmATTACH_FORM,
168                 0);
169
170   XtManageChild(label1);
171   XtManageChild(label2);
172   XtManageChild(label3);
173
174   XtManageChild(form2);
175   XtManageChild(text);
176   XtManageChild(ok);
177   XtManageChild(cancel);
178
179   XtManageChild(roger);
180   XtManageChild(dialog);
181
182   {
183     Dimension width = 0, height = 0;
184     XtRealizeWidget(form1);
185     XtVaGetValues(roger, XmNwidth, &width, XmNheight, &height, 0);
186     if (width == height)
187       ;
188     else if (width > height)
189       XtVaSetValues(roger, XmNwidth, width, XmNheight, width, 0);
190     else
191       XtVaSetValues(roger, XmNwidth, height, XmNheight, height, 0);
192   }
193
194   passwd_dialog = shell;
195   passwd_form = form1;
196   roger_label = roger;
197   passwd_label1 = label1;
198   passwd_label3 = label3;
199   passwd_text = text;
200   passwd_done = ok;
201   passwd_cancel = cancel;
202 }
203
204
205
206 void
207 create_resources_dialog(Widget parent, Visual *visual, Colormap colormap)
208 {
209   Widget children[22];      /* Children to manage */
210   Arg al[64];           /* Arg List */
211   register int ac = 0;      /* Arg Count */
212   Widget widget12;
213   Widget widget13;
214   Widget widget14;
215   Widget widget15;
216   Widget widget16;
217   Widget widget17;
218   Widget widget18;
219   Widget widget48;
220   Widget widget29;
221
222   Widget real_dialog;
223   Widget w;
224
225   ac = 0;
226   XtSetArg (al[ac], XmNvisual, visual); ac++;
227   XtSetArg (al[ac], XmNcolormap, colormap); ac++;
228   XtSetArg (al[ac], XmNdepth, visual_depth(XtScreen(parent), visual)); ac++;
229
230   real_dialog = XmCreatePromptDialog (parent, "resourcesForm", al, ac);
231   resources_dialog = XtParent(real_dialog);
232
233   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SEPARATOR);
234   if (w) XtUnmanageChild (w);
235   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
236   if (w) XtUnmanageChild (w);
237   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SELECTION_LABEL);
238   if (w) XtUnmanageChild (w);
239   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_HELP_BUTTON);
240   if (w) XtUnmanageChild (w);
241
242   ac = 0;
243   XtSetArg (al [ac], XmNtopAttachment, XmATTACH_FORM); ac++;
244   XtSetArg (al [ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
245   XtSetArg (al [ac], XmNleftAttachment, XmATTACH_FORM); ac++;
246   XtSetArg (al [ac], XmNrightAttachment, XmATTACH_FORM); ac++;
247   resources_form = XmCreateForm (real_dialog, "form", al, ac);
248   XtManageChild (resources_form);
249
250   ac = 0;
251
252   widget12 = XmCreateLabel ( resources_form, "resourcesLabel", al, ac );
253   widget13 = XmCreateSeparator ( resources_form, "separator", al, ac );
254   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
255   widget14 = XmCreateLabel ( resources_form, "timeoutLabel", al, ac );
256   ac = 0;
257   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
258   widget15 = XmCreateLabel ( resources_form, "cycleLabel", al, ac );
259   ac = 0;
260   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
261   widget16 = XmCreateLabel ( resources_form, "fadeSecondsLabel", al, ac );
262   ac = 0;
263   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
264   widget17 = XmCreateLabel ( resources_form, "fadeTicksLabel", al, ac );
265   ac = 0;
266   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
267   widget18 = XmCreateLabel ( resources_form, "lockLabel", al, ac );
268   ac = 0;
269   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
270   widget48 = XmCreateLabel ( resources_form, "passwdLabel", al, ac );
271   ac = 0;
272   timeout_text = XmCreateTextField ( resources_form, "timeoutText", al, ac );
273   cycle_text = XmCreateTextField ( resources_form, "cycleText", al, ac );
274   fade_text = XmCreateTextField ( resources_form, "fadeSecondsText", al, ac );
275   ticks_text = XmCreateTextField ( resources_form, "fadeTicksText", al, ac );
276   lock_time_text = XmCreateTextField ( resources_form, "passwdText", al, ac );
277   passwd_time_text = XmCreateTextField ( resources_form, "lockText", al, ac );
278   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
279   verbose_toggle = XmCreateToggleButton ( resources_form, "verboseToggle", al, ac );
280   ac = 0;
281   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
282   cmap_toggle = XmCreateToggleButton ( resources_form, "cmapToggle", al, ac );
283   ac = 0;
284   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
285   fade_toggle = XmCreateToggleButton ( resources_form, "fadeToggle", al, ac );
286   ac = 0;
287   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
288   unfade_toggle = XmCreateToggleButton ( resources_form, "unfadeToggle", al, ac );
289   ac = 0;
290   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
291   lock_toggle = XmCreateToggleButton ( resources_form, "lockToggle", al, ac );
292   ac = 0;
293   widget29 = XmCreateSeparator ( resources_form, "separator", al, ac );
294
295   res_done = XmSelectionBoxGetChild (real_dialog, XmDIALOG_OK_BUTTON);
296   res_cancel = XmSelectionBoxGetChild (real_dialog, XmDIALOG_CANCEL_BUTTON);
297
298   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
299   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
300   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
301   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
302   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
303   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
304   XtSetValues ( widget12,al, ac );
305   ac = 0;
306
307   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
308   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
309   XtSetArg(al[ac], XmNtopWidget, widget12); ac++;
310   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
311   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
312   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
313   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
314   XtSetArg(al[ac], XmNrightOffset, 0); ac++;
315   XtSetValues ( widget13,al, ac );
316   ac = 0;
317
318   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
319   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
320   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
321   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
322   XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++;
323   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
324   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
325   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
326   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
327   XtSetArg(al[ac], XmNrightWidget, timeout_text); ac++;
328   XtSetValues ( widget14,al, ac );
329   ac = 0;
330
331   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
332   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
333   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
334   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
335   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
336   XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++;
337   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
338   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
339   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
340   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
341   XtSetArg(al[ac], XmNrightWidget, cycle_text); ac++;
342   XtSetValues ( widget15,al, ac );
343   ac = 0;
344
345   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
346   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
347   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
348   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
349   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
350   XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++;
351   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
352   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
353   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
354   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
355   XtSetArg(al[ac], XmNrightWidget, fade_text); ac++;
356   XtSetValues ( widget16,al, ac );
357   ac = 0;
358
359   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
360   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
361   XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++;
362   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
363   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
364   XtSetArg(al[ac], XmNbottomWidget, ticks_text); ac++;
365   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
366   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
367   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
368   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
369   XtSetArg(al[ac], XmNrightWidget, ticks_text); ac++;
370   XtSetValues ( widget17,al, ac );
371   ac = 0;
372
373   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
374   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
375   XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++;
376   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
377   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
378   XtSetArg(al[ac], XmNbottomWidget, lock_time_text); ac++;
379   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
380   XtSetArg(al[ac], XmNleftOffset, 19); ac++;
381   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
382   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
383   XtSetArg(al[ac], XmNrightWidget, lock_time_text); ac++;
384   XtSetValues ( widget18,al, ac );
385   ac = 0;
386
387   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
388   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
389   XtSetArg(al[ac], XmNtopWidget, passwd_time_text); ac++;
390   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
391   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
392   XtSetArg(al[ac], XmNbottomWidget, passwd_time_text); ac++;
393   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
394   XtSetArg(al[ac], XmNleftOffset, 14); ac++;
395   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
396   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
397   XtSetArg(al[ac], XmNrightWidget, passwd_time_text); ac++;
398   XtSetValues ( widget48,al, ac );
399   ac = 0;
400
401   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
402   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
403   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
404   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
405   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
406   XtSetArg(al[ac], XmNleftOffset, 141); ac++;
407   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
408   XtSetValues ( timeout_text,al, ac );
409   ac = 0;
410
411   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
412   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
413   XtSetArg(al[ac], XmNtopWidget, timeout_text); ac++;
414   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
415   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
416   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
417   XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++;
418   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
419   XtSetValues ( cycle_text,al, ac );
420   ac = 0;
421
422   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
423   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
424   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
425   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
426   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
427   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
428   XtSetArg(al[ac], XmNleftWidget, cycle_text); ac++;
429   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
430   XtSetValues ( fade_text,al, ac );
431   ac = 0;
432
433   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
434   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
435   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
436   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
437   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
438   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
439   XtSetArg(al[ac], XmNleftWidget, fade_text); ac++;
440   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
441   XtSetValues ( ticks_text,al, ac );
442   ac = 0;
443
444   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
445   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
446   XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++;
447   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
448   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
449   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
450   XtSetArg(al[ac], XmNleftWidget, ticks_text); ac++;
451   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
452   XtSetValues ( lock_time_text,al, ac );
453   ac = 0;
454
455   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
456   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
457   XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++;
458   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
459   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
460   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
461   XtSetArg(al[ac], XmNleftWidget, lock_time_text); ac++;
462   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
463   XtSetValues ( passwd_time_text,al, ac );
464   ac = 0;
465
466   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
467   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
468   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
469   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
470   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
471   XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++;
472   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
473   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
474   XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++;
475   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
476   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
477   XtSetValues ( verbose_toggle,al, ac );
478   ac = 0;
479
480   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
481   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
482   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
483   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
484   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
485   XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++;
486   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
487   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
488   XtSetArg(al[ac], XmNleftWidget, verbose_toggle); ac++;
489   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
490   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
491   XtSetValues ( cmap_toggle,al, ac );
492   ac = 0;
493
494   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
495   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
496   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
497   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
498   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
499   XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++;
500   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
501   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
502   XtSetArg(al[ac], XmNleftWidget, cmap_toggle); ac++;
503   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
504   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
505   XtSetValues ( fade_toggle,al, ac );
506   ac = 0;
507
508   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
509   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
510   XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++;
511   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
512   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
513   XtSetArg(al[ac], XmNbottomWidget, ticks_text); ac++;
514   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
515   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
516   XtSetArg(al[ac], XmNleftWidget, fade_toggle); ac++;
517   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
518   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
519   XtSetValues ( unfade_toggle,al, ac );
520   ac = 0;
521
522   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
523   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
524   XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++;
525   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
526   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
527   XtSetArg(al[ac], XmNbottomWidget, lock_time_text); ac++;
528   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
529   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
530   XtSetArg(al[ac], XmNleftWidget, unfade_toggle); ac++;
531   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
532   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
533   XtSetValues ( lock_toggle,al, ac );
534   ac = 0;
535
536   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
537   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
538   XtSetArg(al[ac], XmNtopWidget, passwd_time_text); ac++;
539
540   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
541   XtSetArg(al[ac], XmNbottomOffset, 4); ac++;
542
543   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
544   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
545   XtSetValues ( widget29,al, ac );
546   ac = 0;
547
548
549
550   ac = 0;
551   children[ac++] = widget12;
552   children[ac++] = widget13;
553   children[ac++] = widget14;
554   children[ac++] = widget15;
555   children[ac++] = widget16;
556   children[ac++] = widget17;
557   children[ac++] = widget18;
558   children[ac++] = widget48;
559   children[ac++] = timeout_text;
560   children[ac++] = cycle_text;
561   children[ac++] = fade_text;
562   children[ac++] = ticks_text;
563   children[ac++] = lock_time_text;
564   children[ac++] = passwd_time_text;
565   children[ac++] = verbose_toggle;
566   children[ac++] = cmap_toggle;
567   children[ac++] = fade_toggle;
568   children[ac++] = unfade_toggle;
569   children[ac++] = lock_toggle;
570   children[ac++] = widget29;
571
572   XtManageChildren(children, ac);
573   ac = 0;
574
575   resources_form = real_dialog;
576 }
577
578
579 void
580 create_demo_dialog(Widget parent, Visual *visual, Colormap colormap)
581 {
582   Arg al[64];           /* Arg List */
583   register int ac = 0;      /* Arg Count */
584
585   Widget real_dialog;
586   Widget w;
587
588
589   ac = 0;
590   XtSetArg (al[ac], XmNvisual, visual); ac++;
591   XtSetArg (al[ac], XmNcolormap, colormap); ac++;
592   XtSetArg (al[ac], XmNdepth, visual_depth(XtScreen(parent), visual)); ac++;
593
594
595   real_dialog = XmCreatePromptDialog (parent, "demoForm", al, ac);
596   demo_dialog = XtParent(real_dialog);
597
598   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SEPARATOR);
599   if (w) XtUnmanageChild (w);
600   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
601   if (w) XtUnmanageChild (w);
602   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SELECTION_LABEL);
603   if (w) XtUnmanageChild (w);
604   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_OK_BUTTON);
605   if (w) XtUnmanageChild (w);
606   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_CANCEL_BUTTON);
607   if (w) XtUnmanageChild (w);
608   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_HELP_BUTTON);
609   if (w) XtUnmanageChild (w);
610
611   ac = 0;
612   XtSetArg (al [ac], XmNtopAttachment, XmATTACH_FORM); ac++;
613   XtSetArg (al [ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
614   XtSetArg (al [ac], XmNleftAttachment, XmATTACH_FORM); ac++;
615   XtSetArg (al [ac], XmNrightAttachment, XmATTACH_FORM); ac++;
616   demo_form = XmCreateForm (real_dialog, "form", al, ac);
617   XtManageChild (demo_form);
618
619   label1 = XmCreateLabel ( demo_form, "label1", al, ac );
620   label2 = XmCreateLabel ( demo_form, "label2", al, ac );
621   demo_list = XmCreateScrolledList ( demo_form, "demoList", al, ac );
622   text_area = XtParent ( demo_list );
623
624   ac = 0;
625   text_line = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
626   XtManageChild(text_line);
627
628   /* #### ARRGH!  This is apparently the only way to make hitting return in
629      the text field not *ALSO* activate the most-recently-selected button!
630
631      This has the unfortunate side effect of making the buttons not be
632      keyboard-traversable, but that's less bad than not being able to try
633      out new switches by typing them into the text field.
634
635      XmSelectionBox(3M) says in the "Additional Behavior" section:
636           KActivate:
637                     Calls the activate callbacks for the button with
638                     the keyboard focus.  [... ]  In a List widget or
639                     single-line Text widget, the List or Text action
640                     associated with KActivate is called before the
641                     SelectionBox actions associated with KActivate."
642
643      So they take it as a given that when running activateCallback on a single-
644      line Text widget, you'll also want to run activateCallback on whatever the
645      currently-focussed button is as well!  Morons!  Villains!  Shitheads!
646
647      (Perhaps there's some way to override XmSelectionBox's KActivate behavior.
648      I doubt it, but if there is, I don't know it.)
649   */
650   ac = 0;
651   XtSetArg(al[ac], XmNtraversalOn, False); ac++;
652
653   next = XmCreatePushButton ( real_dialog, "next", al, ac );
654   prev = XmCreatePushButton ( real_dialog, "prev", al, ac );
655   edit = XmCreatePushButton ( real_dialog, "edit", al, ac );
656   done = XmCreatePushButton ( real_dialog, "done", al, ac );
657   restart = XmCreatePushButton ( real_dialog, "restart", al, ac );
658   XtManageChild(next);
659   XtManageChild(prev);
660   XtManageChild(edit);
661   XtManageChild(done);
662   XtManageChild(restart);
663
664   ac = 0;
665   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
666   XtSetArg(al[ac], XmNtopOffset, 5); ac++;
667   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
668   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
669   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
670   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
671   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
672   XtSetValues ( label1,al, ac );
673   ac = 0;
674
675   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
676   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
677   XtSetArg(al[ac], XmNtopWidget, label1); ac++;
678   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
679   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
680   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
681   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
682   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
683   XtSetValues ( label2,al, ac );
684   ac = 0;
685
686   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
687   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
688   XtSetArg(al[ac], XmNtopWidget, label2); ac++;
689   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
690   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
691   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
692   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
693   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
694   XtSetValues ( text_area,al, ac );
695
696   XtManageChild(demo_list);
697   XtManageChild(label1);
698   XtManageChild(label2);
699
700   demo_form = real_dialog;
701 }