]> uap-core.de Git - rssreader.git/commitdiff
add listview
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 24 Jun 2025 20:12:24 +0000 (22:12 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 24 Jun 2025 20:12:24 +0000 (22:12 +0200)
ui-java/src/main/java/de/unixwork/ui/ListValueConverter.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/ListView.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java [new file with mode: 0644]

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 (file)
index 0000000..17279b7
--- /dev/null
@@ -0,0 +1,6 @@
+package de.unixwork.ui;
+
+@FunctionalInterface
+public interface ListValueConverter<T> {
+    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 (file)
index 0000000..3806309
--- /dev/null
@@ -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 (file)
index 0000000..a1522e5
--- /dev/null
@@ -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<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;
+    }
+}