]> uap-core.de Git - rssreader.git/commitdiff
add linkbutton
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 22 Aug 2025 17:57:01 +0000 (19:57 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 22 Aug 2025 17:57:01 +0000 (19:57 +0200)
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/LinkButtonType.java [new file with mode: 0644]

index 7a31b64763cacb0dbb86e89050086576bb6d7875..b59db79617d94eabc4cb9749c3e9c18ec9c4ae92 100644 (file)
@@ -250,6 +250,28 @@ class ArgFuncs {
     MethodHandle toggle_args_set_groups;
     MethodHandle toggle_args_free;
 
+    MethodHandle linkbutton_args_new;
+    MethodHandle linkbutton_args_set_fill;
+    MethodHandle linkbutton_args_set_hexpand;
+    MethodHandle linkbutton_args_set_vexpand;
+    MethodHandle linkbutton_args_set_hfill;
+    MethodHandle linkbutton_args_set_vfill;
+    MethodHandle linkbutton_args_set_override_defaults;
+    MethodHandle linkbutton_args_set_colspan;
+    MethodHandle linkbutton_args_set_rowspan;
+    MethodHandle linkbutton_args_set_name;
+    MethodHandle linkbutton_args_set_style_class;
+    MethodHandle linkbutton_args_set_varname;
+    MethodHandle linkbutton_args_set_value;
+    MethodHandle linkbutton_args_set_label;
+    MethodHandle linkbutton_args_set_uri;
+    MethodHandle linkbutton_args_set_onclick;
+    MethodHandle linkbutton_args_set_onclickdata;
+    MethodHandle linkbutton_args_set_nofollow;
+    MethodHandle linkbutton_args_set_type;
+    MethodHandle linkbutton_args_set_groups;
+    MethodHandle linkbutton_args_free;
+
     MethodHandle list_args_new;
     MethodHandle list_args_set_fill;
     MethodHandle list_args_set_hexpand;
@@ -612,6 +634,28 @@ class ArgFuncs {
         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();
 
+        MemorySegment ui_linkbutton_args_new_addr = lib.find("ui_linkbutton_args_new").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_fill_addr = lib.find("ui_linkbutton_args_set_fill").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_hexpand_addr = lib.find("ui_linkbutton_args_set_hexpand").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_vexpand_addr = lib.find("ui_linkbutton_args_set_vexpand").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_hfill_addr = lib.find("ui_linkbutton_args_set_hfill").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_vfill_addr = lib.find("ui_linkbutton_args_set_vfill").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_override_defaults_addr = lib.find("ui_linkbutton_args_set_override_defaults").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_colspan_addr = lib.find("ui_linkbutton_args_set_colspan").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_rowspan_addr = lib.find("ui_linkbutton_args_set_rowspan").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_name_addr = lib.find("ui_linkbutton_args_set_name").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_style_class_addr = lib.find("ui_linkbutton_args_set_style_class").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_varname_addr = lib.find("ui_linkbutton_args_set_varname").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_value_addr = lib.find("ui_linkbutton_args_set_value").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_label_addr = lib.find("ui_linkbutton_args_set_label").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_uri_addr = lib.find("ui_linkbutton_args_set_uri").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_onclick_addr = lib.find("ui_linkbutton_args_set_onclick").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_onclickdata_addr = lib.find("ui_linkbutton_args_set_onclickdata").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_nofollow_addr = lib.find("ui_linkbutton_args_set_nofollow").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_type_addr = lib.find("ui_linkbutton_args_set_type").orElseThrow();
+        MemorySegment ui_linkbutton_args_set_groups_addr = lib.find("ui_linkbutton_args_set_groups").orElseThrow();
+        MemorySegment ui_linkbutton_args_free_addr = lib.find("ui_linkbutton_args_free").orElseThrow();
+
         MemorySegment ui_list_args_new_addr = lib.find("ui_list_args_new").orElseThrow();
         MemorySegment ui_list_args_set_fill_addr = lib.find("ui_list_args_set_fill").orElseThrow();
         MemorySegment ui_list_args_set_hexpand_addr = lib.find("ui_list_args_set_hexpand").orElseThrow();
@@ -965,6 +1009,28 @@ class ArgFuncs {
         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);
 
+        linkbutton_args_new = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigm);
+        linkbutton_args_set_fill = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_hexpand = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_vexpand = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_hfill = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_vfill = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_override_defaults = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_colspan = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mi);
+        linkbutton_args_set_rowspan = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mi);
+        linkbutton_args_set_name = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_style_class = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_varname = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_value = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_label = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_uri = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_onclick = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_onclickdata = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_set_nofollow = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mb);
+        linkbutton_args_set_type = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mi);
+        linkbutton_args_set_groups = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+        linkbutton_args_free = linker.downcallHandle(ui_menuitemlist_args_set_varname_addr, sigv_mm);
+
         list_args_new = linker.downcallHandle(ui_list_args_new_addr, sigm);
         list_args_set_fill = linker.downcallHandle(ui_list_args_set_fill_addr, sigv_mb);
         list_args_set_hexpand = linker.downcallHandle(ui_list_args_set_hexpand_addr, sigv_mb);
