bug 116: x11 file dialog
[org.ibex.core.git] / src / org / ibex / plat / X11.cc
index 0252a81..62672d7 100644 (file)
@@ -769,6 +769,31 @@ void org::ibex::plat::X11::natInit() {
     org::ibex::util::Log::info(this->getClass(), JvNewStringLatin1(buf));
 }
 
+#include "WINGs/WINGs.h"
+jstring org::ibex::plat::X11::_fileDialog(jstring suggestedFileName, jboolean write) {
+  int argc = 1;
+  char* argv[2];
+  argv[0] = "Ibex";
+  argv[1] = NULL;
+  // FIXME see WINGs/Tests/filedialog.c for more info... need an icon
+  WMInitializeApplication("Ibex", &argc, argv);
+  WMScreen *scr = WMCreateSimpleApplicationScreen(display);
+  int len = min(1024, JvGetStringUTFLength(suggestedFileName));
+  char buf[len + 1];
+  JvGetStringUTFRegion(suggestedFileName, 0, len, buf);
+  buf[len] = '\0';
+  if (write) {
+    WMSavePanel *sPanel;
+    sPanel = WMGetSavePanel(scr);
+    if (WMRunModalFilePanelForDirectory(sPanel, NULL, buf, /*title*/ NULL, NULL) != True) return NULL;
+    return JvNewStringLatin1(WMGetFilePanelFileName(sPanel));
+  } else {
+    WMOpenPanel *oPanel;
+    oPanel = WMGetOpenPanel(scr);
+    if (WMRunModalFilePanelForDirectory(oPanel, NULL, buf, /*title*/ NULL, NULL) != True) return NULL;
+    return JvNewStringLatin1(WMGetFilePanelFileName(oPanel));
+  }
+}
 
 
 //////////////////////////////////////////////////////////////////////////////