ui/gtk/toolbar.c

changeset 86
3c63f57a8f77
parent 49
a80ba8741be6
child 90
2019fdbaadfd
equal deleted inserted replaced
85:91f45354d1e2 86:3c63f57a8f77
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

mercurial