diff --git a/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java b/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java
new file mode 100644 (file)
index 0000000..17e0af6
--- /dev/null
@@ -0,0 +1,203 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.MemorySegment;
+import java.lang.foreign.ValueLayout;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+public class LinkButtonBuilder extends AbstractWidgetBuilder {
+    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 uri;
+    private EventHandler onClick;
+    private String varname;
+    private UiString value;
+    private boolean nofollow;
+    private LinkButtonType type;
+    private int[] states;
+
+    public LinkButtonBuilder(UiObject obj, MethodHandle widgetConstructor) {
+        this.obj = obj;
+        this.widgetConstructor = widgetConstructor;
+        this.argsFree = ArgFuncs.getInstance().linkbutton_args_free;
+    }
+
+    public LinkButtonBuilder fill(boolean fill) {
+        this.fill = fill;
+        return this;
+    }
+
+    public LinkButtonBuilder hexpand(boolean hexpand) {
+        this.hexpand = hexpand;
+        return this;
+    }
+
+    public LinkButtonBuilder vexpand(boolean vexpand) {
+        this.vexpand = vexpand;
+        return this;
+    }
+
+    public LinkButtonBuilder hfill(boolean hfill) {
+        this.hfill = hfill;
+        return this;
+    }
+
+    public LinkButtonBuilder vfill(boolean vfill) {
+        this.vfill = vfill;
+        return this;
+    }
+
+    public LinkButtonBuilder overrideDefaults(boolean overrideDefaults) {
+        this.overrideDefaults = overrideDefaults;
+        return this;
+    }
+
+    public LinkButtonBuilder colspan(int colspan) {
+        this.colspan = colspan;
+        return this;
+    }
+
+    public LinkButtonBuilder rowspan(int rowspan) {
+        this.rowspan = rowspan;
+        return this;
+    }
+
+    public LinkButtonBuilder name(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public LinkButtonBuilder styleClass(String styleClass) {
+        this.styleClass = styleClass;
+        return this;
+    }
+
+    public LinkButtonBuilder label(String label) {
+        this.label = label;
+        return this;
+    }
+    
+    public LinkButtonBuilder uri(String uri) {
+        this.uri = uri;
+        return this;
+    }
+    
+    public LinkButtonBuilder varname(String varname) {
+        this.varname = varname;
+        return this;
+    }
+    
+    public LinkButtonBuilder value(UiString value) {
+        this.value = value;
+        return this;
+    }
+    
+    public LinkButtonBuilder nofollow(boolean nofollow) {
+        this.nofollow = nofollow;
+        return this;
+    }
+    
+    public LinkButtonBuilder type(LinkButtonType type) {
+        this.type = type;
+        return this;
+    }
+
+    public LinkButtonBuilder onClick(EventHandler onClick) {
+        this.onClick = onClick;
+        return this;
+    }
+
+    public LinkButtonBuilder states(int... states) {
+        this.states = states;
+        return this;
+    }
+
+    public MemorySegment createArgs(Arena arena) throws Throwable {
+        ArgFuncs ui = ArgFuncs.getInstance();
+
+        args = (MemorySegment)ui.linkbutton_args_new.invoke();
+        if(fill) {
+            ui.linkbutton_args_set_fill.invoke(args, fill);
+        }
+        if(hexpand) {
+            ui.linkbutton_args_set_hexpand.invoke(args, hexpand);
+        }
+        if(vexpand) {
+            ui.linkbutton_args_set_vexpand.invoke(args, vexpand);
+        }
+        if(hfill) {
+            ui.linkbutton_args_set_hfill.invoke(args, hfill);
+        }
+        if(vfill) {
+            ui.linkbutton_args_set_vfill.invoke(args, vfill);
+        }
+        if(overrideDefaults) {
+            ui.linkbutton_args_set_override_defaults.invoke(args, overrideDefaults);
+        }
+        if(colspan > 0) {
+            ui.linkbutton_args_set_colspan.invoke(args, colspan);
+        }
+        if(rowspan > 0) {
+            ui.linkbutton_args_set_rowspan.invoke(args, rowspan);
+        }
+        if(name != null) {
+            MemorySegment cstr = arena.allocateFrom(name);
+            ui.linkbutton_args_set_name.invoke(args, cstr);
+        }
+        if(styleClass != null) {
+            MemorySegment cstr = arena.allocateFrom(styleClass);
+            ui.linkbutton_args_set_style_class.invoke(args, cstr);
+        }
+        if(label != null) {
+            MemorySegment cstr = arena.allocateFrom(label);
+            ui.linkbutton_args_set_label.invoke(args, cstr);
+        }
+        if(uri != null) {
+            MemorySegment cstr = arena.allocateFrom(uri);
+            ui.linkbutton_args_set_uri.invoke(args, cstr);
+        }
+        if(varname != null) {
+            MemorySegment cstr = arena.allocateFrom(varname);
+            ui.linkbutton_args_set_varname.invoke(args, cstr);
+        }
+        if(value != null) {
+            ui.linkbutton_args_set_value.invoke(args, value.valuePtr);
+        }
+        if(nofollow) {
+            ui.linkbutton_args_set_nofollow.invoke(args, nofollow);
+        }
+        if(type != null) {
+            switch(type) {
+                case LINK: {
+                    ui.linkbutton_args_set_type.invoke(args, 0);
+                    break;
+                }
+                case BUTTON: {
+                    ui.linkbutton_args_set_type.invoke(args, 1);
+                }
+            }
+        }
+
+        if(onClick != null) {
+            EventWrapper event = new EventWrapper(obj, onClick);
+
+            // set toolkit args
+            ui.linkbutton_args_set_onclick.invoke(args, event.getCallback());
+            ui.linkbutton_args_set_onclickdata.invoke(args, event.getUserData());
+        }
+
+        return args;
+    }
+}
diff --git a/ui-java/src/main/java/de/unixwork/ui/LinkButtonType.java b/ui-java/src/main/java/de/unixwork/ui/LinkButtonType.java
new file mode 100644 (file)
index 0000000..656d0b4
--- /dev/null
@@ -0,0 +1,6 @@
+package de.unixwork.ui;
+
+public enum LinkButtonType {
+    LINK,
+    BUTTON
+}