--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class ListViewBuilder<T> 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 String varname;
+ private UiList<T> list;
+ // TODO: model
+ // TODO: static elements
+ private ListValueConverter getvalue;
+ private EventHandler onActivate;
+ private EventHandler onSelection;
+ private EventHandler onDragStart;
+ private EventHandler onDragComplete;
+ private EventHandler onDrop;
+ private boolean multiselection;
+ // TODO: contextmenu
+ private int[] states;
+
+ public ListViewBuilder(UiObject obj, MethodHandle widgetConstructor) {
+ this.obj = obj;
+ this.widgetConstructor = widgetConstructor;
+ }
+
+ public ListViewBuilder fill(boolean fill) {
+ this.fill = fill;
+ return this;
+ }
+
+ public ListViewBuilder hexpand(boolean hexpand) {
+ this.hexpand = hexpand;
+ return this;
+ }
+
+ public ListViewBuilder vexpand(boolean vexpand) {
+ this.vexpand = vexpand;
+ return this;
+ }
+
+ public ListViewBuilder hfill(boolean hfill) {
+ this.hfill = hfill;
+ return this;
+ }
+
+ public ListViewBuilder vfill(boolean vfill) {
+ this.vfill = vfill;
+ return this;
+ }
+
+ public ListViewBuilder overrideDefaults(boolean overrideDefaults) {
+ this.overrideDefaults = overrideDefaults;
+ return this;
+ }
+
+ public ListViewBuilder colspan(int colspan) {
+ this.colspan = colspan;
+ return this;
+ }
+
+ public ListViewBuilder rowspan(int rowspan) {
+ this.rowspan = rowspan;
+ return this;
+ }
+
+ public ListViewBuilder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public ListViewBuilder styleClass(String styleClass) {
+ this.styleClass = styleClass;
+ return this;
+ }
+
+ public ListViewBuilder varname(String varname) {
+ this.varname = varname;
+ return this;
+ }
+
+ public ListViewBuilder onActivate(EventHandler onActivate) {
+ this.onActivate = onActivate;
+ return this;
+ }
+
+ public ListViewBuilder onDragStart(EventHandler onDragStart) {
+ this.onDragStart = onDragStart;
+ return this;
+ }
+
+ public ListViewBuilder onDragComplete(EventHandler onDragComplete) {
+ this.onDragComplete = onDragComplete;
+ return this;
+ }
+
+ public ListViewBuilder onDrop(EventHandler onDrop) {
+ this.onDrop = onDrop;
+ return this;
+ }
+
+ public ListViewBuilder states(int... states) {
+ this.states = states;
+ return this;
+ }
+
+ public MemorySegment createArgs(Arena arena) throws Throwable {
+ ArgFuncs ui = ArgFuncs.getInstance();
+
+ MemorySegment args = (MemorySegment) ui.list_args_new.invoke();
+ if (fill) {
+ // TODO: implement after toolkit fill refactoring
+ }
+ if (hexpand) {
+ ui.list_args_set_hexpand.invoke(args, hexpand);
+ }
+ if (vexpand) {
+ ui.list_args_set_vexpand.invoke(args, vexpand);
+ }
+ if (hfill) {
+ ui.list_args_set_hfill.invoke(args, hfill);
+ }
+ if (vfill) {
+ ui.list_args_set_vfill.invoke(args, vfill);
+ }
+ if (overrideDefaults) {
+ ui.list_args_set_override_defaults.invoke(args, overrideDefaults);
+ }
+ if (colspan > 0) {
+ ui.list_args_set_colspan.invoke(args, colspan);
+ }
+ if (rowspan > 0) {
+ ui.list_args_set_rowspan.invoke(args, rowspan);
+ }
+ if (name != null) {
+ MemorySegment cstr = arena.allocateFrom(name);
+ ui.list_args_set_name.invoke(args, cstr);
+ }
+ if (styleClass != null) {
+ MemorySegment cstr = arena.allocateFrom(styleClass);
+ ui.list_args_set_style_class.invoke(args, cstr);
+ }
+ if(varname != null) {
+ MemorySegment cstr = arena.allocateFrom(varname);
+ ui.list_args_set_varname.invoke(args, cstr);
+ }
+ if(list != null) {
+ ui.list_args_set_value.invoke(args, list.valuePtr);
+ }
+ if(getvalue != null) {
+ // fuck
+ }
+
+ if (onActivate != null) {
+ EventWrapper event = new EventWrapper(obj, onActivate);
+ // set toolkit args
+ ui.list_args_set_onactivate.invoke(args, event.getCallback());
+ ui.list_args_set_onactivatedata.invoke(args, event.getUserData());
+ }
+ if (onSelection != null) {
+ EventWrapper event = new EventWrapper(obj, onSelection);
+ // set toolkit args
+ ui.list_args_set_onselection.invoke(args, event.getCallback());
+ ui.list_args_set_onselectiondata.invoke(args, event.getUserData());
+ }
+ if (onDragStart != null) {
+ EventWrapper event = new EventWrapper(obj, onDragStart);
+ // set toolkit args
+ ui.list_args_set_ondragstart.invoke(args, event.getCallback());
+ ui.list_args_set_ondragstartdata.invoke(args, event.getUserData());
+ }
+ if (onDragComplete != null) {
+ EventWrapper event = new EventWrapper(obj, onDragComplete);
+ // set toolkit args
+ ui.list_args_set_ondragcomplete.invoke(args, event.getCallback());
+ ui.list_args_set_ondragcompletedata.invoke(args, event.getUserData());
+ }
+ if (onDrop != null) {
+ EventWrapper event = new EventWrapper(obj, onDrop);
+ // set toolkit args
+ ui.list_args_set_ondrop.invoke(args, event.getCallback());
+ ui.list_args_set_ondropdata.invoke(args, event.getUserData());
+ }
+
+ return args;
+ }
+}