ui/common/menu.c

changeset 1107
22d58a28fea7
parent 1092
0accf125a65f
--- a/ui/common/menu.c	Fri Apr 24 12:52:05 2026 +0200
+++ b/ui/common/menu.c	Fri Apr 24 12:52:18 2026 +0200
@@ -44,6 +44,17 @@
 static void *tmp_eventdata;
 static int tmp_eventdata_type;
 
+
+static void* getvalue_wrapper(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) {
+    ui_getvaluefunc getvalue = (ui_getvaluefunc)userdata;
+    return getvalue(elm, col);
+}
+
+static void* str_getvalue(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) {
+    return elm;
+}
+
+
 void uic_set_tmp_eventdata(void *eventdata, int type) {
     tmp_eventdata = eventdata;
     tmp_eventdata_type = type;
@@ -208,7 +219,15 @@
     item->item.prev = NULL;
     item->item.next = NULL;
     item->item.type = UI_MENU_ITEM_LIST;
-    item->getvalue = args->getvalue;
+    if(args->getvalue2) {
+        item->getvalue = args->getvalue2;
+        item->getvaluedata = args->getvaluedata;
+    } else if(args->getvalue) {
+        item->getvalue = getvalue_wrapper;
+        item->getvaluedata = (void*)args->getvalue;
+    } else {
+        item->getvalue = str_getvalue;
+    }
     item->callback = args->onselect;
     item->userdata = args->onselectdata;
     item->varname = nl_strdup(args->varname);
@@ -223,6 +242,15 @@
     item->item.prev = NULL;
     item->item.next = NULL;
     item->item.type = UI_MENU_CHECKITEM_LIST;
+    if(args->getvalue2) {
+        item->getvalue = args->getvalue2;
+        item->getvaluedata = args->getvaluedata;
+    } else if(args->getvalue) {
+        item->getvalue = getvalue_wrapper;
+        item->getvaluedata = (void*)args->getvalue;
+    } else {
+        item->getvalue = str_getvalue;
+    }
     item->callback = args->onselect;
     item->userdata = args->onselectdata;
     item->varname = nl_strdup(args->varname);
@@ -236,6 +264,15 @@
     item->item.prev = NULL;
     item->item.next = NULL;
     item->item.type = UI_MENU_RADIOITEM_LIST;
+    if(args->getvalue2) {
+        item->getvalue = args->getvalue2;
+        item->getvaluedata = args->getvaluedata;
+    } else if(args->getvalue) {
+        item->getvalue = getvalue_wrapper;
+        item->getvaluedata = (void*)args->getvalue;
+    } else {
+        item->getvalue = str_getvalue;
+    }
     item->callback = args->onselect;
     item->userdata = args->onselectdata;
     item->varname = nl_strdup(args->varname);

mercurial