]> uap-core.de Git - rssreader.git/commitdiff
implement widget states parameters
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 23 Sep 2025 15:27:46 +0000 (17:27 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 23 Sep 2025 15:27:46 +0000 (17:27 +0200)
12 files changed:
pom.xml
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/ButtonBuilder.java
ui-java/src/main/java/de/unixwork/ui/LinkButtonBuilder.java
ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java
ui-java/src/main/java/de/unixwork/ui/SpinBoxBuilder.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-java/src/main/java/de/unixwork/ui/ToggleBuilder.java
ui-java/src/main/java/de/unixwork/ui/WebViewBuilder.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

diff --git a/pom.xml b/pom.xml
index c99dc626494c0be160b503be8da2e855c56fd957..972ebcb936859a0c7849eb9b8dc50bef17d40eb4 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.compiler.release>24</maven.compiler.release>
+    <maven.compiler.release>25</maven.compiler.release>
   </properties>
   
   <modules>
index 145201d51429cb16fa0d7ebf8a320bddc01b59c2..cdc010b337212dbd3acb764f0075101d3fb9e6d3 100644 (file)
@@ -437,6 +437,7 @@ class ArgFuncs {
         FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS);
         FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
         FunctionDescriptor sigv_mml = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG);
+        FunctionDescriptor sigv_mmi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
         FunctionDescriptor sigv_mb = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_BOOLEAN);
         FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
         FunctionDescriptor sigv_md = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE);
