]> uap-core.de Git - rssreader.git/commitdiff
add labels
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 16 Jul 2025 17:43:01 +0000 (19:43 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 16 Jul 2025 17:43:01 +0000 (19:43 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt
ui-java/src/main/java/de/unixwork/ui/Alignment.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java
ui-java/src/main/java/de/unixwork/ui/Label.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/LabelStyle.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index 4bab4e9a6c6be0909a346dd9d39de8bdee991ad0..094bfab7d000a8ea3c98b106c74db6c2583ddb08 100644 (file)
@@ -11,10 +11,15 @@ class MainWindow {
     init {
         window = sidebarWindow("RSS Reader") {
             sidebar {
-                sourcelist { elm: Object ->
-                    val item = SubListItem()
-                    item.label = "todo"
-                    item
+                vbox(fill = true) {
+                    sourcelist { elm: Object ->
+                        val item = SubListItem()
+                        item.label = "todo"
+                        item
+                    }
+                    hbox(margin = 4) {
+                        button(icon = "list-add")
+                    }
                 }
             }
 
diff --git a/ui-java/src/main/java/de/unixwork/ui/Alignment.java b/ui-java/src/main/java/de/unixwork/ui/Alignment.java
new file mode 100644 (file)
index 0000000..8f16f28
--- /dev/null
@@ -0,0 +1,8 @@
+package de.unixwork.ui;
+
+public enum Alignment {
+    DEFAULT,
+    LEFT,
+    RIGHT,
+    CENTER
+}
index b3e40e4e64b457104d2567d0b657aa86d76568d0..ad5b37ac23092e9c23231a2716cdf691b9412746 100644 (file)
@@ -105,6 +105,56 @@ class ArgFuncs {
     MethodHandle sidebar_args_set_spacing;
     MethodHandle sidebar_args_free;
 
+    MethodHandle label_args_new;
+    MethodHandle label_args_set_fill;
+    MethodHandle label_args_set_hexpand;
+    MethodHandle label_args_set_vexpand;
+    MethodHandle label_args_set_hfill;
+    MethodHandle label_args_set_vfill;
+    MethodHandle label_args_set_override_defaults;
+    MethodHandle label_args_set_colspan;
+    MethodHandle label_args_set_rowspan;
+    MethodHandle label_args_set_name;
+    MethodHandle label_args_set_style_class;
+    MethodHandle label_args_set_label;
+    MethodHandle label_args_set_align;
+    MethodHandle label_args_set_style;
+    MethodHandle label_args_set_value;
+    MethodHandle label_args_set_varname;
+    MethodHandle label_args_free;
+
+    MethodHandle progressbar_args_new;
+    MethodHandle progressbar_args_set_fill;
+    MethodHandle progressbar_args_set_hexpand;
+    MethodHandle progressbar_args_set_vexpand;
+    MethodHandle progressbar_args_set_hfill;
+    MethodHandle progressbar_args_set_vfill;
+    MethodHandle progressbar_args_set_override_defaults;
+    MethodHandle progressbar_args_set_colspan;
+    MethodHandle progressbar_args_set_rowspan;
+    MethodHandle progressbar_args_set_name;
+    MethodHandle progressbar_args_set_style_class;
+    MethodHandle progressbar_args_set_min;
+    MethodHandle progressbar_args_set_max;
+    MethodHandle progressbar_args_set_value;
+    MethodHandle progressbar_args_set_varname;
+    MethodHandle progressbar_args_free;
+
+    MethodHandle progress_spinner_args_new;
+    MethodHandle progress_spinner_args_set_fill;
+    MethodHandle progress_spinner_args_set_hexpand;
+    MethodHandle progress_spinner_args_set_vexpand;
+    MethodHandle progress_spinner_args_set_hfill;
+    MethodHandle progress_spinner_args_set_vfill;
+    MethodHandle progress_spinner_args_set_override_defaults;
+    MethodHandle progress_spinner_args_set_colspan;
+    MethodHandle progress_spinner_args_set_rowspan;
+    MethodHandle progress_spinner_args_set_name;
+    MethodHandle progress_spinner_args_set_style_class;
+    MethodHandle progress_spinner_args_set_value;
+    MethodHandle progress_spinner_args_set_varname;
+    MethodHandle progress_spinner_args_free;
+
     MethodHandle button_args_new;
     MethodHandle button_args_set_fill;
     MethodHandle button_args_set_hexpand;
@@ -264,6 +314,7 @@ class ArgFuncs {
         FunctionDescriptor sigv_mml = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG);
         FunctionDescriptor sigv_mb = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_BOOLEAN);
         FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
+        FunctionDescriptor sigv_md = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE);
 
         MemorySegment ui_menuitem_args_new_addr = lib.find("ui_menuitem_args_new").orElseThrow();
         MemorySegment ui_menuitem_args_set_label_addr = lib.find("ui_menuitem_args_set_label").orElseThrow();
@@ -364,6 +415,56 @@ class ArgFuncs {
         MemorySegment ui_sidebar_args_set_spacing_addr = lib.find("ui_sidebar_args_set_spacing").orElseThrow();
         MemorySegment ui_sidebar_args_free_addr = lib.find("ui_sidebar_args_free").orElseThrow();
 
+        MemorySegment ui_label_args_new_addr = lib.find("ui_label_args_new").orElseThrow();
+        MemorySegment ui_label_args_set_fill_addr = lib.find("ui_label_args_set_fill").orElseThrow();
+        MemorySegment ui_label_args_set_hexpand_addr = lib.find("ui_label_args_set_hexpand").orElseThrow();
+        MemorySegment ui_label_args_set_vexpand_addr = lib.find("ui_label_args_set_vexpand").orElseThrow();
+        MemorySegment ui_label_args_set_hfill_addr = lib.find("ui_label_args_set_hfill").orElseThrow();
+        MemorySegment ui_label_args_set_vfill_addr = lib.find("ui_label_args_set_vfill").orElseThrow();
+        MemorySegment ui_label_args_set_override_defaults_addr = lib.find("ui_label_args_set_override_defaults").orElseThrow();
+        MemorySegment ui_label_args_set_colspan_addr = lib.find("ui_label_args_set_colspan").orElseThrow();
+        MemorySegment ui_label_args_set_rowspan_addr = lib.find("ui_label_args_set_rowspan").orElseThrow();
+        MemorySegment ui_label_args_set_name_addr = lib.find("ui_label_args_set_name").orElseThrow();
+        MemorySegment ui_label_args_set_style_class_addr = lib.find("ui_label_args_set_style_class").orElseThrow();
+        MemorySegment ui_label_args_set_label_addr = lib.find("ui_label_args_set_label").orElseThrow();
+        MemorySegment ui_label_args_set_align_addr = lib.find("ui_label_args_set_align").orElseThrow();
+        MemorySegment ui_label_args_set_style_addr = lib.find("ui_label_args_set_style").orElseThrow();
+        MemorySegment ui_label_args_set_value_addr = lib.find("ui_label_args_set_value").orElseThrow();
+        MemorySegment ui_label_args_set_varname_addr = lib.find("ui_label_args_set_varname").orElseThrow();
+        MemorySegment ui_label_args_free_addr = lib.find("ui_label_args_free").orElseThrow();
+
+        MemorySegment ui_progressbar_args_new_addr = lib.find("ui_progressbar_args_new").orElseThrow();
+        MemorySegment ui_progressbar_args_set_fill_addr = lib.find("ui_progressbar_args_set_fill").orElseThrow();
+        MemorySegment ui_progressbar_args_set_hexpand_addr = lib.find("ui_progressbar_args_set_hexpand").orElseThrow();
+        MemorySegment ui_progressbar_args_set_vexpand_addr = lib.find("ui_progressbar_args_set_vexpand").orElseThrow();
+        MemorySegment ui_progressbar_args_set_hfill_addr = lib.find("ui_progressbar_args_set_hfill").orElseThrow();
+        MemorySegment ui_progressbar_args_set_vfill_addr = lib.find("ui_progressbar_args_set_vfill").orElseThrow();
+        MemorySegment ui_progressbar_args_set_override_defaults_addr = lib.find("ui_progressbar_args_set_override_defaults").orElseThrow();
+        MemorySegment ui_progressbar_args_set_colspan_addr = lib.find("ui_progressbar_args_set_colspan").orElseThrow();
+        MemorySegment ui_progressbar_args_set_rowspan_addr = lib.find("ui_progressbar_args_set_rowspan").orElseThrow();
+        MemorySegment ui_progressbar_args_set_name_addr = lib.find("ui_progressbar_args_set_name").orElseThrow();
+        MemorySegment ui_progressbar_args_set_style_class_addr = lib.find("ui_progressbar_args_set_style_class").orElseThrow();
+        MemorySegment ui_progressbar_args_set_min_addr = lib.find("ui_progressbar_args_set_min").orElseThrow();
+        MemorySegment ui_progressbar_args_set_max_addr = lib.find("ui_progressbar_args_set_max").orElseThrow();
+        MemorySegment ui_progressbar_args_set_value_addr = lib.find("ui_progressbar_args_set_value").orElseThrow();
+        MemorySegment ui_progressbar_args_set_varname_addr = lib.find("ui_progressbar_args_set_varname").orElseThrow();
+        MemorySegment ui_progressbar_args_free_addr = lib.find("ui_progressbar_args_free").orElseThrow();
+
+        MemorySegment ui_progress_spinner_args_new_addr = lib.find("ui_progress_spinner_args_new").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_fill_addr = lib.find("ui_progress_spinner_args_set_fill").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_hexpand_addr = lib.find("ui_progress_spinner_args_set_hexpand").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_vexpand_addr = lib.find("ui_progress_spinner_args_set_vexpand").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_hfill_addr = lib.find("ui_progress_spinner_args_set_hfill").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_vfill_addr = lib.find("ui_progress_spinner_args_set_vfill").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_override_defaults_addr = lib.find("ui_progress_spinner_args_set_override_defaults").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_colspan_addr = lib.find("ui_progress_spinner_args_set_colspan").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_rowspan_addr = lib.find("ui_progress_spinner_args_set_rowspan").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_name_addr = lib.find("ui_progress_spinner_args_set_name").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_style_class_addr = lib.find("ui_progress_spinner_args_set_style_class").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_value_addr = lib.find("ui_progress_spinner_args_set_value").orElseThrow();
+        MemorySegment ui_progress_spinner_args_set_varname_addr = lib.find("ui_progress_spinner_args_set_varname").orElseThrow();
+        MemorySegment ui_progress_spinner_args_free_addr = lib.find("ui_progress_spinner_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();
@@ -615,6 +716,56 @@ class ArgFuncs {
         sidebar_args_set_spacing = linker.downcallHandle(ui_sidebar_args_set_spacing_addr, sigv_mi);
         sidebar_args_free = linker.downcallHandle(ui_sidebar_args_free_addr, sigv_m);
 
+        label_args_new = linker.downcallHandle(ui_label_args_new_addr, sigm);
+        label_args_set_fill = linker.downcallHandle(ui_label_args_set_fill_addr, sigv_mb);
+        label_args_set_name = linker.downcallHandle(ui_label_args_set_name_addr, sigv_mm);
+        label_args_set_style_class = linker.downcallHandle(ui_label_args_set_style_class_addr, sigv_mm);
+        label_args_set_hexpand = linker.downcallHandle(ui_label_args_set_hexpand_addr, sigv_mb);
+        label_args_set_vexpand = linker.downcallHandle(ui_label_args_set_vexpand_addr, sigv_mb);
+        label_args_set_hfill = linker.downcallHandle(ui_label_args_set_hfill_addr, sigv_mb);
+        label_args_set_vfill = linker.downcallHandle(ui_label_args_set_vfill_addr, sigv_mb);
+        label_args_set_override_defaults = linker.downcallHandle(ui_label_args_set_override_defaults_addr, sigv_mb);
+        label_args_set_colspan = linker.downcallHandle(ui_label_args_set_colspan_addr, sigv_mi);
+        label_args_set_rowspan = linker.downcallHandle(ui_label_args_set_rowspan_addr, sigv_mi);
+        label_args_set_label = linker.downcallHandle(ui_label_args_set_label_addr, sigv_mm);
+        label_args_set_align = linker.downcallHandle(ui_label_args_set_align_addr, sigv_mi);
+        label_args_set_style = linker.downcallHandle(ui_label_args_set_style_addr, sigv_mi);
+        label_args_set_value = linker.downcallHandle(ui_label_args_set_value_addr, sigv_mm);
+        label_args_set_varname = linker.downcallHandle(ui_label_args_set_varname_addr, sigv_mm);
+        label_args_free = linker.downcallHandle(ui_label_args_free_addr, sigv_m);
+        
+        progressbar_args_new = linker.downcallHandle(ui_progressbar_args_new_addr, sigm);
+        progressbar_args_set_fill = linker.downcallHandle(ui_progressbar_args_set_fill_addr, sigv_mb);
+        progressbar_args_set_hexpand = linker.downcallHandle(ui_progressbar_args_set_hexpand_addr, sigv_mb);
+        progressbar_args_set_vexpand = linker.downcallHandle(ui_progressbar_args_set_vexpand_addr, sigv_mb);
+        progressbar_args_set_hfill = linker.downcallHandle(ui_progressbar_args_set_hfill_addr, sigv_mb);
+        progressbar_args_set_vfill = linker.downcallHandle(ui_progressbar_args_set_vfill_addr, sigv_mb);
+        progressbar_args_set_override_defaults = linker.downcallHandle(ui_progressbar_args_set_override_defaults_addr, sigv_mb);
+        progressbar_args_set_colspan = linker.downcallHandle(ui_progressbar_args_set_colspan_addr, sigv_mi);
+        progressbar_args_set_rowspan = linker.downcallHandle(ui_progressbar_args_set_rowspan_addr, sigv_mi);
+        progressbar_args_set_name = linker.downcallHandle(ui_progressbar_args_set_name_addr, sigv_mm);
+        progressbar_args_set_style_class = linker.downcallHandle(ui_progressbar_args_set_style_class_addr, sigv_mm);
+        progressbar_args_set_min = linker.downcallHandle(ui_progressbar_args_set_min_addr, sigv_md);
+        progressbar_args_set_max = linker.downcallHandle(ui_progressbar_args_set_max_addr, sigv_md);
+        progressbar_args_set_value = linker.downcallHandle(ui_progressbar_args_set_value_addr, sigv_mm);
+        progressbar_args_set_varname = linker.downcallHandle(ui_progressbar_args_set_varname_addr, sigv_mm);
+        progressbar_args_free = linker.downcallHandle(ui_progressbar_args_free_addr, sigv_m);
+
+        progress_spinner_args_new = linker.downcallHandle(ui_progress_spinner_args_new_addr, sigm);
+        progress_spinner_args_set_fill = linker.downcallHandle(ui_progress_spinner_args_set_fill_addr, sigv_mb);
+        progress_spinner_args_set_hexpand = linker.downcallHandle(ui_progress_spinner_args_set_hexpand_addr, sigv_mb);
+        progress_spinner_args_set_vexpand = linker.downcallHandle(ui_progress_spinner_args_set_vexpand_addr, sigv_mb);
+        progress_spinner_args_set_hfill = linker.downcallHandle(ui_progress_spinner_args_set_hfill_addr, sigv_mb);
+        progress_spinner_args_set_vfill = linker.downcallHandle(ui_progress_spinner_args_set_vfill_addr, sigv_mb);
+        progress_spinner_args_set_override_defaults = linker.downcallHandle(ui_progress_spinner_args_set_override_defaults_addr, sigv_mb);
+        progress_spinner_args_set_colspan = linker.downcallHandle(ui_progress_spinner_args_set_colspan_addr, sigv_mi);
+        progress_spinner_args_set_rowspan = linker.downcallHandle(ui_progress_spinner_args_set_rowspan_addr, sigv_mi);
+        progress_spinner_args_set_name = linker.downcallHandle(ui_progress_spinner_args_set_name_addr, sigv_mm);
+        progress_spinner_args_set_style_class = linker.downcallHandle(ui_progress_spinner_args_set_style_class_addr, sigv_mm);
+        progress_spinner_args_set_value = linker.downcallHandle(ui_progress_spinner_args_set_value_addr, sigv_mm);
+        progress_spinner_args_set_varname = linker.downcallHandle(ui_progress_spinner_args_set_varname_addr, sigv_mm);
+        progress_spinner_args_free = linker.downcallHandle(ui_progress_spinner_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, sigv_mb);
         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/Label.java b/ui-java/src/main/java/de/unixwork/ui/Label.java
new file mode 100644 (file)
index 0000000..a9b1fa8
--- /dev/null
@@ -0,0 +1,18 @@
+package de.unixwork.ui;
+
+public class Label {
+    public static LabelBuilder label(UiObject obj) {
+        var ui = LabelFuncs.getInstance();
+        return new LabelBuilder(obj, ui.label_create);
+    }
+
+    public static LabelBuilder llabel(UiObject obj) {
+        var ui = LabelFuncs.getInstance();
+        return new LabelBuilder(obj, ui.llabel_create);
+    }
+
+    public static LabelBuilder rlabel(UiObject obj) {
+        var ui = LabelFuncs.getInstance();
+        return new LabelBuilder(obj, ui.rlabel_create);
+    }
+}
diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java b/ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java
new file mode 100644 (file)
index 0000000..827d8ef
--- /dev/null
@@ -0,0 +1,176 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+import java.lang.invoke.MethodHandle;
+
+public class LabelBuilder 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 label;
+    private Alignment align;
+    private LabelStyle style;
+    private UiString value;
+    private String varname;
+
+    public LabelBuilder(UiObject obj, MethodHandle widgetConstructor) {
+        this.obj = obj;
+        this.widgetConstructor = widgetConstructor;
+        this.argsFree = ArgFuncs.getInstance().label_args_free;
+    }
+
+    public LabelBuilder fill(boolean fill) {
+        this.fill = fill;
+        return this;
+    }
+
+    public LabelBuilder hexpand(boolean hexpand) {
+        this.hexpand = hexpand;
+        return this;
+    }
+
+    public LabelBuilder vexpand(boolean vexpand) {
+        this.vexpand = vexpand;
+        return this;
+    }
+
+    public LabelBuilder hfill(boolean hfill) {
+        this.hfill = hfill;
+        return this;
+    }
+
+    public LabelBuilder vfill(boolean vfill) {
+        this.vfill = vfill;
+        return this;
+    }
+
+    public LabelBuilder overrideDefaults(boolean overrideDefaults) {
+        this.overrideDefaults = overrideDefaults;
+        return this;
+    }
+
+    public LabelBuilder colspan(int colspan) {
+        this.colspan = colspan;
+        return this;
+    }
+
+    public LabelBuilder rowspan(int rowspan) {
+        this.rowspan = rowspan;
+        return this;
+    }
+
+    public LabelBuilder name(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public LabelBuilder styleClass(String styleClass) {
+        this.styleClass = styleClass;
+        return this;
+    }
+
+    public LabelBuilder label(String label) {
+        this.label = label;
+        return this;
+    }
+
+    public LabelBuilder align(Alignment align) {
+        this.align = align;
+        return this;
+    }
+
+    public LabelBuilder style(LabelStyle style) {
+        this.style = style;
+        return this;
+    }
+
+    public LabelBuilder varname(String varname) {
+        this.varname = varname;
+        return this;
+    }
+
+    public LabelBuilder value(UiString value) {
+        this.value = value;
+        return this;
+    }
+
+    public MemorySegment createArgs(Arena arena) throws Throwable {
+        ArgFuncs ui = ArgFuncs.getInstance();
+
+        args = (MemorySegment)ui.label_args_new.invoke();
+        if(fill) {
+            ui.label_args_set_fill.invoke(args, fill);
+        }
+        if(hexpand) {
+            ui.label_args_set_hexpand.invoke(args, hexpand);
+        }
+        if(vexpand) {
+            ui.label_args_set_vexpand.invoke(args, vexpand);
+        }
+        if(hfill) {
+            ui.label_args_set_hfill.invoke(args, hfill);
+        }
+        if(vfill) {
+            ui.label_args_set_vfill.invoke(args, vfill);
+        }
+        if(overrideDefaults) {
+            ui.label_args_set_override_defaults.invoke(args, overrideDefaults);
+        }
+        if(colspan > 0) {
+            ui.label_args_set_colspan.invoke(args, colspan);
+        }
+        if(rowspan > 0) {
+            ui.label_args_set_rowspan.invoke(args, rowspan);
+        }
+        if(name != null) {
+            MemorySegment cstr = arena.allocateFrom(name);
+            ui.label_args_set_name.invoke(args, cstr);
+        }
+        if(styleClass != null) {
+            MemorySegment cstr = arena.allocateFrom(styleClass);
+            ui.label_args_set_style_class.invoke(args, cstr);
+        }
+        if(label != null) {
+            MemorySegment cstr = arena.allocateFrom(label);
+            ui.label_args_set_label.invoke(args, cstr);
+        }
+        if(align != null) {
+            int alignNum = 0;
+            switch(align) {
+                case LEFT: alignNum = 1; break;
+                case RIGHT: alignNum = 2; break;
+                case CENTER: alignNum = 3; break;
+                default: break;
+            }
+            ui.label_args_set_align.invoke(args, alignNum);
+        }
+        if(style != null) {
+            int styleNum = 0;
+            switch(style) {
+                case TITLE: styleNum = 1; break;
+                case SUBTITLE: styleNum = 2; break;
+                case DIM: styleNum = 3; break;
+                default: break;
+            }
+            ui.label_args_set_style.invoke(args, styleNum);
+        }
+
+        if(varname != null) {
+            MemorySegment cstr = arena.allocateFrom(varname);
+            ui.label_args_set_varname.invoke(args, cstr);
+        }
+        if(value != null) {
+            ui.label_args_set_value.invoke(args, value.valuePtr);
+        }
+
+        return args;
+    }
+}
diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java b/ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java
new file mode 100644 (file)
index 0000000..9334f7a
--- /dev/null
@@ -0,0 +1,34 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.*;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+public class LabelFuncs {
+    static LabelFuncs instance;
+
+    public MethodHandle label_create;
+    public MethodHandle llabel_create;
+    public MethodHandle rlabel_create;
+
+    private LabelFuncs(Linker linker, SymbolLookup lib) {
+        // void* func(void*, void*)
+        FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+
+        MemorySegment ui_label_create_addr = lib.find("ui_label_create").orElseThrow();
+        MemorySegment ui_llabel_create_addr = lib.find("ui_llabel_create").orElseThrow();
+        MemorySegment ui_rlabel_create_addr = lib.find("ui_rlabel_create").orElseThrow();
+
+        label_create = linker.downcallHandle(ui_label_create_addr, sigm_mm);
+        llabel_create = linker.downcallHandle(ui_llabel_create_addr, sigm_mm);
+        rlabel_create = linker.downcallHandle(ui_rlabel_create_addr, sigm_mm);
+    }
+
+    static LabelFuncs getInstance() {
+        if (instance == null) {
+            Toolkit toolkit = Toolkit.getInstance();
+            instance = new LabelFuncs(toolkit.getLinker(), toolkit.getSymbolLookup());
+        }
+        return instance;
+    }
+}
diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelStyle.java b/ui-java/src/main/java/de/unixwork/ui/LabelStyle.java
new file mode 100644 (file)
index 0000000..91aa7dd
--- /dev/null
@@ -0,0 +1,8 @@
+package de.unixwork.ui;
+
+public enum LabelStyle {
+    DEFAULT,
+    TITLE,
+    SUBTITLE,
+    DIM
+}
index 1fc1bdc3899ba0136e898f14e7ea6637b07c4d0d..59c482d39636933308d613529406de2421e1dedf 100644 (file)
@@ -125,7 +125,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
 
         args = (MemorySegment)ui.toggle_args_new.invoke();
         if(fill) {
-            // TODO
+            ui.toggle_args_set_fill.invoke(args, fill);
         }
         if(hexpand) {
             ui.toggle_args_set_hexpand.invoke(args, hexpand);
index 882c4d4f7ff65858be83a2053f7cb6ad2921b9df..014de020a4ecfcb21b7312f6f54f8328fcebdf4d 100644 (file)
@@ -427,6 +427,12 @@ class Toplevel(obj: UiObject) {
         label?.let {
             button.label(it)
         }
+        stockId?.let {
+            button.stockId(it)
+        }
+        icon?.let {
+            button.icon(it)
+        }
         if(fill) {
             button.fill(fill);
         }