diff options
Diffstat (limited to 'src/gui/platform')
| -rw-r--r-- | src/gui/platform/wasm/qwasmlocalfileaccess.cpp | 38 | ||||
| -rw-r--r-- | src/gui/platform/wasm/qwasmlocalfileaccess_p.h | 7 |
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 |
