From: Olaf Wintermann Date: Thu, 7 Aug 2025 17:34:41 +0000 (+0200) Subject: add filedialog functions X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=fd820be7264881f62e5a10a0f4274db015d4bd8b;p=rssreader.git add filedialog functions --- diff --git a/ui-java/src/main/java/de/unixwork/ui/Dialog.java b/ui-java/src/main/java/de/unixwork/ui/Dialog.java index 1ffe25d..19f5f85 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Dialog.java +++ b/ui-java/src/main/java/de/unixwork/ui/Dialog.java @@ -4,6 +4,10 @@ import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; public class Dialog { + static final int FILEDIALOG_SELECT_SINGLE = 0; + static final int FILEDIALOG_SELECT_MULTI = 1; + static final int FILEDIALOG_SELECT_FOLDER = 2; + private UiObject parent; private String title; @@ -110,4 +114,14 @@ public class Dialog { throw new RuntimeException(e); } } + + public static void openFileDialog(UiObject obj, int mode, EventHandler callback) { + UiObjectFuncs ui = UiObjectFuncs.instance; + ui.openFileDialog(obj, mode, callback); + } + + public static void saveFileDialog(UiObject obj, String name, EventHandler callback) { + UiObjectFuncs ui = UiObjectFuncs.instance; + ui.saveFileDialog(obj, name, callback); + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java index 220a61d..faeb691 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java @@ -107,10 +107,20 @@ class UiObjectFuncs { } public void openFileDialog(UiObject obj, int mode, EventHandler callback) { - EventWrapper ew = new EventWrapper(callback); + EventWrapper ew = new EventWrapper(callback, true); + try { + ui_openfiledialog.invoke(obj.ptr, mode, ew.getCallback(), ew.getUserData()); + } catch (Throwable e) { + throw new RuntimeException(e); + } } public void saveFileDialog(UiObject obj, String name, EventHandler callback) { - + EventWrapper ew = new EventWrapper(callback, true); + try (Arena arena = Arena.ofConfined()) { + ui_savefiledialog.invoke(obj.ptr, arena.allocateFrom(name), ew.getCallback(), ew.getUserData()); + } catch (Throwable e) { + throw new RuntimeException(e); + } } }