]> uap-core.de Git - rssreader.git/commitdiff
add sidebar
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 11 Jul 2025 19:00:50 +0000 (21:00 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 11 Jul 2025 19:00:50 +0000 (21:00 +0200)
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/Container.java
ui-java/src/main/java/de/unixwork/ui/SidebarBuilder.java [new file with mode: 0644]
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index 1343975c33d93a9d23f8b2e181799fd9b9e1c415..55e8a990762fc9de6ec296e0781bf4c3a45f99ce 100644 (file)
@@ -98,6 +98,13 @@ class ArgFuncs {
     MethodHandle splitpane_args_set_max_panes;
     MethodHandle splitpane_args_free;
 
+    MethodHandle sidebar_args_new;
+    MethodHandle sidebar_args_set_name;
+    MethodHandle sidebar_args_set_style_class;
+    MethodHandle sidebar_args_set_margin;
+    MethodHandle sidebar_args_set_spacing;
+    MethodHandle sidebar_args_free;
+
     MethodHandle button_args_new;
     MethodHandle button_args_set_fill;
     MethodHandle button_args_set_hexpand;
@@ -274,6 +281,13 @@ class ArgFuncs {
         MemorySegment ui_splitpane_args_set_max_panes_addr = lib.find("ui_splitpane_args_set_max_panes").orElseThrow();
         MemorySegment ui_splitpane_args_free_addr = lib.find("ui_splitpane_args_free").orElseThrow();
 
+        MemorySegment ui_sidebar_args_new_addr = lib.find("ui_sidebar_args_new").orElseThrow();
+        MemorySegment ui_sidebar_args_set_name_addr = lib.find("ui_sidebar_args_set_name").orElseThrow();
+        MemorySegment ui_sidebar_args_set_style_class_addr = lib.find("ui_sidebar_args_set_style_class").orElseThrow();
+        MemorySegment ui_sidebar_args_set_margin_addr = lib.find("ui_sidebar_args_set_margin").orElseThrow();
+        MemorySegment ui_sidebar_args_set_spacing_addr = lib.find("ui_sidebar_args_set_spacing").orElseThrow();
+        MemorySegment ui_sidebar_args_free_addr = lib.find("ui_sidebar_args_free").orElseThrow();
+
         MemorySegment ui_button_args_new_addr = lib.find("ui_button_args_new").orElseThrow();
         MemorySegment ui_button_args_set_fill_addr = lib.find("ui_button_args_set_fill").orElseThrow();
         MemorySegment ui_button_args_set_hexpand_addr = lib.find("ui_button_args_set_hexpand").orElseThrow();
@@ -442,6 +456,13 @@ class ArgFuncs {
         splitpane_args_set_max_panes = linker.downcallHandle(ui_splitpane_args_set_max_panes_addr, sigv_mi);
         splitpane_args_free = linker.downcallHandle(ui_splitpane_args_free_addr, sigv_m);
 
+        sidebar_args_new = linker.downcallHandle(ui_sidebar_args_new_addr, sigm);
+        sidebar_args_set_name = linker.downcallHandle(ui_sidebar_args_set_name_addr, sigv_mm);
+        sidebar_args_set_style_class = linker.downcallHandle(ui_sidebar_args_set_style_class_addr, sigv_mm);
+        sidebar_args_set_margin = linker.downcallHandle(ui_sidebar_args_set_margin_addr, sigv_mi);
+        sidebar_args_set_spacing = linker.downcallHandle(ui_sidebar_args_set_spacing_addr, sigv_mi);
+        sidebar_args_free = linker.downcallHandle(ui_sidebar_args_free_addr, sigv_m);
+
         button_args_new = linker.downcallHandle(ui_button_args_new_addr, sigm);
         button_args_set_fill = linker.downcallHandle(ui_button_args_set_fill_addr, sigm);
         button_args_set_hexpand = linker.downcallHandle(ui_button_args_set_hexpand_addr, sigv_mb);
index 2afbbe30bc1321de5967bd8f5ba258f9f409c080..8929ae3dc7a6e6fe82faac1ab990e73ebf3509a0 100644 (file)
@@ -61,4 +61,9 @@ public class Container implements AutoCloseable {
         ContainerFuncs ui = ContainerFuncs.getInstance();
         return new SplitPaneBuilder(obj, ui.vsplitpane_create);
     }
+
+    public static SidebarBuilder sidebar(UiObject obj) {
+        ContainerFuncs ui = ContainerFuncs.getInstance();
+        return new SidebarBuilder(obj, ui.sidebar_create);
+    }
 }
diff --git a/ui-java/src/main/java/de/unixwork/ui/SidebarBuilder.java b/ui-java/src/main/java/de/unixwork/ui/SidebarBuilder.java
new file mode 100644 (file)
index 0000000..1778ecf
--- /dev/null
@@ -0,0 +1,72 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class SidebarBuilder extends AbstractWidgetBuilder{
+    private String name;
+    private String styleClass;
+    private int margin;
+    private int spacing;
+
+    public SidebarBuilder(UiObject obj, MethodHandle widgetConstructor) {
+        this.obj = obj;
+        this.widgetConstructor = widgetConstructor;
+    }
+
+    public SidebarBuilder name(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public SidebarBuilder styleClass(String styleClass) {
+        this.styleClass = styleClass;
+        return this;
+    }
+
+    public SidebarBuilder margin(int margin) {
+        this.margin = margin;
+        return this;
+    }
+
+    public SidebarBuilder spacing(int sacing) {
+        this.spacing = sacing;
+        return this;
+    }
+
+    @Override
+    public MemorySegment createArgs(Arena arena) throws Throwable {
+        ArgFuncs ui = ArgFuncs.getInstance();
+
+        args = (MemorySegment)ui.sidebar_args_new.invoke();
+        if(name != null) {
+            MemorySegment cstr = arena.allocateFrom(name);
+            ui.sidebar_args_set_name.invoke(args, cstr);
+        }
+        if(styleClass != null) {
+            MemorySegment cstr = arena.allocateFrom(styleClass);
+            ui.sidebar_args_set_style_class.invoke(args, cstr);
+        }
+        if(margin > 0) {
+            ui.sidebar_args_set_margin.invoke(args, margin);
+        }
+        if(spacing > 0) {
+            ui.sidebar_args_set_spacing.invoke(args, spacing);
+        }
+
+        return args;
+    }
+
+    public Container createContainer() {
+        UiWidget w = create();
+        return new Container(obj, w);
+    }
+
+    public UiWidget create(ContainerUI ui) {
+        Container container = createContainer();
+        ui.callback();
+        container.close();
+        return container.getWidget();
+    }
+}
index c7938f47320f9899b96a19d2e7baa0eba9dd5646..c9e28623a937e13c46af1f776a0770c8ff134138 100644 (file)
@@ -375,6 +375,31 @@ class Toplevel(obj: UiObject) {
         )
     }
 
+    fun sidebar(
+        name: String? = null,
+        styleClass: String? = null,
+        margin: Int = -1,
+        spacing: Int = -1,
+        ui: ContainerUI? = null
+    ): UiWidget {
+        val container = Container.sidebar(obj)
+
+        if(margin > 0) {
+            container.margin(margin)
+        }
+        if(spacing > 0) {
+            container.spacing(spacing)
+        }
+        if(name != null) {
+            container.name(name)
+        }
+        if(styleClass != null) {
+            container.styleClass(styleClass)
+        }
+
+        return container.create(ui)
+    }
+
     fun button(
         label: String? = null,
         stockId: String? = null,