ui/motif/menu.c

changeset 115
e57ca2747782
parent 112
c3f2f16fa4b8
equal deleted inserted replaced
114:3da24640513a 115:e57ca2747782
31 #include <stdarg.h> 31 #include <stdarg.h>
32 32
33 #include "menu.h" 33 #include "menu.h"
34 #include "button.h" 34 #include "button.h"
35 #include "toolkit.h" 35 #include "toolkit.h"
36 #include "stock.h"
37 #include "container.h" 36 #include "container.h"
38 #include "../common/context.h" 37 #include "../common/context.h"
39 #include "../common/menu.h" 38 #include "../common/menu.h"
40 #include "../common/types.h" 39 #include "../common/types.h"
41 #include "../ui/window.h" 40 #include "../ui/window.h"
53 /* UI_MENU_CHECKITEM_LIST */ add_menuitem_list_widget, 52 /* UI_MENU_CHECKITEM_LIST */ add_menuitem_list_widget,
54 /* UI_MENU_RADIOITEM_LIST */ add_menuitem_list_widget, 53 /* UI_MENU_RADIOITEM_LIST */ add_menuitem_list_widget,
55 /* UI_MENU_SEPARATOR */ add_menuseparator_widget 54 /* UI_MENU_SEPARATOR */ add_menuseparator_widget
56 }; 55 };
57 56
58 void ui_create_menubar(UiObject *obj, Widget window) { 57 Widget ui_create_menubar(UiObject *obj, Widget window) {
59 UiMenu *menus_begin = uic_get_menu_list(); 58 UiMenu *menus_begin = uic_get_menu_list();
60 if(!menus_begin) { 59 if(!menus_begin) {
61 return; 60 return NULL;
62 } 61 }
63 62
64 Widget menubar = XmCreateMenuBar(window, "menubar", NULL, 0); 63 Widget menubar = XmCreateMenuBar(window, "menubar", NULL, 0);
65 XtManageChild(menubar); 64 XtManageChild(menubar);
66 65
68 while(ls) { 67 while(ls) {
69 UiMenu *menu = ls; 68 UiMenu *menu = ls;
70 add_menu_widget(menubar, 0, &menu->item, obj); 69 add_menu_widget(menubar, 0, &menu->item, obj);
71 ls = (UiMenu*)ls->item.next; 70 ls = (UiMenu*)ls->item.next;
72 } 71 }
72
73 return menubar;
73 } 74 }
74 75
75 void ui_add_menu_items(Widget parent, int i, UiMenu *menu, UiObject *obj) { 76 void ui_add_menu_items(Widget parent, int i, UiMenu *menu, UiObject *obj) {
76 UiMenuItemI *it = menu->items_begin; 77 UiMenuItemI *it = menu->items_begin;
77 int index = 0; 78 int index = 0;
91 if(menu->label) { 92 if(menu->label) {
92 s = XmStringCreateLocalized((char*)menu->label); 93 s = XmStringCreateLocalized((char*)menu->label);
93 XtSetArg(args[n], XmNlabelString, s); n++; 94 XtSetArg(args[n], XmNlabelString, s); n++;
94 } 95 }
95 96
96 Widget submenu = XmVaCreateSimplePulldownMenu(parent, "menu_pulldown", i, NULL, NULL); 97 Widget submenu = XmCreatePulldownMenu(parent, "menu_pulldown", NULL, 0);
97 XtSetArg(args[n], XmNsubMenuId, submenu); n++; 98 XtSetArg(args[n], XmNsubMenuId, submenu); n++;
98 Widget menuItem = XtCreateManagedWidget( 99 (void)XtCreateManagedWidget(
99 "menuitem", 100 "menuitem",
100 xmCascadeButtonWidgetClass, 101 xmCascadeButtonWidgetClass,
101 parent, 102 parent,
102 args, 103 args,
103 n); 104 n);
104
105 105
106 if(s) { 106 if(s) {
107 XmStringFree(s); 107 XmStringFree(s);
108 } 108 }
109 109
143 (XtCallbackProc)ui_push_button_callback, 143 (XtCallbackProc)ui_push_button_callback,
144 eventdata); 144 eventdata);
145 XtAddCallback( 145 XtAddCallback(
146 mitem, 146 mitem,
147 XmNdestroyCallback, 147 XmNdestroyCallback,
148 (XtCallbackProc)ui_destroy_eventdata, 148 (XtCallbackProc)ui_destroy_data,
149 eventdata); 149 eventdata);
150 } 150 }
151 151
152 ui_set_widget_groups(obj->ctx, mitem, it->groups); 152 ui_set_widget_groups(obj->ctx, mitem, it->states);
153 } 153 }
154 154
155 void add_menuseparator_widget(Widget p, int i, UiMenuItemI *item, UiObject *obj) { 155 void add_menuseparator_widget(Widget p, int i, UiMenuItemI *item, UiObject *obj) {
156 Widget s = XmCreateSeparatorGadget (p, "menuseparator", NULL, 0); 156 Widget s = XmCreateSeparatorGadget (p, "menuseparator", NULL, 0);
157 XtManageChild(s); 157 XtManageChild(s);
179 XmStringFree(s); 179 XmStringFree(s);
180 } 180 }
181 181
182 ui_bind_togglebutton(obj, checkbox, it->varname, NULL, it->callback, it->userdata, 0); 182 ui_bind_togglebutton(obj, checkbox, it->varname, NULL, it->callback, it->userdata, 0);
183 183
184 ui_set_widget_groups(obj->ctx, checkbox, it->groups); 184 ui_set_widget_groups(obj->ctx, checkbox, it->states);
185 } 185 }
186 186
187 void add_radioitem_widget(Widget p, int index, UiMenuItemI *item, UiObject *obj) { 187 void add_radioitem_widget(Widget p, int index, UiMenuItemI *item, UiObject *obj) {
188 UiMenuRadioItem *it = (UiMenuRadioItem*)item; 188 UiMenuRadioItem *it = (UiMenuRadioItem*)item;
189 189
335 (XtCallbackProc)ui_push_button_callback, 335 (XtCallbackProc)ui_push_button_callback,
336 eventdata); 336 eventdata);
337 XtAddCallback( 337 XtAddCallback(
338 mitem, 338 mitem,
339 XmNdestroyCallback, 339 XmNdestroyCallback,
340 (XtCallbackProc)ui_destroy_eventdata, 340 (XtCallbackProc)ui_destroy_data,
341 eventdata); 341 eventdata);
342 } 342 }
343 343
344 elm = ui_list_next(ls); 344 elm = ui_list_next(ls);
345 i++; 345 i++;

mercurial