]> uap-core.de Git - rssreader.git/commitdiff
add sourcelist contextmenu parameter
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 3 Sep 2025 15:51:11 +0000 (17:51 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 3 Sep 2025 15:51:11 +0000 (17:51 +0200)
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java

index 0e4ec9b5aea7d616b64f1e9dda72edc6e2d883c9..a76f888af4c1a939c59a8d32540ff227bd300eea 100644 (file)
@@ -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);
index ddc5f24de5552d2fd49d11b4aaac96f06353e7e0..d0c4b084fe3fdd08bfd68fcc550a9a9730f9a70c 100644 (file)
@@ -16,6 +16,7 @@ public class SourceListBuilder<T> extends AbstractWidgetBuilder {
     private int rowspan;
     private String name;
     private String styleClass;
+    private Menu contextMenu;
     private int[] states;
 
     private List<SubList> sublists;
@@ -26,6 +27,8 @@ public class SourceListBuilder<T> 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<T> extends AbstractWidgetBuilder {
         return this;
     }
 
+    public SourceListBuilder<T> 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<T> 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);
+            }
+        }
+    }
 }