]> uap-core.de Git - rssreader.git/commitdiff
add splitpane
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 9 Jul 2025 17:43:35 +0000 (19:43 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 9 Jul 2025 17:43:35 +0000 (19:43 +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/SplitPaneBuilder.java [new file with mode: 0644]

index be12f851b56966097ced1a9663034906073a98d1..1343975c33d93a9d23f8b2e181799fd9b9e1c415 100644 (file)
@@ -77,6 +77,27 @@ class ArgFuncs {
     MethodHandle container_args_set_rowspacing;
     MethodHandle container_args_free;
 
+    MethodHandle splitpane_args_new;
+    MethodHandle splitpane_args_set_fill;
+    MethodHandle splitpane_args_set_hexpand;
+    MethodHandle splitpane_args_set_vexpand;
+    MethodHandle splitpane_args_set_hfill;
+    MethodHandle splitpane_args_set_vfill;
+    MethodHandle splitpane_args_set_override_defaults;
+    MethodHandle splitpane_args_set_colspan;
+    MethodHandle splitpane_args_set_rowspan;
+    MethodHandle splitpane_args_set_name;
+    MethodHandle splitpane_args_set_style_class;
+    MethodHandle splitpane_args_set_margin;
+    MethodHandle splitpane_args_set_spacing;
+    MethodHandle splitpane_args_set_columnspacing;
+    MethodHandle splitpane_args_set_rowspacing;
+    MethodHandle splitpane_args_set_initial_position;
+    MethodHandle splitpane_args_set_value;
+    MethodHandle splitpane_args_set_varname;
+    MethodHandle splitpane_args_set_max_panes;
+    MethodHandle splitpane_args_free;
+
     MethodHandle button_args_new;
     MethodHandle button_args_set_fill;
     MethodHandle button_args_set_hexpand;
@@ -232,6 +253,27 @@ class ArgFuncs {
         MemorySegment ui_container_args_set_rowspacing_addr = lib.find("ui_container_args_set_rowspacing").orElseThrow();
         MemorySegment ui_container_args_free_addr = lib.find("ui_container_args_free").orElseThrow();
 
+        MemorySegment ui_splitpane_args_new_addr = lib.find("ui_splitpane_args_new").orElseThrow();
+        MemorySegment ui_splitpane_args_set_fill_addr = lib.find("ui_splitpane_args_set_fill").orElseThrow();
+        MemorySegment ui_splitpane_args_set_hexpand_addr = lib.find("ui_splitpane_args_set_hexpand").orElseThrow();
+        MemorySegment ui_splitpane_args_set_vexpand_addr = lib.find("ui_splitpane_args_set_vexpand").orElseThrow();
+        MemorySegment ui_splitpane_args_set_hfill_addr = lib.find("ui_splitpane_args_set_hfill").orElseThrow();
+        MemorySegment ui_splitpane_args_set_vfill_addr = lib.find("ui_splitpane_args_set_vfill").orElseThrow();
+        MemorySegment ui_splitpane_args_set_override_defaults_addr = lib.find("ui_splitpane_args_set_override_defaults").orElseThrow();
+        MemorySegment ui_splitpane_args_set_colspan_addr = lib.find("ui_splitpane_args_set_colspan").orElseThrow();
+        MemorySegment ui_splitpane_args_set_rowspan_addr = lib.find("ui_splitpane_args_set_rowspan").orElseThrow();
+        MemorySegment ui_splitpane_args_set_name_addr = lib.find("ui_splitpane_args_set_name").orElseThrow();
+        MemorySegment ui_splitpane_args_set_style_class_addr = lib.find("ui_splitpane_args_set_style_class").orElseThrow();
+        MemorySegment ui_splitpane_args_set_margin_addr = lib.find("ui_splitpane_args_set_margin").orElseThrow();
+        MemorySegment ui_splitpane_args_set_spacing_addr = lib.find("ui_splitpane_args_set_spacing").orElseThrow();
+        MemorySegment ui_splitpane_args_set_columnspacing_addr = lib.find("ui_splitpane_args_set_columnspacing").orElseThrow();
+        MemorySegment ui_splitpane_args_set_rowspacing_addr = lib.find("ui_splitpane_args_set_rowspacing").orElseThrow();
+        MemorySegment ui_splitpane_args_set_initial_position_addr = lib.find("ui_splitpane_args_set_initial_position").orElseThrow();
+        MemorySegment ui_splitpane_args_set_value_addr = lib.find("ui_splitpane_args_set_value").orElseThrow();
+        MemorySegment ui_splitpane_args_set_varname_addr = lib.find("ui_splitpane_args_set_varname").orElseThrow();
+        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_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();
@@ -379,6 +421,27 @@ class ArgFuncs {
         container_args_set_rowspacing = linker.downcallHandle(ui_container_args_set_rowspacing_addr, sigv_mi);
         container_args_free = linker.downcallHandle(ui_container_args_free_addr, sigv_m);
 
+        splitpane_args_new =  linker.downcallHandle(ui_splitpane_args_new_addr, sigm);
+        splitpane_args_set_fill = linker.downcallHandle(ui_splitpane_args_set_fill_addr, sigm);
+        splitpane_args_set_hexpand = linker.downcallHandle(ui_splitpane_args_set_hexpand_addr, sigv_mb);
+        splitpane_args_set_vexpand = linker.downcallHandle(ui_splitpane_args_set_vexpand_addr, sigv_mb);
+        splitpane_args_set_hfill = linker.downcallHandle(ui_splitpane_args_set_hfill_addr, sigv_mb);
+        splitpane_args_set_vfill = linker.downcallHandle(ui_splitpane_args_set_vfill_addr, sigv_mb);
+        splitpane_args_set_override_defaults = linker.downcallHandle(ui_splitpane_args_set_override_defaults_addr, sigv_mb);
+        splitpane_args_set_colspan = linker.downcallHandle(ui_splitpane_args_set_colspan_addr, sigv_mi);
+        splitpane_args_set_rowspan = linker.downcallHandle(ui_splitpane_args_set_rowspan_addr, sigv_mi);
+        splitpane_args_set_name = linker.downcallHandle(ui_splitpane_args_set_name_addr, sigv_mm);
+        splitpane_args_set_style_class = linker.downcallHandle(ui_splitpane_args_set_style_class_addr, sigv_mm);
+        splitpane_args_set_margin = linker.downcallHandle(ui_splitpane_args_set_margin_addr, sigv_mi);
+        splitpane_args_set_spacing = linker.downcallHandle(ui_splitpane_args_set_spacing_addr, sigv_mi);
+        splitpane_args_set_columnspacing = linker.downcallHandle(ui_splitpane_args_set_columnspacing_addr, sigv_mi);
+        splitpane_args_set_rowspacing = linker.downcallHandle(ui_splitpane_args_set_rowspacing_addr, sigv_mi);
+        splitpane_args_set_initial_position = linker.downcallHandle(ui_splitpane_args_set_initial_position_addr, sigv_mi);
+        splitpane_args_set_value = linker.downcallHandle(ui_splitpane_args_set_value_addr, sigv_mm);
+        splitpane_args_set_varname = linker.downcallHandle(ui_splitpane_args_set_varname_addr, sigv_mm);
+        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);
+
         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 e655b387c9bbffea8d340d46d8fb76d10ca57020..2afbbe30bc1321de5967bd8f5ba258f9f409c080 100644 (file)
@@ -51,4 +51,14 @@ public class Container implements AutoCloseable {
             throw new RuntimeException(e);
         }
     }
+
+    public static SplitPaneBuilder hsplitview(UiObject obj) {
+        ContainerFuncs ui = ContainerFuncs.getInstance();
+        return new SplitPaneBuilder(obj, ui.hsplitpane_create);
+    }
+
+    public static SplitPaneBuilder vsplitview(UiObject obj) {
+        ContainerFuncs ui = ContainerFuncs.getInstance();
+        return new SplitPaneBuilder(obj, ui.vsplitpane_create);
+    }
 }
diff --git a/ui-java/src/main/java/de/unixwork/ui/SplitPaneBuilder.java b/ui-java/src/main/java/de/unixwork/ui/SplitPaneBuilder.java
new file mode 100644 (file)
index 0000000..f5211db
--- /dev/null
@@ -0,0 +1,199 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class SplitPaneBuilder extends AbstractWidgetBuilder{
+    private boolean fill;
+    private boolean hexpand;
+    private boolean vexpand;
+    private boolean hfill;
+    private boolean vfill;
+    private boolean overrideDefaults;
+    private int colspan;
+    private int rowspan;
+    private String name;
+    private String styleClass;
+    private int margin;
+    private int spacing;
+    private int columnspacing;
+    private int rowspacing;
+    private int initialPosition;
+    private UiInteger value;
+    private String varname;
+    private int maxPanes;
+
+    public SplitPaneBuilder(UiObject obj, MethodHandle widgetConstructor) {
+        this.obj = obj;
+        this.widgetConstructor = widgetConstructor;
+    }
+
+    public SplitPaneBuilder fill(boolean fill) {
+        this.fill = fill;
+        return this;
+    }
+
+    public SplitPaneBuilder hexpand(boolean hexpand) {
+        this.hexpand = hexpand;
+        return this;
+    }
+
+    public SplitPaneBuilder vexpand(boolean vexpand) {
+        this.vexpand = vexpand;
+        return this;
+    }
+
+    public SplitPaneBuilder hfill(boolean hfill) {
+        this.hfill = hfill;
+        return this;
+    }
+
+    public SplitPaneBuilder vfill(boolean vfill) {
+        this.vfill = vfill;
+        return this;
+    }
+
+    public SplitPaneBuilder overrideDefaults(boolean overrideDefaults) {
+        this.overrideDefaults = overrideDefaults;
+        return this;
+    }
+
+    public SplitPaneBuilder colspan(int colspan) {
+        this.colspan = colspan;
+        return this;
+    }
+
+    public SplitPaneBuilder rowspan(int rowspan) {
+        this.rowspan = rowspan;
+        return this;
+    }
+
+    public SplitPaneBuilder name(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public SplitPaneBuilder styleClass(String styleClass) {
+        this.styleClass = styleClass;
+        return this;
+    }
+
+    public SplitPaneBuilder margin(int margin) {
+        this.margin = margin;
+        return this;
+    }
+
+    public SplitPaneBuilder spacing(int sacing) {
+        this.spacing = sacing;
+        return this;
+    }
+
+    public SplitPaneBuilder columnspacing(int columnspacing) {
+        this.columnspacing = columnspacing;
+        return this;
+    }
+
+    public SplitPaneBuilder rowspacing(int rowspacing) {
+        this.rowspacing = rowspacing;
+        return this;
+    }
+
+    public SplitPaneBuilder initialPosition(int initialPosition) {
+        this.initialPosition = initialPosition;
+        return this;
+    }
+
+    public SplitPaneBuilder value(UiInteger value) {
+        this.value = value;
+        return this;
+    }
+
+    public SplitPaneBuilder varname(String varname) {
+        this.varname = varname;
+        return this;
+    }
+
+    public SplitPaneBuilder maxPanes(int maxPanes) {
+        this.maxPanes = maxPanes;
+        return this;
+    }
+
+    @Override
+    public MemorySegment createArgs(Arena arena) throws Throwable {
+        ArgFuncs ui = ArgFuncs.getInstance();
+
+        MemorySegment args = (MemorySegment)ui.splitpane_args_new.invoke();
+        if(fill) {
+            ui.splitpane_args_set_fill.invoke(args, fill);
+        }
+        if(hexpand) {
+            ui.splitpane_args_set_hexpand.invoke(args, hexpand);
+        }
+        if(vexpand) {
+            ui.splitpane_args_set_vexpand.invoke(args, vexpand);
+        }
+        if(hfill) {
+            ui.splitpane_args_set_hfill.invoke(args, hfill);
+        }
+        if(vfill) {
+            ui.splitpane_args_set_vfill.invoke(args, vfill);
+        }
+        if(overrideDefaults) {
+            ui.splitpane_args_set_override_defaults.invoke(args, overrideDefaults);
+        }
+        if(colspan > 0) {
+            ui.splitpane_args_set_colspan.invoke(args, colspan);
+        }
+        if(rowspan > 0) {
+            ui.splitpane_args_set_rowspan.invoke(args, rowspan);
+        }
+        if(name != null) {
+            MemorySegment cstr = arena.allocateFrom(name);
+            ui.splitpane_args_set_name.invoke(args, cstr);
+        }
+        if(styleClass != null) {
+            MemorySegment cstr = arena.allocateFrom(styleClass);
+            ui.splitpane_args_set_style_class.invoke(args, cstr);
+        }
+        if(margin > 0) {
+            ui.splitpane_args_set_margin.invoke(args, margin);
+        }
+        if(spacing > 0) {
+            ui.splitpane_args_set_spacing.invoke(args, spacing);
+        }
+        if(columnspacing > 0) {
+            ui.splitpane_args_set_columnspacing.invoke(args, columnspacing);
+        }
+        if(rowspacing > 0) {
+            ui.splitpane_args_set_rowspacing.invoke(args, rowspacing);
+        }
+        if(initialPosition > 0) {
+            ui.splitpane_args_set_initial_position.invoke(args, initialPosition);
+        }
+        if(value != null) {
+            ui.splitpane_args_set_value.invoke(args, value.valuePtr);
+        }
+        if(varname != null) {
+            MemorySegment cstr = arena.allocateFrom(varname);
+            ui.splitpane_args_set_varname.invoke(args, cstr);
+        }
+        if(maxPanes > 0) {
+            ui.splitpane_args_set_max_panes.invoke(args, maxPanes);
+        }
+
+        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();
+    }
+}