Removed C++-style "//" comments to allow C sources to be built with C compilers.
[dyninst.git] / visiClients / terrain / src / menu.c
1 /*
2  * Copyright (c) 1989, 1990 Barton P. Miller, Morgan Clark, Timothy Torzewski
3  *     Jeff Hollingsworth, and Bruce Irvin. All rights reserved.
4  *
5  * This software is furnished under the condition that it may not
6  * be provided or otherwise made available to, or used by, any
7  * other person.  No title to or ownership of the software is
8  * hereby transferred.  The name of the principals
9  * may not be used in any advertising or publicity related to this
10  * software without specific, written prior authorization.
11  * Any use of this software must include the above copyright notice.
12  *
13  */
14
15 /*
16  * menu.c - menu handler code.
17  *
18  * $Id: menu.c,v 1.5 1998/03/30 01:22:28 wylie Exp $
19  */
20
21 #include <X11/Intrinsic.h>
22 #include <X11/StringDefs.h>
23 #include <X11/Xaw/SimpleMenu.h>
24 #include <X11/Xaw/Sme.h>
25 #include <X11/Xaw/SmeLine.h>
26 #include <X11/Xaw/SmeBSB.h>
27 #include <stdlib.h>
28
29 #include "menu.h"
30 #include "misc.h"
31
32 Widget CreateAdvancedMenu(def)
33 struct menuDefintion *def;
34 {
35     int i;
36     int total;
37     int acount;
38     Arg args[100];
39     Widget menu, entry;
40
41     acount = 0;
42     menu = XtCreatePopupShell("menu", simpleMenuWidgetClass, def->parent, 
43         args, (unsigned)acount);
44
45     for (i=0, total = 0; def->data[i].name; i++, total++);
46     def->items = (Widget *) terrain_alloc(sizeof(Widget) * total);
47
48     for (i=0; def->data[i].name; i++) {
49         acount = 0;
50         if (def->data[i].name == MENU_LINE) {
51             entry = XtCreateManagedWidget("line", smeLineObjectClass,
52                 menu, args, (unsigned)acount);
53             def->items[i] = entry;
54         } else {
55             XtSetArg(args[acount], XtNlabel, def->data[i].name); acount++;
56             XtSetArg(args[acount], XtNleftMargin, def->leftMargin); acount++;
57             XtSetArg(args[acount], XtNrightMargin, def->rightMargin); acount++;
58             entry = XtCreateManagedWidget(def->data[i].name, smeBSBObjectClass, 
59                 menu, args, (unsigned)acount);
60             def->items[i] = entry;
61             /* fix call back data */
62             XtAddCallback(entry, XtNcallback, def->data[i].func, def->cdata);
63         }
64     }
65     XtRealizeWidget(menu);
66     return(menu);
67 }
68
69 /*
70  * Simple interface to creating menus.  Used for menu that don't have extra
71  *   bitmaps to the left/right or need to get back a list of widgets for each
72  *   item in the menu.
73  *
74  */
75 Widget CreateMenu(parent, title, data, cdata)
76 Widget parent;
77 char *title;
78 struct menuItem *data;
79 caddr_t cdata;
80 {
81     Widget menu;
82     struct menuDefintion stuff;
83
84     stuff.title = title;
85     stuff.parent = parent;
86     stuff.data = data;
87     stuff.cdata = cdata;
88     stuff.leftMargin = 4;
89     stuff.rightMargin = 4;
90     menu = CreateAdvancedMenu(&stuff);
91     free(stuff.items);
92     return(menu);
93 }
94
95 void DestroyMenu(Widget currMenu)
96 {
97     XtDestroyWidget(currMenu);
98 }