summaryrefslogtreecommitdiffstats
path: root/src/gui/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/platform')
-rw-r--r--src/gui/platform/wasm/qwasmlocalfileaccess.cpp38
-rw-r--r--src/gui/platform/wasm/qwasmlocalfileaccess_p.h7
2 files changed, 45 insertions, 0 deletions
diff --git a/src/gui/platform/wasm/qwasmlocalfileaccess.cpp b/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
index 051e2b1a04e..8d06821d4c1 100644
--- a/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
+++ b/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
@@ -285,6 +285,44 @@ void saveFile(const char *content, size_t size, const std::string &fileNameHint)
});
}
+void showOpenFileDialog(const std::string &accept,
+ const std::function<void (bool accepted, std::vector<qstdweb::File> files)> fileDialogClosed)
+{
+ FileDialog::showOpen(makeFilterList(accept), FileSelectMode::MultipleFiles, {
+ .thenFunc = [=](emscripten::val result) {
+ if (result.isUndefined() || result.isNull()) {
+ fileDialogClosed(false, std::vector<qstdweb::File>());
+ } else {
+ std::vector<qstdweb::File> files;
+ int length = result["length"].as<int>();
+ files.reserve(length);
+ for (int i = 0; i < length; ++i) {
+ emscripten::val fileVal = result[i];
+ if (!fileVal.isUndefined() && !fileVal.isNull()) {
+ files.push_back(qstdweb::File(fileVal));
+ }
+ }
+ fileDialogClosed(true, files);
+ }
+ },
+ .catchFunc = [=](emscripten::val) {
+ fileDialogClosed(false, std::vector<qstdweb::File>());
+ }
+ });
+}
+
+void showSaveFileDialog(const std::string &fileNameHint, const std::function<void (bool accepted, qstdweb::FileSystemFileHandle fileHandle)> fileDialogClosed)
+{
+ FileDialog::showSave(fileNameHint, {
+ .thenFunc = [=](emscripten::val result) {
+ fileDialogClosed(true, qstdweb::FileSystemFileHandle(result));
+ },
+ .catchFunc = [=](emscripten::val) {
+ fileDialogClosed(false, qstdweb::FileSystemFileHandle());
+ }
+ });
+}
+
} // namespace QWasmLocalFileAccess
QT_END_NAMESPACE
diff --git a/src/gui/platform/wasm/qwasmlocalfileaccess_p.h b/src/gui/platform/wasm/qwasmlocalfileaccess_p.h
index 77b14577f7e..5597746a5f3 100644
--- a/src/gui/platform/wasm/qwasmlocalfileaccess_p.h
+++ b/src/gui/platform/wasm/qwasmlocalfileaccess_p.h
@@ -16,6 +16,7 @@
//
#include <private/qglobal_p.h>
+#include <private/qstdweb_p.h>
#include <cstdint>
#include <functional>
@@ -38,6 +39,12 @@ Q_CORE_EXPORT void openFile(const std::string &accept,
Q_CORE_EXPORT void saveFile(const QByteArray &data, const std::string &fileNameHint);
Q_CORE_EXPORT void saveFile(const char *content, size_t size, const std::string &fileNameHint);
+Q_CORE_EXPORT void showOpenFileDialog(const std::string &accept,
+ const std::function<void (bool accepted, std::vector<qstdweb::File> files)> fileDialogClosed);
+Q_CORE_EXPORT void showSaveFileDialog(const std::string &fileNameHint,
+ const std::function<void (bool accepted, qstdweb::FileSystemFileHandle fileHandle)> fileDialogClosed);
+
+
} // namespace QWasmLocalFileAccess
QT_END_NAMESPACE