MethodHandle button_args_set_groups;
MethodHandle button_args_free;
+ MethodHandle toggle_args_new;
+ MethodHandle toggle_args_set_fill;
+ MethodHandle toggle_args_set_hexpand;
+ MethodHandle toggle_args_set_vexpand;
+ MethodHandle toggle_args_set_hfill;
+ MethodHandle toggle_args_set_vfill;
+ MethodHandle toggle_args_set_override_defaults;
+ MethodHandle toggle_args_set_colspan;
+ MethodHandle toggle_args_set_rowspan;
+ MethodHandle toggle_args_set_name;
+ MethodHandle toggle_args_set_style_class;
+ MethodHandle toggle_args_set_label;
+ MethodHandle toggle_args_set_stockid;
+ MethodHandle toggle_args_set_icon;
+ MethodHandle toggle_args_set_labeltype;
+ MethodHandle toggle_args_set_varname;
+ MethodHandle toggle_args_set_value;
+ MethodHandle toggle_args_set_enablegroup;
+ MethodHandle toggle_args_set_onchange;
+ MethodHandle toggle_args_set_onchangedata;
+ MethodHandle toggle_args_set_groups;
+ MethodHandle toggle_args_free;
+
private ArgFuncs(Linker linker, SymbolLookup lib) {
FunctionDescriptor sigm = FunctionDescriptor.of(ValueLayout.ADDRESS);
FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS);
MemorySegment ui_button_args_set_groups_addr = lib.find("ui_button_args_set_groups").orElseThrow();
MemorySegment ui_button_args_free_addr = lib.find("ui_button_args_free").orElseThrow();
+ MemorySegment ui_toggle_args_new_addr = lib.find("ui_toggle_args_new").orElseThrow();
+ MemorySegment ui_toggle_args_set_fill_addr = lib.find("ui_toggle_args_set_fill").orElseThrow();
+ MemorySegment ui_toggle_args_set_hexpand_addr = lib.find("ui_toggle_args_set_hexpand").orElseThrow();
+ MemorySegment ui_toggle_args_set_vexpand_addr = lib.find("ui_toggle_args_set_vexpand").orElseThrow();
+ MemorySegment ui_toggle_args_set_hfill_addr = lib.find("ui_toggle_args_set_hfill").orElseThrow();
+ MemorySegment ui_toggle_args_set_vfill_addr = lib.find("ui_toggle_args_set_vfill").orElseThrow();
+ MemorySegment ui_toggle_args_set_override_defaults_addr = lib.find("ui_toggle_args_set_override_defaults").orElseThrow();
+ MemorySegment ui_toggle_args_set_colspan_addr = lib.find("ui_toggle_args_set_colspan").orElseThrow();
+ MemorySegment ui_toggle_args_set_rowspan_addr = lib.find("ui_toggle_args_set_rowspan").orElseThrow();
+ MemorySegment ui_toggle_args_set_name_addr = lib.find("ui_toggle_args_set_name").orElseThrow();
+ MemorySegment ui_toggle_args_set_style_class_addr = lib.find("ui_toggle_args_set_style_class").orElseThrow();
+ MemorySegment ui_toggle_args_set_label_addr = lib.find("ui_toggle_args_set_label").orElseThrow();
+ MemorySegment ui_toggle_args_set_stockid_addr = lib.find("ui_toggle_args_set_stockid").orElseThrow();
+ MemorySegment ui_toggle_args_set_icon_addr = lib.find("ui_toggle_args_set_icon").orElseThrow();
+ MemorySegment ui_toggle_args_set_labeltype_addr = lib.find("ui_toggle_args_set_labeltype").orElseThrow();
+ MemorySegment ui_toggle_args_set_varname_addr = lib.find("ui_toggle_args_set_varname").orElseThrow();
+ MemorySegment ui_toggle_args_set_value_addr = lib.find("ui_toggle_args_set_value").orElseThrow();
+ MemorySegment ui_toggle_args_set_onchange_addr = lib.find("ui_toggle_args_set_onchange").orElseThrow();
+ MemorySegment ui_toggle_args_set_onchangedata_addr = lib.find("ui_toggle_args_set_onchangedata").orElseThrow();
+ MemorySegment ui_toggle_args_set_enablegroup = lib.find("ui_toggle_args_set_enablegroup").orElseThrow();
+ MemorySegment ui_toggle_args_set_groups_addr = lib.find("ui_toggle_args_set_groups").orElseThrow();
+ MemorySegment ui_toggle_args_free_addr = lib.find("ui_toggle_args_free").orElseThrow();
+
menuitem_args_new = linker.downcallHandle(ui_menuitem_args_new_addr, sigm);
menuitem_args_set_label = linker.downcallHandle(ui_menuitem_args_set_label_addr, sigv_mm);
menuitem_args_set_stockid = linker.downcallHandle(ui_menuitem_args_set_stockid_addr, sigv_mm);
button_args_set_onclickdata = linker.downcallHandle(ui_button_args_set_onclickdata_addr, sigv_mm);
button_args_set_groups = linker.downcallHandle(ui_button_args_set_groups_addr, sigv_mm);
button_args_free = linker.downcallHandle(ui_button_args_free_addr, sigv_m);
+
+ toggle_args_new = linker.downcallHandle(ui_toggle_args_new_addr, sigm);
+ toggle_args_set_fill = linker.downcallHandle(ui_toggle_args_set_fill_addr, sigm);
+ toggle_args_set_hexpand = linker.downcallHandle(ui_toggle_args_set_hexpand_addr, sigv_mb);
+ toggle_args_set_vexpand = linker.downcallHandle(ui_toggle_args_set_vexpand_addr, sigv_mb);
+ toggle_args_set_hfill = linker.downcallHandle(ui_toggle_args_set_hfill_addr, sigv_mb);
+ toggle_args_set_vfill = linker.downcallHandle(ui_toggle_args_set_vfill_addr, sigv_mb);
+ toggle_args_set_override_defaults = linker.downcallHandle(ui_toggle_args_set_override_defaults_addr, sigv_mb);
+ toggle_args_set_colspan = linker.downcallHandle(ui_toggle_args_set_colspan_addr, sigv_mi);
+ toggle_args_set_rowspan = linker.downcallHandle(ui_toggle_args_set_rowspan_addr, sigv_mi);
+ toggle_args_set_name = linker.downcallHandle(ui_toggle_args_set_name_addr, sigv_mm);
+ toggle_args_set_style_class = linker.downcallHandle(ui_toggle_args_set_style_class_addr, sigv_mm);
+ toggle_args_set_label = linker.downcallHandle(ui_toggle_args_set_label_addr, sigv_mm);
+ toggle_args_set_stockid = linker.downcallHandle(ui_toggle_args_set_stockid_addr, sigv_mm);
+ toggle_args_set_icon = linker.downcallHandle(ui_toggle_args_set_icon_addr, sigv_mm);
+ toggle_args_set_labeltype = linker.downcallHandle(ui_toggle_args_set_labeltype_addr, sigv_mi);
+ toggle_args_set_varname = linker.downcallHandle(ui_toggle_args_set_varname_addr, sigv_mm);
+ toggle_args_set_value = linker.downcallHandle(ui_toggle_args_set_value_addr, sigv_mm);
+ toggle_args_set_onchange = linker.downcallHandle(ui_toggle_args_set_onchange_addr, sigv_mm);
+ toggle_args_set_onchangedata = linker.downcallHandle(ui_toggle_args_set_onchangedata_addr, sigv_mm);
+ toggle_args_set_enablegroup = linker.downcallHandle(ui_toggle_args_set_enablegroup, sigv_mi);
+ toggle_args_set_groups = linker.downcallHandle(ui_toggle_args_set_groups_addr, sigv_mm);
+ toggle_args_free = linker.downcallHandle(ui_toggle_args_free_addr, sigv_m);
}
static ArgFuncs getInstance() {
import java.lang.foreign.FunctionDescriptor;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;
+import java.lang.invoke.MethodHandle;
public class Button {
public static void createButton(UiObject obj, ButtonArgs args) {
throw new RuntimeException(e);
}
}
+
+ private static void createToggleButton(UiObject obj, MethodHandle func, ToggleArgs args) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ try (Arena arena = Arena.ofConfined()) {
+ MemorySegment buttonArgs = args.createToggleArgs(obj, arena);
+ MemorySegment widget = (MemorySegment) func.invoke(obj.ptr, buttonArgs);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void createToggleButton(UiObject obj, ToggleArgs args) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ Button.createToggleButton(obj, ui.togglebutton_create, args);
+ }
+
+ public static void createCheckbox(UiObject obj, ToggleArgs args) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ Button.createToggleButton(obj, ui.checkbox_create, args);
+ }
+
+ public static void createSwitch(UiObject obj, ToggleArgs args) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ Button.createToggleButton(obj, ui.switch_create, args);
+ }
+
+ public static void createRadioButton(UiObject obj, ToggleArgs args) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ Button.createToggleButton(obj, ui.radiobutton_create, args);
+ }
}
static ButtonFuncs instance;
public MethodHandle button_create;
+ public MethodHandle togglebutton_create;
+ public MethodHandle checkbox_create;
+ public MethodHandle switch_create;
+ public MethodHandle radiobutton_create;
private ButtonFuncs(Linker linker, SymbolLookup lib) {
// void* func(void*, void*)
FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
MemorySegment ui_button_create_addr = lib.find("ui_button_create").orElseThrow();
+ MemorySegment ui_togglebutton_create_addr = lib.find("ui_togglebutton_create").orElseThrow();
+ MemorySegment ui_checkbox_create_addr = lib.find("ui_checkbox_create").orElseThrow();
+ MemorySegment ui_switch_create_addr = lib.find("ui_switch_create").orElseThrow();
+ MemorySegment ui_radiobutton_create_addr = lib.find("ui_radiobutton_create").orElseThrow();
button_create = linker.downcallHandle(ui_button_create_addr, sigm_mm);
+ togglebutton_create = linker.downcallHandle(ui_togglebutton_create_addr, sigm_mm);
+ checkbox_create = linker.downcallHandle(ui_checkbox_create_addr, sigm_mm);
+ switch_create = linker.downcallHandle(ui_switch_create_addr, sigm_mm);
+ radiobutton_create = linker.downcallHandle(ui_radiobutton_create_addr, sigm_mm);
}
static ButtonFuncs getInstance() {
--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class ToggleArgs {
+
+ private boolean fill;
+ private boolean hexpand;
+ private boolean vexpand;
+ private boolean hfill;
+ private boolean vfill;
+ private boolean overrideDefaults;
+ private int colspan;
+ private int rowspan;
+ private String name;
+ private String styleClass;
+ private String label;
+ private String stockId;
+ private String icon;
+ private int labelType;
+ private String varname;
+ private EventHandler onChange;
+ private int[] states;
+
+ public ToggleArgs() {
+
+ }
+
+ public ToggleArgs fill(boolean fill) {
+ this.fill = fill;
+ return this;
+ }
+
+ public ToggleArgs hexpand(boolean hexpand) {
+ this.hexpand = hexpand;
+ return this;
+ }
+
+ public ToggleArgs vexpand(boolean vexpand) {
+ this.vexpand = vexpand;
+ return this;
+ }
+
+ public ToggleArgs hfill(boolean hfill) {
+ this.hfill = hfill;
+ return this;
+ }
+
+ public ToggleArgs vfill(boolean vfill) {
+ this.vfill = vfill;
+ return this;
+ }
+
+ public ToggleArgs overrideDefaults(boolean overrideDefaults) {
+ this.overrideDefaults = overrideDefaults;
+ return this;
+ }
+
+ public ToggleArgs colspan(int colspan) {
+ this.colspan = colspan;
+ return this;
+ }
+
+ public ToggleArgs rowspan(int rowspan) {
+ this.rowspan = rowspan;
+ return this;
+ }
+
+ public ToggleArgs name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public ToggleArgs styleClass(String styleClass) {
+ this.styleClass = styleClass;
+ return this;
+ }
+
+ public ToggleArgs label(String label) {
+ this.label = label;
+ return this;
+ }
+
+ public ToggleArgs stockId(String stockId) {
+ this.stockId = stockId;
+ return this;
+ }
+
+ public ToggleArgs icon(String icon) {
+ this.icon = icon;
+ return this;
+ }
+
+ public ToggleArgs labelType(int labelType) {
+ this.labelType = labelType;
+ return this;
+ }
+
+ public ToggleArgs varname(String varname) {
+ this.varname = varname;
+ return this;
+ }
+
+ public ToggleArgs onChange(EventHandler onChange) {
+ this.onChange = onChange;
+ return this;
+ }
+
+ public ToggleArgs states(int... states) {
+ this.states = states;
+ return this;
+ }
+
+ public MemorySegment createToggleArgs(UiObject parent, Arena arena) throws Throwable {
+ ArgFuncs ui = ArgFuncs.getInstance();
+
+ MemorySegment args = (MemorySegment)ui.toggle_args_new.invoke();
+ if(fill) {
+ // TODO
+ }
+ if(hexpand) {
+ ui.toggle_args_set_hexpand.invoke(args, hexpand);
+ }
+ if(vexpand) {
+ ui.toggle_args_set_vexpand.invoke(args, vexpand);
+ }
+ if(hfill) {
+ ui.toggle_args_set_hfill.invoke(args, hfill);
+ }
+ if(vfill) {
+ ui.toggle_args_set_vfill.invoke(args, vfill);
+ }
+ if(overrideDefaults) {
+ ui.toggle_args_set_override_defaults.invoke(args, overrideDefaults);
+ }
+ if(colspan > 0) {
+ ui.toggle_args_set_colspan.invoke(args, colspan);
+ }
+ if(rowspan > 0) {
+ ui.toggle_args_set_rowspan.invoke(args, rowspan);
+ }
+ if(name != null) {
+ MemorySegment cstr = arena.allocateFrom(name);
+ ui.toggle_args_set_name.invoke(args, cstr);
+ }
+ if(styleClass != null) {
+ MemorySegment cstr = arena.allocateFrom(styleClass);
+ ui.toggle_args_set_style_class.invoke(args, cstr);
+ }
+ if(label != null) {
+ MemorySegment cstr = arena.allocateFrom(label);
+ ui.toggle_args_set_label.invoke(args, cstr);
+ }
+ if(stockId != null) {
+ MemorySegment cstr = arena.allocateFrom(stockId);
+ ui.toggle_args_set_stockid.invoke(args, cstr);
+ }
+ if(icon != null) {
+ MemorySegment cstr = arena.allocateFrom(icon);
+ ui.toggle_args_set_icon.invoke(args, cstr);
+ }
+ ui.toggle_args_set_labeltype.invoke(args, labelType);
+
+ if(varname != null) {
+ MemorySegment cstr = arena.allocateFrom(varname);
+ ui.toggle_args_set_varname.invoke(args, cstr);
+ }
+
+ if(onChange != null) {
+ // TODO
+ }
+
+ return args;
+ }
+}
public void startup() {
UiObject window = UiObject.createWindow("Test Window");
Button.createButton(window, new ButtonArgs().label("Hello World!"));
+ Button.createToggleButton(window, new ToggleArgs().label("Toggle"));
+ Button.createCheckbox(window, new ToggleArgs().label("Checkbox"));
+ Button.createRadioButton(window, new ToggleArgs().label("Radio 1").varname("radio"));
+ Button.createRadioButton(window, new ToggleArgs().label("Radio 2").varname("radio"));
window.show();
}