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);
+ }
+ }
}
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
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)
}
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())
}