From d63a63cff05c5e0dfb8c5f81078e13e456151ca6 Mon Sep 17 00:00:00 2001 From: spycrab <spycrab@users.noreply.github.com> Date: Thu, 6 Sep 2018 19:59:25 +0200 Subject: [PATCH] Qt/Configure: Use sidebar to divide tabs into smaller groups --- src/citra_qt/configuration/configure.ui | 114 +++++++++--------- .../configuration/configure_dialog.cpp | 44 +++++++ src/citra_qt/configuration/configure_dialog.h | 2 + 3 files changed, 106 insertions(+), 54 deletions(-) diff --git a/src/citra_qt/configuration/configure.ui b/src/citra_qt/configuration/configure.ui index 21fa5fbc8..0f24016b2 100644 --- a/src/citra_qt/configuration/configure.ui +++ b/src/citra_qt/configuration/configure.ui @@ -2,64 +2,70 @@ <ui version="4.0"> <class>ConfigureDialog</class> <widget class="QDialog" name="ConfigureDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>461</width> - <height>500</height> - </rect> - </property> <property name="windowTitle"> <string>Citra Configuration</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="ConfigureGeneral" name="generalTab"> - <attribute name="title"> - <string>General</string> - </attribute> - </widget> - <widget class="ConfigureSystem" name="systemTab"> - <attribute name="title"> - <string>System</string> - </attribute> - </widget> - <widget class="ConfigureInput" name="inputTab"> - <attribute name="title"> - <string>Input</string> - </attribute> - </widget> - <widget class="ConfigureGraphics" name="graphicsTab"> - <attribute name="title"> - <string>Graphics</string> - </attribute> - </widget> - <widget class="ConfigureAudio" name="audioTab"> - <attribute name="title"> - <string>Audio</string> - </attribute> - </widget> - <widget class="ConfigureCamera" name="cameraTab"> - <attribute name="title"> - <string>Camera</string> - </attribute> - </widget> - <widget class="ConfigureDebug" name="debugTab"> - <attribute name="title"> - <string>Debug</string> - </attribute> - </widget> - <widget class="ConfigureWeb" name="webTab"> - <attribute name="title"> - <string>Web</string> - </attribute> - </widget> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QListWidget" name="selectorList"> + <property name="minimumWidth"> + <number>150</number> + </property> + <property name="maximumWidth"> + <number>150</number> + </property> + </widget> + </item> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="ConfigureGeneral" name="generalTab"> + <attribute name="title"> + <string>General</string> + </attribute> + </widget> + <widget class="ConfigureSystem" name="systemTab"> + <attribute name="title"> + <string>System</string> + </attribute> + </widget> + <widget class="ConfigureInput" name="inputTab"> + <attribute name="title"> + <string>Input</string> + </attribute> + </widget> + <widget class="ConfigureGraphics" name="graphicsTab"> + <attribute name="title"> + <string>Graphics</string> + </attribute> + </widget> + <widget class="ConfigureAudio" name="audioTab"> + <attribute name="title"> + <string>Audio</string> + </attribute> + </widget> + <widget class="ConfigureCamera" name="cameraTab"> + <attribute name="title"> + <string>Camera</string> + </attribute> + </widget> + <widget class="ConfigureDebug" name="debugTab"> + <attribute name="title"> + <string>Debug</string> + </attribute> + </widget> + <widget class="ConfigureWeb" name="webTab"> + <attribute name="title"> + <string>Web</string> + </attribute> + </widget> + </widget> + </item> + </layout> </item> <item> <widget class="QDialogButtonBox" name="buttonBox"> @@ -89,7 +95,7 @@ <header>configuration/configure_audio.h</header> <container>1</container> </customwidget> - <customwidget> + <customwidget> <class>ConfigureCamera</class> <extends>QWidget</extends> <header>configuration/configure_camera.h</header> diff --git a/src/citra_qt/configuration/configure_dialog.cpp b/src/citra_qt/configuration/configure_dialog.cpp index e9e0c598f..0a3f1fbae 100644 --- a/src/citra_qt/configuration/configure_dialog.cpp +++ b/src/citra_qt/configuration/configure_dialog.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include <QHash> +#include <QListWidgetItem> #include "citra_qt/configuration/config.h" #include "citra_qt/configuration/configure_dialog.h" #include "citra_qt/hotkeys.h" @@ -13,8 +15,15 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, const HotkeyRegistry& registry ui->setupUi(this); ui->generalTab->PopulateHotkeyList(registry); this->setConfiguration(); + this->PopulateSelectionList(); connect(ui->generalTab, &ConfigureGeneral::languageChanged, this, &ConfigureDialog::onLanguageChanged); + connect(ui->selectorList, &QListWidget::itemSelectionChanged, this, + &ConfigureDialog::UpdateVisibleTabs); + + adjustSize(); + + ui->selectorList->setCurrentRow(0); } ConfigureDialog::~ConfigureDialog() = default; @@ -34,6 +43,22 @@ void ConfigureDialog::applyConfiguration() { Settings::LogSettings(); } +void ConfigureDialog::PopulateSelectionList() { + + const std::array<std::pair<QString, QStringList>, 4> items{ + {{tr("General"), {tr("General"), tr("Web"), tr("Debug")}}, + {tr("System"), {tr("System"), tr("Audio")}}, + {tr("Graphics"), {tr("Graphics")}}, + {tr("Controls"), {tr("Input")}}}}; + + for (const auto& entry : items) { + auto* item = new QListWidgetItem(entry.first); + item->setData(Qt::UserRole, entry.second); + + ui->selectorList->addItem(item); + } +} + void ConfigureDialog::onLanguageChanged(const QString& locale) { emit languageChanged(locale); ui->retranslateUi(this); @@ -46,3 +71,22 @@ void ConfigureDialog::onLanguageChanged(const QString& locale) { ui->debugTab->retranslateUi(); ui->webTab->retranslateUi(); } + +void ConfigureDialog::UpdateVisibleTabs() { + auto items = ui->selectorList->selectedItems(); + if (items.isEmpty()) + return; + + const QHash<QString, QWidget*> widgets = { + {tr("General"), ui->generalTab}, {tr("System"), ui->systemTab}, + {tr("Input"), ui->inputTab}, {tr("Graphics"), ui->graphicsTab}, + {tr("Audio"), ui->audioTab}, {tr("Camera"), ui->cameraTab}, + {tr("Debug"), ui->debugTab}, {tr("Web"), ui->webTab}}; + + ui->tabWidget->clear(); + + QStringList tabs = items[0]->data(Qt::UserRole).toStringList(); + + for (const auto& tab : tabs) + ui->tabWidget->addTab(widgets[tab], tab); +} diff --git a/src/citra_qt/configuration/configure_dialog.h b/src/citra_qt/configuration/configure_dialog.h index fb6d25ce9..f78c1fd20 100644 --- a/src/citra_qt/configuration/configure_dialog.h +++ b/src/citra_qt/configuration/configure_dialog.h @@ -21,6 +21,8 @@ public: ~ConfigureDialog(); void applyConfiguration(); + void UpdateVisibleTabs(); + void PopulateSelectionList(); private slots: void onLanguageChanged(const QString& locale);