@@ -931,7 +932,7 @@ class ArgFuncs {
         toolbar_item_args_set_label = linker.downcallHandle(ui_toolbar_item_args_set_label_addr, sigv_mm);
         toolbar_item_args_set_onclick = linker.downcallHandle(ui_toolbar_item_args_set_onclick_addr, sigv_mm);
         toolbar_item_args_set_onclickdata = linker.downcallHandle(ui_toolbar_item_args_set_onclickdata_addr, sigv_mm);
-        toolbar_item_args_set_groups = linker.downcallHandle(ui_toolbar_item_args_set_groups_addr, sigv_mm);
+        toolbar_item_args_set_groups = linker.downcallHandle(ui_toolbar_item_args_set_groups_addr, sigv_mmi);
         toolbar_item_args_free = linker.downcallHandle(ui_toolbar_item_args_free_addr, sigv_m);
 
         toolbar_toggleitem_args_new = linker.downcallHandle(ui_toolbar_toggleitem_args_new_addr, sigm);
@@ -941,7 +942,7 @@ class ArgFuncs {
         toolbar_toggleitem_args_set_varname = linker.downcallHandle(ui_toolbar_toggleitem_args_set_varname_addr, sigv_mm);
         toolbar_toggleitem_args_set_onchange = linker.downcallHandle(ui_toolbar_toggleitem_args_set_onchange_addr, sigv_mm);
         toolbar_toggleitem_args_set_onchangedata = linker.downcallHandle(ui_toolbar_toggleitem_args_set_onchangedata_addr, sigv_mm);
-        toolbar_toggleitem_args_set_groups = linker.downcallHandle(ui_toolbar_toggleitem_args_set_groups_addr, sigv_mm);
+        toolbar_toggleitem_args_set_groups = linker.downcallHandle(ui_toolbar_toggleitem_args_set_groups_addr, sigv_mmi);
         toolbar_toggleitem_args_free = linker.downcallHandle(ui_toolbar_toggleitem_args_free_addr, sigv_m);
 
         toolbar_menu_args_new = linker.downcallHandle(ui_toolbar_menu_args_new_addr, sigm);
@@ -1109,7 +1110,7 @@ class ArgFuncs {
         button_args_set_labeltype = linker.downcallHandle(ui_button_args_set_labeltype_addr, sigv_mi);
         button_args_set_onclick = linker.downcallHandle(ui_button_args_set_onclick_addr, sigv_mm);
         button_args_set_onclickdata = linker.downcallHandle(ui_button_args_set_onclickdata_addr, sigv_mm);
-        button_args_set_groups = linker.downcallHandle(ui_button_args_set_groups_addr, sigv_mm);
+        button_args_set_groups = linker.downcallHandle(ui_button_args_set_groups_addr, sigv_mmi);
         button_args_free = linker.downcallHandle(ui_button_args_free_addr, sigv_m);
 
         toggle_args_new = linker.downcallHandle(ui_toggle_args_new_addr, sigm);
@@ -1132,7 +1133,7 @@ class ArgFuncs {
         toggle_args_set_onchange = linker.downcallHandle(ui_toggle_args_set_onchange_addr, sigv_mm);
         toggle_args_set_onchangedata = linker.downcallHandle(ui_toggle_args_set_onchangedata_addr, sigv_mm);
         toggle_args_set_enablegroup = linker.downcallHandle(ui_toggle_args_set_enablegroup, sigv_mi);
-        toggle_args_set_groups = linker.downcallHandle(ui_toggle_args_set_groups_addr, sigv_mm);
+        toggle_args_set_groups = linker.downcallHandle(ui_toggle_args_set_groups_addr, sigv_mmi);
         toggle_args_free = linker.downcallHandle(ui_toggle_args_free_addr, sigv_m);
 
         linkbutton_args_new = linker.downcallHandle(ui_linkbutton_args_new_addr, sigm);
@@ -1154,7 +1155,7 @@ class ArgFuncs {
         linkbutton_args_set_onclickdata = linker.downcallHandle(ui_linkbutton_args_set_onclickdata_addr, sigv_mm);
         linkbutton_args_set_nofollow = linker.downcallHandle(ui_linkbutton_args_set_nofollow_addr, sigv_mb);
         linkbutton_args_set_type = linker.downcallHandle(ui_linkbutton_args_set_type_addr, sigv_mi);
-        linkbutton_args_set_groups = linker.downcallHandle(ui_linkbutton_args_set_groups_addr, sigv_mm);
+        linkbutton_args_set_groups = linker.downcallHandle(ui_linkbutton_args_set_groups_addr, sigv_mmi);
         linkbutton_args_free = linker.downcallHandle(ui_linkbutton_args_free_addr, sigv_m);
 
         list_args_new = linker.downcallHandle(ui_list_args_new_addr, sigm);
@@ -1189,7 +1190,7 @@ class ArgFuncs {
         list_args_set_ondropdata = linker.downcallHandle(ui_list_args_set_ondropdata_addr, sigv_mm);
         list_args_set_multiselection = linker.downcallHandle(ui_list_args_set_multiselection_addr, sigv_mb);
         list_args_set_contextmenu = linker.downcallHandle(ui_list_args_set_contextmenu_addr, sigv_mm);
-        list_args_set_groups = linker.downcallHandle(ui_list_args_set_groups_addr, sigv_mm);
+        list_args_set_groups = linker.downcallHandle(ui_list_args_set_groups_addr, sigv_mmi);
         list_args_free = linker.downcallHandle(ui_list_args_free_addr, sigv_m);
 
         sourcelist_args_new = linker.downcallHandle(ui_sourcelist_args_new_addr, sigm);
@@ -1230,7 +1231,7 @@ class ArgFuncs {
         textarea_args_set_value = linker.downcallHandle(ui_textarea_args_set_value_addr, sigv_mm);
         textarea_args_set_onchange = linker.downcallHandle(ui_textarea_args_set_onchange_addr, sigv_mm);
         textarea_args_set_onchangedata = linker.downcallHandle(ui_textarea_args_set_onchangedata_addr, sigv_mm);
-        textarea_args_set_groups = linker.downcallHandle(ui_textarea_args_set_groups_addr, sigv_mm);
+        textarea_args_set_groups = linker.downcallHandle(ui_textarea_args_set_groups_addr, sigv_mmi);
         textarea_args_free = linker.downcallHandle(ui_textarea_args_free_addr, sigv_m);
 
         textfield_args_new = linker.downcallHandle(ui_textfield_args_new_addr, sigm);
@@ -1250,7 +1251,7 @@ class ArgFuncs {
         textfield_args_set_onchangedata = linker.downcallHandle(ui_textfield_args_set_onchangedata_addr, sigv_mm);
         textfield_args_set_onactivate = linker.downcallHandle(ui_textfield_args_set_onactivate_addr, sigv_mm);
         textfield_args_set_onactivatedata = linker.downcallHandle(ui_textfield_args_set_onactivatedata_addr, sigv_mm);
-        textfield_args_set_groups = linker.downcallHandle(ui_textfield_args_set_groups_addr, sigv_mm);
+        textfield_args_set_groups = linker.downcallHandle(ui_textfield_args_set_groups_addr, sigv_mmi);
         textfield_args_free = linker.downcallHandle(ui_textfield_args_free_addr, sigv_m);
 
         spinbox_args_new = linker.downcallHandle(ui_spinbox_args_new_addr, sigm);
@@ -1274,7 +1275,7 @@ class ArgFuncs {
         spinbox_args_set_intvalue = linker.downcallHandle(ui_spinbox_args_set_intvalue_addr, sigv_mm);
         spinbox_args_set_doublevalue = linker.downcallHandle(ui_spinbox_args_set_doublevalue_addr, sigv_mm);
         spinbox_args_set_rangevalue = linker.downcallHandle(ui_spinbox_args_set_rangevalue_addr, sigv_mm);
-        spinbox_args_set_groups = linker.downcallHandle(ui_spinbox_args_set_groups_addr, sigv_mm);
+        spinbox_args_set_groups = linker.downcallHandle(ui_spinbox_args_set_groups_addr, sigv_mmi);
         spinbox_args_free = linker.downcallHandle(ui_spinbox_args_free_addr, sigv_m);
 
         webview_args_new = linker.downcallHandle(ui_webview_args_new_addr, sigm);
@@ -1290,7 +1291,7 @@ class ArgFuncs {
         webview_args_set_style_class = linker.downcallHandle(ui_webview_args_set_style_class_addr, sigv_mm);
         webview_args_set_varname = linker.downcallHandle(ui_webview_args_set_varname_addr, sigv_mm);
         webview_args_set_value = linker.downcallHandle(ui_webview_args_set_value_addr, sigv_mm);
-        webview_args_set_groups = linker.downcallHandle(ui_webview_args_set_groups_addr, sigv_mm);
+        webview_args_set_groups = linker.downcallHandle(ui_webview_args_set_groups_addr, sigv_mmi);
         webview_args_free = linker.downcallHandle(ui_webview_args_free_addr, sigv_m);
     }
 
index 32d669c24681ef33283d605ba2d30daabf1bdac1..8406beef05c21bc588f12a48a7b8b5a424e29d19 100644 (file)
@@ -160,6 +160,11 @@ public class ButtonBuilder extends AbstractWidgetBuilder {
             MemorySegment cstr = arena.allocateFrom(icon);
             ui.button_args_set_icon.invoke(args, cstr);
         }
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.button_args_set_groups.invoke(args, st);
+        }
         ui.button_args_set_labeltype.invoke(args, labelType);
 
         if(onClick != null) {
index 17e0af656e9b8c6b6a161772855ad595b6c04b3e..ada6d8942e769ff6282d8bcfef855b20a60f1741 100644 (file)
@@ -198,6 +198,12 @@ public class LinkButtonBuilder extends AbstractWidgetBuilder {
             ui.linkbutton_args_set_onclickdata.invoke(args, event.getUserData());
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.linkbutton_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 }
index 501b945566c892bc6584402070d6e68b7c560676..cd2068b668b3133abd6dcff8d079d90ec70c2a0b 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;
 
 public class ListViewBuilder<T> extends AbstractWidgetBuilder {
@@ -28,7 +29,6 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
     private EventHandler onDrop;
     private boolean multiselection;
     private Menu contextMenu;
-    // TODO: contextmenu
     private int[] states;
 
     MemorySegment menuBuilder;
@@ -240,6 +240,12 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
             ui.list_args_set_contextmenu.invoke(args, menuBuilder);
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.list_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 
index b2e89a34e128e3ef6660b6ecf22eb7c9d6ad3f46..b014033e602f9f2386192dada0dcc0b4438b8e48 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;
 
 public class SpinBoxBuilder extends AbstractWidgetBuilder{
@@ -201,6 +202,12 @@ public class SpinBoxBuilder extends AbstractWidgetBuilder{
             ui.spinbox_args_set_rangevalue.invoke(args, rangeValue.valuePtr);
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.spinbox_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 }
index 43684fdb299c7d113a007c4c6273fb3a8b7067cf..ecbf9b2b08b74c7e02fbc5004750c5590188c22d 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;
 
 public class TableViewBuilder<T> extends AbstractWidgetBuilder {
@@ -246,6 +247,12 @@ public class TableViewBuilder<T> extends AbstractWidgetBuilder {
             ui.list_args_set_contextmenu.invoke(args, menuBuilder);
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.list_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 
index bc8dd4343a195f6142ad318f310b4de84cd57362..d701f81aa5991a806e3dd9d4c0ae2805c833c812 100644 (file)
@@ -152,6 +152,12 @@ public class TextAreaBuilder extends AbstractWidgetBuilder {
             ui.textarea_args_set_value.invoke(args, value.valuePtr);
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.textarea_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 }
index 7e46ef99221d8bbfda714fd42b3423f2d71a6cb7..3b9184dc2be86a74daa1f00205a80a999eb3db58 100644 (file)
@@ -166,6 +166,12 @@ public class TextFieldBuilder extends AbstractWidgetBuilder {
             ui.textfield_args_set_onactivatedata.invoke(args, event.getUserData());
         }
 
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.textfield_args_set_groups.invoke(args, st);
+        }
+
         return args;
     }
 }
index 59c482d39636933308d613529406de2421e1dedf..95a18478b74cedf8ed80756ad0a720d8f6b8f992 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;
 
 public class ToggleBuilder extends AbstractWidgetBuilder {
@@ -177,6 +178,11 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
         if(value != null) {
             ui.toggle_args_set_value.invoke(args, value.valuePtr);
         }
+        if(states != null) {
+            MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
+            MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
+            ui.toggle_args_set_groups.invoke(args, st);
+        }
         
         if(onChange != null) {
             // TODO
index fe32884adfdd8558bc971a7440d36a0f99553283..8267025442801ff7f664d8d7817e35d720e6b624 100644 (file)
@@ -21,7 +21,6 @@ public class WebViewBuilder extends AbstractWidgetBuilder {
     private String styleClass;
     private WebView value;
     private String varname;
-    private int[] states;
 
     public WebViewBuilder(UiObject obj) {
         this.obj = obj;
@@ -89,11 +88,6 @@ public class WebViewBuilder extends AbstractWidgetBuilder {
         return this;
     }
 
-    public WebViewBuilder states(int... states) {
-        this.states = states;
-        return this;
-    }
-
     public MemorySegment createArgs(Arena arena) throws Throwable {
         ArgFuncs ui = ArgFuncs.getInstance();
 
index 9ab89ba510eee293e0c92d3498bb3056533f3c98..2e54e9187b9848f70e9b7e738d3ba7a04f2b8016 100644 (file)
@@ -683,6 +683,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onClick: EventHandler? = null
     ): UiWidget {
         val button = Button.button(ui)
@@ -728,6 +729,9 @@ class Toplevel(obj: UiObject) {
         stockId?.let {
             button.stockId(it)
         }
+        states?.let {
+            button.states(*it)
+        }
         onClick?.let {
             button.onClick(onClick)
         }
@@ -751,6 +755,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         label?.let {
@@ -795,6 +800,9 @@ class Toplevel(obj: UiObject) {
         stockId?.let {
             button.stockId(it)
         }
+        states?.let {
+            button.states(*it)
+        }
         onChange?.let {
             button.onChange(onChange)
         }
@@ -817,6 +825,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         return createToggleButton(
@@ -836,6 +845,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -856,6 +866,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         return createToggleButton(
@@ -875,6 +886,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -895,6 +907,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         return createToggleButton(
@@ -914,6 +927,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -934,6 +948,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         return createToggleButton(
@@ -953,6 +968,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -974,6 +990,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onClick: EventHandler? = null
     ): UiWidget {
         val button = Button.linkButton(ui)
@@ -1028,6 +1045,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             button.styleClass(it)
         }
+        states?.let {
+            button.states(*it)
+        }
         return button.create()
     }
 
@@ -1045,6 +1065,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         contextmenu: Menu? = null,
         onActivate: EventHandler? = null,
         onSelection: EventHandler? = null,
@@ -1089,6 +1110,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             table.styleClass(it)
         }
+        states?.let {
+            table.states(*it)
+        }
         contextmenu?.let {
             table.contextmenu(it)
         }
@@ -1121,6 +1145,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         contextmenu: Menu? = null,
         onActivate: EventHandler? = null,
         onSelection: EventHandler? = null,
@@ -1162,6 +1187,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             list.styleClass(it)
         }
+        states?.let {
+            list.states(*it)
+        }
         contextmenu?.let {
             list.contextmenu(it)
         }
@@ -1190,6 +1218,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         contextmenu: Menu? = null,
         onActivate: EventHandler? = null,
         onSelection: EventHandler? = null,
@@ -1210,6 +1239,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             contextmenu = contextmenu,
             onActivate = onActivate,
             onSelection = onSelection,
@@ -1230,6 +1260,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onActivate: EventHandler? = null,
         getvalue: ListValueConverter<T>? = null
     ): UiWidget {
@@ -1248,6 +1279,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onActivate = onActivate,
             getvalue = getvalue
         )
@@ -1336,6 +1368,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         val textarea = Text.textarea(ui)
@@ -1375,6 +1408,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             textarea.styleClass(it)
         }
+        states?.let {
+            textarea.states(*it)
+        }
         onChange?.let {
             textarea.onChange(onChange)
         }
@@ -1395,6 +1431,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         varname?.let {
@@ -1433,6 +1470,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             textfield.styleClass(it)
         }
+        states?.let {
+            textfield.states(*it)
+        }
         onChange?.let {
             textfield.onChange(onChange)
         }
@@ -1452,6 +1492,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         val textfield = Text.textfield(ui)
@@ -1469,6 +1510,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -1486,6 +1528,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         val textfield = Text.passwordfield(ui)
@@ -1503,6 +1546,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -1520,6 +1564,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         val textfield = Text.framelessTextfield(ui)
@@ -1537,6 +1582,7 @@ class Toplevel(obj: UiObject) {
             rowspan = rowspan,
             name = name,
             styleClass = styleClass,
+            states = states,
             onChange = onChange
         )
     }
@@ -1560,6 +1606,7 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        states: IntArray? = null,
         onChange: EventHandler? = null
     ): UiWidget {
         val spinbox = Entry.spinbox(ui)
@@ -1617,6 +1664,9 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             spinbox.styleClass(it)
         }
+        states?.let {
+            spinbox.states(*it)
+        }
         onChange?.let {
             spinbox.onChange(onChange)
         }