6d99d480d3f37134d8e5fc54456f327d53e5d7b5
[openafs.git] / src / gtx / gtxtest.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID
14     ("$Header$");
15
16
17 #ifdef HAVE_STRING_H
18 #include <string.h>
19 #else
20 #ifdef HAVE_STRINGS_H
21 #include <strings.h>
22 #endif
23 #endif
24
25 #include "gtxwindows.h"
26 #include "gtxobjects.h"
27 #include "gtxtextobj.h"
28 #include "gtxlightobj.h"
29 #include "gtxframe.h"
30
31 struct gtx_frame *frameA, *frameB;
32
33 struct onode *objectA, *objectB;
34 struct onode *lightA, *lightB;
35
36 static int
37 ChangeMenuCmd(awin, arock)
38      afs_int32 arock;
39      register struct gwin *awin;
40 {
41     register struct gtx_frame *tf;
42     register afs_int32 code;
43
44     tf = awin->w_frame;
45     if (!tf)
46         return -1;
47
48     if (arock == 1) {
49         gtxframe_ClearMenus(tf);
50     } else if (arock == 2) {
51         code = gtxframe_DeleteMenu(tf, "NewLabel");
52         if (code)
53             gtxframe_DisplayString(tf, "Can't delete menu!");
54     } else if (arock == 3) {
55         code = gtxframe_ClearMenus(tf);
56         gtxframe_AddMenu(frameA, "FrameB", "b");
57         gtxframe_AddMenu(frameA, "NewLabel", "c");
58     }
59     return 0;
60 }
61
62 static int
63 ChangeListCmd(awin, arock)
64      afs_int32 arock;
65      register struct gwin *awin;
66 {
67     register struct gtx_frame *tf;
68     register afs_int32 code;
69
70     tf = awin->w_frame;
71     if (!tf)
72         return -1;
73
74     if (arock == 1) {
75         gtxframe_ClearList(tf);
76     } else if (arock == 2) {
77         code = gtxframe_RemoveFromList(tf, lightA);
78         if (code)
79             gtxframe_DisplayString(tf, "Can't delete light!");
80     } else if (arock == 3) {
81         code = gtxframe_ClearList(tf);
82         gtxframe_AddToList(frameA, objectA);
83         gtxframe_AddToList(frameA, lightA);
84     }
85     return 0;
86 }
87
88 static int
89 NoCallCmd(awin)
90      struct gwin *awin;
91 {
92     gtxframe_DisplayString(awin->w_frame,
93                            "Function should be mapped on '$d', not 'd'");
94     return 0;
95 }
96
97 static int
98 ChangeCmd(awin)
99      struct gwin *awin;
100 {
101     char tbuffer[100];
102     register afs_int32 code;
103
104     code =
105         gtxframe_AskForString(awin->w_frame, "New object string: ", "TestNew",
106                               tbuffer, sizeof(tbuffer));
107     if (code == 0) {
108         /* have new value, write it to object A */
109         gator_text_Write(objectA, tbuffer, 0, 0, 0);
110     }
111     return 0;
112 }
113
114 static int
115 StupidCmd(awin)
116      struct gwin *awin;
117 {
118     gtxframe_DisplayString(awin->w_frame,
119                            "You're already showing that frame!");
120     return 0;
121 }
122
123 static int
124 SwitchToACmd(awin)
125      struct gwin *awin;
126 {
127     gtxframe_SetFrame(awin, frameA);
128     return 0;
129 }
130
131 static int
132 SwitchToBCmd(awin)
133      struct gwin *awin;
134 {
135     gtxframe_SetFrame(awin, frameB);
136     return 0;
137 }
138
139 #include "AFS_component_version_number.c"
140
141 main()
142 {
143     struct gwin *win;
144     struct gator_textobj_params textcrparams;
145     struct gator_light_crparams lightcrparams;
146     register struct keymap_map *tmap;
147
148     win = gtx_Init(0, -1);
149
150     /* create a couple of objects, a and b, and have the "a" and "b" keys
151      * switch the display from one to the other */
152     textcrparams.onode_params.cr_type = GATOR_OBJ_TEXT;
153     strcpy(textcrparams.onode_params.cr_name, "Text1-A");
154     textcrparams.onode_params.cr_x = 30;
155     textcrparams.onode_params.cr_y = 10;
156     textcrparams.onode_params.cr_width = 35;
157     textcrparams.onode_params.cr_height = 7;
158     textcrparams.onode_params.cr_window = win;  /* ???? */
159     textcrparams.onode_params.cr_home_obj = NULL;
160     textcrparams.onode_params.cr_prev_obj = NULL;
161     textcrparams.onode_params.cr_parent_obj = NULL;
162     textcrparams.onode_params.cr_helpstring = "Help string for text";
163     textcrparams.maxEntries = 7;
164     textcrparams.maxCharsPerEntry = 35;
165
166     objectA =
167         gator_objects_create((struct onode_createparams *)(&textcrparams));
168     gator_text_Write(objectA, "This is object A", 0, 0, 0);
169
170     /* create a couple of objects, a and b, and have the "a" and "b" keys
171      * switch the display from one to the other */
172     textcrparams.onode_params.cr_type = GATOR_OBJ_TEXT;
173     strcpy(textcrparams.onode_params.cr_name, "Text2-B");
174     textcrparams.onode_params.cr_x = 30;
175     textcrparams.onode_params.cr_y = 10;
176     textcrparams.onode_params.cr_width = 35;
177     textcrparams.onode_params.cr_height = 7;
178     textcrparams.onode_params.cr_window = win;  /* ???? */
179     textcrparams.onode_params.cr_home_obj = NULL;
180     textcrparams.onode_params.cr_prev_obj = NULL;
181     textcrparams.onode_params.cr_parent_obj = NULL;
182     textcrparams.onode_params.cr_helpstring = "Help string for text";
183     textcrparams.maxEntries = 7;
184     textcrparams.maxCharsPerEntry = 35;
185
186     objectB =
187         gator_objects_create((struct onode_createparams *)(&textcrparams));
188     gator_text_Write(objectB, "This is object B", 0, 0, 0);
189
190     lightcrparams.onode_params.cr_type = GATOR_OBJ_LIGHT;
191     lightcrparams.onode_params.cr_x = 10;
192     lightcrparams.onode_params.cr_y = 10;
193     lightcrparams.onode_params.cr_width = 10;
194     lightcrparams.onode_params.cr_height = 10;
195     lightcrparams.onode_params.cr_window = win; /* ???? */
196     lightcrparams.onode_params.cr_home_obj = NULL;
197     lightcrparams.onode_params.cr_prev_obj = NULL;
198     lightcrparams.onode_params.cr_parent_obj = NULL;
199     lightcrparams.onode_params.cr_helpstring = "Help string for text";
200     strcpy(lightcrparams.label, "Light-1");
201     lightcrparams.label_x = 0;
202     lightcrparams.label_y = 0;
203     lightcrparams.flashfreq = 100;
204     lightcrparams.appearance = GATOR_LIGHTMASK_INVVIDEO;
205     lightA =
206         gator_objects_create((struct onode_createparams *)(&lightcrparams));
207
208     /* create basic frames */
209     frameA = gtxframe_Create();
210     frameB = gtxframe_Create();
211
212     /* setup A's frame */
213     gtxframe_ClearList(frameA);
214     gtxframe_AddToList(frameA, objectA);
215     gtxframe_AddToList(frameA, lightA);
216     keymap_BindToString(frameA->keymap, "b", SwitchToBCmd, NULL, NULL);
217     keymap_BindToString(frameA->keymap, "a", StupidCmd, NULL, NULL);
218     keymap_BindToString(frameA->keymap, "c", ChangeCmd, NULL, NULL);
219     keymap_BindToString(frameA->keymap, "\033a", ChangeMenuCmd, "ChangeMenu",
220                         (char *)1);
221     keymap_BindToString(frameA->keymap, "\033b", ChangeMenuCmd, "ChangeMenu",
222                         (char *)2);
223     keymap_BindToString(frameA->keymap, "\033c", ChangeMenuCmd, "ChangeMenu",
224                         (char *)3);
225     keymap_BindToString(frameA->keymap, "\0331", ChangeListCmd, "ChangeList",
226                         (char *)1);
227     keymap_BindToString(frameA->keymap, "\0332", ChangeListCmd, "ChangeList",
228                         (char *)2);
229     keymap_BindToString(frameA->keymap, "\0333", ChangeListCmd, "ChangeList",
230                         (char *)3);
231     gtxframe_AddMenu(frameA, "FrameB", "b");
232     gtxframe_AddMenu(frameA, "NewLabel", "c");
233
234     /* setup B's frame */
235     gtxframe_ClearList(frameB);
236     gtxframe_AddToList(frameB, objectB);
237     keymap_BindToString(frameB->keymap, "a", SwitchToACmd, NULL, NULL);
238     keymap_BindToString(frameB->keymap, "b", StupidCmd, NULL, NULL);
239     keymap_BindToString(frameB->keymap, "d", NoCallCmd, NULL, NULL);
240     keymap_BindToString(frameB->keymap, "d", (int (*)())0, NULL, NULL);
241     keymap_BindToString(frameB->keymap, "\033d", NoCallCmd, NULL, NULL);
242     gtxframe_AddMenu(frameB, "FrameA", "a");
243
244     /* finally setup the first window */
245     gtxframe_AddToList(frameA, objectA);
246     gtxframe_SetFrame(win, frameA);
247
248     /* play with maps for a while */
249     tmap = (struct keymap_map *)keymap_Create();
250     keymap_BindToString(tmap, "d", NoCallCmd, "test", (char *)1);
251     keymap_BindToString(tmap, "cd", NoCallCmd, "bozo", NULL);
252     keymap_Delete(tmap);
253
254     gtx_InputServer(win);
255 }