From bd5514976b837c64d94463a262d1ff724ba5ed2f Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Fri, 17 Oct 2025 20:28:31 +0200 Subject: [PATCH] add support for sourcelist header items and button popup menus --- ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java | 3 +++ ui-java/src/main/java/de/unixwork/ui/SubListItem.java | 1 + ui-java/src/main/java/de/unixwork/ui/Toolkit.java | 3 +++ ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java | 3 +++ 4 files changed, 10 insertions(+) diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java index f7f3b10..da34e13 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -415,6 +415,7 @@ class ArgFuncs { MethodHandle sourcelist_args_set_onbuttonclick; MethodHandle sourcelist_args_set_onbuttonclickdata; MethodHandle sourcelist_args_set_contextmenu; + MethodHandle sourcelist_args_set_header_is_item; MethodHandle sourcelist_args_free; MethodHandle textarea_args_new; @@ -935,6 +936,7 @@ class ArgFuncs { MemorySegment ui_sourcelist_args_set_onbuttonclick_addr = lib.find("ui_sourcelist_args_set_onbuttonclick").orElseThrow(); MemorySegment ui_sourcelist_args_set_onbuttonclickdata_addr = lib.find("ui_sourcelist_args_set_onbuttonclickdata").orElseThrow(); MemorySegment ui_sourcelist_args_set_contextmenu_addr = lib.find("ui_sourcelist_args_set_contextmenu").orElseThrow(); + MemorySegment ui_sourcelist_args_set_header_is_item_addr = lib.find("ui_sourcelist_args_set_header_is_item").orElseThrow(); MemorySegment ui_sourcelist_args_free_addr = lib.find("ui_sourcelist_args_free").orElseThrow(); MemorySegment ui_textarea_args_new_addr = lib.find("ui_textarea_args_new").orElseThrow(); @@ -1444,6 +1446,7 @@ class ArgFuncs { sourcelist_args_set_onbuttonclick = linker.downcallHandle(ui_sourcelist_args_set_onbuttonclick_addr, sigv_mm); sourcelist_args_set_onbuttonclickdata = linker.downcallHandle(ui_sourcelist_args_set_onbuttonclickdata_addr, sigv_mm); sourcelist_args_set_contextmenu = linker.downcallHandle(ui_sourcelist_args_set_contextmenu_addr, sigv_mm); + sourcelist_args_set_header_is_item = linker.downcallHandle(ui_sourcelist_args_set_header_is_item_addr, sigv_mb); sourcelist_args_free = linker.downcallHandle(ui_sourcelist_args_free_addr, sigv_m); textarea_args_new = linker.downcallHandle(ui_textarea_args_new_addr, sigm); diff --git a/ui-java/src/main/java/de/unixwork/ui/SubListItem.java b/ui-java/src/main/java/de/unixwork/ui/SubListItem.java index 5164444..299a452 100644 --- a/ui-java/src/main/java/de/unixwork/ui/SubListItem.java +++ b/ui-java/src/main/java/de/unixwork/ui/SubListItem.java @@ -5,6 +5,7 @@ public class SubListItem { public String label; public String buttonIcon; public String buttonLabel; + public Menu buttonMenu; public String badge; public SubListItem() { diff --git a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java index bd2e9f8..d9c5aad 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -597,6 +597,9 @@ public class Toolkit { MemorySegment cstr = arena.allocateFrom(item.buttonLabel); ui.sublist_item_set_button_label.invoke(out_item, cstr); } + if(item.buttonMenu != null) { + ui.sublist_item_set_button_menu.invoke(out_item, item.buttonMenu.createMenuBuilder()); + } if(item.badge != null) { MemorySegment cstr = arena.allocateFrom(item.badge); ui.sublist_item_set_badge.invoke(out_item, cstr); diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index 5e21bc0..8b557b5 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -35,6 +35,7 @@ public class ToolkitFuncs { public MethodHandle sublist_item_set_label; public MethodHandle sublist_item_set_button_icon; public MethodHandle sublist_item_set_button_label; + public MethodHandle sublist_item_set_button_menu; public MethodHandle sublist_item_set_badge; public MethodHandle sublist_item_set_eventdata; @@ -160,6 +161,7 @@ public class ToolkitFuncs { MemorySegment sublist_item_set_label_addr = lib.find("ui_sublist_item_set_label").orElseThrow(); MemorySegment sublist_item_set_button_icon_addr = lib.find("ui_sublist_item_set_button_icon").orElseThrow(); MemorySegment sublist_item_set_button_label_addr = lib.find("ui_sublist_item_set_button_label").orElseThrow(); + MemorySegment sublist_item_set_button_menu_addr = lib.find("ui_sublist_item_set_button_menu").orElseThrow(); MemorySegment sublist_item_set_badge_addr = lib.find("ui_sublist_item_set_badge").orElseThrow(); MemorySegment sublist_item_set_eventdata_addr = lib.find("ui_sublist_item_set_eventdata").orElseThrow(); @@ -260,6 +262,7 @@ public class ToolkitFuncs { sublist_item_set_label = linker.downcallHandle(sublist_item_set_label_addr, sigv_mm); sublist_item_set_button_icon = linker.downcallHandle(sublist_item_set_button_icon_addr, sigv_mm); sublist_item_set_button_label = linker.downcallHandle(sublist_item_set_button_label_addr, sigv_mm); + sublist_item_set_button_menu = linker.downcallHandle(sublist_item_set_button_menu_addr, sigv_mm); sublist_item_set_badge = linker.downcallHandle(sublist_item_set_badge_addr, sigv_mm); sublist_item_set_eventdata = linker.downcallHandle(sublist_item_set_eventdata_addr, sigv_mm); -- 2.47.3