From: Olaf Wintermann Date: Tue, 14 Oct 2025 20:04:57 +0000 (+0200) Subject: actually add check/radio menu item X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=f045596d1979d49f69eababce626570bb75d5971;p=rssreader.git actually add check/radio menu item --- diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt index 2ad97de..4175261 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt @@ -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() diff --git a/ui-java/src/main/java/de/unixwork/ui/MenuCheckItem.java b/ui-java/src/main/java/de/unixwork/ui/MenuCheckItem.java index c2acd42..06fb26f 100644 --- a/ui-java/src/main/java/de/unixwork/ui/MenuCheckItem.java +++ b/ui-java/src/main/java/de/unixwork/ui/MenuCheckItem.java @@ -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); + } + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/MenuRadioItem.java b/ui-java/src/main/java/de/unixwork/ui/MenuRadioItem.java index 4f56083..63ad227 100644 --- a/ui-java/src/main/java/de/unixwork/ui/MenuRadioItem.java +++ b/ui-java/src/main/java/de/unixwork/ui/MenuRadioItem.java @@ -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; + } } diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt index 54ae127..b6d59d7 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt @@ -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()) }