ui/motif/toolbar.c

changeset 27
77b09bb52ca0
parent 4
39b9b86ec452
child 34
0ec8a5f17782
equal deleted inserted replaced
26:a137277f9173 27:77b09bb52ca0
27 */ 27 */
28 28
29 #include <stdio.h> 29 #include <stdio.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <string.h> 31 #include <string.h>
32 #include <stdarg.h>
32 33
33 #include "toolbar.h" 34 #include "toolbar.h"
34 #include "button.h" 35 #include "button.h"
35 #include "stock.h" 36 #include "stock.h"
36 #include "../../ucx/mempool.h" 37 #include "../../ucx/mempool.h"
41 42
42 void ui_toolbar_init() { 43 void ui_toolbar_init() {
43 toolbar_items = ucx_map_new(16); 44 toolbar_items = ucx_map_new(16);
44 } 45 }
45 46
46 void ui_toolitem(char *name, char *label, ui_callback f, void *udata) { 47 void ui_toolitem(char *name, char *label, ui_callback f, void *userdata) {
47 UiToolItem *item = malloc(sizeof(UiToolItem)); 48 UiToolItem *item = malloc(sizeof(UiToolItem));
48 item->item.add_to = (ui_toolbar_add_f)add_toolitem_widget; 49 item->item.add_to = (ui_toolbar_add_f)add_toolitem_widget;
49 item->label = label; 50 item->label = label;
50 item->callback = f; 51 item->callback = f;
51 item->userdata = udata; 52 item->userdata = userdata;
53 item->groups = NULL;
52 54
53 ucx_map_cstr_put(toolbar_items, name, item); 55 ucx_map_cstr_put(toolbar_items, name, item);
54 } 56 }
55 57
56 void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *ud) { 58 void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *userdata) {
59 ui_toolitem_stgr(name, stockid, f, userdata, -1);
60 }
61
62 void ui_toolitem_stgr(char *name, char *stockid, ui_callback f, void *userdata, ...) {
57 UiStToolItem *item = malloc(sizeof(UiStToolItem)); 63 UiStToolItem *item = malloc(sizeof(UiStToolItem));
58 item->item.add_to = (ui_toolbar_add_f)add_toolitem_st_widget; 64 item->item.add_to = (ui_toolbar_add_f)add_toolitem_st_widget;
59 item->stockid = stockid; 65 item->stockid = stockid;
60 item->callback = f; 66 item->callback = f;
61 item->userdata = ud; 67 item->userdata = userdata;
68 item->groups = NULL;
69
70 // add groups
71 va_list ap;
72 va_start(ap, userdata);
73 int group;
74 while((group = va_arg(ap, int)) != -1) {
75 item->groups = ucx_list_append(item->groups, (void*)(intptr_t)group);
76 }
77 va_end(ap);
62 78
63 ucx_map_cstr_put(toolbar_items, name, item); 79 ucx_map_cstr_put(toolbar_items, name, item);
64 } 80 }
65 81
66 void ui_toolbar_add_default(char *name) { 82 void ui_toolbar_add_default(char *name) {
126 (XtCallbackProc)ui_push_button_callback, 142 (XtCallbackProc)ui_push_button_callback,
127 event); 143 event);
128 } 144 }
129 145
130 XtManageChild(button); 146 XtManageChild(button);
147
148 if(item->groups) {
149 uic_add_group_widget(obj->ctx, button, item->groups);
150 }
131 } 151 }
132 152
133 void add_toolitem_st_widget(Widget parent, UiStToolItem *item, UiObject *obj) { 153 void add_toolitem_st_widget(Widget parent, UiStToolItem *item, UiObject *obj) {
134 Arg args[4]; 154 Arg args[4];
135 155
155 (XtCallbackProc)ui_push_button_callback, 175 (XtCallbackProc)ui_push_button_callback,
156 event); 176 event);
157 } 177 }
158 178
159 XtManageChild(button); 179 XtManageChild(button);
180
181 if(item->groups) {
182 uic_add_group_widget(obj->ctx, button, item->groups);
183 }
160 } 184 }

mercurial