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