]> uap-core.de Git - rssreader.git/commitdiff
add linkbutton public API
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 23 Aug 2025 17:01:11 +0000 (19:01 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 23 Aug 2025 17:01:11 +0000 (19:01 +0200)
ui-java/src/main/java/de/unixwork/ui/Button.java
ui-java/src/main/java/de/unixwork/ui/ButtonFuncs.java
ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index 4c7ac9c960cde69bbb2551be2acd55b1006ffcb4..df8f7861f1fc6ac8564cdc2d653fa82f719b89d7 100644 (file)
@@ -30,4 +30,9 @@ public class Button {
         ButtonFuncs ui = ButtonFuncs.getInstance();
         return new ToggleBuilder(obj, ui.radiobutton_create);
     }
+
+    public static LinkButtonBuilder linkButton(UiObject obj) {
+        ButtonFuncs ui = ButtonFuncs.getInstance();
+        return new LinkButtonBuilder(obj, ui.linkbutton_create);
+    }
 }
index eb2795da6cca41cdbf70c725711e34a0ce2447ca..04a3301ee134ddecac9e4b6f35fbfac972965ed6 100644 (file)
@@ -12,6 +12,7 @@ public class ButtonFuncs {
     public MethodHandle checkbox_create;
     public MethodHandle switch_create;
     public MethodHandle radiobutton_create;
+    public MethodHandle linkbutton_create;
 
     private ButtonFuncs(Linker linker, SymbolLookup lib) {
         // void* func(void*, void*)
@@ -22,12 +23,14 @@ public class ButtonFuncs {
         MemorySegment ui_checkbox_create_addr = lib.find("ui_checkbox_create").orElseThrow();
         MemorySegment ui_switch_create_addr = lib.find("ui_switch_create").orElseThrow();
         MemorySegment ui_radiobutton_create_addr = lib.find("ui_radiobutton_create").orElseThrow();
+        MemorySegment ui_linkbutton_create_addr = lib.find("ui_linkbutton_create").orElseThrow();
 
         button_create = linker.downcallHandle(ui_button_create_addr, sigm_mm);
         togglebutton_create = linker.downcallHandle(ui_togglebutton_create_addr, sigm_mm);
         checkbox_create = linker.downcallHandle(ui_checkbox_create_addr, sigm_mm);
         switch_create = linker.downcallHandle(ui_switch_create_addr, sigm_mm);
         radiobutton_create = linker.downcallHandle(ui_radiobutton_create_addr, sigm_mm);
+        linkbutton_create = linker.downcallHandle(ui_linkbutton_create_addr, sigm_mm);
     }
 
     static ButtonFuncs getInstance() {
index 17e0af656e9b8c6b6a161772855ad595b6c04b3e..f20174dec6acf95050ecb60a7a7d6674ca6b3a49 100644 (file)
@@ -25,7 +25,7 @@ public class LinkButtonBuilder extends AbstractWidgetBuilder {
     private String varname;
     private UiString value;
     private boolean nofollow;
-    private LinkButtonType type;
+    private c type;
     private int[] states;
 
     public LinkButtonBuilder(UiObject obj, MethodHandle widgetConstructor) {
index ba0ddf48b5fb9e71fe59f8045decba2065f9d36b..1315ffa1b04cdac6e4d5188c8623e04ee805946e 100644 (file)
@@ -23,6 +23,7 @@ import de.unixwork.ui.UiString
 import de.unixwork.ui.UiWidget
 import de.unixwork.ui.WebView
 import de.unixwork.ui.Label
+import de.unixwork.ui.LinkButtonType
 import de.unixwork.ui.ListViewBuilder
 import de.unixwork.ui.UiText
 import java.awt.TextArea
@@ -855,6 +856,80 @@ class Toplevel(obj: UiObject) {
         )
     }
 
+    fun linkbutton(
+        label: String? = null,
+        uri: String? = null,
+        varname: String? = null,
+        value: UiString? = null,
+        nofollow: Boolean = false,
+        type: LinkButtonType? = null,
+        fill: Boolean = false,
+        hexpand: Boolean = false,
+        vexpand: Boolean = false,
+        hfill: Boolean = false,
+        vfill: Boolean = false,
+        overrideDefaults: Boolean = false,
+        colspan: Int = -1,
+        rowspan: Int = -1,
+        name: String? = null,
+        styleClass: String? = null,
+        onClick: EventHandler? = null
+    ): UiWidget {
+        val button = Button.linkButton(ui)
+        label?.let {
+            button.label(it)
+        }
+        uri?.let {
+            button.uri(it)
+        }
+        varname?.let {
+            button.varname(it)
+        }
+        value?.let {
+            button.value(it)
+        }
+        if(nofollow) {
+            button.nofollow(nofollow)
+        }
+        if(type != null) {
+            button.type(type)
+        }
+        if(onClick != null) {
+            button.onClick(onClick)
+        }
+        if(fill) {
+            button.fill(fill);
+        }
+        if(hexpand) {
+            button.hexpand(true)
+        }
+        if(vexpand) {
+            button.vexpand(true)
+        }
+        if(hfill) {
+            button.hfill(true)
+        }
+        if(vfill) {
+            button.vfill(true)
+        }
+        if(colspan > 0) {
+            button.colspan(colspan)
+        }
+        if(rowspan > 0) {
+            button.rowspan(rowspan)
+        }
+        if(overrideDefaults) {
+            button.overrideDefaults(true)
+        }
+        name?.let {
+            button.name(name)
+        }
+        styleClass?.let {
+            button.styleClass(it)
+        }
+        return button.create()
+    }
+
     fun <T>createListView(
         list: ListViewBuilder<T>,
         varname: String? = null,