public MethodHandle menu_separator;
public MethodHandle menu_itemlist_create;
+ public MethodHandle toolbar_item_create;
+ public MethodHandle toolbar_toggleitem_create;
+ public MethodHandle toolbar_menu_create;
+ public MethodHandle toolbar_add_default;
+
private MenuFuncs(Linker linker, SymbolLookup lib) {
// void func(void*)
FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS);
+ // void func(void*, void*)
+ FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+ // void func(void*, int)
+ FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
// void func()
FunctionDescriptor sigv = FunctionDescriptor.ofVoid();
// int func()
MemorySegment ui_menu_separator_addr = lib.find("ui_menuseparator").orElseThrow();
MemorySegment ui_menu_itemlist_create_addr = lib.find("ui_menu_itemlist_create").orElseThrow();
+ MemorySegment ui_toolbar_item_create_addr = lib.find("ui_toolbar_item_create").orElseThrow();
+ MemorySegment ui_toolbar_toggleitem_create_addr = lib.find("ui_toolbar_toggleitem_create").orElseThrow();
+ MemorySegment ui_toolbar_menu_create_addr = lib.find("ui_toolbar_menu_create").orElseThrow();
+ MemorySegment ui_toolbar_add_default_addr = lib.find("ui_toolbar_add_default").orElseThrow();
+
menu_end = linker.downcallHandle(ui_menu_end_addr, sigv);
menu_close = linker.downcallHandle(ui_menu_close_addr, sigv);
menu_is_open = linker.downcallHandle(ui_menu_is_open_addr, sigi);
menu_radioitem_create = linker.downcallHandle(ui_menu_radioitem_create_addr, sigv_m);
menu_separator = linker.downcallHandle(ui_menu_separator_addr, sigv);
menu_itemlist_create = linker.downcallHandle(ui_menu_itemlist_create_addr, sigv_m);
+
+ toolbar_item_create = linker.downcallHandle(ui_toolbar_item_create_addr, sigv_mm);
+ toolbar_toggleitem_create = linker.downcallHandle(ui_toolbar_toggleitem_create_addr, sigv_mm);
+ toolbar_menu_create = linker.downcallHandle(ui_toolbar_menu_create_addr, sigv_mm);
+ toolbar_add_default = linker.downcallHandle(ui_toolbar_add_default_addr, sigv_mi);
}
static MenuFuncs getInstance() {
--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class Toolbar {
+ public static void iconItem(String name, String icon, EventHandler onClick) {
+ item(name, null, icon, onClick);
+ }
+
+ public static void item(String name, String label, EventHandler onClick) {
+ item(name, label, null, onClick);
+ }
+
+ public static void item(String name, String label, String icon, EventHandler onClick) {
+ MenuFuncs ui = MenuFuncs.getInstance();
+ ArgFuncs a = ArgFuncs.getInstance();
+ Toolkit toolkit = Toolkit.getInstance();
+ Arena arena = toolkit.getStaticArena();
+ try {
+ MemorySegment args = (MemorySegment) a.toolbar_item_args_new.invoke();
+ if(label != null) {
+ MemorySegment cstr = arena.allocateFrom(label);
+ a.toolbar_item_args_set_label.invoke(args, cstr);
+ }
+ if(icon != null) {
+ MemorySegment cstr = arena.allocateFrom(icon);
+ a.toolbar_item_args_set_icon.invoke(args, cstr);
+ }
+ if(onClick != null) {
+ EventWrapper event = new EventWrapper(onClick);
+
+ // set toolkit args
+ a.toolbar_item_args_set_onclick.invoke(args, event.getCallback());
+ a.toolbar_item_args_set_onclickdata.invoke(args, event.getUserData());
+ }
+ MemorySegment itemName = arena.allocateFrom(name);
+ ui.toolbar_item_create.invoke(itemName, args);
+ a.toolbar_item_args_free.invoke(args);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void addDefault(String name, ToolbarPosition position) {
+ int pos = position.ordinal();
+
+ MenuFuncs ui = MenuFuncs.getInstance();
+ Toolkit toolkit = Toolkit.getInstance();
+ try (Arena arena = Arena.ofConfined()) {
+ MemorySegment cstr = arena.allocateFrom(name);
+ ui.toolbar_add_default.invoke(cstr, pos);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+}