From 432bb2711997d2a356904d26e5cb91eb461f1ccb Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 23 Jan 2017 18:34:59 -0800 Subject: [PATCH] The tablet Help button should be active if window is visible --- interface/src/scripting/MenuScriptingInterface.cpp | 7 +++++++ interface/src/scripting/MenuScriptingInterface.h | 1 + libraries/ui/src/OffscreenUi.cpp | 9 +++++++++ libraries/ui/src/OffscreenUi.h | 1 + libraries/ui/src/ui/Menu.cpp | 5 +++++ libraries/ui/src/ui/Menu.h | 1 + scripts/system/help.js | 10 ++++++++++ 7 files changed, 34 insertions(+) diff --git a/interface/src/scripting/MenuScriptingInterface.cpp b/interface/src/scripting/MenuScriptingInterface.cpp index 06f0f4acb5..cf186271d2 100644 --- a/interface/src/scripting/MenuScriptingInterface.cpp +++ b/interface/src/scripting/MenuScriptingInterface.cpp @@ -151,3 +151,10 @@ void MenuScriptingInterface::closeInfoView(const QString& path) { QMetaObject::invokeMethod(Menu::getInstance(), "closeInfoView", Q_ARG(const QString&, path)); } +bool MenuScriptingInterface::isInfoViewVisible(const QString& path) { + bool result; + QMetaObject::invokeMethod(Menu::getInstance(), "isInfoViewVisible", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, result), Q_ARG(const QString&, path)); + return result; +} + diff --git a/interface/src/scripting/MenuScriptingInterface.h b/interface/src/scripting/MenuScriptingInterface.h index b1b4a75366..b9c29ccf08 100644 --- a/interface/src/scripting/MenuScriptingInterface.h +++ b/interface/src/scripting/MenuScriptingInterface.h @@ -183,6 +183,7 @@ public slots: void setMenuEnabled(const QString& menuName, bool isEnabled); void closeInfoView(const QString& path); + bool isInfoViewVisible(const QString& path); signals: /**jsdoc diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 918fb7b54a..7724a409f0 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -130,6 +130,15 @@ void OffscreenUi::hide(const QString& name) { } } +bool OffscreenUi::isVisible(const QString& name) { + QQuickItem* item = getRootItem()->findChild(name); + if (item) { + return QQmlProperty(item, OFFSCREEN_VISIBILITY_PROPERTY).read().toBool(); + } else { + return false; + } +} + class ModalDialogListener : public QObject { Q_OBJECT friend class OffscreenUi; diff --git a/libraries/ui/src/OffscreenUi.h b/libraries/ui/src/OffscreenUi.h index c648e2ec86..5813d0bfd2 100644 --- a/libraries/ui/src/OffscreenUi.h +++ b/libraries/ui/src/OffscreenUi.h @@ -40,6 +40,7 @@ public: void createDesktop(const QUrl& url); void show(const QUrl& url, const QString& name, std::function f = [](QQmlContext*, QObject*) {}); void hide(const QString& name); + bool isVisible(const QString& name); void toggle(const QUrl& url, const QString& name, std::function f = [](QQmlContext*, QObject*) {}); bool shouldSwallowShortcut(QEvent* event); bool navigationFocused(); diff --git a/libraries/ui/src/ui/Menu.cpp b/libraries/ui/src/ui/Menu.cpp index 364268830b..f68fff0204 100644 --- a/libraries/ui/src/ui/Menu.cpp +++ b/libraries/ui/src/ui/Menu.cpp @@ -261,6 +261,11 @@ void Menu::closeInfoView(const QString& path) { offscreenUi->hide(path); } +bool Menu::isInfoViewVisible(const QString& path) { + auto offscreenUi = DependencyManager::get(); + return offscreenUi->isVisible(path); +} + void Menu::triggerOption(const QString& menuOption) { QAction* action = _actionHash.value(menuOption); if (action) { diff --git a/libraries/ui/src/ui/Menu.h b/libraries/ui/src/ui/Menu.h index 32e916816e..9839bd1eb6 100644 --- a/libraries/ui/src/ui/Menu.h +++ b/libraries/ui/src/ui/Menu.h @@ -115,6 +115,7 @@ public slots: void toggleDeveloperMenus(); void toggleAdvancedMenus(); + bool isInfoViewVisible(const QString& path); void closeInfoView(const QString& path); void triggerOption(const QString& menuOption); diff --git a/scripts/system/help.js b/scripts/system/help.js index 1b6501c963..a83ac24595 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -53,7 +53,17 @@ button.clicked.connect(onClicked); + var POLL_RATE = 500; + var interval = Script.setInterval(function () { + var visible = Menu.isInfoViewVisible('InfoView_html/help.html'); + if (visible !== enabled) { + enabled = visible; + button.editProperties({isActive: enabled}); + } + }, POLL_RATE); + Script.scriptEnding.connect(function () { + Script.clearInterval(interval); tablet.removeButton(button); });