ui/motif/menu.c

changeset 21
012418e7dc90
parent 18
06be29a56f8b
child 52
25e5390cce41
--- a/ui/motif/menu.c	Wed Apr 02 20:31:47 2014 +0200
+++ b/ui/motif/menu.c	Thu Apr 03 11:12:22 2014 +0200
@@ -28,6 +28,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdarg.h>
 
 #include "menu.h"
 #include "button.h"
@@ -80,6 +81,14 @@
 }
 
 void ui_menuitem(char *label, ui_callback f, void *userdata) {
+    ui_menuitem_gr(label, f, userdata, -1);
+}
+
+void ui_menuitem_st(char *stockid, ui_callback f, void *userdata) {
+    ui_menuitem_stgr(stockid, f, userdata, -1);
+}
+
+void ui_menuitem_gr(char *label, ui_callback f, void *userdata, ...) {
     if(!current) {
         return;
     }
@@ -90,12 +99,22 @@
     item->label = label;
     item->userdata = userdata;
     item->callback = f;
+    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);
     
     UiMenu *cm = current->data;
     cm->items = ucx_list_append(cm->items, item);
 }
 
-void ui_menuitem_st(char *stockid, ui_callback f, void *userdata) {
+void ui_menuitem_stgr(char *stockid, ui_callback f, void *userdata, ...) {
     if(!current) {
         return;
     }
@@ -106,6 +125,16 @@
     item->stockid = stockid;
     item->userdata = userdata;
     item->callback = f;
+    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);
     
     UiMenu *cm = current->data;
     cm->items = ucx_list_append(cm->items, item);
@@ -244,6 +273,10 @@
                 event);
     }
     
+    if(mi->groups) {
+        uic_add_group_widget(obj->ctx, mitem, mi->groups);
+    }
+    
     return 1;
 }
 
@@ -299,6 +332,10 @@
                 event);
     }
     
+    if(mi->groups) {
+        uic_add_group_widget(obj->ctx, mitem, mi->groups);
+    }
+    
     return 1;
 }
 

mercurial