From 61e3c8c0627803a5e084932999a8ea5c2d01e444 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Wed, 3 Sep 2025 17:51:11 +0200 Subject: [PATCH] add sourcelist contextmenu parameter --- .../main/java/de/unixwork/ui/ArgFuncs.java | 3 +++ .../de/unixwork/ui/SourceListBuilder.java | 24 +++++++++++++++++++ 2 files changed, 27 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 0e4ec9b..a76f888 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -350,6 +350,7 @@ class ArgFuncs { MethodHandle sourcelist_args_set_onactivatedata; MethodHandle sourcelist_args_set_onbuttonclick; MethodHandle sourcelist_args_set_onbuttonclickdata; + MethodHandle sourcelist_args_set_contextmenu; MethodHandle sourcelist_args_free; MethodHandle textarea_args_new; @@ -759,6 +760,7 @@ class ArgFuncs { MemorySegment ui_sourcelist_args_set_onactivatedata_addr = lib.find("ui_sourcelist_args_set_onactivatedata").orElseThrow(); 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_free_addr = lib.find("ui_sourcelist_args_free").orElseThrow(); MemorySegment ui_textarea_args_new_addr = lib.find("ui_textarea_args_new").orElseThrow(); @@ -1159,6 +1161,7 @@ class ArgFuncs { sourcelist_args_set_onactivatedata = linker.downcallHandle(ui_sourcelist_args_set_onactivatedata_addr, sigv_mm); 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_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/SourceListBuilder.java b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java index ddc5f24..d0c4b08 100644 --- a/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java @@ -16,6 +16,7 @@ public class SourceListBuilder extends AbstractWidgetBuilder { private int rowspan; private String name; private String styleClass; + private Menu contextMenu; private int[] states; private List sublists; @@ -26,6 +27,8 @@ public class SourceListBuilder extends AbstractWidgetBuilder { private EventHandler onActivate; private EventHandler onButtonClick; + private MemorySegment menuBuilder; + public SourceListBuilder(UiObject obj, MethodHandle widgetConstructor) { this.obj = obj; this.widgetConstructor = widgetConstructor; @@ -118,6 +121,11 @@ public class SourceListBuilder extends AbstractWidgetBuilder { return this; } + public SourceListBuilder contextmenu(Menu menu) { + this.contextMenu = menu; + return this; + } + public MemorySegment createArgs(Arena arena) throws Throwable { ArgFuncs ui = ArgFuncs.getInstance(); @@ -184,7 +192,23 @@ public class SourceListBuilder extends AbstractWidgetBuilder { ui.sourcelist_args_set_onbuttonclick.invoke(args, event.getCallback()); ui.sourcelist_args_set_onbuttonclickdata.invoke(args, event.getUserData()); } + if (contextMenu != null) { + menuBuilder = contextMenu.createMenuBuilder(); + ui.sourcelist_args_set_contextmenu.invoke(args, menuBuilder); + } return args; } + + void freeArgs() { + super.freeArgs(); + if(menuBuilder != null) { + MenuFuncs ui = MenuFuncs.getInstance(); + try { + ui.menubuilder_free.invoke(menuBuilder); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + } } -- 2.47.3