]> uap-core.de Git - rssreader.git/commitdiff
add kotlin API for sourcelist and text widgets
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 13 Jul 2025 17:57:27 +0000 (19:57 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 13 Jul 2025 17:57:27 +0000 (19:57 +0200)
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index c9e28623a937e13c46af1f776a0770c8ff134138..19f27a8a531d33c23b5c012b3fe60bbb61f25027 100644 (file)
@@ -9,11 +9,17 @@ import de.unixwork.ui.EventHandler
 import de.unixwork.ui.EventWrapper.eventHandler
 import de.unixwork.ui.ListValueConverter
 import de.unixwork.ui.ListView
+import de.unixwork.ui.SubListValueConverter
+import de.unixwork.ui.Text
+import de.unixwork.ui.TextFieldBuilder
 import de.unixwork.ui.ToggleBuilder
 import de.unixwork.ui.UiInteger
 import de.unixwork.ui.UiList
 import de.unixwork.ui.UiObject
+import de.unixwork.ui.UiSourceList
+import de.unixwork.ui.UiString
 import de.unixwork.ui.UiWidget
+import java.awt.TextField
 import java.lang.foreign.MemorySegment
 
 class Toplevel(obj: UiObject) {
@@ -739,4 +745,222 @@ class Toplevel(obj: UiObject) {
         }
         return list.create()
     }
+
+    fun <T>sourcelist(
+        varname: String? = null,
+        sourceList: UiSourceList? = 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,
+        getvalue: SubListValueConverter<T>? = null
+    ): UiWidget {
+        val list = ListView.sourcelist<T>(obj)
+        varname?.let {
+            list.varname(varname)
+        }
+        sourceList?.let {
+            list.dynamicSublists(sourceList)
+        }
+        if(fill) {
+            list.fill(true)
+        }
+        if(hexpand) {
+            list.hexpand(true)
+        }
+        if(vexpand) {
+            list.vexpand(true)
+        }
+        if(hfill) {
+            list.hfill(true)
+        }
+        if(vfill) {
+            list.vfill(true)
+        }
+        if(overrideDefaults) {
+            list.overrideDefaults(true)
+        }
+        if(colspan > 0) {
+            list.colspan(colspan)
+        }
+        if(rowspan > 0) {
+            list.rowspan(rowspan)
+        }
+        name?.let {
+            list.name(it)
+        }
+        styleClass?.let {
+            list.styleClass(it)
+        }
+        getvalue?.let {
+            list.getvalue(it)
+        }
+        return list.create()
+    }
+
+    private fun createTextField(
+        textfield: TextFieldBuilder,
+        varname: String? = null,
+        value: UiString? = 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,
+        onChange: EventHandler? = null
+    ): UiWidget {
+        varname?.let {
+            textfield.varname(it)
+        }
+        value?.let {
+            textfield.value(it)
+        }
+        if(fill) {
+            textfield.fill(fill);
+        }
+        if(hexpand) {
+            textfield.hexpand(true)
+        }
+        if(vexpand) {
+            textfield.vexpand(true)
+        }
+        if(hfill) {
+            textfield.hfill(true)
+        }
+        if(vfill) {
+            textfield.vfill(true)
+        }
+        if(colspan > 0) {
+            textfield.colspan(colspan)
+        }
+        if(rowspan > 0) {
+            textfield.rowspan(rowspan)
+        }
+        if(overrideDefaults) {
+            textfield.overrideDefaults(true)
+        }
+        name?.let {
+            textfield.name(it)
+        }
+        styleClass?.let {
+            textfield.styleClass(it)
+        }
+        onChange?.let {
+            textfield.onChange(onChange)
+        }
+        return textfield.create()
+    }
+
+    fun textfield(
+        varname: String? = null,
+        value: UiString? = 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,
+        onChange: EventHandler? = null
+    ): UiWidget {
+        val textfield = Text.textfield(obj)
+        return createTextField(
+            textfield = textfield,
+            varname = varname,
+            value = value,
+            fill = fill,
+            hexpand = hexpand,
+            vexpand = vexpand,
+            hfill = hfill,
+            vfill = vfill,
+            overrideDefaults = overrideDefaults,
+            colspan = colspan,
+            rowspan = rowspan,
+            name = name,
+            styleClass = styleClass,
+            onChange = onChange
+        )
+    }
+
+    fun passwordField(
+        varname: String? = null,
+        value: UiString? = 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,
+        onChange: EventHandler? = null
+    ): UiWidget {
+        val textfield = Text.passwordfield(obj)
+        return createTextField(
+            textfield = textfield,
+            varname = varname,
+            value = value,
+            fill = fill,
+            hexpand = hexpand,
+            vexpand = vexpand,
+            hfill = hfill,
+            vfill = vfill,
+            overrideDefaults = overrideDefaults,
+            colspan = colspan,
+            rowspan = rowspan,
+            name = name,
+            styleClass = styleClass,
+            onChange = onChange
+        )
+    }
+
+    fun framelessTextfield(
+        varname: String? = null,
+        value: UiString? = 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,
+        onChange: EventHandler? = null
+    ): UiWidget {
+        val textfield = Text.framelessTextfield(obj)
+        return createTextField(
+            textfield = textfield,
+            varname = varname,
+            value = value,
+            fill = fill,
+            hexpand = hexpand,
+            vexpand = vexpand,
+            hfill = hfill,
+            vfill = vfill,
+            overrideDefaults = overrideDefaults,
+            colspan = colspan,
+            rowspan = rowspan,
+            name = name,
+            styleClass = styleClass,
+            onChange = onChange
+        )
+    }
 }
\ No newline at end of file