From 3355e33132656e870e32862513f2b39bdf266024 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Mon, 23 Feb 2026 19:00:03 +0100 Subject: [PATCH] add visibilityStates parameter to list and text widget functions --- .../main/java/de/unixwork/ui/ArgFuncs.java | 3 ++ .../java/de/unixwork/ui/ListViewBuilder.java | 11 ++++++ .../de/unixwork/ui/SourceListBuilder.java | 17 +++++++++ .../java/de/unixwork/ui/TableViewBuilder.java | 11 ++++++ .../java/de/unixwork/ui/TextAreaBuilder.java | 12 +++++++ .../java/de/unixwork/ui/TextFieldBuilder.java | 12 +++++++ .../main/kotlin/de/unixwork/ui/kotlin/Ui.kt | 35 +++++++++++++++++++ 7 files changed, 101 insertions(+) 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 1e6aff6..3cba327 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -427,6 +427,7 @@ class ArgFuncs { MethodHandle sourcelist_args_set_onbuttonclickdata; MethodHandle sourcelist_args_set_contextmenu; MethodHandle sourcelist_args_set_header_is_item; + MethodHandle sourcelist_args_set_states; MethodHandle sourcelist_args_set_visibility_states; MethodHandle sourcelist_args_free; @@ -964,6 +965,7 @@ class ArgFuncs { 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_set_header_is_item_addr = lib.find("ui_sourcelist_args_set_header_is_item").orElseThrow(); + MemorySegment ui_sourcelist_args_set_states_addr = lib.find("ui_sourcelist_args_set_states").orElseThrow(); MemorySegment ui_sourcelist_args_set_visibility_states_addr = lib.find("ui_sourcelist_args_set_visibility_states").orElseThrow(); MemorySegment ui_sourcelist_args_free_addr = lib.find("ui_sourcelist_args_free").orElseThrow(); @@ -1490,6 +1492,7 @@ class ArgFuncs { 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_set_header_is_item = linker.downcallHandle(ui_sourcelist_args_set_header_is_item_addr, sigv_mb); + sourcelist_args_set_states = linker.downcallHandle(ui_sourcelist_args_set_states_addr, sigv_mmi); sourcelist_args_set_visibility_states = linker.downcallHandle(ui_sourcelist_args_set_visibility_states_addr, sigv_mmi); sourcelist_args_free = linker.downcallHandle(ui_sourcelist_args_free_addr, sigv_m); diff --git a/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java b/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java index 1b3b372..9bb2d2a 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java @@ -34,6 +34,7 @@ public class ListViewBuilder extends AbstractWidgetBuilder { private boolean multiselection; private Menu contextMenu; private int[] states; + private int[] visibilityStates; MemorySegment menuBuilder; @@ -173,6 +174,11 @@ public class ListViewBuilder extends AbstractWidgetBuilder { return this; } + public ListViewBuilder visibilityStates(int... states) { + this.visibilityStates = states; + return this; + } + public MemorySegment createArgs(Arena arena) throws Throwable { ArgFuncs ui = ArgFuncs.getInstance(); @@ -288,6 +294,11 @@ public class ListViewBuilder extends AbstractWidgetBuilder { MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length); ui.list_args_set_states.invoke(args, st, states.length); } + if(visibilityStates != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, visibilityStates.length); + MemorySegment.copy(visibilityStates, 0, st, ValueLayout.JAVA_INT, 0, visibilityStates.length); + ui.list_args_set_visibility_states.invoke(args, st, visibilityStates.length); + } return args; } diff --git a/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java index e83d885..d6d31b7 100644 --- a/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java @@ -2,6 +2,7 @@ package de.unixwork.ui; import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; import java.lang.invoke.MethodHandle; import java.util.List; @@ -24,6 +25,7 @@ public class SourceListBuilder extends AbstractWidgetBuilder { private Menu contextMenu; private boolean headerIsItem; private int[] states; + private int[] visibilityStates; private List sublists; private UiSourceList dynamicSublists; @@ -121,6 +123,11 @@ public class SourceListBuilder extends AbstractWidgetBuilder { return this; } + public SourceListBuilder visibilityStates(int... visibilityStates) { + this.visibilityStates = visibilityStates; + return this; + } + public SourceListBuilder sublists(List sublists) { this.sublists = sublists; return this; @@ -249,6 +256,16 @@ public class SourceListBuilder extends AbstractWidgetBuilder { if (headerIsItem) { ui.sourcelist_args_set_header_is_item.invoke(args, headerIsItem); } + if(states != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length); + MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length); + ui.sourcelist_args_set_states.invoke(args, st, states.length); + } + if(visibilityStates != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, visibilityStates.length); + MemorySegment.copy(visibilityStates, 0, st, ValueLayout.JAVA_INT, 0, visibilityStates.length); + ui.sourcelist_args_set_visibility_states.invoke(args, st, visibilityStates.length); + } return args; } diff --git a/ui-java/src/main/java/de/unixwork/ui/TableViewBuilder.java b/ui-java/src/main/java/de/unixwork/ui/TableViewBuilder.java index 871c458..e54f5ba 100644 --- a/ui-java/src/main/java/de/unixwork/ui/TableViewBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/TableViewBuilder.java @@ -37,6 +37,7 @@ public class TableViewBuilder extends AbstractWidgetBuilder { private Menu contextMenu; // TODO: contextmenu private int[] states; + private int[] visibilityStates; private MemorySegment modelPtr; @@ -188,6 +189,11 @@ public class TableViewBuilder extends AbstractWidgetBuilder { return this; } + public TableViewBuilder visibilityStates(int... states) { + this.visibilityStates = states; + return this; + } + public MemorySegment createArgs(Arena arena) throws Throwable { ArgFuncs ui = ArgFuncs.getInstance(); @@ -307,6 +313,11 @@ public class TableViewBuilder extends AbstractWidgetBuilder { MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length); ui.list_args_set_states.invoke(args, st, states.length); } + if(visibilityStates != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, visibilityStates.length); + MemorySegment.copy(visibilityStates, 0, st, ValueLayout.JAVA_INT, 0, visibilityStates.length); + ui.list_args_set_visibility_states.invoke(args, st, visibilityStates.length); + } return args; } diff --git a/ui-java/src/main/java/de/unixwork/ui/TextAreaBuilder.java b/ui-java/src/main/java/de/unixwork/ui/TextAreaBuilder.java index 61c6158..43d562f 100644 --- a/ui-java/src/main/java/de/unixwork/ui/TextAreaBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/TextAreaBuilder.java @@ -28,6 +28,7 @@ public class TextAreaBuilder extends AbstractWidgetBuilder { private String varname; private EventHandler onChange; private int[] states; + private int[] visibilityStates; public TextAreaBuilder(UiObject obj, MethodHandle widgetConstructor) { this.obj = obj; @@ -129,6 +130,11 @@ public class TextAreaBuilder extends AbstractWidgetBuilder { return this; } + public TextAreaBuilder visibilityStates(int... visibilityStates) { + this.visibilityStates = visibilityStates; + return this; + } + public MemorySegment createArgs(Arena arena) throws Throwable { ArgFuncs ui = ArgFuncs.getInstance(); @@ -202,6 +208,12 @@ public class TextAreaBuilder extends AbstractWidgetBuilder { ui.textarea_args_set_states.invoke(args, st, states.length); } + if(visibilityStates != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, visibilityStates.length); + MemorySegment.copy(visibilityStates, 0, st, ValueLayout.JAVA_INT, 0, visibilityStates.length); + ui.textarea_args_set_visibility_states.invoke(args, st, visibilityStates.length); + } + return args; } } diff --git a/ui-java/src/main/java/de/unixwork/ui/TextFieldBuilder.java b/ui-java/src/main/java/de/unixwork/ui/TextFieldBuilder.java index 8f9cec4..17d303c 100644 --- a/ui-java/src/main/java/de/unixwork/ui/TextFieldBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/TextFieldBuilder.java @@ -29,6 +29,7 @@ public class TextFieldBuilder extends AbstractWidgetBuilder { private EventHandler onChange; private EventHandler onActivate; private int[] states; + private int[] visibilityStates; public TextFieldBuilder(UiObject obj, MethodHandle widgetConstructor) { this.obj = obj; @@ -135,6 +136,11 @@ public class TextFieldBuilder extends AbstractWidgetBuilder { return this; } + public TextFieldBuilder visibilityStates(int... visibilityStates) { + this.visibilityStates = visibilityStates; + return this; + } + public MemorySegment createArgs(Arena arena) throws Throwable { ArgFuncs ui = ArgFuncs.getInstance(); @@ -216,6 +222,12 @@ public class TextFieldBuilder extends AbstractWidgetBuilder { ui.textfield_args_set_states.invoke(args, st, states.length); } + if(visibilityStates != null) { + MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, visibilityStates.length); + MemorySegment.copy(visibilityStates, 0, st, ValueLayout.JAVA_INT, 0, visibilityStates.length); + ui.textfield_args_set_visibility_states.invoke(args, st, visibilityStates.length); + } + return args; } } diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Ui.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Ui.kt index a82e52c..f23cbf3 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Ui.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Ui.kt @@ -1,6 +1,7 @@ package de.unixwork.ui.kotlin import de.unixwork.ui.* +import kotlin.IntArray operator fun UiObject.invoke(block: UiObject.() -> Unit) { block() @@ -1418,6 +1419,7 @@ fun UiObject.table( onDragComplete: EventHandler? = null, onDrop: EventHandler? = null, onSave: ListSaveHandler? = null, + visibilityStates: IntArray? = null, getstyle: ListStyleProvider? = null, getvalue: ListValueConverter? = null ): UiWidget { @@ -1477,6 +1479,9 @@ fun UiObject.table( states?.let { table.states(*it) } + visibilityStates?.let { + table.visibilityStates(*it) + } contextmenu?.let { table.contextmenu(it) } @@ -1527,6 +1532,7 @@ fun UiObject.createListView( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, contextmenu: Menu? = null, onActivate: EventHandler? = null, onSelection: EventHandler? = null, @@ -1589,6 +1595,9 @@ fun UiObject.createListView( states?.let { list.states(*it) } + visibilityStates?.let { + list.visibilityStates(*it) + } contextmenu?.let { list.contextmenu(it) } @@ -1632,6 +1641,7 @@ fun UiObject.listview( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, contextmenu: Menu? = null, onActivate: EventHandler? = null, onSelection: EventHandler? = null, @@ -1661,6 +1671,7 @@ fun UiObject.listview( name = name, styleClass = styleClass, states = states, + visibilityStates = visibilityStates, contextmenu = contextmenu, onActivate = onActivate, onSelection = onSelection, @@ -1690,6 +1701,7 @@ fun UiObject.dropdown( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onActivate: EventHandler? = null, getvalue: ListValueConverter? = null ): UiWidget { @@ -1714,6 +1726,7 @@ fun UiObject.dropdown( name = name, styleClass = styleClass, states = states, + visibilityStates = visibilityStates, onActivate = onActivate, getvalue = getvalue ) @@ -1739,6 +1752,8 @@ fun UiObject.sourcelist( styleClass: String? = null, contextmenu: Menu? = null, headerIsItem: Boolean = false, + states: IntArray? = null, + visibilityStates: IntArray? = null, onActivate: EventHandler? = null, onButtonClick: EventHandler? = null, getvalue: SubListValueConverter? = null @@ -1801,6 +1816,12 @@ fun UiObject.sourcelist( if(headerIsItem) { list.headerIsItem(true) } + if(states != null) { + list.states(*states) + } + if(visibilityStates != null) { + list.visibilityStates(*visibilityStates) + } onActivate?.let { list.onActivate(it) } @@ -1832,6 +1853,7 @@ fun UiObject.textarea( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onChange: EventHandler? = null ): UiWidget { val textarea = Text.textarea(this) @@ -1889,6 +1911,9 @@ fun UiObject.textarea( states?.let { textarea.states(*it) } + visibilityStates?.let { + textarea.visibilityStates(*it) + } onChange?.let { textarea.onChange(onChange) } @@ -1915,6 +1940,7 @@ private fun UiObject.createTextField( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onChange: EventHandler? = null ): UiWidget { varname?.let { @@ -1971,6 +1997,9 @@ private fun UiObject.createTextField( states?.let { textfield.states(*it) } + visibilityStates?.let { + textfield.visibilityStates(*it) + } onChange?.let { textfield.onChange(onChange) } @@ -1996,6 +2025,7 @@ fun UiObject.textfield( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onChange: EventHandler? = null ): UiWidget { val textfield = Text.textfield(this) @@ -2019,6 +2049,7 @@ fun UiObject.textfield( name = name, styleClass = styleClass, states = states, + visibilityStates = visibilityStates, onChange = onChange ) } @@ -2042,6 +2073,7 @@ fun UiObject.passwordField( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onChange: EventHandler? = null ): UiWidget { val textfield = Text.passwordfield(this) @@ -2065,6 +2097,7 @@ fun UiObject.passwordField( name = name, styleClass = styleClass, states = states, + visibilityStates = visibilityStates, onChange = onChange ) } @@ -2088,6 +2121,7 @@ fun UiObject.framelessTextfield( name: String? = null, styleClass: String? = null, states: IntArray? = null, + visibilityStates: IntArray? = null, onChange: EventHandler? = null ): UiWidget { val textfield = Text.framelessTextfield(this) @@ -2111,6 +2145,7 @@ fun UiObject.framelessTextfield( name = name, styleClass = styleClass, states = states, + visibilityStates = visibilityStates, onChange = onChange ) } -- 2.47.3