ui/motif/toolbar.c

changeset 27
77b09bb52ca0
parent 4
39b9b86ec452
child 34
0ec8a5f17782
--- a/ui/motif/toolbar.c	Sat Apr 05 15:53:41 2014 +0200
+++ b/ui/motif/toolbar.c	Sat Apr 05 18:41:30 2014 +0200
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdarg.h>
 
 #include "toolbar.h"
 #include "button.h"
@@ -43,22 +44,37 @@
     toolbar_items = ucx_map_new(16);
 }
 
-void ui_toolitem(char *name, char *label, ui_callback f, void *udata) {
+void ui_toolitem(char *name, char *label, ui_callback f, void *userdata) {
     UiToolItem *item = malloc(sizeof(UiToolItem));
     item->item.add_to = (ui_toolbar_add_f)add_toolitem_widget;
     item->label = label;
     item->callback = f;
-    item->userdata = udata;
+    item->userdata = userdata;
+    item->groups = NULL;
     
     ucx_map_cstr_put(toolbar_items, name, item);
 }
 
-void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *ud) {
+void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *userdata) {
+    ui_toolitem_stgr(name, stockid, f, userdata, -1);
+}
+
+void ui_toolitem_stgr(char *name, char *stockid, ui_callback f, void *userdata, ...) {
     UiStToolItem *item = malloc(sizeof(UiStToolItem));
     item->item.add_to = (ui_toolbar_add_f)add_toolitem_st_widget;
     item->stockid = stockid;
     item->callback = f;
-    item->userdata = ud;
+    item->userdata = userdata;
+    item->groups = NULL;
+    
+    // add groups
+    va_list ap;
+    va_start(ap, userdata);
+    int group;
+    while((group = va_arg(ap, int)) != -1) {
+        item->groups = ucx_list_append(item->groups, (void*)(intptr_t)group);
+    }
+    va_end(ap);
     
     ucx_map_cstr_put(toolbar_items, name, item);
 }
@@ -128,6 +144,10 @@
     }
     
     XtManageChild(button);
+    
+    if(item->groups) {
+        uic_add_group_widget(obj->ctx, button, item->groups);
+    }
 }
 
 void add_toolitem_st_widget(Widget parent, UiStToolItem *item, UiObject *obj) {
@@ -157,4 +177,8 @@
     }
     
     XtManageChild(button);
+    
+    if(item->groups) {
+        uic_add_group_widget(obj->ctx, button, item->groups);
+    }
 }

mercurial