Some compile fixes, not enough
[erwise] / Ui / UiSearch.c
1 static char *rcsid = "$Id: UiSearch.c,v 1.1 1992/03/26 18:13:50 kny Exp kss $";
2
3 #include "UiIncludes.h"
4
5
6 static Widget uicreatesearchformdialog();
7 static Widget uicreatesearchtext(Widget formwdg);
8 static Widget uicreatesearchlevel(Widget formwdg, Widget textwdg);
9 static Widget uicreatesearchlevelform(Widget formwdg, Widget levelwdg);
10 static Widget uicreatesearchleveldown(Widget formwdg);
11 static Widget uicreatesearchlevelup(Widget formwdg);
12 static Widget uicreatesearchcase(Widget formwdg, Widget levelwdg);
13 static Widget uicreatesearchbackward(Widget formwdg, Widget levelwdg);
14 static Widget uicreatesearchforward(Widget formwdg, Widget textwdg);
15 static Widget uicreatesearchlabel(Widget formwdg, Widget closewdg);
16 static Widget uicreatesearchclose(Widget formwdg, Widget forwardwdg);
17
18 static void uisearchlevelcb(char *address, HText_t * htex,
19                            HTextObject_t * htextobject, void *parameter);
20 static void uisearchclosecb(char *address, HText_t * htext,
21                            HTextObject_t * htextobject, void *parameter);
22
23
24 int UiDisplaySearchDialog(type)
25 int type;
26 {
27     uiSearchGfx_t *searchgfx = &uiTopLevel.SearchGfx;
28
29     if (searchgfx->FormWdg) {
30         XtMapWidget(XtParent(searchgfx->FormWdg));
31         uiWidgetPlacement(XtParent(searchgfx->FormWdg),
32                           uiTopLevel.GlobalSettings.SearchPlacement);
33         uiSearchUpdateDialog();
34         return UI_OK;
35     }
36     searchgfx->FormWdg = uicreatesearchformdialog();
37     searchgfx->TextWdg = uicreatesearchtext(searchgfx->FormWdg);
38     searchgfx->LevelWdg = uicreatesearchlevel(searchgfx->FormWdg,
39                                               searchgfx->TextWdg);
40     searchgfx->LevelFormWdg = uicreatesearchlevelform(searchgfx->FormWdg,
41                                                     searchgfx->LevelWdg);
42     searchgfx->CaseWdg = uicreatesearchcase(searchgfx->FormWdg,
43                                             searchgfx->LevelWdg);
44     searchgfx->BackwardWdg = uicreatesearchbackward(searchgfx->FormWdg,
45                                                     searchgfx->TextWdg);
46     searchgfx->ForwardWdg = uicreatesearchforward(searchgfx->FormWdg,
47                                                   searchgfx->BackwardWdg);
48     searchgfx->CloseWdg = uicreatesearchclose(searchgfx->FormWdg,
49                                               searchgfx->ForwardWdg);
50     searchgfx->LabelWdg = uicreatesearchlabel(searchgfx->FormWdg,
51                                               searchgfx->CloseWdg);
52
53     XtManageChild(searchgfx->FormWdg);
54     XtRealizeWidget(XtParent(searchgfx->FormWdg));
55
56     uiWidgetPlacement(XtParent(searchgfx->FormWdg),
57                       uiTopLevel.GlobalSettings.SearchPlacement);
58
59     return UI_OK;
60 }
61
62
63 void uiSearchUpdateDialog()
64 {
65     XmString labelstr;
66
67     if (uiTopLevel.SearchGfx.FormWdg) {
68         if (uiPageInfo.CurrentPage) {
69             labelstr =
70                 XmStringCreateSimple(HTAnchor_address((HTAnchor *)
71                                                  uiPageInfo.CurrentPage->
72                                                     HText->node_anchor));
73             XtVaSetValues(uiTopLevel.SearchGfx.LabelWdg,
74                           XmNlabelString, labelstr, NULL);
75             XmStringFree(labelstr);
76         } else
77             XtUnmapWidget(XtParent(uiTopLevel.SearchGfx.FormWdg));
78     }
79 }
80
81
82 static Widget
83  uicreatesearchformdialog()
84 {
85     ArgList args;
86     Cardinal nargs;
87     Widget formwdg;
88     Widget topwdg;
89
90     topwdg = XtCreateApplicationShell("Search",
91                                       topLevelShellWidgetClass,
92                                       NULL, 0);
93     XtVaSetValues(topwdg,
94                   XmNtitle, UI_SEARCH_TITLE, NULL);
95
96     args = uiVaSetArgs(&nargs,
97                        XmNresizePolicy, XmRESIZE_NONE,
98                        XmNautoUnmanage, FALSE, NULL);
99     formwdg = XmCreateForm(topwdg, "Search", args, nargs);
100
101     return formwdg;
102 }
103
104
105 static Widget
106  uicreatesearchtext(formwdg)
107 Widget formwdg;
108 {
109     ArgList args;
110     Cardinal nargs;
111     XmString labelstr;
112     Widget labelwdg, textwdg;
113
114     labelstr = XmStringCreateSimple("Search for:");
115     args = uiVaSetArgs(&nargs,
116                        XmNlabelString, labelstr,
117                        XmNtopAttachment, XmATTACH_FORM,
118                        XmNtopOffset, UI_SEARCH_WDG_OFFSET,
119                        XmNleftAttachment, XmATTACH_FORM,
120                        XmNleftOffset, UI_SEARCH_WDG_OFFSET, NULL);
121     labelwdg = XmCreateLabelGadget(formwdg, "TextLabel", args, nargs);
122     XtManageChild(labelwdg);
123     XmStringFree(labelstr);
124
125     args = uiVaSetArgs(&nargs,
126                        XmNcolumns, 40,
127                        XmNtopAttachment, XmATTACH_WIDGET,
128                        XmNtopWidget, labelwdg,
129                        XmNtopOffset, UI_SEARCH_WDG_OFFSET / 2,
130                        XmNleftAttachment, XmATTACH_FORM,
131                        XmNleftOffset, UI_SEARCH_WDG_OFFSET,
132                        XmNrightAttachment, XmATTACH_FORM,
133                        XmNrightOffset, UI_SEARCH_WDG_OFFSET, NULL);
134     textwdg = XmCreateText(formwdg, "Text", args, nargs);
135     XtAddCallback(textwdg, XmNactivateCallback,
136             (XtCallbackProc) uiDialogVariableCB, (caddr_t) "SearchText");
137     XtAddCallback(textwdg, XmNlosingFocusCallback,
138             (XtCallbackProc) uiDialogVariableCB, (caddr_t) "SearchText");
139     XtAddCallback(textwdg, XmNvalueChangedCallback,
140             (XtCallbackProc) uiDialogVariableCB, (caddr_t) "SearchText");
141     (void) uiAddWidgetInfo("SearchText", textwdg, uiWTtext);    /* Ignore */
142     XtManageChild(textwdg);
143
144     return textwdg;
145 }
146
147
148 static Widget
149  uicreatesearchlevel(formwdg, textwdg)
150 Widget formwdg;
151 Widget textwdg;
152 {
153     ArgList args;
154     Cardinal nargs;
155     XmString labelstr;
156     Widget labelwdg, levelwdg;
157
158     labelstr = XmStringCreateSimple("Depth of search:");
159     args = uiVaSetArgs(&nargs,
160                        XmNlabelString, labelstr,
161                        XmNtopAttachment, XmATTACH_WIDGET,
162                        XmNtopWidget, textwdg,
163                        XmNtopOffset, UI_SEARCH_WDG_OFFSET,
164                        XmNleftAttachment, XmATTACH_FORM,
165                        XmNleftOffset, UI_SEARCH_WDG_OFFSET, NULL);
166     labelwdg = XmCreateLabelGadget(formwdg, "LevelLabel", args, nargs);
167     XtManageChild(labelwdg);
168     XmStringFree(labelstr);
169
170     args = uiVaSetArgs(&nargs,
171                        XmNtopAttachment, XmATTACH_WIDGET,
172                        XmNtopWidget, labelwdg,
173                        XmNtopOffset, UI_SEARCH_WDG_OFFSET / 2,
174                        XmNleftAttachment, XmATTACH_FORM,
175                        XmNleftOffset, UI_SEARCH_WDG_OFFSET,
176                        XmNcolumns, 3,
177                        XmNmaxLength, 3,
178                        XmNvalue, "1", NULL);
179     levelwdg = XmCreateText(formwdg, "Level", args, nargs);
180     XtAddCallback(levelwdg, XmNactivateCallback,
181                   (XtCallbackProc) uiDialogVariableCB,
182                   (caddr_t) "SearchLevel");
183     XtAddCallback(levelwdg, XmNlosingFocusCallback,
184                   (XtCallbackProc) uiDialogVariableCB,
185                   (caddr_t) "SearchLevel");
186     XtAddCallback(levelwdg, XmNvalueChangedCallback,
187                   (XtCallbackProc) uiDialogVariableCB,
188                   (caddr_t) "SearchLevel");
189     (void) uiAddWidgetInfo("SearchLevel", levelwdg, uiWTtext);  /* Ignore */
190     XtManageChild(levelwdg);
191
192     return levelwdg;
193 }
194
195
196 static Widget
197  uicreatesearchlevelform(formwdg, levelwdg)
198 Widget formwdg;
199 Widget levelwdg;
200 {
201     ArgList args;
202     Cardinal nargs;
203     Widget levelformwdg;
204     uiSearchGfx_t *searchgfx = &uiTopLevel.SearchGfx;
205
206     args = uiVaSetArgs(&nargs,
207                        XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
208                        XmNtopWidget, levelwdg,
209                        XmNleftAttachment, XmATTACH_WIDGET,
210                        XmNleftWidget, levelwdg,
211                        XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
212                        XmNbottomWidget, levelwdg, NULL);
213     levelformwdg = XmCreateForm(formwdg, "LevelForm", args, nargs);
214     XtManageChild(levelformwdg);
215
216     searchgfx->LevelDownWdg = uicreatesearchleveldown(levelformwdg);
217     searchgfx->LevelUpWdg = uicreatesearchlevelup(levelformwdg);
218
219     return levelformwdg;
220 }
221
222
223 static Widget
224  uicreatesearchleveldown(formwdg)
225 Widget formwdg;
226 {
227     ArgList args;
228     Cardinal nargs;
229     Widget leveldownwdg;
230     char *actionname = "LevelDown";
231     static uiActionData_t actiondata;
232
233     args = uiVaSetArgs(&nargs,
234                        XmNarrowDirection, XmARROW_DOWN,
235                        XmNwidth, 15,
236                        XmNtopAttachment, XmATTACH_POSITION,
237                        XmNtopPosition, 50,
238                        XmNleftAttachment, XmATTACH_FORM,
239                        XmNrightAttachment, XmATTACH_FORM,
240                        XmNbottomAttachment, XmATTACH_FORM, NULL);
241     leveldownwdg = XmCreateArrowButtonGadget(formwdg, actionname,
242                                              args, nargs);
243     actiondata.ActionName = actionname;
244     actiondata.Page = uiPageInfo.CurrentPage;
245     XtAddCallback(leveldownwdg, XmNactivateCallback,
246             (XtCallbackProc) uiDialogActivateCB, (caddr_t) & actiondata);
247     UiAttachCallback(actionname, uisearchlevelcb, (void *) actionname);
248     XtManageChild(leveldownwdg);
249
250     return leveldownwdg;
251 }
252
253
254 static Widget
255  uicreatesearchlevelup(formwdg)
256 Widget formwdg;
257 {
258     ArgList args;
259     Cardinal nargs;
260     Widget levelupwdg;
261     char *actionname = "LevelUp";
262     static uiActionData_t actiondata;
263
264     args = uiVaSetArgs(&nargs,
265                        XmNarrowDirection, XmARROW_UP,
266                        XmNwidth, 15,
267                        XmNtopAttachment, XmATTACH_FORM,
268                        XmNleftAttachment, XmATTACH_FORM,
269                        XmNrightAttachment, XmATTACH_FORM,
270                        XmNbottomAttachment, XmATTACH_POSITION,
271                        XmNbottomPosition, 50, NULL);
272     levelupwdg = XmCreateArrowButtonGadget(formwdg, "LevelUp",
273                                            args, nargs);
274     actiondata.ActionName = actionname;
275     actiondata.Page = uiPageInfo.CurrentPage;
276     XtAddCallback(levelupwdg, XmNactivateCallback,
277             (XtCallbackProc) uiDialogActivateCB, (caddr_t) & actiondata);
278     UiAttachCallback(actionname, uisearchlevelcb, (void *) actionname);
279     XtManageChild(levelupwdg);
280
281     return levelupwdg;
282 }
283
284
285 static Widget
286  uicreatesearchcase(formwdg, levelwdg)
287 Widget formwdg;
288 Widget levelwdg;
289 {
290     XmString labelstr;
291     ArgList args;
292     Cardinal nargs;
293     Widget casewdg;
294
295     labelstr = XmStringCreateSimple("Case sensitive");
296     args = uiVaSetArgs(&nargs,
297                        XmNlabelString, labelstr,
298                        XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
299                        XmNtopWidget, levelwdg,
300                        XmNleftAttachment, XmATTACH_POSITION,
301                        XmNleftPosition, 30,
302                        XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
303                        XmNbottomWidget, levelwdg, NULL);
304     casewdg = XmCreateToggleButtonGadget(formwdg, "Case", args, nargs);
305     XtAddCallback(casewdg, XmNvalueChangedCallback,
306             (XtCallbackProc) uiDialogVariableCB, (caddr_t) "SearchCase");
307     /* Ignore */
308     (void) uiAddWidgetInfo("SearchCase", casewdg, uiWTcheckbutton);
309     XtManageChild(casewdg);
310
311     return casewdg;
312 }
313
314
315 static Widget
316  uicreatesearchbackward(formwdg, textwdg)
317 Widget formwdg;
318 Widget textwdg;
319 {
320     XmString labelstr;
321     ArgList args;
322     Cardinal nargs;
323     Widget backwardwdg;
324     char *actionname = "SearchBackward";
325     static uiActionData_t actiondata;
326
327     labelstr = XmStringCreateSimple("Search backward");
328     args = uiVaSetArgs(&nargs,
329                        XmNlabelString, labelstr,
330                        XmNtopAttachment, XmATTACH_WIDGET,
331                        XmNtopWidget, textwdg,
332                        XmNtopOffset, UI_SEARCH_WDG_OFFSET,
333                        XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
334                        XmNrightWidget, textwdg, NULL);
335     backwardwdg = XmCreatePushButtonGadget(formwdg, "SearchBackward",
336                                            args, nargs);
337     actiondata.ActionName = actionname;
338     actiondata.Page = uiPageInfo.CurrentPage;
339     XtAddCallback(backwardwdg, XmNactivateCallback,
340             (XtCallbackProc) uiDialogActivateCB, (caddr_t) & actiondata);
341     XtManageChild(backwardwdg);
342     XmStringFree(labelstr);
343
344     return backwardwdg;
345 }
346
347
348 static Widget
349  uicreatesearchforward(formwdg, backwardwdg)
350 Widget formwdg;
351 Widget backwardwdg;
352 {
353     XmString labelstr;
354     ArgList args;
355     Cardinal nargs;
356     Widget forwardwdg;
357     char *actionname = "SearchForward";
358     static uiActionData_t actiondata;
359
360     labelstr = XmStringCreateSimple("Search forward");
361     args = uiVaSetArgs(&nargs,
362                        XmNlabelString, labelstr,
363                        XmNtopAttachment, XmATTACH_WIDGET,
364                        XmNtopWidget, backwardwdg,
365                        XmNtopOffset, UI_SEARCH_WDG_OFFSET / 2,
366                        XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
367                        XmNleftWidget, backwardwdg,
368                        XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
369                        XmNrightWidget, backwardwdg, NULL);
370     forwardwdg = XmCreatePushButtonGadget(formwdg, "SearchForward",
371                                           args, nargs);
372     actiondata.ActionName = actionname;
373     actiondata.Page = uiPageInfo.CurrentPage;
374     XtAddCallback(forwardwdg, XmNactivateCallback,
375             (XtCallbackProc) uiDialogActivateCB, (caddr_t) & actiondata);
376     XtManageChild(forwardwdg);
377     XmStringFree(labelstr);
378
379     return forwardwdg;
380 }
381
382
383 static Widget
384  uicreatesearchclose(parentwdg, topwdg)
385 Widget parentwdg;
386 Widget topwdg;
387 {
388     ArgList args;
389     Cardinal nargs;
390     Widget separatorwdg;
391     Widget tmpwdg;
392     static uiActionData_t actiondata;
393
394     args = uiVaSetArgs(&nargs,
395                        XmNtopAttachment, XmATTACH_WIDGET,
396                        XmNtopWidget, topwdg,
397                        XmNtopOffset, UI_SEARCH_WDG_OFFSET,
398                        XmNleftAttachment, XmATTACH_FORM,
399                        XmNrightAttachment, XmATTACH_FORM, NULL);
400     separatorwdg = XmCreateSeparatorGadget(parentwdg, "SearchSeparator",
401                                            args, nargs);
402     XtManageChild(separatorwdg);
403
404     tmpwdg = XmCreatePushButtonGadget(parentwdg, "Close", (ArgList) NULL, 0);
405     XtVaSetValues(tmpwdg,
406                   XmNwidth, 70,
407                   XmNbottomAttachment, XmATTACH_FORM,
408                   XmNbottomOffset, UI_SEARCH_WDG_OFFSET,
409                   XmNtopAttachment, XmATTACH_WIDGET,
410                   XmNtopWidget, separatorwdg,
411                   XmNtopOffset, UI_SEARCH_WDG_OFFSET,
412                   XmNrightAttachment, XmATTACH_FORM,
413                   XmNrightOffset, UI_SEARCH_WDG_OFFSET, NULL);
414     actiondata.ActionName = "SearchClose";
415     actiondata.Page = uiPageInfo.CurrentPage;
416     XtAddCallback(tmpwdg, XmNactivateCallback,
417             (XtCallbackProc) uiDialogActivateCB, (caddr_t) & actiondata);
418     UiAttachCallback("SearchClose", uisearchclosecb, "SearchClose");
419
420     XtManageChild(tmpwdg);
421
422     return tmpwdg;
423 }
424
425
426 static Widget
427  uicreatesearchlabel(formwdg, rightwdg)
428 Widget formwdg;
429 Widget rightwdg;
430 {
431     ArgList args;
432     Cardinal nargs;
433     Widget labelwdg;
434
435     args = uiVaSetArgs(&nargs,
436                        XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
437                        XmNtopWidget, rightwdg,
438                        XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
439                        XmNbottomWidget, rightwdg,
440                        XmNleftAttachment, XmATTACH_FORM,
441                        XmNleftOffset, UI_SEARCH_WDG_OFFSET,
442                        XmNrightAttachment, XmATTACH_WIDGET,
443                        XmNrightWidget, rightwdg,
444                        XmNrightOffset, UI_SEARCH_WDG_OFFSET, NULL);
445     labelwdg = XmCreateLabelGadget(formwdg, "Label", args, nargs);
446     XtManageChild(labelwdg);
447
448     return labelwdg;
449 }
450
451
452 static void uisearchlevelcb(address, htext, htextobject, parameter)
453 char *address;
454 HText_t *htext;
455 HTextObject_t *htextobject;
456 void *parameter;
457 {
458     Widget levelwdg = uiTopLevel.SearchGfx.LevelWdg;
459     char *leveltext;
460     int level;
461     char tmpbuffer[4];
462
463     leveltext = XmTextGetString(levelwdg);
464     level = atoi(leveltext);
465
466     if (!strcmp("LevelDown", (char *) parameter)) {
467         if (level > 1) {
468             level--;
469             sprintf(tmpbuffer, "%d", level);
470             XmTextSetString(levelwdg, tmpbuffer);
471         }
472     } else if (level < 1) {
473         level++;
474         sprintf(tmpbuffer, "%d", level);
475         XmTextSetString(levelwdg, tmpbuffer);
476     }
477     XtFree(leveltext);
478 }
479
480
481 static void uisearchclosecb(address, htext, htextobject, parameter)
482 char *address;
483 HText_t *htext;
484 HTextObject_t *htextobject;
485 void *parameter;
486 {
487     XtUnmapWidget(XtParent(uiTopLevel.SearchGfx.FormWdg));
488 }