From: Olaf Wintermann Date: Fri, 22 Aug 2025 17:57:01 +0000 (+0200) Subject: add linkbutton X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=57c9ec746fa64bf6becf3dee0cfd881a59461cbc;p=rssreader.git add linkbutton --- 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 7a31b64..b59db79 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -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 index 0000000..17e0af6 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java @@ -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 index 0000000..656d0b4 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/LinkButtonType.java @@ -0,0 +1,6 @@ +package de.unixwork.ui; + +public enum LinkButtonType { + LINK, + BUTTON +}