1 /* $Id: test63.c,v 1.1 2000/11/12 14:20:02 rwscott Exp $ */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <Xm/Xm.h>
6 #include <Xm/XmP.h>
7 #include <Xm/CascadeB.h>
8 #include <Xm/MenuShell.h>
9 #include <Xm/MessageB.h>
10 #include <Xm/MessageB.h>
11 #include <Xm/ToggleB.h>
12 #include <Xm/PushB.h>
13 #include <Xm/PushBG.h>
14 #include <Xm/PushBP.h>
15 #include <Xm/RepType.h>
16 #include <Xm/RowColumn.h>
17 #include <Xm/SelectioB.h>
18 #include <Xm/DrawingA.h>
19 #include "../../common/Test.h"
20
21 Widget toplevel, box, push;
22 XtAppContext app_context;
23 int DialogDone=False,DialogReturn;
24
25 char *fallback[] = {
26 "*button2.set: True",
27 "*slideInterval: 0",
28 NULL /* The end */
29 };
30
31 typedef struct _CallbackResultStruct {
32 char * WidgetName;
33 int CallbackId;
34 int Sequence;
35 int Reason;
36 } _CallbackResult;
37
38 int StartLine = __LINE__;
39 _CallbackResult Results[] = { /* insert results of Motif run after this */
40 {"cascade1", 185, 0, XmCR_CASCADING },\
41 {"pane1", 169, 1, XmCR_MAP },\
42 {"pane1", 172, 2, XmCR_UNMAP },\
43 {"pane1", 173, 3, XmCR_ACTIVATE },\
44 {"button2", 173, 4, XmCR_ACTIVATE },\
45 {"pane1", 173, 5, XmCR_ACTIVATE },\
46 {"button1", 173, 6, XmCR_ACTIVATE },\
47 {"cascade1", 185, 7, XmCR_CASCADING },\
48 {"pane1", 169, 8, XmCR_MAP },\
49 {"pane1", 172, 9, XmCR_UNMAP },\
50 {"pane1", 173, 10, XmCR_ACTIVATE },\
51 {"button1", 173, 11, XmCR_ACTIVATE },\
52 {"pane1", 173, 12, XmCR_ACTIVATE },\
53 {"button2", 173, 13, XmCR_ACTIVATE },
54 {NULL, 0, 0, 0}, /* This must stay here */
55 };
56 int StopLine = __LINE__;
57 int ResultIndex = 0;
58
59
60 static void
GenericCallback(Widget w,int id,XmAnyCallbackStruct * cbs)61 GenericCallback(Widget w, int id, XmAnyCallbackStruct *cbs)
62 {
63 String Name = w ? XtName(w) : "";
64 int Reason = cbs ? cbs->reason : XmCR_NONE;
65
66 if (XtNumber(Results) == 1 || ResultIndex + 1 >= XtNumber(Results))
67 {
68 static Boolean FirstCall = True;
69
70 if (FirstCall)
71 {
72 printf("/^_CallbackResult/a");
73 }
74 printf("\\\n\t{\"%s\", %*s%3i, %3i, %-30s},",
75 w ? XtName(w) : "",
76 20 - strlen(Name),
77 "",
78 id, ResultIndex,
79 cbs ? XdbReason2String(cbs->reason) : "XmCR_NONE /* cbs is NULL */");
80 if (cbs->reason == XmCR_ACTIVATE)
81 {
82 Widget old;
83 String Name;
84
85 XtVaGetValues(w,
86 XmNmenuHistory, &old,
87 NULL);
88 Name = old ? XtName(old) : "";
89 ResultIndex++;
90 printf("\\\n\t{\"%s\", %*s%3i, %3i, %-30s},",
91 old ? XtName(old) : "",
92 20 - strlen(Name),
93 "",
94 id, ResultIndex,
95 cbs ? XdbReason2String(cbs->reason) : "XmCR_NONE /* cbs is NULL */");
96 }
97 GlobalErrors = 1;
98 FirstCall = False;
99 }
100 else
101 {
102 printf("%s, %*s%3i(%3i), %3i(%3i), %-30s ",
103 Name,
104 20 - strlen(Name),
105 "",
106 id, Results[ResultIndex].CallbackId + (StopLine - StartLine - 4),
107 ResultIndex, Results[ResultIndex].Sequence,
108 XdbReason2String(Reason));
109
110 if (strcmp(Name, Results[ResultIndex].WidgetName) == 0 &&
111 Results[ResultIndex].CallbackId == id - (StopLine - StartLine - 4) &&
112 Results[ResultIndex].Sequence == ResultIndex &&
113 Results[ResultIndex].Reason == Reason
114 )
115 {
116 printf("okay\n");
117 }
118 else
119 {
120 printf("bad\n");
121 GlobalErrors++;
122 }
123 if (cbs->reason == XmCR_ACTIVATE)
124 {
125 Widget old;
126 String Name;
127
128 ResultIndex++;
129 XtVaGetValues(w,
130 XmNmenuHistory, &old,
131 NULL);
132 Name = old ? XtName(old) : "";
133 printf("%s, %*s%3i(%3i), %3i(%3i), %-30s ",
134 Name,
135 20 - strlen(Name),
136 "",
137 id, Results[ResultIndex].CallbackId + (StopLine - StartLine - 4),
138 ResultIndex, Results[ResultIndex].Sequence,
139 XdbReason2String(Reason));
140
141 if (strcmp(Name, Results[ResultIndex].WidgetName) == 0 &&
142 Results[ResultIndex].CallbackId == id - (StopLine - StartLine - 4) &&
143 Results[ResultIndex].Sequence == ResultIndex &&
144 Results[ResultIndex].Reason == Reason
145 )
146 {
147 printf("okay\n");
148 }
149 else
150 {
151 printf("bad\n");
152 GlobalErrors++;
153 }
154 }
155 }
156 ResultIndex++;
157 }
158
159 int
main(int argc,char ** argv)160 main(int argc, char **argv)
161 {
162 Widget menubar;
163 Widget cascade1;
164 Widget pane1;
165 Widget button1;
166 Widget button2;
167 Widget pane1_tear_off;
168
169 /* Install converter to make the command line indicated above work */
170 XmRepTypeInstallTearOffModelConverter();
171
172 /* Toplevel and Menu Bar */
173 toplevel = XtVaAppInitialize(&app_context, "test50", NULL, 0,
174 &argc, argv, fallback, NULL);
175 menubar = XmCreateMenuBar(toplevel, "menubar", NULL, 0);
176
177
178 /* First Menu */
179 pane1 = XmCreatePulldownMenu(menubar, "pane1", NULL, 0);
180 XtVaSetValues(pane1,
181 XmNradioBehavior, True,
182 NULL);
183 XtAddCallback(pane1, XmNmapCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
184 XtAddCallback(pane1, XmNtearOffMenuActivateCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
185 XtAddCallback(pane1, XmNtearOffMenuDeactivateCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
186 XtAddCallback(pane1, XmNunmapCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
187 XtAddCallback(pane1, XmNentryCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
188 /*
189 XtAddCallback(XtParent(pane1), XmNpopupCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
190 XtAddCallback(XtParent(pane1), XmNpopdownCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
191 */
192 pane1_tear_off = XmGetTearOffControl(pane1);
193
194 cascade1 = XtVaCreateManagedWidget("cascade1",
195 xmCascadeButtonWidgetClass, menubar,
196 XmNsubMenuId, pane1,
197 NULL);
198 XtAddCallback(cascade1, XmNactivateCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
199 XtAddCallback(cascade1, XmNcascadingCallback, (XtCallbackProc)GenericCallback, (XtPointer)__LINE__);
200
201 button1 = XtVaCreateManagedWidget("button1",
202 xmToggleButtonWidgetClass, pane1,
203 NULL);
204 button2 = XtVaCreateManagedWidget("button2",
205 xmToggleButtonWidgetClass, pane1,
206 NULL);
207
208 XtManageChild(menubar);
209 XtRealizeWidget(toplevel);
210 LessTifTestWaitForIt(toplevel);
211
212 LessTifTestBtn1Down(cascade1);
213 LessTifTestBtn1Up(button1);
214
215 LessTifTestBtn1Down(cascade1);
216 LessTifTestBtn1Up(button2);
217
218 printf("\n"); /* need final \n for output file or sed doesn't work on
219 SGI */
220 LessTifTestMainLoop(toplevel);
221 exit(0);
222 }
223