153 |
153 |
154 ucx_map_cstr_put(toolbar_items, name, item); |
154 ucx_map_cstr_put(toolbar_items, name, item); |
155 } |
155 } |
156 |
156 |
157 |
157 |
|
158 void ui_toolbar_combobox( |
|
159 char *name, |
|
160 UiList *list, |
|
161 ui_model_getvalue_f getvalue, |
|
162 ui_callback f, |
|
163 void *udata) |
|
164 { |
|
165 UiToolbarComboBox *cb = malloc(sizeof(UiToolbarComboBox)); |
|
166 cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox; |
|
167 cb->list = list; |
|
168 cb->getvalue = getvalue; |
|
169 cb->callback = f; |
|
170 cb->userdata = udata; |
|
171 |
|
172 ucx_map_cstr_put(toolbar_items, name, cb); |
|
173 } |
|
174 |
|
175 void ui_toolbar_combobox_str( |
|
176 char *name, |
|
177 UiList *list, |
|
178 ui_callback f, |
|
179 void *udata) |
|
180 { |
|
181 ui_toolbar_combobox(name, list, ui_strmodel_getvalue, f, udata); |
|
182 } |
|
183 |
|
184 void ui_toolbar_combobox_nv( |
|
185 char *name, |
|
186 char *listname, |
|
187 ui_model_getvalue_f getvalue, |
|
188 ui_callback f, |
|
189 void *udata) |
|
190 { |
|
191 UiToolbarComboBoxNV *cb = malloc(sizeof(UiToolbarComboBoxNV)); |
|
192 cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox; |
|
193 cb->listname = listname; |
|
194 cb->getvalue = getvalue; |
|
195 cb->callback = f; |
|
196 cb->userdata = udata; |
|
197 |
|
198 ucx_map_cstr_put(toolbar_items, name, cb); |
|
199 } |
|
200 |
|
201 |
158 void ui_toolbar_add_default(char *name) { |
202 void ui_toolbar_add_default(char *name) { |
159 char *s = strdup(name); |
203 char *s = strdup(name); |
160 defaults = ucx_list_append(defaults, s); |
204 defaults = ucx_list_append(defaults, s); |
161 } |
205 } |
162 |
206 |
304 |
348 |
305 if(item->groups) { |
349 if(item->groups) { |
306 uic_add_group_widget(obj->ctx, button, item->groups); |
350 uic_add_group_widget(obj->ctx, button, item->groups); |
307 } |
351 } |
308 } |
352 } |
|
353 |
|
354 void add_toolbar_combobox(GtkToolbar *tb, UiToolbarComboBox *cb, UiObject *obj) { |
|
355 UiModelInfo *modelinfo = ui_model_info(obj->ctx, UI_STRING, "", -1); |
|
356 modelinfo->getvalue = cb->getvalue; |
|
357 UiListPtr *listptr = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListPtr)); |
|
358 listptr->list = cb->list; |
|
359 UiListModel *model = ui_list_model_new(listptr, modelinfo); |
|
360 |
|
361 GtkWidget *combobox = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); |
|
362 cb->list->observers = ui_add_observer( |
|
363 cb->list->observers, |
|
364 (ui_callback)ui_listview_update, |
|
365 combobox); |
|
366 |
|
367 GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); |
|
368 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, TRUE); |
|
369 gtk_cell_layout_set_attributes( |
|
370 GTK_CELL_LAYOUT(combobox), |
|
371 renderer, |
|
372 "text", |
|
373 0, |
|
374 NULL); |
|
375 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0); |
|
376 |
|
377 // add callback |
|
378 if(cb->callback) { |
|
379 UiEventData *event = ui_malloc(obj->ctx, sizeof(UiEventData)); |
|
380 event->obj = obj; |
|
381 event->userdata = cb->userdata; |
|
382 event->callback = cb->callback; |
|
383 event->value = 0; |
|
384 |
|
385 g_signal_connect( |
|
386 combobox, |
|
387 "changed", |
|
388 G_CALLBACK(ui_combobox_change_event), |
|
389 event); |
|
390 } |
|
391 |
|
392 GtkToolItem *item = gtk_tool_item_new(); |
|
393 gtk_container_add(GTK_CONTAINER(item), combobox); |
|
394 gtk_toolbar_insert(tb, item, -1); |
|
395 } |
|
396 |
|
397 void add_toolbara_combobox_nv(GtkToolbar *tb, UiToolbarComboBoxNV *cb, UiObject *obj) { |
|
398 |
|
399 } |
|
400 |
|
401 void ui_combobox_change_event(GtkComboBox *widget, UiEventData *e) { |
|
402 UiEvent event; |
|
403 event.obj = e->obj; |
|
404 event.window = event.obj->window; |
|
405 event.document = event.obj->ctx->document; |
|
406 event.eventdata = NULL; |
|
407 event.intval = gtk_combo_box_get_active(widget); |
|
408 e->callback(&event, e->userdata); |
|
409 } |
|
410 |
|
411 void ui_combobox_update(UiEvent *event, void *combobox) { |
|
412 printf("ui_combobox_update\n"); |
|
413 printf("TODO: implement\n"); |
|
414 } |
|
415 |