From 7b9be0a586873b2a7792ef2a829a8ae2195c2d75 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sun, 22 Mar 2020 22:19:46 +1000 Subject: [PATCH] Qt: Add per-page help to settings dialog --- src/duckstation-qt/settingsdialog.cpp | 30 +++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/duckstation-qt/settingsdialog.cpp b/src/duckstation-qt/settingsdialog.cpp index 6d4f7908e..1eebd1bf0 100644 --- a/src/duckstation-qt/settingsdialog.cpp +++ b/src/duckstation-qt/settingsdialog.cpp @@ -9,7 +9,28 @@ #include "qthostinterface.h" #include -static constexpr char DEFAULT_SETTING_HELP_TEXT[] = "Mouse over an option for additional information."; +static constexpr char DEFAULT_SETTING_HELP_TEXT[] = ""; + +static constexpr std::array(SettingsDialog::Category::Count)> s_category_help_text = { + {"General Settings
These options control how the emulator looks and behaves.

Mouse over " + "an option for additional information.", + "Console Settings
These options determine the configuration of the simulated " + "console.

Mouse over an option for additional information.", + "Game List Settings
The list above shows the directories which will be searched by DuckStation " + "to populate the game list. Search directories can be added, removed, and switched to recursive/non-recursive. " + "Additionally, the redump.org database can be downloaded or updated to provide titles for discs, as the discs " + "themselves do not provide title information.", + "Hotkey Settings
Binding a hotkey allows you to trigger events such as a resetting, powering " + "off, taking screenshots or saving/loading states at the press of a key/controller button. Hotkey titles are " + "self-explanatory.", + "Port Settings
This page lets you choose the type of controller you wish to simulate for the " + "console, and rebind the keys or host game controller buttons to your choosing. Clicking a binding will start a " + "count-down, in which case you should press the key or controller button/axis you wish to bind. If no button is " + "pressed and the timer lapses, the binding will be unchanged. To clear a binding, right-click the button.", + "GPU Settings
These options control the simulation of the GPU in the console. Various " + "enhancements are available, mouse over each for additional information.", + "Audio Settings
These options control the audio output of the console. Mouse over an option for " + "additional information."}}; SettingsDialog::SettingsDialog(QtHostInterface* host_interface, QWidget* parent /* = nullptr */) : QDialog(parent), m_host_interface(host_interface) @@ -34,9 +55,8 @@ SettingsDialog::SettingsDialog(QtHostInterface* host_interface, QWidget* parent m_ui.settingsCategory->setCurrentRow(0); m_ui.settingsContainer->setCurrentIndex(0); + m_ui.helpText->setText(tr(s_category_help_text[0])); connect(m_ui.settingsCategory, &QListWidget::currentRowChanged, this, &SettingsDialog::onCategoryCurrentRowChanged); - - m_ui.helpText->setText(tr(DEFAULT_SETTING_HELP_TEXT)); } SettingsDialog::~SettingsDialog() = default; @@ -51,7 +71,9 @@ void SettingsDialog::setCategory(Category category) void SettingsDialog::onCategoryCurrentRowChanged(int row) { + Q_ASSERT(row < static_cast(Category::Count)); m_ui.settingsContainer->setCurrentIndex(row); + m_ui.helpText->setText(tr(s_category_help_text[row])); } void SettingsDialog::registerWidgetHelp(QObject* object, const char* title, const char* recommended_value, @@ -88,7 +110,7 @@ bool SettingsDialog::eventFilter(QObject* object, QEvent* event) if (m_current_help_widget) { m_current_help_widget = nullptr; - m_ui.helpText->setText(tr(DEFAULT_SETTING_HELP_TEXT)); + m_ui.helpText->setText(tr(s_category_help_text[m_ui.settingsCategory->currentRow()])); } }