]> uap-core.de Git - rssreader.git/commitdiff
add UiInteger class, allow passing UiInteger value to toggle buttons
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 20 Jun 2025 11:05:47 +0000 (13:05 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 20 Jun 2025 11:05:47 +0000 (13:05 +0200)
ui-java/src/main/java/de/unixwork/ui/Context.java
ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java
ui-java/src/main/java/de/unixwork/ui/UiInteger.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/UiString.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index f087a7c85334f55888553ce944a7a3f10dd58154..c42ec8a62b670032db07ee73fe0f2593969aa74a 100644 (file)
@@ -24,6 +24,14 @@ public abstract class Context {
         return new UiString(this, name);
     }
 
+    public UiInteger integer() {
+        return integer(null);
+    }
+
+    public UiInteger integer(String name) {
+        return new UiInteger(this, name);
+    }
+
     public void attach(Document doc) {
         ToolkitFuncs ui = ToolkitFuncs.getInstance();
         try {
index ff10b4d2404b42d5da45a84efc972a4347038e31..02277b4608be01ae191585c174a2f808f3c0c616 100644 (file)
@@ -20,6 +20,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
     private String icon;
     private int labelType;
     private String varname;
+    private UiInteger value;
     private EventHandler onChange;
     private int[] states;
 
@@ -103,6 +104,11 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
         return this;
     }
 
+    public ToggleBuilder value(UiInteger value) {
+        this.value = value;
+        return this;
+    }
+
     public ToggleBuilder onChange(EventHandler onChange) {
         this.onChange = onChange;
         return this;
@@ -167,6 +173,9 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
             MemorySegment cstr = arena.allocateFrom(varname);
             ui.toggle_args_set_varname.invoke(args, cstr);
         }
+        if(value != null) {
+            ui.toggle_args_set_value.invoke(args, value.valuePtr);
+        }
         
         if(onChange != null) {
             // TODO
diff --git a/ui-java/src/main/java/de/unixwork/ui/UiInteger.java b/ui-java/src/main/java/de/unixwork/ui/UiInteger.java
new file mode 100644 (file)
index 0000000..e3b89e6
--- /dev/null
@@ -0,0 +1,42 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class UiInteger {
+    protected MemorySegment valuePtr;
+
+    protected UiInteger(Context ctx, String name) {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+
+        MemorySegment nameCStr = MemorySegment.NULL;
+        try (Arena arena = Arena.ofConfined()) {
+            if(name != null) {
+                nameCStr = arena.allocateFrom(name);
+            }
+
+            valuePtr = (MemorySegment) ui.int_new.invoke(ctx.getCtx(), nameCStr);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public int intValue() {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try {
+            Integer value = (Integer) ui.int_get.invoke(valuePtr);
+            return intValue();
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setIntValue(int value) {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            ui.int_set.invoke(valuePtr, value);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
index 3fd5d690c7844d7e06e81091f0459a0175bf9dff..14228e1fd545ce7b5e031fd41cfefa54b3461b89 100644 (file)
@@ -4,7 +4,7 @@ import java.lang.foreign.Arena;
 import java.lang.foreign.MemorySegment;
 
 public class UiString {
-    private MemorySegment valuePtr;
+    protected MemorySegment valuePtr;
 
     protected UiString(Context ctx, String name) {
         ToolkitFuncs ui = ToolkitFuncs.getInstance();
index f006fd88256e539abc841f522e53a06cabb45ec9..3591d70d178b6686b04403562fd6b1a67258a3ed 100644 (file)
@@ -5,6 +5,7 @@ import de.unixwork.ui.ButtonBuilder
 import de.unixwork.ui.EventHandler
 import de.unixwork.ui.EventWrapper.eventHandler
 import de.unixwork.ui.ToggleBuilder
+import de.unixwork.ui.UiInteger
 import de.unixwork.ui.UiObject
 import de.unixwork.ui.UiWidget
 import java.lang.foreign.MemorySegment
@@ -83,6 +84,7 @@ class Toplevel(obj: UiObject) {
         stockId: String? = null,
         icon: String? = null,
         varname: String? = null,
+        value: UiInteger? = null,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -101,6 +103,9 @@ class Toplevel(obj: UiObject) {
         varname?.let {
             button.varname(it)
         }
+        value?.let {
+            button.value(it)
+        }
         // TODO: fill
         if(hexpand) {
             button.hexpand(true)
@@ -143,6 +148,7 @@ class Toplevel(obj: UiObject) {
         stockId: String? = null,
         icon: String? = null,
         varname: String? = null,
+        value: UiInteger? = null,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -161,6 +167,7 @@ class Toplevel(obj: UiObject) {
             stockId = stockId,
             icon = icon,
             varname = varname,
+            value = value,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,
@@ -180,6 +187,7 @@ class Toplevel(obj: UiObject) {
         stockId: String? = null,
         icon: String? = null,
         varname: String? = null,
+        value: UiInteger? = null,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -198,6 +206,7 @@ class Toplevel(obj: UiObject) {
             stockId = stockId,
             icon = icon,
             varname = varname,
+            value = value,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,
@@ -217,6 +226,7 @@ class Toplevel(obj: UiObject) {
         stockId: String? = null,
         icon: String? = null,
         varname: String? = null,
+        value: UiInteger? = null,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -235,6 +245,7 @@ class Toplevel(obj: UiObject) {
             stockId = stockId,
             icon = icon,
             varname = varname,
+            value = value,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,
@@ -254,6 +265,7 @@ class Toplevel(obj: UiObject) {
         stockId: String? = null,
         icon: String? = null,
         varname: String? = null,
+        value: UiInteger? = null,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -272,6 +284,7 @@ class Toplevel(obj: UiObject) {
             stockId = stockId,
             icon = icon,
             varname = varname,
+            value = value,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,