From: Olaf Wintermann Date: Sat, 5 Jul 2025 16:36:45 +0000 (+0200) Subject: add UiText and UiDouble types X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=2fa947e1d34d153e7f4f846f7680d765bd27e839;p=rssreader.git add UiText and UiDouble types --- diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index f858b75..3df12f4 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -48,7 +48,7 @@ public class ToolkitFuncs { // void* func(void*) FunctionDescriptor sigm_m = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS); - FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS); + FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS); FunctionDescriptor sigm_l = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.JAVA_LONG); diff --git a/ui-java/src/main/java/de/unixwork/ui/UiDouble.java b/ui-java/src/main/java/de/unixwork/ui/UiDouble.java new file mode 100644 index 0000000..7b5b790 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/UiDouble.java @@ -0,0 +1,42 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; + +public class UiDouble { + protected MemorySegment valuePtr; + + protected UiDouble(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.double_new.invoke(ctx.getCtx(), nameCStr); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public double doubleValue() { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try { + Double value = (Double) ui.double_get.invoke(valuePtr); + return value.doubleValue(); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public void setDoubleValue(double value) { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try (Arena arena = Arena.ofConfined()) { + ui.int_set.invoke(valuePtr, value); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/UiInteger.java b/ui-java/src/main/java/de/unixwork/ui/UiInteger.java index e3b89e6..c6d5a84 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiInteger.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiInteger.java @@ -25,7 +25,7 @@ public class UiInteger { ToolkitFuncs ui = ToolkitFuncs.getInstance(); try { Integer value = (Integer) ui.int_get.invoke(valuePtr); - return intValue(); + return value.intValue(); } catch (Throwable e) { throw new RuntimeException(e); } diff --git a/ui-java/src/main/java/de/unixwork/ui/UiText.java b/ui-java/src/main/java/de/unixwork/ui/UiText.java new file mode 100644 index 0000000..834ad5f --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/UiText.java @@ -0,0 +1,46 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; + +public class UiText { + protected MemorySegment valuePtr; + + protected UiText(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.text_new.invoke(ctx.getCtx(), nameCStr); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public String toString() { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try { + MemorySegment cstr = (MemorySegment) ui.text_get.invoke(valuePtr); + if (cstr != null && cstr.address() != 0) { + return cstr.getString(0); + } + } catch (Throwable e) { + throw new RuntimeException(e); + } + return null; + } + + public void setText(String string) { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try (Arena arena = Arena.ofConfined()) { + MemorySegment cstr = arena.allocateFrom(string); + ui.text_set.invoke(valuePtr, cstr); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } +} diff --git a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java index b044a5f..a8d0918 100644 --- a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java +++ b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java @@ -4,6 +4,15 @@ import de.unixwork.ui.*; import static java.awt.SystemColor.window; +class MyDocument extends Document { + @Var(name = "string") + UiString string; + + MyDocument() { + + } +} + public class Main implements Application{ public void startup() { UiObject window = UiObject.createWindow("Test Window"); @@ -13,6 +22,8 @@ public class Main implements Application{ mylist.add("Test3"); mylist.add("Test4"); + MyDocument doc = new MyDocument(); + Button.button(window).label("Click Me").onClick(event -> { System.out.println("Clicked"); }).create();