1 /* $Header: /cvsroot/lesstif/lesstif/test/Xm/scrolledwindow/test21.c,v 1.3 2002/05/01 15:27:19 amai Exp $ */
2 /*
3 ** Generated by X-Designer
4 ** traverse obscured
5 */
6 /*
7 **LIBS: -lXm -lXt -lX11
8 */
9 
10 #include <stdlib.h>
11 #include <stdio.h>
12 
13 #include <X11/Xatom.h>
14 #include <X11/Intrinsic.h>
15 #include <X11/Shell.h>
16 
17 #include <Xm/Xm.h>
18 #include <Xm/DialogS.h>
19 #include <Xm/Form.h>
20 #include <Xm/Label.h>
21 #include <Xm/PushB.h>
22 #include <Xm/RowColumn.h>
23 #include <Xm/ScrollBar.h>
24 #include <Xm/ScrolledW.h>
25 
26 #include "../../common/Test.h"
27 
28 
29 extern void traverse_obscured ();
30 extern Boolean aardvarkConverter ();
31 extern Boolean objStringConverter ();
32 Widget appshell = (Widget) NULL;
33 Widget form = (Widget) NULL;
34 Widget scrollwin = (Widget) NULL;
35 Widget hsb = (Widget) NULL;
36 Widget vsb = (Widget) NULL;
37 Widget rowcol = (Widget) NULL;
38 Widget button1 = (Widget) NULL;
39 Widget button2 = (Widget) NULL;
40 Widget button3 = (Widget) NULL;
41 Widget label = (Widget) NULL;
42 
43 
44 void
traverse_obscured(w,client_data,call_data)45 traverse_obscured(w, client_data, call_data)
46 	Widget          w;
47 	XtPointer       client_data;
48 	XtPointer       call_data;
49 {
50 	XmScrollVisible(w, ((XmTraverseObscuredCallbackStruct *)
51 			    call_data)->traversal_destination, 20, 0);
52 }
53 
54 
create_appshell(display,app_name,app_argc,app_argv)55 void create_appshell (display, app_name, app_argc, app_argv)
56 Display *display;
57 char *app_name;
58 int app_argc;
59 char **app_argv;
60 {
61 	Widget children[3];      /* Children to manage */
62 	Arg al[64];                    /* Arg List */
63 	register int ac = 0;           /* Arg Count */
64 	XmString xmstrings[16];    /* temporary storage for XmStrings */
65 
66 	XtSetArg(al[ac], XmNallowShellResize, TRUE); ac++;
67 	XtSetArg(al[ac], XmNtitle, "Automatic Traversal to Obscured Widgets in Scrolled Window"); ac++;
68 	XtSetArg(al[ac], XmNargc, app_argc); ac++;
69 	XtSetArg(al[ac], XmNargv, app_argv); ac++;
70 	appshell = XtAppCreateShell ( app_name, "XApplication", applicationShellWidgetClass, display, al, ac );
71 	ac = 0;
72 	XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++;
73 	XtSetArg(al[ac], XmNhorizontalSpacing, 10); ac++;
74 	XtSetArg(al[ac], XmNverticalSpacing, 10); ac++;
75 	form = XmCreateForm ( appshell, "form", al, ac );
76 	ac = 0;
77 	XtSetArg(al[ac], XmNscrollingPolicy, XmAUTOMATIC); ac++;
78 	scrollwin = XmCreateScrolledWindow ( form, "scrollwin", al, ac );
79 	ac = 0;
80 
81 	XtSetArg(al[ac], XmNhorizontalScrollBar, &hsb ); ac++;
82 	XtSetArg(al[ac], XmNverticalScrollBar, &vsb ); ac++;
83 	XtGetValues(scrollwin, al, ac );
84 	ac = 0;
85 	XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++;
86 	rowcol = XmCreateRowColumn ( scrollwin, "rowcol", al, ac );
87 	ac = 0;
88 	button1 = XmCreatePushButton ( rowcol, "button1", al, ac );
89 	button2 = XmCreatePushButton ( rowcol, "button2", al, ac );
90 	button3 = XmCreatePushButton ( rowcol, "button3", al, ac );
91 	xmstrings[0] = XmStringCreateLtoR("Use arrow keys to traverse between buttons.\nTraversing to an obscured button will scroll the window to reveal it.\nHowever, traversing to button1 or button3 should not leave a margin.", (XmStringCharSet)XmFONTLIST_DEFAULT_TAG);
92 	XtSetArg(al[ac], XmNlabelString, xmstrings[0]); ac++;
93 	label = XmCreateLabel ( form, "label", al, ac );
94 	ac = 0;
95 	XmStringFree ( xmstrings [ 0 ] );
96 
97 	XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
98 	XtSetArg(al[ac], XmNtopWidget, label); ac++;
99 	XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
100 	XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
101 	XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
102 	XtSetValues ( scrollwin,al, ac );
103 	ac = 0;
104 
105 	XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
106 	XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
107 	XtSetValues ( label,al, ac );
108 	ac = 0;
109 	XtAddCallback (scrollwin, XmNtraverseObscuredCallback, traverse_obscured,NULL);
110 	children[ac++] = button1;
111 	children[ac++] = button2;
112 	children[ac++] = button3;
113 	XtManageChildren(children, ac);
114 	ac = 0;
115 	children[ac++] = rowcol;
116 	XtManageChildren(children, ac);
117 	{
118 	unsigned char policy;
119 
120 		XtVaGetValues(scrollwin,
121 			XmNscrollBarDisplayPolicy, &policy,
122 			NULL);
123 		printf("scrollBarDisplayPolicy %s\n",
124 			policy == XmSTATIC ? "XmSTATIC" : "XmAS_NEEDED");
125 	}
126 	ac = 0;
127 	XmScrolledWindowSetAreas(scrollwin, hsb, vsb, rowcol );
128 	{
129 	unsigned char policy;
130 
131 		XtVaGetValues(scrollwin,
132 			XmNscrollBarDisplayPolicy, &policy,
133 			NULL);
134 		printf("scrollBarDisplayPolicy %s\n",
135 			policy == XmSTATIC ? "XmSTATIC" : "XmAS_NEEDED");
136 	}
137 	children[ac++] = scrollwin;
138 	children[ac++] = label;
139 	XtManageChildren(children, ac);
140 	ac = 0;
141 	XtManageChild ( form);
142 
143 	XtAddCallback(button1, XmNactivateCallback, XdbPrintTreeCB, (XtPointer)form);
144 }
145 
146 
147 
148 XtAppContext app_context;
149 Display *display;       /*  Display             */
150 
main(argc,argv)151 int main (argc,argv)
152 int    argc;
153 char            **argv;
154 {
155 	XtSetLanguageProc ( (XtAppContext) NULL, (XtLanguageProc) NULL, (XtPointer) NULL );
156 	XtToolkitInitialize ();
157 	app_context = XtCreateApplicationContext ();
158 	display = XtOpenDisplay (app_context, NULL, argv[0], "XApplication",
159 	                         NULL, 0, &argc, argv);
160 	if (!display)
161 	{
162 	    printf("%s: can't open display, exiting...\n", argv[0]);
163 	    exit (-1);
164 	}
165 	create_appshell ( display, argv[0], argc, argv );
166 	XtRealizeWidget (appshell);
167 
168 
169 {
170     static XtWidgetGeometry Expected[] = {
171    {CWWidth | CWHeight            ,    0,    0,  428,  163, 0,0,0, /* form */},
172    {CWWidth | CWHeight | CWX | CWY,   10,   63,  100,  100, 0,0,0, /* scrollwin */},
173    {CWWidth | CWHeight | CWX | CWY,    4,    2,   92,   71, 0,0,0, /* ClipWindow */},
174    {CWWidth | CWHeight | CWX | CWY,    0,    0,  174,   31, 0,0,0, /* rowcol */},
175    {CWWidth | CWHeight | CWX | CWY,    3,    3,   54,   25, 0,0,0, /* button1 */},
176    {CWWidth | CWHeight | CWX | CWY,   60,    3,   54,   25, 0,0,0, /* button2 */},
177    {CWWidth | CWHeight | CWX | CWY,  117,    3,   54,   25, 0,0,0, /* button3 */},
178    {CWWidth | CWHeight | CWX | CWY,  100,    0,   19,  100, 0,0,0, /* VertScrollBar */},
179    {CWWidth | CWHeight | CWX | CWY,    0,   81,  100,   19, 0,0,0, /* HorScrollBar */},
180    {CWWidth | CWHeight | CWX | CWY,   10,   10,  418,   43, 0,0,0, /* label */},
181 
182    {CWWidth | CWHeight            ,  398,  573,  428,  163, 0,0,0, /* form */},
183    {CWWidth | CWHeight | CWX | CWY,   10,   63,  100,  100, 0,0,0, /* scrollwin */},
184    {CWWidth | CWHeight | CWX | CWY,    4,    2,   92,   71, 0,0,0, /* ClipWindow */},
185    {CWWidth | CWHeight | CWX | CWY,  -42,    0,  174,   31, 0,0,0, /* rowcol */},
186    {CWWidth | CWHeight | CWX | CWY,    3,    3,   54,   25, 0,0,0, /* button1 */},
187    {CWWidth | CWHeight | CWX | CWY,   60,    3,   54,   25, 0,0,0, /* button2 */},
188    {CWWidth | CWHeight | CWX | CWY,  117,    3,   54,   25, 0,0,0, /* button3 */},
189    {CWWidth | CWHeight | CWX | CWY,  100,    0,   19,  100, 0,0,0, /* VertScrollBar */},
190    {CWWidth | CWHeight | CWX | CWY,    0,   81,  100,   19, 0,0,0, /* HorScrollBar */},
191    {CWWidth | CWHeight | CWX | CWY,   10,   10,  418,   43, 0,0,0, /* label */},
192 
193    {CWWidth | CWHeight            ,  398,  573,  428,  163, 0,0,0, /* form */},
194    {CWWidth | CWHeight | CWX | CWY,   10,   63,  100,  100, 0,0,0, /* scrollwin */},
195    {CWWidth | CWHeight | CWX | CWY,    4,    2,   92,   71, 0,0,0, /* ClipWindow */},
196    {CWWidth | CWHeight | CWX | CWY,  -82,    0,  174,   31, 0,0,0, /* rowcol */},
197    {CWWidth | CWHeight | CWX | CWY,    3,    3,   54,   25, 0,0,0, /* button1 */},
198    {CWWidth | CWHeight | CWX | CWY,   60,    3,   54,   25, 0,0,0, /* button2 */},
199    {CWWidth | CWHeight | CWX | CWY,  117,    3,   54,   25, 0,0,0, /* button3 */},
200    {CWWidth | CWHeight | CWX | CWY,  100,    0,   19,  100, 0,0,0, /* VertScrollBar */},
201    {CWWidth | CWHeight | CWX | CWY,    0,   81,  100,   19, 0,0,0, /* HorScrollBar */},
202    {CWWidth | CWHeight | CWX | CWY,   10,   10,  418,   43, 0,0,0, /* label */},
203 };
204     LessTifTestSetSlop(appshell, 2);
205     PrintDetails(appshell,Expected);
206     LessTifTestWaitForIt(appshell);
207     XmScrollVisible(scrollwin, button2, 20, 0);
208     PrintDetails(appshell,Expected);
209     LessTifTestWaitForIt(appshell);
210     XmScrollVisible(scrollwin, button3, 20, 0);
211     PrintDetails(appshell,Expected);
212 };
213   LessTifTestMainLoop(appshell);
214 
215 	exit (0);
216 }
217 
218