ui/motif/toolbar.c

changeset 87
e624b6fa4c78
parent 39
4e66271541e8
child 98
efaae97bd95b
equal deleted inserted replaced
86:3c63f57a8f77 87:e624b6fa4c78
32 #include <stdarg.h> 32 #include <stdarg.h>
33 33
34 #include "toolbar.h" 34 #include "toolbar.h"
35 #include "button.h" 35 #include "button.h"
36 #include "stock.h" 36 #include "stock.h"
37 #include "list.h"
37 #include "../../ucx/mempool.h" 38 #include "../../ucx/mempool.h"
38 #include "../common/context.h" 39 #include "../common/context.h"
39 40
40 static UcxMap *toolbar_items; 41 static UcxMap *toolbar_items;
41 static UcxList *defaults; 42 static UcxList *defaults;
142 } 143 }
143 va_end(ap); 144 va_end(ap);
144 145
145 ucx_map_cstr_put(toolbar_items, name, item); 146 ucx_map_cstr_put(toolbar_items, name, item);
146 } 147 }
148
149 void ui_toolbar_combobox(
150 char *name,
151 UiList *list,
152 ui_model_getvalue_f getvalue,
153 ui_callback f,
154 void *udata)
155 {
156 UiToolbarComboBox *cb = malloc(sizeof(UiToolbarComboBox));
157 cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox;
158 cb->list = list;
159 cb->getvalue = getvalue;
160 cb->callback = f;
161 cb->userdata = udata;
162
163 ucx_map_cstr_put(toolbar_items, name, cb);
164 }
165
166 void ui_toolbar_combobox_str(
167 char *name,
168 UiList *list,
169 ui_callback f,
170 void *udata)
171 {
172 ui_toolbar_combobox(name, list, ui_strmodel_getvalue, f, udata);
173 }
174
175 void ui_toolbar_combobox_nv(
176 char *name,
177 char *listname,
178 ui_model_getvalue_f getvalue,
179 ui_callback f,
180 void *udata)
181 {
182 UiToolbarComboBoxNV *cb = malloc(sizeof(UiToolbarComboBoxNV));
183 cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox;
184 cb->listname = listname;
185 cb->getvalue = getvalue;
186 cb->callback = f;
187 cb->userdata = udata;
188
189 ucx_map_cstr_put(toolbar_items, name, cb);
190 }
191
147 192
148 void ui_toolbar_add_default(char *name) { 193 void ui_toolbar_add_default(char *name) {
149 char *s = strdup(name); 194 char *s = strdup(name);
150 defaults = ucx_list_append(defaults, s); 195 defaults = ucx_list_append(defaults, s);
151 } 196 }
285 } 330 }
286 331
287 void add_toolitem_st_toggle_widget(Widget parent, UiStToolItem *item, UiObject *obj) { 332 void add_toolitem_st_toggle_widget(Widget parent, UiStToolItem *item, UiObject *obj) {
288 333
289 } 334 }
335
336 void add_toolbar_combobox(Widget tb, UiToolbarComboBox *item, UiObject *obj) {
337 UiListPtr *listptr = ucx_mempool_malloc(
338 obj->ctx->mempool,
339 sizeof(UiListPtr));
340 UiListView *listview = ucx_mempool_malloc(
341 obj->ctx->mempool,
342 sizeof(UiListView));
343 listptr->list = item->list;
344
345 Arg args[8];
346 XtSetArg(args[0], XmNshadowThickness, 1);
347 XtSetArg(args[1], XmNindicatorOn, XmINDICATOR_NONE);
348 XtSetArg(args[2], XmNtraversalOn, FALSE);
349 XtSetArg(args[3], XmNwidth, 120);
350 Widget combobox = XmCreateDropDownList(tb, "toolbar_combobox", args, 4);
351 XtManageChild(combobox);
352 listview->widget = combobox;
353 listview->list = listptr;
354 listview->getvalue = item->getvalue;
355
356 ui_listview_update(NULL, listview);
357
358 listptr->list->observers = ui_add_observer(
359 listptr->list->observers,
360 (ui_callback)ui_listview_update,
361 listview);
362
363 if(item->callback) {
364 // TODO:
365
366 }
367 }
368
369 void add_toolbar_combobox_nv(Widget tb, UiToolbarComboBoxNV *item, UiObject *obj) {
370
371 }

mercurial