78 } |
79 } |
79 current = ucx_list_remove(current, current); |
80 current = ucx_list_remove(current, current); |
80 } |
81 } |
81 |
82 |
82 void ui_menuitem(char *label, ui_callback f, void *userdata) { |
83 void ui_menuitem(char *label, ui_callback f, void *userdata) { |
|
84 ui_menuitem_gr(label, f, userdata, -1); |
|
85 } |
|
86 |
|
87 void ui_menuitem_st(char *stockid, ui_callback f, void *userdata) { |
|
88 ui_menuitem_stgr(stockid, f, userdata, -1); |
|
89 } |
|
90 |
|
91 void ui_menuitem_gr(char *label, ui_callback f, void *userdata, ...) { |
83 if(!current) { |
92 if(!current) { |
84 return; |
93 return; |
85 } |
94 } |
86 |
95 |
87 UiMenuItem *item = malloc(sizeof(UiMenuItem)); |
96 UiMenuItem *item = malloc(sizeof(UiMenuItem)); |
88 item->item.add_to = (ui_menu_add_f)add_menuitem_widget; |
97 item->item.add_to = (ui_menu_add_f)add_menuitem_widget; |
89 |
98 |
90 item->label = label; |
99 item->label = label; |
91 item->userdata = userdata; |
100 item->userdata = userdata; |
92 item->callback = f; |
101 item->callback = f; |
|
102 item->groups = NULL; |
|
103 |
|
104 // add groups |
|
105 va_list ap; |
|
106 va_start(ap, userdata); |
|
107 int group; |
|
108 while((group = va_arg(ap, int)) != -1) { |
|
109 item->groups = ucx_list_append(item->groups, (void*)(intptr_t)group); |
|
110 } |
|
111 va_end(ap); |
93 |
112 |
94 UiMenu *cm = current->data; |
113 UiMenu *cm = current->data; |
95 cm->items = ucx_list_append(cm->items, item); |
114 cm->items = ucx_list_append(cm->items, item); |
96 } |
115 } |
97 |
116 |
98 void ui_menuitem_st(char *stockid, ui_callback f, void *userdata) { |
117 void ui_menuitem_stgr(char *stockid, ui_callback f, void *userdata, ...) { |
99 if(!current) { |
118 if(!current) { |
100 return; |
119 return; |
101 } |
120 } |
102 |
121 |
103 UiStMenuItem *item = malloc(sizeof(UiStMenuItem)); |
122 UiStMenuItem *item = malloc(sizeof(UiStMenuItem)); |
104 item->item.add_to = (ui_menu_add_f)add_menuitem_st_widget; |
123 item->item.add_to = (ui_menu_add_f)add_menuitem_st_widget; |
105 |
124 |
106 item->stockid = stockid; |
125 item->stockid = stockid; |
107 item->userdata = userdata; |
126 item->userdata = userdata; |
108 item->callback = f; |
127 item->callback = f; |
|
128 item->groups = NULL; |
|
129 |
|
130 // add groups |
|
131 va_list ap; |
|
132 va_start(ap, userdata); |
|
133 int group; |
|
134 while((group = va_arg(ap, int)) != -1) { |
|
135 item->groups = ucx_list_append(item->groups, (void*)(intptr_t)group); |
|
136 } |
|
137 va_end(ap); |
109 |
138 |
110 UiMenu *cm = current->data; |
139 UiMenu *cm = current->data; |
111 cm->items = ucx_list_append(cm->items, item); |
140 cm->items = ucx_list_append(cm->items, item); |
112 } |
141 } |
113 |
142 |
242 XmNactivateCallback, |
271 XmNactivateCallback, |
243 (XtCallbackProc)ui_push_button_callback, |
272 (XtCallbackProc)ui_push_button_callback, |
244 event); |
273 event); |
245 } |
274 } |
246 |
275 |
|
276 if(mi->groups) { |
|
277 uic_add_group_widget(obj->ctx, mitem, mi->groups); |
|
278 } |
|
279 |
247 return 1; |
280 return 1; |
248 } |
281 } |
249 |
282 |
250 int add_menuitem_st_widget(Widget parent, int i, UiMenuItemI *item, UiObject *obj) { |
283 int add_menuitem_st_widget(Widget parent, int i, UiMenuItemI *item, UiObject *obj) { |
251 UiStMenuItem *mi = (UiStMenuItem*)item; |
284 UiStMenuItem *mi = (UiStMenuItem*)item; |