]> uap-core.de Git - rssreader.git/commitdiff
add UiRange
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Sep 2025 18:22:19 +0000 (20:22 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Sep 2025 18:22:19 +0000 (20:22 +0200)
ui-java/src/main/java/de/unixwork/ui/Context.java
ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java
ui-java/src/main/java/de/unixwork/ui/UiRange.java [new file with mode: 0644]

index 7032847837c8c26c973c12d6a8abdf145b32026e..b671cd9192cace4218e7cff3a6da57658fe1ee01 100644 (file)
@@ -48,6 +48,22 @@ public abstract class Context {
         return new UiInteger(this, name);
     }
 
+    public UiDouble number() {
+        return number(null);
+    }
+
+    public UiDouble number(String name) {
+        return new UiDouble(this, name);
+    }
+
+    public UiRange range() {
+        return range(null);
+    }
+
+    public UiRange range(String name) {
+        return new UiRange(this, name);
+    }
+
     public WebView webview() {
         return webview(null);
     }
index 68548b26e9c4197499566ec29624fc5e6f2f2268..d53107fd0759db8df77496adfe7245df284ca2a8 100644 (file)
@@ -60,6 +60,13 @@ public class ToolkitFuncs {
     public MethodHandle int_get;
     public MethodHandle double_set;
     public MethodHandle double_get;
+    public MethodHandle range_set;
+    public MethodHandle range_get;
+    public MethodHandle range_set_range;
+    public MethodHandle range_get_min;
+    public MethodHandle range_get_max;
+    public MethodHandle range_set_extent;
+    public MethodHandle range_get_extent;
     public MethodHandle text_set;
     public MethodHandle text_get;
 
@@ -100,6 +107,9 @@ public class ToolkitFuncs {
         FunctionDescriptor sigm_l = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.JAVA_LONG);
         FunctionDescriptor sigv_miii = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT);
         FunctionDescriptor sigv_mmimi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
+        FunctionDescriptor sigv_md = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE);
+        FunctionDescriptor sigd_m = FunctionDescriptor.of(ValueLayout.JAVA_DOUBLE, ValueLayout.ADDRESS);
+        FunctionDescriptor sigv_mdd = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE, ValueLayout.JAVA_DOUBLE);
 
         MemorySegment object_get_context_addr = lib.find("ui_object_get_context").orElseThrow();
 
@@ -157,6 +167,13 @@ public class ToolkitFuncs {
         MemorySegment double_get_addr = lib.find("ui_double_get").orElseThrow();
         MemorySegment text_set_addr = lib.find("ui_text_set").orElseThrow();
         MemorySegment text_get_addr = lib.find("ui_text_get").orElseThrow();
+        MemorySegment range_set_addr = lib.find("ui_range_set").orElseThrow();
+        MemorySegment range_get_addr = lib.find("ui_range_get").orElseThrow();
+        MemorySegment range_set_range_addr = lib.find("ui_range_set_range").orElseThrow();
+        MemorySegment range_get_min_addr = lib.find("ui_range_get_min").orElseThrow();
+        MemorySegment range_get_max_addr = lib.find("ui_range_get_max").orElseThrow();
+        MemorySegment range_set_extent_addr = lib.find("ui_range_set_extent").orElseThrow();
+        MemorySegment range_get_extent_addr = lib.find("ui_range_get_extent").orElseThrow();
 
         MemorySegment model_new_addr = lib.find("ui_model_new").orElseThrow();
         MemorySegment model_add_column_addr = lib.find("ui_model_add_column").orElseThrow();
@@ -233,10 +250,17 @@ public class ToolkitFuncs {
         string_get = linker.downcallHandle(string_get_addr, sigm_m);
         int_set = linker.downcallHandle(int_set_addr, FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_LONG));
         int_get = linker.downcallHandle(int_get_addr, FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS));
-        double_set = linker.downcallHandle(double_set_addr, FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE));
-        double_get = linker.downcallHandle(double_get_addr, FunctionDescriptor.of(ValueLayout.JAVA_DOUBLE, ValueLayout.ADDRESS));
+        double_set = linker.downcallHandle(double_set_addr, sigv_md);
+        double_get = linker.downcallHandle(double_get_addr, sigd_m);
         text_set = linker.downcallHandle(text_set_addr, sigv_mm);
         text_get = linker.downcallHandle(text_get_addr, sigm_m);
+        range_set = linker.downcallHandle(range_set_addr, sigv_md);
+        range_get = linker.downcallHandle(range_get_addr, sigd_m);
+        range_set_range = linker.downcallHandle(range_set_range_addr, sigv_mdd);
+        range_get_min = linker.downcallHandle(range_get_min_addr, sigd_m);
+        range_get_max = linker.downcallHandle(range_get_max_addr, sigd_m);
+        range_set_extent = linker.downcallHandle(range_set_extent_addr, sigv_md);
+        range_get_extent = linker.downcallHandle(range_get_extent_addr, sigd_m);
 
         model_new = linker.downcallHandle(model_new_addr, sigm_m);
         model_add_column = linker.downcallHandle(model_add_column_addr, sigv_mmimi);
diff --git a/ui-java/src/main/java/de/unixwork/ui/UiRange.java b/ui-java/src/main/java/de/unixwork/ui/UiRange.java
new file mode 100644 (file)
index 0000000..0703b16
--- /dev/null
@@ -0,0 +1,75 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class UiRange {
+    protected MemorySegment valuePtr;
+
+    protected UiRange(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.range_new.invoke(ctx.getCtx(), nameCStr);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public double doubleValue() {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try {
+            return (double)ui.double_get.invoke(valuePtr);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDoubleValue(double value) {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            ui.range_set.invoke(valuePtr, value);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setRange(double min, double max) {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            ui.range_set_range.invoke(valuePtr, min, max);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setExtent(double extent) {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            ui.range_set_extent.invoke(valuePtr, extent);
+        } catch (Throwable e) {}
+    }
+
+    public double getMin() {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            return (double) ui.range_get_min.invoke(valuePtr);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public double getMax() {
+        ToolkitFuncs ui = ToolkitFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            return (double) ui.range_get_max.invoke(valuePtr);
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+}