]> uap-core.de Git - rssreader.git/commitdiff
actually add check/radio menu item
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 14 Oct 2025 20:04:57 +0000 (22:04 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 14 Oct 2025 20:04:57 +0000 (22:04 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt
ui-java/src/main/java/de/unixwork/ui/MenuCheckItem.java
ui-java/src/main/java/de/unixwork/ui/MenuRadioItem.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt

index 2ad97de93d8699b98efc610090b76a805c74340e..4175261e2995d12afd5577039644b1fae49ec1cd 100644 (file)
@@ -95,6 +95,10 @@ object App : Application {
                 }
             }
             separator()
+            radioItem(label = "Use the default browser setting", varname = "browserSetting")
+            radioItem(label = "Internal browser", varname = "browserSetting")
+            radioItem(label = "Externen browser", varname = "browserSetting")
+            separator()
             menuItem(label = "Settings") {
                 if(configWindow == null) {
                     configWindow = ConfigWindow()
index c2acd421659370c23f5e10fc742978d123103088..06fb26f1a49e6d3da9e3311e9d2ea1fef38b2c41 100644 (file)
@@ -1,4 +1,84 @@
 package de.unixwork.ui;
 
-public class MenuCheckItem {
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class MenuCheckItem extends MenuElement {
+    private String label;
+    private String icon;
+    private String varname;
+    private EventHandler onChange;
+
+    MethodHandle itemConstructor = MenuFuncs.getInstance().menu_toggleitem_create;
+
+    public MenuCheckItem(String label, String varname) {
+        this.label = label;
+        this.varname = varname;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getVarname() {
+        return varname;
+    }
+
+    public void setVarname(String varname) {
+        this.varname = varname;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public EventHandler getOnChange() {
+        return onChange;
+    }
+
+    public void setOnChange(EventHandler onChange) {
+        this.onChange = onChange;
+    }
+
+    @Override
+    protected void create() {
+        MenuFuncs ui = MenuFuncs.getInstance();
+        ArgFuncs a = ArgFuncs.getInstance();
+        Toolkit toolkit = Toolkit.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            MemorySegment args = (MemorySegment) a.menutoggleitem_args_new.invoke();
+            if(label != null) {
+                MemorySegment cstr = arena.allocateFrom(label);
+                a.menutoggleitem_args_set_label.invoke(args, cstr);
+            }
+            if(icon != null) {
+                MemorySegment cstr = arena.allocateFrom(icon);
+                a.menutoggleitem_args_set_icon.invoke(args, cstr);
+            }
+            if(varname != null) {
+                MemorySegment cstr = arena.allocateFrom(varname);
+                a.menutoggleitem_args_set_varname.invoke(args, cstr);
+            }
+            if(onChange != null) {
+                EventWrapper event = new EventWrapper(onChange);
+
+                // set toolkit args
+                a.menutoggleitem_args_set_onchange.invoke(args, event.getCallback());
+                a.menutoggleitem_args_set_onchangedata.invoke(args, event.getUserData());
+            }
+            itemConstructor.invoke(args);
+            a.menutoggleitem_args_free.invoke(args);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
index 4f5608334a12941b259f314015fe53bdd0dea912..63ad2270f9d45298ebe4c1a20a26ad5e3a5ed704 100644 (file)
@@ -1,4 +1,11 @@
 package de.unixwork.ui;
 
-public class MenuRadioItem {
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class MenuRadioItem extends MenuCheckItem {
+    public MenuRadioItem(String label, String varname) {
+        super(label, varname);
+        itemConstructor = MenuFuncs.getInstance().menu_radioitem_create;
+    }
 }
index 54ae1273bd6d343e786f8bf18b0b32de2ee06037..b6d59d7de7218d6fd0044edd73ac184232c244fc 100644 (file)
@@ -4,7 +4,9 @@ import de.unixwork.ui.AppMenu
 import de.unixwork.ui.Application
 import de.unixwork.ui.EventHandler
 import de.unixwork.ui.Menu
+import de.unixwork.ui.MenuCheckItem
 import de.unixwork.ui.MenuItem
+import de.unixwork.ui.MenuRadioItem
 import de.unixwork.ui.MenuSeparator
 import de.unixwork.ui.MenuUI
 import de.unixwork.ui.Toolbar
@@ -13,7 +15,7 @@ import de.unixwork.ui.ToolbarPosition
 class MenuBuilder(menu: Menu) {
     private val menu = menu
 
-    fun menuItem(label: String? = null, stockId: String? = null, icon: String? = null, onClick: EventHandler? = null) {
+    fun menuItem(label: String? = null, icon: String? = null, onClick: EventHandler? = null) {
         val item = MenuItem(label, onClick)
         menu.add(item)
     }
@@ -25,6 +27,20 @@ class MenuBuilder(menu: Menu) {
         menu.add(subMenu)
     }
 
+    fun checkItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) {
+        val item = MenuCheckItem(label, varname)
+        item.icon = icon
+        item.onChange = onChange
+        menu.add(item)
+    }
+
+    fun radioItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) {
+        val item = MenuRadioItem(label, varname)
+        item.icon = icon
+        item.onChange = onChange
+        menu.add(item)
+    }
+
     fun separator() {
         menu.add(MenuSeparator())
     }