]> uap-core.de Git - rssreader.git/commitdiff
add filedialog functions
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 7 Aug 2025 17:34:41 +0000 (19:34 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 7 Aug 2025 17:34:41 +0000 (19:34 +0200)
ui-java/src/main/java/de/unixwork/ui/Dialog.java
ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java

index 1ffe25d23f0644c1f74eabda6946bb535bb0a0a2..19f5f85a944e1424f360288a82d4100fea194683 100644 (file)
@@ -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);
+    }
 }
index 220a61d6a4517a47113b17165f9cda130c781c80..faeb691f6e82865b0e3374dbd904c1717dd0f43d 100644 (file)
@@ -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);
+        }
     }
 }