]> uap-core.de Git - rssreader.git/commitdiff
add visibilityStates parameter to list and text widget functions
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 23 Feb 2026 18:00:03 +0000 (19:00 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 23 Feb 2026 18:00:03 +0000 (19:00 +0100)
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java
ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java
ui-java/src/main/java/de/unixwork/ui/TableViewBuilder.java
ui-java/src/main/java/de/unixwork/ui/TextAreaBuilder.java
ui-java/src/main/java/de/unixwork/ui/TextFieldBuilder.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Ui.kt

index 1e6aff6242b9eb5915eebf69eaf44771ef4cf282..3cba327a48fd90134b42b5083457d22612a60d4d 100644 (file)
@@ -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);
 
index 1b3b37213f860aca79cbd2c934c2ac249a967679..9bb2d2a89e1c2bf0b4d5eee5a8c31af62040926a 100644 (file)
@@ -34,6 +34,7 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
     private boolean multiselection;
     private Menu contextMenu;
     private int[] states;
+    private int[] visibilityStates;
 
     MemorySegment menuBuilder;
 
@@ -173,6 +174,11 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
         return this;
     }
 
+    public ListViewBuilder<T> 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<T> 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;
     }
index e83d88538c987e184c2bb37c3251eefae9813bf4..d6d31b7f5c5eb57fb66ed011fb6d6b21ac9b1972 100644 (file)
@@ -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<T> extends AbstractWidgetBuilder {
     private Menu contextMenu;
     private boolean headerIsItem;
     private int[] states;
+    private int[] visibilityStates;
 
     private List<SubList> sublists;
     private UiSourceList dynamicSublists;
@@ -121,6 +123,11 @@ public class SourceListBuilder<T> extends AbstractWidgetBuilder {
         return this;
     }
 
+    public SourceListBuilder<T> visibilityStates(int... visibilityStates) {
+        this.visibilityStates = visibilityStates;
+        return this;
+    }
+
     public SourceListBuilder<T> sublists(List<SubList> sublists) {
         this.sublists = sublists;
         return this;
@@ -249,6 +256,16 @@ public class SourceListBuilder<T> 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;
     }
index 871c458145d7692f01bae5cdefbcacaa05f9bb7d..e54f5ba12b10e925ad87fbbc5b79de3f985ed86a 100644 (file)
@@ -37,6 +37,7 @@ public class TableViewBuilder<T> extends AbstractWidgetBuilder {
     private Menu contextMenu;
     // TODO: contextmenu
     private int[] states;
+    private int[] visibilityStates;
 
     private MemorySegment modelPtr;
 
@@ -188,6 +189,11 @@ public class TableViewBuilder<T> extends AbstractWidgetBuilder {
         return this;
     }
 
+    public TableViewBuilder<T> 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<T> 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;
     }
index 61c61587c11d1c8e5c1d9d6a78c89b6b65fc5ead..43d562f515768788d454dd9761582538342d3c0f 100644 (file)
@@ -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;
     }
 }
index 8f9cec44625010f38faea66e2ce29f57d919c13f..17d303ce488297c40872ee8eec959c6999da1acb 100644 (file)
@@ -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;
     }
 }
index a82e52c47f62bdeb7f41fd1a68ca26a871a7d781..f23cbf392a70202e2cefbca88da0cdaa7729c217 100644 (file)
@@ -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 <T>UiObject.table(
     onDragComplete: EventHandler? = null,
     onDrop: EventHandler? = null,
     onSave: ListSaveHandler? = null,
+    visibilityStates: IntArray? = null,
     getstyle: ListStyleProvider<T>? = null,
     getvalue: ListValueConverter<T>? = null
 ): UiWidget {
@@ -1477,6 +1479,9 @@ fun <T>UiObject.table(
     states?.let {
         table.states(*it)
     }
+    visibilityStates?.let {
+        table.visibilityStates(*it)
+    }
     contextmenu?.let {
         table.contextmenu(it)
     }
@@ -1527,6 +1532,7 @@ fun <T>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 <T>UiObject.createListView(
     states?.let {
         list.states(*it)
     }
+    visibilityStates?.let {
+        list.visibilityStates(*it)
+    }
     contextmenu?.let {
         list.contextmenu(it)
     }
@@ -1632,6 +1641,7 @@ fun <T>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 <T>UiObject.listview(
         name = name,
         styleClass = styleClass,
         states = states,
+        visibilityStates = visibilityStates,
         contextmenu = contextmenu,
         onActivate = onActivate,
         onSelection = onSelection,
@@ -1690,6 +1701,7 @@ fun <T>UiObject.dropdown(
     name: String? = null,
     styleClass: String? = null,
     states: IntArray? = null,
+    visibilityStates: IntArray? = null,
     onActivate: EventHandler? = null,
     getvalue: ListValueConverter<T>? = null
 ): UiWidget {
@@ -1714,6 +1726,7 @@ fun <T>UiObject.dropdown(
         name = name,
         styleClass = styleClass,
         states = states,
+        visibilityStates = visibilityStates,
         onActivate = onActivate,
         getvalue = getvalue
     )
@@ -1739,6 +1752,8 @@ fun <T>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<T>? = null
@@ -1801,6 +1816,12 @@ fun <T>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
     )
 }