From bbefafcb0796612c3e627c705009140d6921b3f1 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 23 Jan 2016 12:02:29 -0800 Subject: [PATCH] Break up preferences dialogs --- .../{hifi => }/dialogs/PreferencesDialog.qml | 29 ++++++++++++------- .../dialogs/preferences/AvatarBrowser.qml | 6 ++-- .../dialogs/preferences/AvatarPreference.qml | 2 -- .../preferences/BrowsablePreference.qml | 2 +- .../dialogs/preferences/ButtonPreference.qml | 3 -- .../preferences/CheckBoxPreference.qml | 5 ++-- .../preferences/EditablePreference.qml | 0 .../dialogs/preferences/Preference.qml | 0 .../dialogs/preferences/Section.qml | 2 +- .../dialogs/preferences/SliderPreference.qml | 7 ++--- .../dialogs/preferences/SpinBoxPreference.qml | 6 ++-- .../hifi/dialogs/AudioPreferencesDialog.qml | 19 ++++++++++++ .../hifi/dialogs/AvatarPreferencesDialog.qml | 19 ++++++++++++ .../hifi/dialogs/GeneralPreferencesDialog.qml | 19 ++++++++++++ .../qml/hifi/dialogs/LodPreferencesDialog.qml | 19 ++++++++++++ interface/src/Menu.cpp | 25 +++++++++++----- interface/src/ui/DialogsManager.cpp | 4 --- interface/src/ui/DialogsManager.h | 1 - libraries/ui/src/OffscreenUi.cpp | 2 +- 19 files changed, 123 insertions(+), 47 deletions(-) rename interface/resources/qml/{hifi => }/dialogs/PreferencesDialog.qml (77%) rename interface/resources/qml/{hifi => }/dialogs/preferences/AvatarBrowser.qml (88%) rename interface/resources/qml/{hifi => }/dialogs/preferences/AvatarPreference.qml (98%) rename interface/resources/qml/{hifi => }/dialogs/preferences/BrowsablePreference.qml (98%) rename interface/resources/qml/{hifi => }/dialogs/preferences/ButtonPreference.qml (88%) rename interface/resources/qml/{hifi => }/dialogs/preferences/CheckBoxPreference.qml (85%) rename interface/resources/qml/{hifi => }/dialogs/preferences/EditablePreference.qml (100%) rename interface/resources/qml/{hifi => }/dialogs/preferences/Preference.qml (100%) rename interface/resources/qml/{hifi => }/dialogs/preferences/Section.qml (99%) rename interface/resources/qml/{hifi => }/dialogs/preferences/SliderPreference.qml (87%) rename interface/resources/qml/{hifi => }/dialogs/preferences/SpinBoxPreference.qml (89%) create mode 100644 interface/resources/qml/hifi/dialogs/AudioPreferencesDialog.qml create mode 100644 interface/resources/qml/hifi/dialogs/AvatarPreferencesDialog.qml create mode 100644 interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml create mode 100644 interface/resources/qml/hifi/dialogs/LodPreferencesDialog.qml diff --git a/interface/resources/qml/hifi/dialogs/PreferencesDialog.qml b/interface/resources/qml/dialogs/PreferencesDialog.qml similarity index 77% rename from interface/resources/qml/hifi/dialogs/PreferencesDialog.qml rename to interface/resources/qml/dialogs/PreferencesDialog.qml index 042d116511..bb3ce43fcd 100644 --- a/interface/resources/qml/hifi/dialogs/PreferencesDialog.qml +++ b/interface/resources/qml/dialogs/PreferencesDialog.qml @@ -3,19 +3,19 @@ import QtQuick.Controls 1.4 import QtQuick.Dialogs 1.2 as OriginalDialogs import Qt.labs.settings 1.0 -import "../../controls" as HifiControls -import "../../windows" -import "./preferences" +import "../controls" as HifiControls +import "../windows" +import "preferences" Window { id: root - objectName: "PreferencesDialog" title: "Preferences" resizable: true destroyOnInvisible: true width: 500 height: 577 property var sections: [] + property var showCategories: [] function saveAll() { for (var i = 0; i < sections.length; ++i) { @@ -38,12 +38,6 @@ Window { clip: true color: "white" - Settings { - category: "Overlay.Preferences" - property alias x: root.x - property alias y: root.y - } - Component { id: sectionBuilder Section { } @@ -51,8 +45,21 @@ Window { Component.onCompleted: { var categories = Preferences.categories; - for (var i = 0; i < categories.length; ++i) { + var categoryMap; + var i; + if (showCategories && showCategories.length) { + categoryMap = {}; + for (i = 0; i < showCategories.length; ++i) { + categoryMap[showCategories[i]] = true; + } + } + + for (i = 0; i < categories.length; ++i) { var category = categories[i]; + if (categoryMap && !categoryMap[category]) { + continue; + } + sections.push(sectionBuilder.createObject(prefControls, { name: category })); } } diff --git a/interface/resources/qml/hifi/dialogs/preferences/AvatarBrowser.qml b/interface/resources/qml/dialogs/preferences/AvatarBrowser.qml similarity index 88% rename from interface/resources/qml/hifi/dialogs/preferences/AvatarBrowser.qml rename to interface/resources/qml/dialogs/preferences/AvatarBrowser.qml index e71ae9312a..7af5dc851e 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/AvatarBrowser.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarBrowser.qml @@ -2,9 +2,9 @@ import QtQuick 2.3 import QtQuick.Controls 1.2 import QtWebEngine 1.1 -import "../../../windows" as Windows -import "../../../controls" as Controls -import "../../../styles" +import "../../windows" as Windows +import "../../controls" as Controls +import "../../styles" Windows.Window { id: root diff --git a/interface/resources/qml/hifi/dialogs/preferences/AvatarPreference.qml b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml similarity index 98% rename from interface/resources/qml/hifi/dialogs/preferences/AvatarPreference.qml rename to interface/resources/qml/dialogs/preferences/AvatarPreference.qml index 2bb3f2afd4..1375fc392a 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/AvatarPreference.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml @@ -1,8 +1,6 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 -import "../../../dialogs" - Preference { id: root property alias buttonText: button.text diff --git a/interface/resources/qml/hifi/dialogs/preferences/BrowsablePreference.qml b/interface/resources/qml/dialogs/preferences/BrowsablePreference.qml similarity index 98% rename from interface/resources/qml/hifi/dialogs/preferences/BrowsablePreference.qml rename to interface/resources/qml/dialogs/preferences/BrowsablePreference.qml index ca42b3bec8..7d310be468 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/BrowsablePreference.qml +++ b/interface/resources/qml/dialogs/preferences/BrowsablePreference.qml @@ -1,7 +1,7 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 -import "../../../dialogs" +import "../../dialogs" Preference { id: root diff --git a/interface/resources/qml/hifi/dialogs/preferences/ButtonPreference.qml b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml similarity index 88% rename from interface/resources/qml/hifi/dialogs/preferences/ButtonPreference.qml rename to interface/resources/qml/dialogs/preferences/ButtonPreference.qml index 51c2a31e79..b0c2846117 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/ButtonPreference.qml +++ b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml @@ -1,9 +1,6 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 as Original -import "." -import "../../../dialogs" - Preference { id: root height: button.height diff --git a/interface/resources/qml/hifi/dialogs/preferences/CheckBoxPreference.qml b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml similarity index 85% rename from interface/resources/qml/hifi/dialogs/preferences/CheckBoxPreference.qml rename to interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml index a17176bb07..ab37f30427 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/CheckBoxPreference.qml +++ b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml @@ -1,6 +1,5 @@ import QtQuick 2.5 -import QtQuick.Controls 1.4 as Original -import "." +import QtQuick.Controls 1.4 Preference { id: root @@ -16,7 +15,7 @@ Preference { preference.save(); } - Original.CheckBox { + CheckBox { id: checkBox anchors.fill: parent text: root.label diff --git a/interface/resources/qml/hifi/dialogs/preferences/EditablePreference.qml b/interface/resources/qml/dialogs/preferences/EditablePreference.qml similarity index 100% rename from interface/resources/qml/hifi/dialogs/preferences/EditablePreference.qml rename to interface/resources/qml/dialogs/preferences/EditablePreference.qml diff --git a/interface/resources/qml/hifi/dialogs/preferences/Preference.qml b/interface/resources/qml/dialogs/preferences/Preference.qml similarity index 100% rename from interface/resources/qml/hifi/dialogs/preferences/Preference.qml rename to interface/resources/qml/dialogs/preferences/Preference.qml diff --git a/interface/resources/qml/hifi/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml similarity index 99% rename from interface/resources/qml/hifi/dialogs/preferences/Section.qml rename to interface/resources/qml/dialogs/preferences/Section.qml index 91eebdec01..4b2c92f867 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -2,7 +2,7 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 import Hifi 1.0 -import "../../../controls" as VrControls +import "../../controls" as VrControls import "." Preference { diff --git a/interface/resources/qml/hifi/dialogs/preferences/SliderPreference.qml b/interface/resources/qml/dialogs/preferences/SliderPreference.qml similarity index 87% rename from interface/resources/qml/hifi/dialogs/preferences/SliderPreference.qml rename to interface/resources/qml/dialogs/preferences/SliderPreference.qml index f2256b9245..0865b49dd0 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/SliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SliderPreference.qml @@ -1,7 +1,5 @@ import QtQuick 2.5 -import QtQuick.Controls 1.4 as Original - -import "." +import QtQuick.Controls 1.4 Preference { id: root @@ -17,14 +15,13 @@ Preference { preference.save(); } - Text { text: root.label color: enabled ? "black" : "gray" anchors.verticalCenter: slider.verticalCenter } - Original.Slider { + Slider { id: slider value: preference.value width: 130 diff --git a/interface/resources/qml/hifi/dialogs/preferences/SpinBoxPreference.qml b/interface/resources/qml/dialogs/preferences/SpinBoxPreference.qml similarity index 89% rename from interface/resources/qml/hifi/dialogs/preferences/SpinBoxPreference.qml rename to interface/resources/qml/dialogs/preferences/SpinBoxPreference.qml index 6de465284a..513ae25974 100644 --- a/interface/resources/qml/hifi/dialogs/preferences/SpinBoxPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinBoxPreference.qml @@ -1,13 +1,11 @@ import QtQuick 2.5 -import QtQuick.Controls 1.4 as Original -import "." +import QtQuick.Controls 1.4 Preference { id: root property alias spinner: spinner height: spinner.height - Component.onCompleted: { spinner.value = preference.value; } @@ -23,7 +21,7 @@ Preference { anchors.verticalCenter: spinner.verticalCenter } - Original.SpinBox { + SpinBox { id: spinner decimals: preference.decimals minimumValue: preference.min diff --git a/interface/resources/qml/hifi/dialogs/AudioPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/AudioPreferencesDialog.qml new file mode 100644 index 0000000000..09b4e52a14 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/AudioPreferencesDialog.qml @@ -0,0 +1,19 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "../../dialogs" + +PreferencesDialog { + id: root + objectName: "AudioPreferencesDialog" + title: "Audio Preferences" + showCategories: ["Audio"] + property var settings: Settings { + category: root.objectName + property alias x: root.x + property alias y: root.y + property alias width: root.width + property alias height: root.height + } +} + diff --git a/interface/resources/qml/hifi/dialogs/AvatarPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/AvatarPreferencesDialog.qml new file mode 100644 index 0000000000..7aa19001e7 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/AvatarPreferencesDialog.qml @@ -0,0 +1,19 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "../../dialogs" + +PreferencesDialog { + id: root + objectName: "AvatarPreferencesDialog" + title: "Avatar Preferences" + showCategories: [ "Avatar Basics", "Avatar Tuning" ] + property var settings: Settings { + category: root.objectName + property alias x: root.x + property alias y: root.y + property alias width: root.width + property alias height: root.height + } +} + diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml new file mode 100644 index 0000000000..81e4924204 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -0,0 +1,19 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "../../dialogs" + +PreferencesDialog { + id: root + objectName: "GeneralPreferencesDialog" + title: "General Preferences" + showCategories: ["Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers"] + property var settings: Settings { + category: root.objectName + property alias x: root.x + property alias y: root.y + property alias width: root.width + property alias height: root.height + } +} + diff --git a/interface/resources/qml/hifi/dialogs/LodPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/LodPreferencesDialog.qml new file mode 100644 index 0000000000..1c9016bcfa --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/LodPreferencesDialog.qml @@ -0,0 +1,19 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "../../dialogs" + +PreferencesDialog { + id: root + objectName: "LodPreferencesDialog" + title: "Level of Detail preferences" + showCategories: ["Level of Detail Tuning"] + property var settings: Settings { + category: root.objectName + property alias x: root.x + property alias y: root.y + property alias width: root.width + property alias height: root.height + } +} + diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 79257bf6b9..9cbb031a61 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -285,20 +285,29 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(settingsMenu, "Developer Menus", 0, false, this, SLOT(toggleDeveloperMenus())); // Settings > General... - addActionToQMenuAndActionHash(settingsMenu, MenuOption::Preferences, Qt::CTRL | Qt::Key_Comma, - dialogsManager.data(), SLOT(editPreferences()), QAction::PreferencesRole); + auto action = addActionToQMenuAndActionHash(settingsMenu, MenuOption::Preferences, Qt::CTRL | Qt::Key_Comma, nullptr, nullptr, QAction::PreferencesRole); + connect(action, &QAction::triggered, [] { + DependencyManager::get()->toggle(QString("hifi/dialogs/GeneralPreferencesDialog.qml"), "GeneralPreferencesDialog"); + }); + // Settings > Avatar...-- FIXME: needs implementation - auto avatarAction = addActionToQMenuAndActionHash(settingsMenu, "Avatar..."); - avatarAction->setDisabled(true); + action = addActionToQMenuAndActionHash(settingsMenu, "Avatar..."); + connect(action, &QAction::triggered, [] { + DependencyManager::get()->toggle(QString("hifi/dialogs/AvatarPreferencesDialog.qml"), "AvatarPreferencesDialog"); + }); // Settings > Audio...-- FIXME: needs implementation - auto audioAction = addActionToQMenuAndActionHash(settingsMenu, "Audio..."); - audioAction->setDisabled(true); + action = addActionToQMenuAndActionHash(settingsMenu, "Audio..."); + connect(action, &QAction::triggered, [] { + DependencyManager::get()->toggle(QString("hifi/dialogs/AudioPreferencesDialog.qml"), "AudioPreferencesDialog"); + }); // Settings > LOD...-- FIXME: needs implementation - auto lodAction = addActionToQMenuAndActionHash(settingsMenu, "LOD..."); - lodAction->setDisabled(true); + action = addActionToQMenuAndActionHash(settingsMenu, "LOD..."); + connect(action, &QAction::triggered, [] { + DependencyManager::get()->toggle(QString("hifi/dialogs/LodPreferencesDialog.qml"), "LodPreferencesDialog"); + }); // Settings > Control with Speech [advanced] #if defined(Q_OS_MAC) || defined(Q_OS_WIN) diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index bd83b0c64e..ef0ec5792f 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -91,10 +91,6 @@ void DialogsManager::cachesSizeDialog() { _cachesSizeDialog->raise(); } -void DialogsManager::editPreferences() { - DependencyManager::get()->toggle(QString("hifi/dialogs/PreferencesDialog.qml"), "PreferencesDialog"); -} - void DialogsManager::editAttachments() { if (!_attachmentsDialog) { maybeCreateDialog(_attachmentsDialog); diff --git a/interface/src/ui/DialogsManager.h b/interface/src/ui/DialogsManager.h index 1b1337731b..72a24e032c 100644 --- a/interface/src/ui/DialogsManager.h +++ b/interface/src/ui/DialogsManager.h @@ -48,7 +48,6 @@ public slots: void showLoginDialog(); void octreeStatsDetails(); void cachesSizeDialog(); - void editPreferences(); void editAttachments(); void audioStatsDetails(); void bandwidthDetails(); diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 0fdcf1fda2..8790c07f62 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -131,7 +131,7 @@ void OffscreenUi::toggle(const QUrl& url, const QString& name, std::functionfindChild(name); - if (!item->isVisible()) { + if (item && !item->isVisible()) { item->setVisible(true); } }