From e895d70ecaa2cd623c66b3ab75b695c32b2f8523 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 23 Aug 2025 19:01:11 +0200 Subject: [PATCH] add linkbutton public API --- .../src/main/java/de/unixwork/ui/Button.java | 5 ++ .../main/java/de/unixwork/ui/ButtonFuncs.java | 3 + .../de/unixwork/ui/LinkButtonBuilder.java | 2 +- .../kotlin/de/unixwork/ui/kotlin/Toplevel.kt | 75 +++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/ui-java/src/main/java/de/unixwork/ui/Button.java b/ui-java/src/main/java/de/unixwork/ui/Button.java index 4c7ac9c..df8f786 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Button.java +++ b/ui-java/src/main/java/de/unixwork/ui/Button.java @@ -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); + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/ButtonFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ButtonFuncs.java index eb2795d..04a3301 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ButtonFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ButtonFuncs.java @@ -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() { diff --git a/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java b/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java index 17e0af6..f20174d 100644 --- a/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java @@ -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) { diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt index ba0ddf4..1315ffa 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt @@ -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 createListView( list: ListViewBuilder, varname: String? = null, -- 2.47.3