--- /dev/null
+package de.unixwork.ui;
+
+public class Container implements AutoCloseable {
+ private UiObject object;
+ private UiWidget widget;
+ private boolean isClosed;
+
+ protected Container(UiObject obj, UiWidget widget) {
+ this.object = obj;
+ this.widget = widget;
+ }
+
+ public UiWidget getWidget() {
+ return widget;
+ }
+
+ public boolean isClosed() {
+ return isClosed;
+ }
+
+ public void close() {
+ ContainerFuncs ui = ContainerFuncs.getInstance();
+ try {
+ ui.container_begin_close.invoke(object.ptr);
+ ui.container_finish.invoke(object.ptr);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static ContainerBuilder vbox(UiObject obj) {
+ ContainerFuncs ui = ContainerFuncs.getInstance();
+ return new ContainerBuilder(obj, ui.vbox_create);
+ }
+
+ public static ContainerBuilder hbox(UiObject obj) {
+ ContainerFuncs ui = ContainerFuncs.getInstance();
+ return new ContainerBuilder(obj, ui.hbox_create);
+ }
+
+ public static ContainerBuilder grid(UiObject obj) {
+ ContainerFuncs ui = ContainerFuncs.getInstance();
+ return new ContainerBuilder(obj, ui.grid_create);
+ }
+}
--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class ContainerBuilder extends AbstractWidgetBuilder{
+ private boolean fill;
+ private boolean hexpand;
+ private boolean vexpand;
+ private boolean hfill;
+ private boolean vfill;
+ private boolean overrideDefaults;
+ private boolean defhexpand;
+ private boolean defvexpand;
+ private boolean defhfill;
+ private boolean defvfill;
+ private int colspan;
+ private int rowspan;
+ private String name;
+ private String styleClass;
+ private int margin;
+ private int spacing;
+ private int columnspacing;
+ private int rowspacing;
+
+ public ContainerBuilder(UiObject obj, MethodHandle widgetConstructor) {
+ this.obj = obj;
+ this.widgetConstructor = widgetConstructor;
+ }
+
+ public ContainerBuilder fill(boolean fill) {
+ this.fill = fill;
+ return this;
+ }
+
+ public ContainerBuilder hexpand(boolean hexpand) {
+ this.hexpand = hexpand;
+ return this;
+ }
+
+ public ContainerBuilder vexpand(boolean vexpand) {
+ this.vexpand = vexpand;
+ return this;
+ }
+
+ public ContainerBuilder hfill(boolean hfill) {
+ this.hfill = hfill;
+ return this;
+ }
+
+ public ContainerBuilder vfill(boolean vfill) {
+ this.vfill = vfill;
+ return this;
+ }
+
+ public ContainerBuilder overrideDefaults(boolean overrideDefaults) {
+ this.overrideDefaults = overrideDefaults;
+ return this;
+ }
+
+ public ContainerBuilder defaultHExpand(boolean defaultHExpand) {
+ this.hexpand = defaultHExpand;
+ return this;
+ }
+
+ public ContainerBuilder defaultVExpand(boolean defaultVExpand) {
+ this.vexpand = defaultVExpand;
+ return this;
+ }
+
+ public ContainerBuilder defaultHfill(boolean defaultHfill) {
+ this.hfill = defaultHfill;
+ return this;
+ }
+
+ public ContainerBuilder defaultVfill(boolean defaultVfill) {
+ this.defvfill = defaultVfill;
+ return this;
+ }
+
+ public ContainerBuilder colspan(int colspan) {
+ this.colspan = colspan;
+ return this;
+ }
+
+ public ContainerBuilder rowspan(int rowspan) {
+ this.rowspan = rowspan;
+ return this;
+ }
+
+ public ContainerBuilder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public ContainerBuilder styleClass(String styleClass) {
+ this.styleClass = styleClass;
+ return this;
+ }
+
+ public ContainerBuilder margin(int margin) {
+ this.margin = margin;
+ return this;
+ }
+
+ public ContainerBuilder spacing(int sacing) {
+ this.spacing = sacing;
+ return this;
+ }
+
+ public ContainerBuilder columnspacing(int columnspacing) {
+ this.columnspacing = columnspacing;
+ return this;
+ }
+
+ public ContainerBuilder rowspacing(int rowspacing) {
+ this.rowspacing = rowspacing;
+ return this;
+ }
+
+ @Override
+ public MemorySegment createArgs(Arena arena) throws Throwable {
+ ArgFuncs ui = ArgFuncs.getInstance();
+
+ MemorySegment args = (MemorySegment)ui.container_args_new.invoke();
+ if(fill) {
+ // TODO: implement after toolkit fill refactoring
+ }
+ if(hexpand) {
+ ui.container_args_set_hexpand.invoke(args, hexpand);
+ }
+ if(vexpand) {
+ ui.container_args_set_vexpand.invoke(args, vexpand);
+ }
+ if(hfill) {
+ ui.container_args_set_hfill.invoke(args, hfill);
+ }
+ if(vfill) {
+ ui.container_args_set_vfill.invoke(args, vfill);
+ }
+ if(overrideDefaults) {
+ ui.container_args_set_override_defaults.invoke(args, overrideDefaults);
+ }
+ if(defhexpand) {
+ ui.container_args_set_def_hexpand.invoke(args, defhexpand);
+ }
+ if(defvexpand) {
+ ui.container_args_set_def_vexpand.invoke(args, defvexpand);
+ }
+ if(defhfill) {
+ ui.container_args_set_def_hfill.invoke(args, defhfill);
+ }
+ if(defvfill) {
+ ui.container_args_set_def_vfill.invoke(args, defvfill);
+ }
+ if(colspan > 0) {
+ ui.container_args_set_colspan.invoke(args, colspan);
+ }
+ if(rowspan > 0) {
+ ui.container_args_set_rowspan.invoke(args, rowspan);
+ }
+ if(name != null) {
+ MemorySegment cstr = arena.allocateFrom(name);
+ ui.container_args_set_name.invoke(args, cstr);
+ }
+ if(styleClass != null) {
+ MemorySegment cstr = arena.allocateFrom(styleClass);
+ ui.container_args_set_style_class.invoke(args, cstr);
+ }
+ if(margin > 0) {
+ ui.container_args_set_margin.invoke(args, margin);
+ }
+ if(spacing > 0) {
+ ui.container_args_set_spacing.invoke(args, spacing);
+ }
+ if(columnspacing > 0) {
+ ui.container_args_set_columnspacing.invoke(args, columnspacing);
+ }
+ if(rowspacing > 0) {
+ ui.container_args_set_rowspacing.invoke(args, rowspacing);
+ }
+
+ return args;
+ }
+
+ public Container createContainer() {
+ UiWidget w = create();
+ return new Container(obj, w);
+ }
+}
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);
- FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+ FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS);
+ FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS);
MemorySegment ui_vbox_create_addr = lib.find("ui_vbox_create").orElseThrow();
MemorySegment ui_hbox_create_addr = lib.find("ui_hbox_create").orElseThrow();
MemorySegment ui_headerbar_create_addr = lib.find("ui_headerbar_create").orElseThrow();
MemorySegment ui_sidebar_create_addr = lib.find("ui_sidebar_create").orElseThrow();
MemorySegment ui_itemlist_create_addr = lib.find("ui_itemlist_create").orElseThrow();
- MemorySegment ui_hsplitpane_create_addr = lib.find("ui_hslpitpane_create").orElseThrow();
+ MemorySegment ui_hsplitpane_create_addr = lib.find("ui_hsplitpane_create").orElseThrow();
MemorySegment ui_vsplitpane_create_addr = lib.find("ui_vsplitpane_create").orElseThrow();
MemorySegment ui_container_begin_close = lib.find("ui_container_begin_close").orElseThrow();
hsplitpane_create = linker.downcallHandle(ui_hsplitpane_create_addr, sigm_mm);
vsplitpane_create = linker.downcallHandle(ui_vsplitpane_create_addr, sigm_mm);
- container_begin_close = linker.downcallHandle(ui_container_begin_close, sigm_m);
+ container_begin_close = linker.downcallHandle(ui_container_begin_close, sigv_m);
container_finish = linker.downcallHandle(ui_container_finish, sigi_m);
}