| 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 |