1 /* $Header: /cvsroot/lesstif/lesstif/test/Xm/form/test4.c,v 1.9 2002/05/01 15:39:21 amai Exp $ */
2 
3 #include <stdio.h>
4 #include <stdlib.h>
5 
6 #include <Xm/Xm.h>
7 #include <Xm/List.h>
8 #include <Xm/ScrolledW.h>
9 #include <Xm/Form.h>
10 #include <Xm/Label.h>
11 #include <Xm/MenuShell.h>
12 #include <Xm/PushB.h>
13 #include <Xm/Separator.h>
14 #include <Xm/Text.h>
15 #include <Xm/TextF.h>
16 #include <Xm/RowColumn.h>
17 
18 #include "../../common/Test.h"
19 
20 
21 Widget	form, toplevel, deleteButton, dbDescFileTf, dbFileTf, DBOptionMenu, dbNameTf, dbList;
22 
23 char *fallback[] = {
24 	"*form.background:	red",
25 	"*test.background:	blue",
26 	"*label.background:	yellow",
27 	"*quit.background:	green",
28 	NULL
29 };
30 
31 #define	LARGE_WIDTH	400
32 #define	LARGE_HEIGHT	500
33 #define	SMALL_WIDTH	200
34 #define	SMALL_HEIGHT	250
35 
Quit(Widget w,XtPointer client,XtPointer call)36 void Quit(Widget w, XtPointer client, XtPointer call)
37 {
38 	exit(0);
39 }
40 
41 /*
42  * Function:
43  *      CONVERT(w, from_string, to_type, to_size, success);
44  * Description:
45  *      A converter wrapper for convenience from BuilderXcessory.
46  * Input:
47  *      w - Widget : the widget to use for conversion
48  *	from_string - char * : the string to convert from
49  *	to_type - char * : the type to convert to
50  *	to_size - int : the size of the conversion result
51  *	success - Boolean* : Set to the result value of the conversion
52  * Output:
53  *      None
54  */
CONVERT(Widget w,char * from_string,char * to_type,int to_size,Boolean * success)55 XtPointer CONVERT(Widget w, char *from_string, char * to_type, int to_size, Boolean * success)
56 {
57     XrmValue		fromVal, toVal;	/* resource holders		*/
58     Boolean		convResult;	/* return value			*/
59     unsigned char	oByte;		/* one byte result		*/
60     unsigned short	tByte;		/* two byte result		*/
61     XtPointer		fByte;		/* four byte result		*/
62     XtPointer		aByte;		/* allocated result		*/
63 
64     /*
65      * Zero it.
66      */
67     fByte = aByte = NULL;
68     *success = False;
69 
70     /*
71      * Sometimes we do not know this at code output.
72      */
73     if (to_size == 0)
74     {
75 	if (!strcmp(to_type, XmRXmString) || !strcmp(to_type, XmRXmStringTable))
76 	{
77 	    to_size = sizeof(XtPointer);
78 	}
79 	else
80 	{
81 	    to_size = strlen(from_string);
82 	}
83     }
84 
85     /*
86      * Set up the list.
87      */
88     fromVal.size = strlen(from_string) + 1;
89     fromVal.addr = from_string;
90 
91     switch( to_size )
92     {
93     case 1:
94 	toVal.size = sizeof(unsigned char);
95 	toVal.addr = (XtPointer)&oByte;
96 	break;
97     case 2:
98 	toVal.size = sizeof(unsigned short);
99 	toVal.addr = (XtPointer)&tByte;
100 	break;
101     default:
102 	toVal.size = sizeof(XtPointer);
103 	toVal.addr = (XtPointer)&fByte;
104 	break;
105     }
106 
107     convResult = XtConvertAndStore(w,
108 				   XmRString,
109 				   &fromVal,
110 				   to_type,
111 				   &toVal);
112 
113     if( convResult )
114     {
115 	switch( to_size )
116 	{
117 	case 1:
118 	    fByte = (XtPointer)((int)oByte);
119 	    break;
120 	case 2:
121 	    fByte = (XtPointer)((int)tByte);
122 	    break;
123 	default:
124 	    break;
125 	}
126     }
127 
128 
129     /*
130      * Conversion will fail if we need more than 4 bytes.
131      * For strings it will fail always the first time.
132      */
133     if( !convResult && toVal.size != to_size )
134     {
135 	/*
136 	 * Need to allocate more space for this one.
137 	 */
138 	toVal.addr = (XtPointer)XtMalloc(toVal.size);
139 	fByte = aByte = toVal.addr;
140 	convResult = XtConvertAndStore(w,
141 				       XmRString,
142 				       &fromVal,
143 				       to_type,
144 				       &toVal);
145     }
146 
147     /*
148      * Free any thing useless we may have allocated.
149      */
150     if( !convResult )
151     {
152 	XtFree((char*)aByte);
153 	aByte = NULL;
154     }
155 
156     /*
157      * Return the result.
158      */
159     *success = convResult;
160     /*SUPPRESS 80*/
161     return(fByte);
162 }
163 
164 /*
165  * Function: CreateConfigureWindow()
166  *        Create configureWindow hierarchy of widgets.
167  */
168 Widget
CreateConfigureWindow(Widget parent)169 CreateConfigureWindow(Widget parent)
170 {
171     Arg    	args[512];
172     Cardinal   	argcnt;
173     Boolean   	argok;
174     Widget 	retval;
175     Widget	configureWindow;
176     Widget	applyButton;
177     Widget	cancelButton;
178     Widget	label1;
179     Widget	scrolledWindow1;
180     Widget	label2;
181     Widget	menuShell;
182     Widget	pulldownMenu5;
183     Widget	pushButton5;
184     Widget	label3;
185     Widget	label4;
186     Widget	label5;
187     Widget	separator1;
188     Widget	separator2;
189     Widget	addDBButton;
190     Widget	moveUpButton;
191     Widget	moveDownButton;
192 
193     argok = False;
194 
195     argcnt = 0;
196     XtSetArg(args[argcnt], XmNautoUnmanage, False); argcnt++;
197     XtSetArg(args[argcnt], XmNresizePolicy, XmRESIZE_GROW); argcnt++;
198     XtSetArg(args[argcnt], XmNx, 0); argcnt++;
199     XtSetArg(args[argcnt], XmNy, 0); argcnt++;
200     XtSetArg(args[argcnt], XmNwidth, 500); argcnt++;
201     XtSetArg(args[argcnt], XmNheight, 504); argcnt++;
202     configureWindow = XtCreateWidget("configureWindow",
203 		xmFormWidgetClass,
204 		parent,
205 		args,
206 		argcnt);
207     retval = configureWindow;
208 
209     argcnt = 0;
210     XtSetArg(args[argcnt], XmNlabelString,
211              CONVERT(parent,"Move Down", "XmString", 0, &argok)); if (argok) argcnt++;
212     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
213     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
214     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
215     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
216     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++;
217     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
218     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
219     XtSetArg(args[argcnt], XmNleftOffset, 25); argcnt++;
220     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
221     XtSetArg(args[argcnt], XmNwidth, 99); argcnt++;
222     XtSetArg(args[argcnt], XmNheight, 30); argcnt++;
223     moveDownButton = XtCreateWidget("moveDownButton",
224 		xmPushButtonWidgetClass,
225 		configureWindow,
226 		args,
227 		argcnt);
228 
229     XtManageChild(moveDownButton);
230 
231     argcnt = 0;
232     XtSetArg(args[argcnt], XmNlabelString,
233              CONVERT(parent,"Move Up", "XmString", 0, &argok)); if (argok) argcnt++;
234     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
235     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
236     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
237     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
238     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++;
239     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
240     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
241     XtSetArg(args[argcnt], XmNleftOffset, 25); argcnt++;
242     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
243     XtSetArg(args[argcnt], XmNwidth, 99); argcnt++;
244     XtSetArg(args[argcnt], XmNheight, 30); argcnt++;
245     moveUpButton = XtCreateWidget("moveUpButton",
246 		xmPushButtonWidgetClass,
247 		configureWindow,
248 		args,
249 		argcnt);
250 
251     XtManageChild(moveUpButton);
252 
253     argcnt = 0;
254     XtSetArg(args[argcnt], XmNlabelString,
255              CONVERT(parent,"New", "XmString", 0, &argok)); if (argok) argcnt++;
256     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
257     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
258     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
259     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
260     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
261     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
262     XtSetArg(args[argcnt], XmNwidth, 99); argcnt++;
263     XtSetArg(args[argcnt], XmNheight, 30); argcnt++;
264     addDBButton = XtCreateWidget("addDBButton",
265 		xmPushButtonWidgetClass,
266 		configureWindow,
267 		args,
268 		argcnt);
269 
270     XtManageChild(addDBButton);
271 
272     argcnt = 0;
273     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
274     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
275     XtSetArg(args[argcnt], XmNtopOffset, 50); argcnt++;
276     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
277     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
278     XtSetArg(args[argcnt], XmNwidth, 482); argcnt++;
279     XtSetArg(args[argcnt], XmNheight, 20); argcnt++;
280     separator2 = XtCreateWidget("separator2",
281 		xmSeparatorWidgetClass,
282 		configureWindow,
283 		args,
284 		argcnt);
285     XtManageChild(separator2);
286 
287     argcnt = 0;
288     XtSetArg(args[argcnt], XmNsensitive, True); argcnt++;
289     XtSetArg(args[argcnt], XmNlabelString,
290              CONVERT(parent,"Delete", "XmString", 0, &argok)); if (argok) argcnt++;
291     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
292     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
293     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
294     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
295     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++;
296     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
297     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
298     XtSetArg(args[argcnt], XmNleftOffset, 25); argcnt++;
299     XtSetArg(args[argcnt], XmNwidth, 100); argcnt++;
300     XtSetArg(args[argcnt], XmNheight, 30); argcnt++;
301     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
302     XtSetArg(args[argcnt], XmNtopWidget, addDBButton); argcnt++;
303     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_WIDGET); argcnt++;
304     XtSetArg(args[argcnt], XmNleftWidget, addDBButton); argcnt++;
305     deleteButton = XtCreateWidget("deleteButton",
306 		xmPushButtonWidgetClass,
307 		configureWindow,
308 		args,
309 		argcnt);
310 
311     XtManageChild(deleteButton);
312 
313     argcnt = 0;
314     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
315     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
316     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
317     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
318     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
319     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
320     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
321     XtSetArg(args[argcnt], XmNrightOffset, 10); argcnt++;
322     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
323     XtSetArg(args[argcnt], XmNwidth, 480); argcnt++;
324     XtSetArg(args[argcnt], XmNheight, 20); argcnt++;
325     separator1 = XtCreateWidget("separator1",
326 		xmSeparatorWidgetClass,
327 		configureWindow,
328 		args,
329 		argcnt);
330     XtManageChild(separator1);
331 
332     argcnt = 0;
333     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
334     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
335     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
336     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
337     XtSetArg(args[argcnt], XmNtopOffset, -3); argcnt++;
338     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
339     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
340     XtSetArg(args[argcnt], XmNrightOffset, 10); argcnt++;
341     XtSetArg(args[argcnt], XmNwidth, 268); argcnt++;
342     XtSetArg(args[argcnt], XmNheight, 36); argcnt++;
343     dbDescFileTf = XtCreateWidget("dbDescFileTf",
344 		xmTextFieldWidgetClass,
345 		configureWindow,
346 		args,
347 		argcnt);
348 
349     XtManageChild(dbDescFileTf);
350 
351     argcnt = 0;
352     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
353     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
354     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
355     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
356     XtSetArg(args[argcnt], XmNtopOffset, 1); argcnt++;
357     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
358     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
359     XtSetArg(args[argcnt], XmNrightOffset, 10); argcnt++;
360     XtSetArg(args[argcnt], XmNwidth, 268); argcnt++;
361     XtSetArg(args[argcnt], XmNheight, 36); argcnt++;
362     dbFileTf = XtCreateWidget("dbFileTf",
363 		xmTextFieldWidgetClass,
364 		configureWindow,
365 		args,
366 		argcnt);
367 
368     XtManageChild(dbFileTf);
369 
370     argcnt = 0;
371     XtSetArg(args[argcnt], XmNlabelString,
372              CONVERT(parent,"Description File Name :", "XmString", 0, &argok)); if (argok) argcnt++;
373     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
374     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
375     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
376     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
377     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
378     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
379     XtSetArg(args[argcnt], XmNwidth, 200); argcnt++;
380     XtSetArg(args[argcnt], XmNheight, 43); argcnt++;
381     label5 = XtCreateWidget("label5",
382 		xmLabelWidgetClass,
383 		configureWindow,
384 		args,
385 		argcnt);
386     XtManageChild(label5);
387 
388     argcnt = 0;
389     XtSetArg(args[argcnt], XmNlabelString,
390              CONVERT(parent,"File Name :", "XmString", 0, &argok)); if (argok) argcnt++;
391     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
392     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
393     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
394     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
395     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
396     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
397     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
398     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
399     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
400     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
401     XtSetArg(args[argcnt], XmNwidth, 202); argcnt++;
402     XtSetArg(args[argcnt], XmNheight, 42); argcnt++;
403     label4 = XtCreateWidget("label4",
404 		xmLabelWidgetClass,
405 		configureWindow,
406 		args,
407 		argcnt);
408     XtManageChild(label4);
409 
410     argcnt = 0;
411     XtSetArg(args[argcnt], XmNlabelString,
412              CONVERT(parent,"Database Type :", "XmString", 0, &argok)); if (argok) argcnt++;
413     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
414     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
415     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
416     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
417     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
418     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
419     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
420     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
421     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
422     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
423     XtSetArg(args[argcnt], XmNwidth, 202); argcnt++;
424     XtSetArg(args[argcnt], XmNheight, 41); argcnt++;
425     label3 = XtCreateWidget("label3",
426 		xmLabelWidgetClass,
427 		configureWindow,
428 		args,
429 		argcnt);
430     XtManageChild(label3);
431 
432     argcnt = 0;
433     XtSetArg(args[argcnt], XmNlabelString,
434              CONVERT(parent," ", "XmString", 0, &argok)); if (argok) argcnt++;
435     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
436     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
437     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
438     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
439     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
440     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
441     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
442     XtSetArg(args[argcnt], XmNrightOffset, 10); argcnt++;
443     XtSetArg(args[argcnt], XmNrowColumnType, XmMENU_OPTION); argcnt++;
444     XtSetArg(args[argcnt], XmNwidth, 268); argcnt++;
445     XtSetArg(args[argcnt], XmNheight, 31); argcnt++;
446     DBOptionMenu = XtCreateWidget("optionMenu1",
447 		xmRowColumnWidgetClass,
448 		configureWindow,
449 		args,
450 		argcnt);
451 
452     XtManageChild(DBOptionMenu);
453 
454     argcnt = 0;
455     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
456     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
457     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
458     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
459     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
460     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
461     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
462     XtSetArg(args[argcnt], XmNrightOffset, 10); argcnt++;
463     XtSetArg(args[argcnt], XmNwidth, 268); argcnt++;
464     XtSetArg(args[argcnt], XmNheight, 36); argcnt++;
465     dbNameTf = XtCreateWidget("dbNameTf",
466 		xmTextFieldWidgetClass,
467 		configureWindow,
468 		args,
469 		argcnt);
470 
471     XtManageChild(dbNameTf);
472 
473     argcnt = 0;
474     XtSetArg(args[argcnt], XmNlabelString,
475              CONVERT(parent,"Database Name", "XmString", 0, &argok)); if (argok) argcnt++;
476     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
477     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
478     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
479     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
480     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
481     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
482     XtSetArg(args[argcnt], XmNwidth, 202); argcnt++;
483     XtSetArg(args[argcnt], XmNheight, 40); argcnt++;
484     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
485     XtSetArg(args[argcnt], XmNtopWidget, separator2); argcnt++;
486     label2 = XtCreateWidget("label2",
487 		xmLabelWidgetClass,
488 		configureWindow,
489 		args,
490 		argcnt);
491     XtManageChild(label2);
492 
493     argcnt = 0;
494     XtSetArg(args[argcnt], XmNscrollingPolicy, XmAPPLICATION_DEFINED); argcnt++;
495     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
496     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
497     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
498     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_FORM); argcnt++;
499     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
500     XtSetArg(args[argcnt], XmNbottomOffset, 0); argcnt++;
501     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
502     XtSetArg(args[argcnt], XmNrightOffset, 9); argcnt++;
503     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
504     XtSetArg(args[argcnt], XmNwidth, 481); argcnt++;
505     XtSetArg(args[argcnt], XmNheight, 100); argcnt++;
506     scrolledWindow1 = XtCreateWidget("scrolledWindow1",
507 		xmScrolledWindowWidgetClass,
508 		configureWindow,
509 		args,
510 		argcnt);
511     XtManageChild(scrolledWindow1);
512 
513     argcnt = 0;
514     XtSetArg(args[argcnt], XmNlabelString,
515              CONVERT(parent,"Database Names :", "XmString", 0, &argok)); if (argok) argcnt++;
516     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
517     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
518     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++;
519     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
520     XtSetArg(args[argcnt], XmNx, 10); argcnt++;
521     XtSetArg(args[argcnt], XmNy, 10); argcnt++;
522     XtSetArg(args[argcnt], XmNwidth, 101); argcnt++;
523     XtSetArg(args[argcnt], XmNheight, 30); argcnt++;
524     label1 = XtCreateWidget("label1",
525 		xmLabelWidgetClass,
526 		configureWindow,
527 		args,
528 		argcnt);
529     XtManageChild(label1);
530 
531     argcnt = 0;
532     XtSetArg(args[argcnt], XmNlabelString,
533              CONVERT(parent,"Cancel", "XmString", 0, &argok)); if (argok) argcnt++;
534     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
535     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
536     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
537     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_FORM); argcnt++;
538     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_NONE); argcnt++;
539     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
540     XtSetArg(args[argcnt], XmNleftOffset, 95); argcnt++;
541     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
542     XtSetArg(args[argcnt], XmNwidth, 115); argcnt++;
543     XtSetArg(args[argcnt], XmNheight, 31); argcnt++;
544     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
545     XtSetArg(args[argcnt], XmNtopWidget, separator1); argcnt++;
546     cancelButton = XtCreateWidget("cancelButton",
547 		xmPushButtonWidgetClass,
548 		configureWindow,
549 		args,
550 		argcnt);
551 
552     XtManageChild(cancelButton);
553 
554     argcnt = 0;
555     XtSetArg(args[argcnt], XmNlabelString,
556              CONVERT(parent,"Apply", "XmString", 0, &argok)); if (argok) argcnt++;
557     XtSetArg(args[argcnt], XmNrecomputeSize, False); argcnt++;
558     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_FORM); argcnt++;
559     XtSetArg(args[argcnt], XmNbottomAttachment, XmATTACH_NONE); argcnt++;
560     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
561     XtSetArg(args[argcnt], XmNx, 20); argcnt++;
562     XtSetArg(args[argcnt], XmNwidth, 115); argcnt++;
563     XtSetArg(args[argcnt], XmNheight, 31); argcnt++;
564     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
565     XtSetArg(args[argcnt], XmNtopWidget, separator1); argcnt++;
566     applyButton = XtCreateWidget("applyButton",
567 		xmPushButtonWidgetClass,
568 		configureWindow,
569 		args,
570 		argcnt);
571 
572     XtManageChild(applyButton);
573     XtAddCallback(applyButton, XmNactivateCallback, Quit, 0);
574 
575     argcnt = 0;
576     XtSetArg(args[argcnt], XmNleftOffset, 95); argcnt++;
577     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_WIDGET); argcnt++;
578     XtSetArg(args[argcnt], XmNleftWidget, applyButton); argcnt++;
579     XtSetValues(cancelButton, args, argcnt);
580 
581     argcnt = 0;
582     XtSetArg(args[argcnt], XmNselectionPolicy, XmSINGLE_SELECT); argcnt++;
583     XtSetArg(args[argcnt], XmNwidth, 481); argcnt++;
584     XtSetArg(args[argcnt], XmNheight, 100); argcnt++;
585     dbList = XtCreateWidget("dbList",
586 		xmListWidgetClass,
587 		scrolledWindow1,
588 		args,
589 		argcnt);
590 
591     XtManageChild(dbList);
592 
593     argcnt = 0;
594     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
595     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
596     XtSetArg(args[argcnt], XmNtopWidget, label1); argcnt++;
597     XtSetValues(scrolledWindow1, args, argcnt);
598 
599     argcnt = 0;
600     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
601     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
602     XtSetArg(args[argcnt], XmNtopWidget, label2); argcnt++;
603     XtSetArg(args[argcnt], XmNleftOffset, 10); argcnt++;
604     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_WIDGET); argcnt++;
605     XtSetArg(args[argcnt], XmNleftWidget, label2); argcnt++;
606     XtSetValues(dbNameTf, args, argcnt);
607 
608     argcnt = 0;
609     XtSetArg(args[argcnt], XmNwidth, 1); argcnt++;
610     XtSetArg(args[argcnt], XmNheight, 1); argcnt++;
611     menuShell = XtCreatePopupShell("menuShell",
612 		xmMenuShellWidgetClass,
613 		XtParent(DBOptionMenu),
614 		args,
615 		argcnt);
616 
617     argcnt = 0;
618     XtSetArg(args[argcnt], XmNrowColumnType, XmMENU_PULLDOWN); argcnt++;
619     XtSetArg(args[argcnt], XmNx, 0); argcnt++;
620     XtSetArg(args[argcnt], XmNy, 0); argcnt++;
621     XtSetArg(args[argcnt], XmNwidth, 78); argcnt++;
622     XtSetArg(args[argcnt], XmNheight, 25); argcnt++;
623     pulldownMenu5 = XtCreateWidget("pulldownMenu5",
624 		xmRowColumnWidgetClass,
625 		menuShell,
626 		args,
627 		argcnt);
628 
629 
630     argcnt = 0;
631     pushButton5 = XtCreateWidget("pushButton5",
632 		xmPushButtonWidgetClass,
633 		pulldownMenu5,
634 		args,
635 		argcnt);
636 
637     XtManageChild(pushButton5);
638 
639     argcnt = 0;
640     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
641     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
642     XtSetArg(args[argcnt], XmNtopWidget, label2); argcnt++;
643     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
644     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
645     XtSetArg(args[argcnt], XmNleftWidget, dbNameTf); argcnt++;
646     XtSetArg(args[argcnt], XmNsubMenuId, pulldownMenu5); argcnt++;
647     XtSetValues(DBOptionMenu, args, argcnt);
648 
649     argcnt = 0;
650     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
651     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
652     XtSetArg(args[argcnt], XmNtopWidget, label2); argcnt++;
653     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
654     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
655     XtSetArg(args[argcnt], XmNrightWidget, label2); argcnt++;
656     XtSetValues(label3, args, argcnt);
657 
658     argcnt = 0;
659     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
660     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
661     XtSetArg(args[argcnt], XmNtopWidget, label3); argcnt++;
662     XtSetArg(args[argcnt], XmNrightOffset, 0); argcnt++;
663     XtSetArg(args[argcnt], XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
664     XtSetArg(args[argcnt], XmNrightWidget, label3); argcnt++;
665     XtSetValues(label4, args, argcnt);
666 
667     argcnt = 0;
668     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
669     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
670     XtSetArg(args[argcnt], XmNtopWidget, label4); argcnt++;
671     XtSetValues(label5, args, argcnt);
672 
673     argcnt = 0;
674     XtSetArg(args[argcnt], XmNtopOffset, 1); argcnt++;
675     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
676     XtSetArg(args[argcnt], XmNtopWidget, label4); argcnt++;
677     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
678     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
679     XtSetArg(args[argcnt], XmNleftWidget, dbNameTf); argcnt++;
680     XtSetValues(dbFileTf, args, argcnt);
681 
682     argcnt = 0;
683     XtSetArg(args[argcnt], XmNtopOffset, -3); argcnt++;
684     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
685     XtSetArg(args[argcnt], XmNtopWidget, label5); argcnt++;
686     XtSetArg(args[argcnt], XmNleftOffset, 0); argcnt++;
687     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
688     XtSetArg(args[argcnt], XmNleftWidget, dbNameTf); argcnt++;
689     XtSetValues(dbDescFileTf, args, argcnt);
690 
691     argcnt = 0;
692     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
693     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
694     XtSetArg(args[argcnt], XmNtopWidget, dbDescFileTf); argcnt++;
695     XtSetValues(separator1, args, argcnt);
696 
697     argcnt = 0;
698     XtSetArg(args[argcnt], XmNtopOffset, 50); argcnt++;
699     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
700     XtSetArg(args[argcnt], XmNtopWidget, scrolledWindow1); argcnt++;
701     XtSetValues(separator2, args, argcnt);
702 
703     argcnt = 0;
704     XtSetArg(args[argcnt], XmNtopOffset, 10); argcnt++;
705     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_WIDGET); argcnt++;
706     XtSetArg(args[argcnt], XmNtopWidget, scrolledWindow1); argcnt++;
707     XtSetValues(addDBButton, args, argcnt);
708 
709     argcnt = 0;
710     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
711     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
712     XtSetArg(args[argcnt], XmNtopWidget, addDBButton); argcnt++;
713     XtSetArg(args[argcnt], XmNleftOffset, 25); argcnt++;
714     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_WIDGET); argcnt++;
715     XtSetArg(args[argcnt], XmNleftWidget, deleteButton); argcnt++;
716     XtSetValues(moveUpButton, args, argcnt);
717 
718     argcnt = 0;
719     XtSetArg(args[argcnt], XmNtopOffset, 0); argcnt++;
720     XtSetArg(args[argcnt], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); argcnt++;
721     XtSetArg(args[argcnt], XmNtopWidget, moveUpButton); argcnt++;
722     XtSetArg(args[argcnt], XmNleftOffset, 25); argcnt++;
723     XtSetArg(args[argcnt], XmNleftAttachment, XmATTACH_WIDGET); argcnt++;
724     XtSetArg(args[argcnt], XmNleftWidget, moveUpButton); argcnt++;
725     XtSetValues(moveDownButton, args, argcnt);
726 
727     return( retval );
728 }
729 
main(int argc,char ** argv)730 int main(int argc, char **argv)
731 {
732 	XtAppContext app;
733 
734 	XtSetLanguageProc(NULL, NULL, NULL);
735 
736 	toplevel = XtVaAppInitialize(&app, "Form", NULL, 0, &argc, argv,
737 		fallback, NULL);
738 
739 
740 	form = CreateConfigureWindow(toplevel);
741 	XtManageChild(form);
742 
743 
744 	XtRealizeWidget(toplevel);
745 
746   {
747 #if XmVERSION > 1
748 static XtWidgetGeometry Expected[] = {
749    {CWWidth | CWHeight            ,  325,  317,  500,  504, 0,0,0, /* configureWindow */},
750    {CWWidth | CWHeight | CWX | CWY,  383,  160,   99,   30, 0,0,0, /* moveDownButton */},
751    {CWWidth | CWHeight | CWX | CWY,  259,  160,   99,   30, 0,0,0, /* moveUpButton */},
752    {CWWidth | CWHeight | CWX | CWY,   10,  160,   99,   30, 0,0,0, /* addDBButton */},
753    {CWWidth | CWHeight | CWX | CWY,   10,  200,  482,   20, 0,0,0, /* separator2 */},
754    {CWWidth | CWHeight | CWX | CWY,  134,  160,  100,   30, 0,0,0, /* deleteButton */},
755    {CWWidth | CWHeight | CWX | CWY,   10,  426,  480,   20, 0,0,0, /* separator1 */},
756    {CWWidth | CWHeight | CWX | CWY,  222,  380,  268,   36, 0,0,0, /* dbDescFileTf */},
757    {CWWidth | CWHeight | CWX | CWY,  222,  332,  268,   36, 0,0,0, /* dbFileTf */},
758    {CWWidth | CWHeight | CWX | CWY,   10,  383,  200,   43, 0,0,0, /* label5 */},
759    {CWWidth | CWHeight | CWX | CWY,   10,  331,  202,   42, 0,0,0, /* label4 */},
760    {CWWidth | CWHeight | CWX | CWY,   10,  280,  202,   41, 0,0,0, /* label3 */},
761    {CWWidth | CWHeight | CWX | CWY,  222,  280,  268,   35, 0,0,0, /* optionMenu1 */},
762    {CWWidth | CWHeight | CWX | CWY,    3,    3,   10,   29, 0,0,0, /* OptionLabel */},
763    {CWWidth | CWHeight | CWX | CWY,   16,    3,  103,   29, 0,0,0, /* OptionButton */},
764    {CWWidth | CWHeight | CWX | CWY,  222,  230,  268,   36, 0,0,0, /* dbNameTf */},
765    {CWWidth | CWHeight | CWX | CWY,   10,  230,  202,   40, 0,0,0, /* label2 */},
766    {CWWidth | CWHeight | CWX | CWY,   10,   50,  481,  100, 0,0,0, /* scrolledWindow1 */},
767    {CWWidth | CWHeight | CWX | CWY,    0,    0,  481,  100, 0,0,0, /* dbList */},
768    {CWWidth | CWHeight | CWX | CWY,   10,   10,  101,   30, 0,0,0, /* label1 */},
769    {CWWidth | CWHeight | CWX | CWY,  230,  456,  115,   31, 0,0,0, /* cancelButton */},
770    {CWWidth | CWHeight | CWX | CWY,   20,  456,  115,   31, 0,0,0, /* applyButton */},
771 };
772 #else
773   static XtWidgetGeometry Expected[] = {
774   	{CWWidth | CWHeight,              0,  	0,	500,	504, 0,0,0,	/* ConfigureWindow */},
775   	{CWWidth | CWHeight | CWX | CWY,383,	160,	99,	30, 0,0,0,	/* moveDownButton */},
776   	{CWWidth | CWHeight | CWX | CWY,259,	160,	99,	30, 0,0,0,	/* moveUpButton */},
777   	{CWWidth | CWHeight | CWX | CWY, 10,	160,	99,	30, 0,0,0,	/* addDBButton */},
778   	{CWWidth | CWHeight | CWX | CWY,	10,	200,	482,	20, 0,0,0,	/* separator2 */},
779   	{CWWidth | CWHeight | CWX | CWY,	134,	160,	100,	30, 0,0,0,	/* deleteButton */},
780   	{CWWidth | CWHeight | CWX | CWY,	10,	426,	480,	20,0,0,0,	/* separator1 */},
781   	{CWWidth | CWHeight | CWX | CWY,	222,	380,	268,	36,0,0,0,	/* dbDescFileTf */},
782   	{CWWidth | CWHeight | CWX | CWY,	222,	332,	268,	36,0,0,0,	/* dbFileTf */},
783   	{CWWidth | CWHeight | CWX | CWY,	10,	383,	200,	43,0,0,0,	/* label5 */},
784   	{CWWidth | CWHeight | CWX | CWY,	10,	331,	202,	42,0,0,0,	/* label4 */},
785   	{CWWidth | CWHeight | CWX | CWY,	10,	280,	202,	41,0,0,0,	/* label3 */},
786   	{CWWidth | CWHeight | CWX | CWY,	222,	280,	268,	31,0,0,0,	/* optionMenu1 */},
787   	{CWWidth | CWHeight | CWX | CWY,	3,	3,	10,	25,0,0,0,	/* OptionLabel */},
788   	{CWWidth | CWHeight | CWX | CWY,	16,	3,	103,	25,0,0,0,	/* OptionButton */},
789   	{CWWidth | CWHeight | CWX | CWY,	222,	230,	268,	36,0,0,0,	/* dbNameTf */},
790   	{CWWidth | CWHeight | CWX | CWY,	10,	230,	202,	40,0,0,0,	/* label2 */},
791   	{CWWidth | CWHeight | CWX | CWY,	10,	50,	481,	100,0,0,0,	/* scrolledWindow1 */},
792   	{CWWidth | CWHeight | CWX | CWY,	0,	0,	481,	100,0,0,0,	/* dbList */},
793   	{CWWidth | CWHeight | CWX | CWY,	10,	10,	101,	30,0,0,0,	/* label1 */},
794   	{CWWidth | CWHeight | CWX | CWY,	230,	456,	115,	31,0,0,0,	/* cancelButton */},
795   	{CWWidth | CWHeight | CWX | CWY,	20,	456,	115,	31,0,0,0,	/* applyButton */},
796 };
797 #endif
798 
799   PrintDetails(toplevel, Expected);
800   }
801 	    LessTifTestMainLoop(toplevel);
802 	exit(0);
803 }
804