From 90ebbb79c1b51ccaa6b345781940cdeb0d712889 Mon Sep 17 00:00:00 2001 From: howard-stearns Date: Wed, 2 Nov 2016 15:37:53 -0700 Subject: [PATCH 1/8] centered toolbar --- interface/resources/qml/hifi/Desktop.qml | 24 ++++++++++++------- .../resources/qml/hifi/toolbars/Toolbar.qml | 3 +++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/hifi/Desktop.qml b/interface/resources/qml/hifi/Desktop.qml index 7f1fbcb174..e07c404522 100644 --- a/interface/resources/qml/hifi/Desktop.qml +++ b/interface/resources/qml/hifi/Desktop.qml @@ -51,27 +51,35 @@ OriginalDesktop.Desktop { Toolbar { id: sysToolbar; objectName: "com.highfidelity.interface.toolbar.system"; - // These values will be overridden by sysToolbar.x/y if there is a saved position in Settings - // On exit, the sysToolbar position is saved to settings - x: 30 + // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings. + x: settings.firstRun ? (desktop.width - sysToolbar.width) / 2 : sysToolbar.x; y: 50 } property var toolbars: (function (map) { // answer dictionary preloaded with sysToolbar map[sysToolbar.objectName] = sysToolbar; return map; })({}); + Settings { + id: settings + property bool firstRun: true + } Component.onCompleted: { WebEngine.settings.javascriptCanOpenWindows = true; WebEngine.settings.javascriptCanAccessClipboard = false; WebEngine.settings.spatialNavigationEnabled = false; WebEngine.settings.localContentCanAccessRemoteUrls = true; - var toggleHudButton = sysToolbar.addButton({ - objectName: "hudToggle", - imageURL: "../../../icons/hud.svg", - visible: true, - pinned: true, + [ // Allocate the standard buttons in the correct order. They will get images, etc., via scripts. + "hmdToggle", "mute", "mod", "help", + "hudToggle", + "com.highfidelity.interface.system.editButton", "marketplace", "snapshot", "goto" + ].forEach(function (name) { + sysToolbar.addButton({objectName: name}); }); + var toggleHudButton = sysToolbar.findButton("hudToggle"); + toggleHudButton.imageURL = "../../../icons/hud.svg"; + toggleHudButton.pinned = true; + sysToolbar.updatePinned(); // automatic when adding buttons only IFF button is pinned at creation. toggleHudButton.buttonState = Qt.binding(function(){ return desktop.pinned ? 1 : 0 diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index 30989be688..01ce74cf6e 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -114,6 +114,9 @@ Window { // and allow scripts to be idempotent so they don't duplicate buttons if they're reloaded var result = findButton(properties.objectName); if (result) { + for (var property in properties) { + result[property] = properties[property]; + } return result; } properties.toolbar = this; From 8eb6699420414d5f604bb85241c444af145d9737 Mon Sep 17 00:00:00 2001 From: howard-stearns Date: Wed, 2 Nov 2016 16:50:37 -0700 Subject: [PATCH 2/8] help script --- scripts/defaultScripts.js | 3 +- scripts/system/assets/images/tools/help.svg | 110 ++++++++++++++++++++ scripts/system/help.js | 41 ++++++++ 3 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 scripts/system/assets/images/tools/help.svg create mode 100644 scripts/system/help.js diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 718b5f3d3e..4376960ea5 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -32,7 +32,8 @@ var DEFAULT_SCRIPTS = [ "system/controllers/toggleAdvancedMovementForHandControllers.js", "system/dialTone.js", "system/firstPersonHMD.js", - "system/snapshot.js" + "system/snapshot.js", + "system/help.js" ]; // add a menu item for debugging diff --git a/scripts/system/assets/images/tools/help.svg b/scripts/system/assets/images/tools/help.svg new file mode 100644 index 0000000000..b7fa8ca5cd --- /dev/null +++ b/scripts/system/assets/images/tools/help.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/system/help.js b/scripts/system/help.js new file mode 100644 index 0000000000..e79ed0444c --- /dev/null +++ b/scripts/system/help.js @@ -0,0 +1,41 @@ +"use strict"; + +// +// help.js +// scripts/system/ +// +// Created by Howard Stearns on 2 Nov 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { // BEGIN LOCAL_SCOPE + + var toolBar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system"); + var buttonName = "help"; // matching location reserved in Desktop.qml + var button = toolBar.addButton({ + objectName: buttonName, + imageURL: Script.resolvePath("assets/images/tools/help.svg"), + visible: true, + hoverState: 2, + defaultState: 1, + buttonState: 1, + alpha: 0.9 + }); + + // TODO: make button state reflect whether the window is opened or closed (independently from us). + + function onClicked(){ + Menu.triggerOption('Help...') + } + + button.clicked.connect(onClicked); + + Script.scriptEnding.connect(function () { + toolBar.removeButton(buttonName); + button.clicked.disconnect(onClicked); + }); + +}()); // END LOCAL_SCOPE From f3d482157906c7268a068f1a3706418d6a4cef90 Mon Sep 17 00:00:00 2001 From: howard-stearns Date: Thu, 3 Nov 2016 10:39:53 -0700 Subject: [PATCH 3/8] constrain toolbar based on setting. (ui for settings to come.) --- interface/resources/qml/hifi/Desktop.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/Desktop.qml b/interface/resources/qml/hifi/Desktop.qml index e07c404522..fbb3a713ae 100644 --- a/interface/resources/qml/hifi/Desktop.qml +++ b/interface/resources/qml/hifi/Desktop.qml @@ -51,8 +51,9 @@ OriginalDesktop.Desktop { Toolbar { id: sysToolbar; objectName: "com.highfidelity.interface.toolbar.system"; - // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings. - x: settings.firstRun ? (desktop.width - sysToolbar.width) / 2 : sysToolbar.x; + anchors.horizontalCenter: settings.systemToolbarHorizontalConstraint ? desktop.horizontalCenter : undefined; + // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings when not constrained. + x: sysToolbar.x y: 50 } property var toolbars: (function (map) { // answer dictionary preloaded with sysToolbar @@ -61,7 +62,7 @@ OriginalDesktop.Desktop { Settings { id: settings - property bool firstRun: true + property bool systemToolbarHorizontalConstraint: true } Component.onCompleted: { WebEngine.settings.javascriptCanOpenWindows = true; From a12e0325bf627e7759b931ebbf0c596f5df005ef Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 3 Nov 2016 10:37:06 -0700 Subject: [PATCH 4/8] Making progress... --- .../qml/hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- interface/resources/qml/hifi/toolbars/Toolbar.qml | 2 ++ interface/src/Application.cpp | 5 +++++ interface/src/Application.h | 4 ++++ interface/src/ui/PreferencesDialog.cpp | 9 ++++++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 95f55f504b..9e46d86ecd 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index 30989be688..2968d61324 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -25,11 +25,13 @@ Window { property real buttonSize: 50; property var buttons: [] property var container: horizontal ? row : column + property bool constrainToolbarToCenterX: false Settings { category: "toolbar/" + window.objectName property alias x: window.x property alias y: window.y + property alias constrainToolbarToCenterX: window.constrainToolbarToCenterX } onHorizontalChanged: { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5fe15fa8e5..ecedc33542 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -523,6 +523,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _mirrorViewRect(QRect(MIRROR_VIEW_LEFT_PADDING, MIRROR_VIEW_TOP_PADDING, MIRROR_VIEW_WIDTH, MIRROR_VIEW_HEIGHT)), _previousScriptLocation("LastScriptLocation", DESKTOP_LOCATION), _fieldOfView("fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES), + _constrainToolbarPosition("constrainToolbarToCenterX", false), _scaleMirror(1.0f), _rotateMirror(0.0f), _raiseMirror(0.0f), @@ -2150,6 +2151,10 @@ void Application::setFieldOfView(float fov) { } } +void Application::setSettingConstrainToolbarPosition(bool setting) { + _constrainToolbarPosition.set(setting); +} + void Application::aboutApp() { InfoView::show(INFO_WELCOME_PATH); } diff --git a/interface/src/Application.h b/interface/src/Application.h index 79c9ae735c..4c98be9c2d 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -206,6 +206,9 @@ public: float getFieldOfView() { return _fieldOfView.get(); } void setFieldOfView(float fov); + float getSettingConstrainToolbarPosition() { return _constrainToolbarPosition.get(); } + void setSettingConstrainToolbarPosition(bool setting); + NodeToOctreeSceneStats* getOcteeSceneStats() { return &_octreeServerSceneStats; } virtual controller::ScriptingInterface* getControllerScriptingInterface() { return _controllerScriptingInterface; } @@ -506,6 +509,7 @@ private: Setting::Handle _previousScriptLocation; Setting::Handle _fieldOfView; + Setting::Handle _constrainToolbarPosition; float _scaleMirror; float _rotateMirror; diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 8e65b2fb57..37135a9379 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -66,7 +66,14 @@ void setupPreferences() { auto getter = [=]()->bool { return myAvatar->getClearOverlayWhenMoving(); }; auto setter = [=](bool value) { myAvatar->setClearOverlayWhenMoving(value); }; preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Clear overlays when moving", getter, setter)); - } + } + + // UI + { + auto getter = []()->bool { return qApp->getSettingConstrainToolbarPosition(); }; + auto setter = [](bool value) { qApp->setSettingConstrainToolbarPosition(!value); }; + preferences->addPreference(new CheckPreference("UI", "Constrain Toolbar Position to Horizontal Center", getter, setter)); + } // Snapshots static const QString SNAPSHOTS { "Snapshots" }; From b74c1d3476fcac27cf08647f0bd29a9cc3f3fcc1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 3 Nov 2016 10:42:15 -0700 Subject: [PATCH 5/8] tabs to spaces --- interface/resources/qml/hifi/toolbars/Toolbar.qml | 4 ++-- interface/src/Application.cpp | 2 +- interface/src/ui/PreferencesDialog.cpp | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index 2968d61324..f26f4b8a96 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -25,13 +25,13 @@ Window { property real buttonSize: 50; property var buttons: [] property var container: horizontal ? row : column - property bool constrainToolbarToCenterX: false + property bool constrainToolbarToCenterX: false Settings { category: "toolbar/" + window.objectName property alias x: window.x property alias y: window.y - property alias constrainToolbarToCenterX: window.constrainToolbarToCenterX + property alias constrainToolbarToCenterX: window.constrainToolbarToCenterX } onHorizontalChanged: { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ecedc33542..85406a1e81 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2152,7 +2152,7 @@ void Application::setFieldOfView(float fov) { } void Application::setSettingConstrainToolbarPosition(bool setting) { - _constrainToolbarPosition.set(setting); + _constrainToolbarPosition.set(setting); } void Application::aboutApp() { diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 37135a9379..70be1f61d5 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -66,14 +66,14 @@ void setupPreferences() { auto getter = [=]()->bool { return myAvatar->getClearOverlayWhenMoving(); }; auto setter = [=](bool value) { myAvatar->setClearOverlayWhenMoving(value); }; preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Clear overlays when moving", getter, setter)); - } + } - // UI - { - auto getter = []()->bool { return qApp->getSettingConstrainToolbarPosition(); }; - auto setter = [](bool value) { qApp->setSettingConstrainToolbarPosition(!value); }; - preferences->addPreference(new CheckPreference("UI", "Constrain Toolbar Position to Horizontal Center", getter, setter)); - } + // UI + { + auto getter = []()->bool { return qApp->getSettingConstrainToolbarPosition(); }; + auto setter = [](bool value) { qApp->setSettingConstrainToolbarPosition(!value); }; + preferences->addPreference(new CheckPreference("UI", "Constrain Toolbar Position to Horizontal Center", getter, setter)); + } // Snapshots static const QString SNAPSHOTS { "Snapshots" }; From e9e1d0cb2fccab5c6b21a5632080260f5ba03605 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 3 Nov 2016 11:10:32 -0700 Subject: [PATCH 6/8] Remove erroneous exclamation mark --- interface/src/ui/PreferencesDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 70be1f61d5..7d3261aa78 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -71,7 +71,7 @@ void setupPreferences() { // UI { auto getter = []()->bool { return qApp->getSettingConstrainToolbarPosition(); }; - auto setter = [](bool value) { qApp->setSettingConstrainToolbarPosition(!value); }; + auto setter = [](bool value) { qApp->setSettingConstrainToolbarPosition(value); }; preferences->addPreference(new CheckPreference("UI", "Constrain Toolbar Position to Horizontal Center", getter, setter)); } From 9a22c29788b5ee9a8f6fe1622a855c7f55454899 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 3 Nov 2016 11:20:08 -0700 Subject: [PATCH 7/8] Get ready for merge --- interface/resources/qml/hifi/toolbars/Toolbar.qml | 2 -- interface/src/Application.cpp | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index f26f4b8a96..30989be688 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -25,13 +25,11 @@ Window { property real buttonSize: 50; property var buttons: [] property var container: horizontal ? row : column - property bool constrainToolbarToCenterX: false Settings { category: "toolbar/" + window.objectName property alias x: window.x property alias y: window.y - property alias constrainToolbarToCenterX: window.constrainToolbarToCenterX } onHorizontalChanged: { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 85406a1e81..ae07ed1226 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -523,7 +523,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _mirrorViewRect(QRect(MIRROR_VIEW_LEFT_PADDING, MIRROR_VIEW_TOP_PADDING, MIRROR_VIEW_WIDTH, MIRROR_VIEW_HEIGHT)), _previousScriptLocation("LastScriptLocation", DESKTOP_LOCATION), _fieldOfView("fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES), - _constrainToolbarPosition("constrainToolbarToCenterX", false), + _constrainToolbarPosition("toolbar/constrainToolbarToCenterX", true), _scaleMirror(1.0f), _rotateMirror(0.0f), _raiseMirror(0.0f), From 3a072b5bf972ad6af351c6abdddef0c1719268f3 Mon Sep 17 00:00:00 2001 From: howard-stearns Date: Thu, 3 Nov 2016 12:17:28 -0700 Subject: [PATCH 8/8] tell desktop about preference changes --- interface/resources/qml/hifi/Desktop.qml | 15 ++++++++++----- interface/src/Application.cpp | 1 + libraries/ui/src/OffscreenUi.cpp | 7 +++++++ libraries/ui/src/OffscreenUi.h | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/interface/resources/qml/hifi/Desktop.qml b/interface/resources/qml/hifi/Desktop.qml index fbb3a713ae..db0c1ba724 100644 --- a/interface/resources/qml/hifi/Desktop.qml +++ b/interface/resources/qml/hifi/Desktop.qml @@ -51,19 +51,24 @@ OriginalDesktop.Desktop { Toolbar { id: sysToolbar; objectName: "com.highfidelity.interface.toolbar.system"; - anchors.horizontalCenter: settings.systemToolbarHorizontalConstraint ? desktop.horizontalCenter : undefined; + anchors.horizontalCenter: settings.constrainToolbarToCenterX ? desktop.horizontalCenter : undefined; // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings when not constrained. x: sysToolbar.x y: 50 } + Settings { + id: settings; + category: "toolbar"; + property bool constrainToolbarToCenterX: true; + } + function setConstrainToolbarToCenterX(constrain) { // Learn about c++ preference change. + settings.constrainToolbarToCenterX = constrain; + } property var toolbars: (function (map) { // answer dictionary preloaded with sysToolbar map[sysToolbar.objectName] = sysToolbar; return map; })({}); - Settings { - id: settings - property bool systemToolbarHorizontalConstraint: true - } + Component.onCompleted: { WebEngine.settings.javascriptCanOpenWindows = true; WebEngine.settings.javascriptCanAccessClipboard = false; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ae07ed1226..bbf97ad60c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2153,6 +2153,7 @@ void Application::setFieldOfView(float fov) { void Application::setSettingConstrainToolbarPosition(bool setting) { _constrainToolbarPosition.set(setting); + DependencyManager::get()->setConstrainToolbarToCenterX(setting); } void Application::aboutApp() { diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index ca7d3f7c17..d9b15eebe0 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -371,6 +371,13 @@ void OffscreenUi::setPinned(bool pinned) { } } +void OffscreenUi::setConstrainToolbarToCenterX(bool constrained) { + bool invokeResult = QMetaObject::invokeMethod(_desktop, "setConstrainToolbarToCenterX", Q_ARG(QVariant, constrained)); + if (!invokeResult) { + qWarning() << "Failed to set toolbar constraint"; + } +} + void OffscreenUi::addMenuInitializer(std::function f) { if (!_vrMenu) { _queuedMenuInitializers.push_back(f); diff --git a/libraries/ui/src/OffscreenUi.h b/libraries/ui/src/OffscreenUi.h index 2e6e853336..3ab4fa0758 100644 --- a/libraries/ui/src/OffscreenUi.h +++ b/libraries/ui/src/OffscreenUi.h @@ -52,6 +52,7 @@ public: void setPinned(bool pinned = true); void togglePinned(); + void setConstrainToolbarToCenterX(bool constrained); bool eventFilter(QObject* originalDestination, QEvent* event) override; void addMenuInitializer(std::function f);