From fcaa33e5a8b0d78699cb159322a584aebe09ebd3 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Mon, 23 Jun 2025 21:30:38 +0200 Subject: [PATCH] add grid newline/row --- .../main/java/de/unixwork/ui/Container.java | 9 +++++++ .../java/de/unixwork/ui/ContainerFuncs.java | 6 +++++ .../kotlin/de/unixwork/ui/kotlin/Toplevel.kt | 7 +++++ .../kotlin/de/unixwork/ui/kotlin/demo/Main.kt | 26 ++++++++++++++----- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/ui-java/src/main/java/de/unixwork/ui/Container.java b/ui-java/src/main/java/de/unixwork/ui/Container.java index 7d6f66d..e655b38 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Container.java +++ b/ui-java/src/main/java/de/unixwork/ui/Container.java @@ -42,4 +42,13 @@ public class Container implements AutoCloseable { ContainerFuncs ui = ContainerFuncs.getInstance(); return new ContainerBuilder(obj, ui.grid_create); } + + public static void newline(UiObject obj) { + ContainerFuncs ui = ContainerFuncs.getInstance(); + try { + ui.newline.invoke(obj.ptr); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java index e183dbd..d16cc6f 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java @@ -22,6 +22,8 @@ public class ContainerFuncs { public MethodHandle container_begin_close; public MethodHandle container_finish; + public MethodHandle newline; + private ContainerFuncs(Linker linker, SymbolLookup lib) { FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigm_m = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS); @@ -44,6 +46,8 @@ public class ContainerFuncs { MemorySegment ui_container_begin_close = lib.find("ui_container_begin_close").orElseThrow(); MemorySegment ui_container_finish = lib.find("ui_container_finish").orElseThrow(); + MemorySegment ui_newline_addr = lib.find("ui_newline").orElseThrow(); + vbox_create = linker.downcallHandle(ui_vbox_create_addr, sigm_mm); hbox_create = linker.downcallHandle(ui_hbox_create_addr, sigm_mm); grid_create = linker.downcallHandle(ui_grid_create_addr, sigm_mm); @@ -59,6 +63,8 @@ public class ContainerFuncs { container_begin_close = linker.downcallHandle(ui_container_begin_close, sigv_m); container_finish = linker.downcallHandle(ui_container_finish, sigi_m); + + newline = linker.downcallHandle(ui_newline_addr, sigv_m); } static ContainerFuncs getInstance() { 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 53e996c..0a694e5 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 @@ -208,6 +208,13 @@ class Toplevel(obj: UiObject) { ) } + fun row( + ui: ContainerUI? = null + ) { + ui?.callback() + Container.newline(obj) + } + 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 4d2d57e..86890cd 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,14 +10,26 @@ import de.unixwork.ui.kotlin.window class Main : Application { override fun startup() { val window = window("Test Window") { - hbox { - button("T1") - button("T2") - vbox { - button("V1") - button("V2") + grid { + vbox(vexpand = true, vfill = true) { + button("B1") + button("B2") + button("B3") + } + grid(columnspacing = 10, rowspacing = 10, hexpand = true, hfill = true, vexpand = true) { + row { + button("C1") + button("C2") + button(label = "C3", hfill = true, hexpand = true) + } + row { + button("D1") + button("D2") + } + row { + button("E1") + } } - button("T3") } } -- 2.47.3