From 56c4174f950ca8d6d10a96575808d6734e73ba43 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sun, 22 Jun 2025 19:08:01 +0200 Subject: [PATCH] add kotlin container functions --- .../java/de/unixwork/ui/ContainerBuilder.java | 2 +- .../main/java/de/unixwork/ui/ContainerUI.java | 2 +- .../test/java/de/unixwork/ui/demo/Main.java | 2 +- .../kotlin/de/unixwork/ui/kotlin/Toplevel.kt | 188 ++++++++++++++++++ .../kotlin/de/unixwork/ui/kotlin/demo/Main.kt | 16 +- 5 files changed, 205 insertions(+), 5 deletions(-) diff --git a/ui-java/src/main/java/de/unixwork/ui/ContainerBuilder.java b/ui-java/src/main/java/de/unixwork/ui/ContainerBuilder.java index 495020b..7e763ab 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ContainerBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/ContainerBuilder.java @@ -191,7 +191,7 @@ public class ContainerBuilder extends AbstractWidgetBuilder{ public UiWidget create(ContainerUI ui) { Container container = createContainer(); - ui.callback(obj); + ui.callback(); container.close(); return container.getWidget(); } diff --git a/ui-java/src/main/java/de/unixwork/ui/ContainerUI.java b/ui-java/src/main/java/de/unixwork/ui/ContainerUI.java index 281f0d3..2267e74 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ContainerUI.java +++ b/ui-java/src/main/java/de/unixwork/ui/ContainerUI.java @@ -2,5 +2,5 @@ package de.unixwork.ui; @FunctionalInterface public interface ContainerUI { - public void callback(UiObject obj); + public void callback(); } diff --git a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java index 5caaf76..cacfb33 100644 --- a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java +++ b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java @@ -18,7 +18,7 @@ public class Main implements Application{ Button.button(window).label("B1").create(); Button.button(window).label("B2").create(); Button.button(window).label("B3").create(); - Container.vbox(window).create(obj -> { + Container.vbox(window).create(() -> { Button.button(window).label("Test").create(); }); } diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt index 3591d70..c412d69 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt @@ -2,6 +2,9 @@ package de.unixwork.ui.kotlin import de.unixwork.ui.Button import de.unixwork.ui.ButtonBuilder +import de.unixwork.ui.Container +import de.unixwork.ui.ContainerBuilder +import de.unixwork.ui.ContainerUI import de.unixwork.ui.EventHandler import de.unixwork.ui.EventWrapper.eventHandler import de.unixwork.ui.ToggleBuilder @@ -21,6 +24,191 @@ class Toplevel(obj: UiObject) { block() } + private fun createContainer( + builder: ContainerBuilder, + fill: Boolean = false, + hexpand: Boolean = false, + vexpand: Boolean = false, + hfill: Boolean = false, + vfill: Boolean = false, + overrideDefaults: Boolean = false, + defhexpand: Boolean = false, + defvexpand: Boolean = false, + defhfill: Boolean = false, + defvfill: Boolean = false, + colspan: Int = -1, + rowspan: Int = -1, + name: String? = null, + styleClass: String? = null, + margin: Int = -1, + spacing: Int = -1, + columnspacing: Int = -1, + rowspacing: Int = -1, + ui: ContainerUI? = null + ): UiWidget { + val container = Container.vbox(obj) + if(hexpand) { + container.hexpand(true) + } + if(vexpand) { + container.vexpand(true) + } + if(hfill) { + container.hfill(true) + } + if(vfill) { + container.vfill(true) + } + if(overrideDefaults) { + container.overrideDefaults(true) + } + if(defhexpand) { + container.defaultHExpand(true) + } + if(defvexpand) { + container.defaultVExpand(true) + } + if(defhfill) { + container.defaultHfill(true) + } + if(defvfill) { + container.defaultVfill(true) + } + if(colspan > 0) { + container.colspan(colspan) + } + if(rowspan > 0) { + container.rowspan(rowspan) + } + if(margin > 0) { + container.margin(margin) + } + if(spacing > 0) { + container.spacing(spacing) + } + if(columnspacing > 0) { + container.columnspacing(columnspacing) + } + if(rowspacing > 0) { + container.rowspacing(rowspacing) + } + + return container.create(ui) + } + + fun hbox( + 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, + margin: Int = -1, + spacing: Int = -1, + ui: ContainerUI? = null + ): UiWidget { + return createContainer( + builder = Container.hbox(obj), + fill = fill, + hexpand = hexpand, + vexpand = vexpand, + hfill = hfill, + vfill = vfill, + overrideDefaults = overrideDefaults, + colspan = colspan, + rowspan = rowspan, + name = name, + styleClass = styleClass, + margin = margin, + spacing = spacing, + ui = ui + ) + } + + + fun vbox( + 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, + margin: Int = -1, + spacing: Int = -1, + ui: ContainerUI? = null + ): UiWidget { + return createContainer( + builder = Container.vbox(obj), + fill = fill, + hexpand = hexpand, + vexpand = vexpand, + hfill = hfill, + vfill = vfill, + overrideDefaults = overrideDefaults, + colspan = colspan, + rowspan = rowspan, + name = name, + styleClass = styleClass, + margin = margin, + spacing = spacing, + ui = ui + ) + } + + + fun grid( + fill: Boolean = false, + hexpand: Boolean = false, + vexpand: Boolean = false, + hfill: Boolean = false, + vfill: Boolean = false, + overrideDefaults: Boolean = false, + defhexpand: Boolean = false, + defvexpand: Boolean = false, + defhfill: Boolean = false, + defvfill: Boolean = false, + colspan: Int = -1, + rowspan: Int = -1, + name: String? = null, + styleClass: String? = null, + margin: Int = -1, + spacing: Int = -1, + columnspacing: Int = -1, + rowspacing: Int = -1, + ui: ContainerUI? = null + ): UiWidget { + return createContainer( + builder = Container.grid(obj), + fill = fill, + hexpand = hexpand, + vexpand = vexpand, + hfill = hfill, + vfill = vfill, + overrideDefaults = overrideDefaults, + defhexpand = defhexpand, + defhfill = defhfill, + defvexpand = defvexpand, + defvfill = defhfill, + colspan = colspan, + rowspan = rowspan, + name = name, + styleClass = styleClass, + margin = margin, + spacing = spacing, + columnspacing = columnspacing, + rowspacing = rowspacing, + ui = ui + ) + } + fun button( label: String? = null, stockId: String? = null, diff --git a/ui-kotlin/src/test/kotlin/de/unixwork/ui/kotlin/demo/Main.kt b/ui-kotlin/src/test/kotlin/de/unixwork/ui/kotlin/demo/Main.kt index f725e3b..2e61fc7 100644 --- a/ui-kotlin/src/test/kotlin/de/unixwork/ui/kotlin/demo/Main.kt +++ b/ui-kotlin/src/test/kotlin/de/unixwork/ui/kotlin/demo/Main.kt @@ -10,8 +10,20 @@ import de.unixwork.ui.kotlin.window class Main : Application { override fun startup() { val window = window("Test Window") { - button(label = "Hello World") { - println("Button Clicked") + hbox { + vbox { + button(label = "Hello World") { + println("Button Clicked") + } + button(label = "Hello World") { + println("Button Clicked") + } + } + vbox { + button(label = "Hello World") { + println("Button Clicked") + } + } } } -- 2.47.3