From 4e5c650621ad31aad88a410734f9e46769a9b30d Mon Sep 17 00:00:00 2001 From: vladest Date: Wed, 16 Aug 2017 21:41:18 +0200 Subject: [PATCH] Modified some usecases for async dialogs --- interface/src/Application.cpp | 18 +++++--- interface/src/AvatarBookmarks.cpp | 41 ++++++++++--------- interface/src/LocationBookmarks.cpp | 29 +++++++------ .../scripting/WindowScriptingInterface.cpp | 16 +++++--- .../src/scripting/WindowScriptingInterface.h | 3 +- scripts/system/edit.js | 20 +++++---- 6 files changed, 74 insertions(+), 53 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 936a0bac6b..effbb35ece 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6849,12 +6849,18 @@ void Application::setPreviousScriptLocation(const QString& location) { } void Application::loadScriptURLDialog() const { - QString newScript = OffscreenUi::getText(OffscreenUi::ICON_NONE, "Open and Run Script", "Script URL"); - if (QUrl(newScript).scheme() == "atp") { - OffscreenUi::asyncWarning("Error Loading Script", "Cannot load client script over ATP"); - } else if (!newScript.isEmpty()) { - DependencyManager::get()->loadScript(newScript.trimmed()); - } + auto offscreenUi = DependencyManager::get(); + connect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, [=] (QVariant response) { + disconnect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, nullptr); + auto offscreenUi = DependencyManager::get(); + const QString& newScript = response.toString(); + if (QUrl(newScript).scheme() == "atp") { + OffscreenUi::asyncWarning("Error Loading Script", "Cannot load client script over ATP"); + } else if (!newScript.isEmpty()) { + DependencyManager::get()->loadScript(newScript.trimmed()); + } + }); + OffscreenUi::getTextAsync(OffscreenUi::ICON_NONE, "Open and Run Script", "Script URL"); } void Application::loadLODToolsDialog() { diff --git a/interface/src/AvatarBookmarks.cpp b/interface/src/AvatarBookmarks.cpp index 73192b0bef..7c42effbc2 100644 --- a/interface/src/AvatarBookmarks.cpp +++ b/interface/src/AvatarBookmarks.cpp @@ -106,30 +106,31 @@ void AvatarBookmarks::changeToBookmarkedAvatar() { } void AvatarBookmarks::addBookmark() { - bool ok = false; - auto bookmarkName = OffscreenUi::getText(OffscreenUi::ICON_PLACEMARK, "Bookmark Avatar", "Name", QString(), &ok); - if (!ok) { - return; - } + auto offscreenUi = DependencyManager::get(); + connect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, [=] (QVariant response) { + disconnect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, nullptr); + auto offscreenUi = DependencyManager::get(); + auto bookmarkName = response.toString(); + bookmarkName = bookmarkName.trimmed().replace(QRegExp("(\r\n|[\r\n\t\v ])+"), " "); + if (bookmarkName.length() == 0) { + return; + } - bookmarkName = bookmarkName.trimmed().replace(QRegExp("(\r\n|[\r\n\t\v ])+"), " "); - if (bookmarkName.length() == 0) { - return; - } + auto myAvatar = DependencyManager::get()->getMyAvatar(); - auto myAvatar = DependencyManager::get()->getMyAvatar(); + const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); + const QVariant& avatarScale = myAvatar->getAvatarScale(); - const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); - const QVariant& avatarScale = myAvatar->getAvatarScale(); + // If Avatar attachments ever change, this is where to update them, when saving remember to also append to AVATAR_BOOKMARK_VERSION + QVariantMap *bookmark = new QVariantMap; + bookmark->insert(ENTRY_VERSION, AVATAR_BOOKMARK_VERSION); + bookmark->insert(ENTRY_AVATAR_URL, avatarUrl); + bookmark->insert(ENTRY_AVATAR_SCALE, avatarScale); + bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant()); - // If Avatar attachments ever change, this is where to update them, when saving remember to also append to AVATAR_BOOKMARK_VERSION - QVariantMap *bookmark = new QVariantMap; - bookmark->insert(ENTRY_VERSION, AVATAR_BOOKMARK_VERSION); - bookmark->insert(ENTRY_AVATAR_URL, avatarUrl); - bookmark->insert(ENTRY_AVATAR_SCALE, avatarScale); - bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant()); - - Bookmarks::addBookmarkToFile(bookmarkName, *bookmark); + Bookmarks::addBookmarkToFile(bookmarkName, *bookmark); + }); + OffscreenUi::getTextAsync(OffscreenUi::ICON_PLACEMARK, "Bookmark Avatar", "Name", QString()); } void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) { diff --git a/interface/src/LocationBookmarks.cpp b/interface/src/LocationBookmarks.cpp index eee6cdf3c8..ee8e546b16 100644 --- a/interface/src/LocationBookmarks.cpp +++ b/interface/src/LocationBookmarks.cpp @@ -70,20 +70,23 @@ void LocationBookmarks::teleportToBookmark() { } void LocationBookmarks::addBookmark() { - bool ok = false; - auto bookmarkName = OffscreenUi::getText(OffscreenUi::ICON_PLACEMARK, "Bookmark Location", "Name", QString(), &ok); - if (!ok) { - return; - } + auto offscreenUi = DependencyManager::get(); + connect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, [=] (QVariant response) { + disconnect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, this, nullptr); + auto offscreenUi = DependencyManager::get(); + auto bookmarkName = response.toString(); - bookmarkName = bookmarkName.trimmed().replace(QRegExp("(\r\n|[\r\n\t\v ])+"), " "); - if (bookmarkName.length() == 0) { - return; - } + bookmarkName = bookmarkName.trimmed().replace(QRegExp("(\r\n|[\r\n\t\v ])+"), " "); + if (bookmarkName.length() == 0) { + return; + } - auto addressManager = DependencyManager::get(); - QString bookmarkAddress = addressManager->currentAddress().toString(); - Bookmarks::addBookmarkToFile(bookmarkName, bookmarkAddress); + auto addressManager = DependencyManager::get(); + QString bookmarkAddress = addressManager->currentAddress().toString(); + Bookmarks::addBookmarkToFile(bookmarkName, bookmarkAddress); + }); + + OffscreenUi::getTextAsync(OffscreenUi::ICON_PLACEMARK, "Bookmark Location", "Name", QString()); } void LocationBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& address) { @@ -97,4 +100,4 @@ void LocationBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, co menubar->addActionToQMenuAndActionHash(_bookmarksMenu, teleportAction, name, 0, QAction::NoRole); Bookmarks::sortActions(menubar, _bookmarksMenu); } -} \ No newline at end of file +} diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 512d79adb2..d5c645d176 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -116,11 +116,17 @@ QScriptValue WindowScriptingInterface::confirm(const QString& message) { /// Display a prompt with a text box /// \param const QString& message message to display /// \param const QString& defaultText default text in the text box -/// \return QScriptValue string text value in text box if the dialog was accepted, `null` otherwise. -QScriptValue WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) { - bool ok = false; - QString result = OffscreenUi::getText(nullptr, "", message, QLineEdit::Normal, defaultText, &ok); - return ok ? QScriptValue(result) : QScriptValue::NullValue; +void WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) { + auto offscreenUi = DependencyManager::get(); + connect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, + this, [=] (QVariant result) { + auto offscreenUi = DependencyManager::get(); + disconnect(offscreenUi.data(), &OffscreenUi::inputDialogResponse, + this, nullptr); + emit promptTextChanged(result.toString()); + }); + + OffscreenUi::getTextAsync(nullptr, "", message, QLineEdit::Normal, defaultText); } CustomPromptResult WindowScriptingInterface::customPrompt(const QVariant& config) { diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 8ae315d05c..401f47bcdd 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -51,7 +51,7 @@ public slots: void raiseMainWindow(); void alert(const QString& message = ""); QScriptValue confirm(const QString& message = ""); - QScriptValue prompt(const QString& message = "", const QString& defaultText = ""); + void prompt(const QString& message = "", const QString& defaultText = ""); CustomPromptResult customPrompt(const QVariant& config); void browseDir(const QString& title = "", const QString& directory = ""); void browse(const QString& title = "", const QString& directory = "", const QString& nameFilter = ""); @@ -91,6 +91,7 @@ signals: void assetsDirChanged(QString assetsDir); void saveFileChanged(QString filename); void openFileChanged(QString filename); + void promptTextChanged(QString text); // triggered when window size or position changes void geometryChanged(QRect geometry); diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 8d57c37bf6..1828146182 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1473,6 +1473,16 @@ function onFileOpenChanged(filename) { } } +function onPromptTextChanged(prompt) { + Window.promptTextChanged.disconnect(onPromptTextChanged); + if (prompt !== "") { + if (!isActive && (Entities.canRez() && Entities.canRezTmp())) { + toolBar.toggle(); + } + importSVO(prompt); + } +} + function handeMenuEvent(menuItem) { if (menuItem === "Allow Selecting of Small Models") { allowSmallModels = Menu.isOptionChecked("Allow Selecting of Small Models"); @@ -1498,14 +1508,8 @@ function handeMenuEvent(menuItem) { Window.openFileChanged.connect(onFileOpenChanged); Window.browse("Select Model to Import", "", "*.json"); } else { - var importURL = Window.prompt("URL of SVO to import", ""); - if (importURL) { - if (!isActive && (Entities.canRez() && Entities.canRezTmp())) { - toolBar.toggle(); - } - importSVO(importURL); - } - + Window.promptTextChanged.connect(onFileOpenChanged); + Window.prompt("URL of SVO to import", ""); } } else if (menuItem === "Entity List...") { entityListTool.toggleVisible();