History

Reworked WindowScriptingInterface browse method for async methods

vladest committed 9 years ago

Commit 273261e1 parent 8afdb273 files · +42 −32Browse files

Showing the changes to interface/src/scripting/WindowScriptingInterface.cpp (1 of 3 files). Show all

Unified · Split

interface/src/scripting/WindowScriptingInterface.cpp+14−7
@@ -203,8 +203,7 @@ void WindowScriptingInterface::browseDir(const QString& title, const QString& di · 202 unmodified lines
203203 /// \param const QString& title title of the window
204204 /// \param const QString& directory directory to start the file browser at
205205 /// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog`
206−/// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue`
207−QScriptValue WindowScriptingInterface::browse(const QString& title, const QString& directory, const QString& nameFilter) {
206+void WindowScriptingInterface::browse(const QString& title, const QString& directory, const QString& nameFilter) {
208207 ensureReticleVisible();
209208 QString path = directory;
210209 if (path.isEmpty()) {
@@ -213,11 +212,19 @@ QScriptValue WindowScriptingInterface::browse(const QString& title, const QStrin · 2 unmodified lines
213212 #ifndef Q_OS_WIN
214213 path = fixupPathForMac(directory);
215214 #endif
216− QString result = OffscreenUi::getOpenFileName(nullptr, title, path, nameFilter);
217− if (!result.isEmpty()) {
218− setPreviousBrowseLocation(QFileInfo(result).absolutePath());
219− }
220− return result.isEmpty() ? QScriptValue::NullValue : QScriptValue(result);
215+ auto offscreenUi = DependencyManager::get<OffscreenUi>();
216+ connect(offscreenUi.data(), &OffscreenUi::fileDialogResponse,
217+ this, [=] (QString result) {
218+ auto offscreenUi = DependencyManager::get<OffscreenUi>();
219+ disconnect(offscreenUi.data(), &OffscreenUi::fileDialogResponse,
220+ this, nullptr);
221+ if (!result.isEmpty()) {
222+ setPreviousBrowseLocation(QFileInfo(result).absolutePath());
223+ }
224+ emit openFileChanged(result);
225+ });
226+
227+ OffscreenUi::getOpenFileNameAsync(nullptr, title, path, nameFilter);
221228 }
222229
223230 /// Display a save file dialog. If `directory` is an invalid file or directory the browser will start at the current