ui/motif/toolbar.c

changeset 87
e624b6fa4c78
parent 39
4e66271541e8
child 98
efaae97bd95b
--- a/ui/motif/toolbar.c	Wed Feb 11 11:34:55 2015 +0100
+++ b/ui/motif/toolbar.c	Sat Feb 14 10:30:45 2015 +0100
@@ -34,6 +34,7 @@
 #include "toolbar.h"
 #include "button.h"
 #include "stock.h"
+#include "list.h"
 #include "../../ucx/mempool.h"
 #include "../common/context.h"
 
@@ -145,6 +146,50 @@
     ucx_map_cstr_put(toolbar_items, name, item);
 }
 
+void ui_toolbar_combobox(
+        char *name,
+        UiList *list,
+        ui_model_getvalue_f getvalue,
+        ui_callback f,
+        void *udata)
+{
+    UiToolbarComboBox *cb = malloc(sizeof(UiToolbarComboBox));
+    cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox;  
+    cb->list = list;
+    cb->getvalue = getvalue;
+    cb->callback = f;
+    cb->userdata = udata;
+    
+    ucx_map_cstr_put(toolbar_items, name, cb);
+}
+
+void ui_toolbar_combobox_str(
+        char *name,
+        UiList *list,
+        ui_callback f,
+        void *udata)
+{
+    ui_toolbar_combobox(name, list, ui_strmodel_getvalue, f, udata);
+}
+
+void ui_toolbar_combobox_nv(
+        char *name,
+        char *listname,
+        ui_model_getvalue_f getvalue,
+        ui_callback f,
+        void *udata)
+{
+    UiToolbarComboBoxNV *cb = malloc(sizeof(UiToolbarComboBoxNV));
+    cb->item.add_to = (ui_toolbar_add_f)add_toolbar_combobox;  
+    cb->listname = listname;
+    cb->getvalue = getvalue;
+    cb->callback = f;
+    cb->userdata = udata;
+    
+    ucx_map_cstr_put(toolbar_items, name, cb);
+}
+
+
 void ui_toolbar_add_default(char *name) {
     char *s = strdup(name);
     defaults = ucx_list_append(defaults, s);
@@ -287,3 +332,40 @@
 void add_toolitem_st_toggle_widget(Widget parent, UiStToolItem *item, UiObject *obj) {
     
 }
+
+void add_toolbar_combobox(Widget tb, UiToolbarComboBox *item, UiObject *obj) {
+    UiListPtr *listptr = ucx_mempool_malloc(
+                obj->ctx->mempool,
+                sizeof(UiListPtr));
+    UiListView *listview = ucx_mempool_malloc(
+                obj->ctx->mempool,
+                sizeof(UiListView));
+    listptr->list = item->list;
+    
+    Arg args[8];
+    XtSetArg(args[0], XmNshadowThickness, 1);
+    XtSetArg(args[1], XmNindicatorOn, XmINDICATOR_NONE);
+    XtSetArg(args[2], XmNtraversalOn, FALSE);
+    XtSetArg(args[3], XmNwidth, 120);
+    Widget combobox = XmCreateDropDownList(tb, "toolbar_combobox", args, 4);
+    XtManageChild(combobox);
+    listview->widget = combobox;
+    listview->list = listptr;
+    listview->getvalue = item->getvalue;
+    
+    ui_listview_update(NULL, listview);
+    
+    listptr->list->observers = ui_add_observer(
+            listptr->list->observers,
+            (ui_callback)ui_listview_update,
+            listview);
+    
+    if(item->callback) {
+        // TODO:
+        
+    }
+}
+
+void add_toolbar_combobox_nv(Widget tb, UiToolbarComboBoxNV *item, UiObject *obj) {
+    
+}

mercurial