From: Olaf Wintermann Date: Wed, 9 Jul 2025 17:43:35 +0000 (+0200) Subject: add splitpane X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=80ac36cfdd4e0147d2a12c697253aa5042306b4a;p=rssreader.git add splitpane --- diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java index be12f85..1343975 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -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); 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 e655b38..2afbbe3 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Container.java +++ b/ui-java/src/main/java/de/unixwork/ui/Container.java @@ -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 index 0000000..f5211db --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/SplitPaneBuilder.java @@ -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(); + } +}