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