From 5df2a1c82c7b8756e5b7f02fc611ea262e081174 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 24 Jun 2025 22:12:24 +0200 Subject: [PATCH] add listview --- .../de/unixwork/ui/ListValueConverter.java | 6 + .../main/java/de/unixwork/ui/ListView.java | 10 + .../java/de/unixwork/ui/ListViewBuilder.java | 197 ++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 ui-java/src/main/java/de/unixwork/ui/ListValueConverter.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/ListView.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java diff --git a/ui-java/src/main/java/de/unixwork/ui/ListValueConverter.java b/ui-java/src/main/java/de/unixwork/ui/ListValueConverter.java new file mode 100644 index 0000000..17279b7 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ListValueConverter.java @@ -0,0 +1,6 @@ +package de.unixwork.ui; + +@FunctionalInterface +public interface ListValueConverter { + public String getValue(T elm, int column); +} diff --git a/ui-java/src/main/java/de/unixwork/ui/ListView.java b/ui-java/src/main/java/de/unixwork/ui/ListView.java new file mode 100644 index 0000000..3806309 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ListView.java @@ -0,0 +1,10 @@ +package de.unixwork.ui; + +public class ListView { + + + public static ListViewBuilder list(UiObject obj) { + ListFuncs ui = ListFuncs.getInstance(); + return new ListViewBuilder(obj, ui.listview_create); + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java b/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java new file mode 100644 index 0000000..a1522e5 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java @@ -0,0 +1,197 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.invoke.MethodHandle; + +public class ListViewBuilder 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 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; + } +} -- 2.47.3