ui/motif/menu.c

branch
newapi
changeset 419
7d15cad351fc
parent 418
a57268d20ed9
child 420
28a5920bebe0
--- a/ui/motif/menu.c	Sun Dec 15 22:16:12 2024 +0100
+++ b/ui/motif/menu.c	Sun Dec 15 22:53:51 2024 +0100
@@ -147,6 +147,8 @@
                 (XtCallbackProc)ui_destroy_eventdata,
                 eventdata);
     }
+    
+    ui_set_widget_groups(obj->ctx, mitem, it->groups);
 }
 
 void add_menuseparator_widget(Widget p, int i, UiMenuItemI *item, UiObject *obj) {
@@ -155,11 +157,48 @@
 }
 
 void add_checkitem_widget(Widget p, int i, UiMenuItemI *item, UiObject *obj) {
+    UiMenuCheckItem *it = (UiMenuCheckItem*)item;
     
+    Arg args[4];
+    int n = 0;
+    XmString s = NULL;
+    if(it->label) {
+        s = XmStringCreateLocalized(it->label);
+        XtSetArg(args[n], XmNlabelString, s); n++;
+    }
+    
+    //XtSetArg(args[n], XmNvisibleWhenOff, 0); n++;
+    Widget checkbox = XtCreateManagedWidget(
+            "menutogglebutton",
+            xmToggleButtonWidgetClass,
+            p,
+            args,
+            n);
+    if(s) {
+        XmStringFree(s);
+    }
+    
+    ui_bind_togglebutton(obj, checkbox, it->varname, NULL, it->callback, it->userdata, 0);
+    
+    ui_set_widget_groups(obj->ctx, checkbox, it->groups);
 }
 
 void add_radioitem_widget(Widget p, int index, UiMenuItemI *item, UiObject *obj) {
+    UiMenuRadioItem *it = (UiMenuRadioItem*)item;
     
+    Arg args[4];
+    int n = 0;
+    XmString s = NULL;
+    if(it->label) {
+        s = XmStringCreateLocalized(it->label);
+        XtSetArg(args[n], XmNlabelString, s); n++;
+    }
+    XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY_ROUND); n++;
+    
+    Widget button = XmCreateToggleButton(p, "menuradiobutton", args, n);
+    XtManageChild(button);
+    
+    ui_bind_radiobutton(obj, button, NULL, it->varname, it->callback, it->userdata, 0);
 }
 
 void add_checkitemnv_widget(Widget p, int i, UiMenuItemI *item, UiObject *obj) {

mercurial