From 8ecd31db4146ce66bf5bb08c27d0daf09c376fd4 Mon Sep 17 00:00:00 2001 From: zhupengfei Date: Fri, 12 Oct 2018 22:30:08 +0800 Subject: [PATCH] citra_qt: use enum classes for the settings --- src/citra_qt/configuration/config.cpp | 33 ++++++++--------- src/citra_qt/configuration/configure_ui.cpp | 17 ++++++--- src/citra_qt/game_list_p.h | 41 ++++++++++++--------- src/citra_qt/ui_settings.h | 20 ++++++++-- 4 files changed, 66 insertions(+), 45 deletions(-) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index e429eb192..a7c284471 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -220,26 +220,23 @@ void Config::ReadValues() { qt_config->endGroup(); qt_config->beginGroup("GameList"); - UISettings::values.game_list_icon_size = ReadSetting("iconSize", 2).toInt(); - if (UISettings::values.game_list_icon_size < 0 || UISettings::values.game_list_icon_size > 2) { - LOG_ERROR(Config, "Invalid value for game_list_icon_size: {}", - UISettings::values.game_list_icon_size); - UISettings::values.game_list_icon_size = 2; + int icon_size = ReadSetting("iconSize", 2).toInt(); + if (icon_size < 0 || icon_size > 2) { + icon_size = 2; } + UISettings::values.game_list_icon_size = UISettings::GameListIconSize{icon_size}; - UISettings::values.game_list_row_1 = ReadSetting("row1", 2).toInt(); - if (UISettings::values.game_list_row_1 < 0 || UISettings::values.game_list_row_1 > 3) { - LOG_ERROR(Config, "Invalid value for game_list_row_1: {}", - UISettings::values.game_list_row_1); - UISettings::values.game_list_row_1 = 2; + int row_1 = ReadSetting("row1", 2).toInt(); + if (row_1 < 0 || row_1 > 3) { + row_1 = 2; } + UISettings::values.game_list_row_1 = UISettings::GameListText{row_1}; - UISettings::values.game_list_row_2 = ReadSetting("row2", 0).toInt(); - if (UISettings::values.game_list_row_2 < -1 || UISettings::values.game_list_row_2 > 3) { - LOG_ERROR(Config, "Invalid value for game_list_row_2: {}", - UISettings::values.game_list_row_2); - UISettings::values.game_list_row_2 = 0; + int row_2 = ReadSetting("row2", 0).toInt(); + if (row_2 < -1 || row_2 > 3) { + row_2 = 0; } + UISettings::values.game_list_row_2 = UISettings::GameListText{row_2}; UISettings::values.game_list_hide_no_icon = ReadSetting("hideNoIcon", false).toBool(); qt_config->endGroup(); @@ -474,9 +471,9 @@ void Config::SaveValues() { qt_config->endGroup(); qt_config->beginGroup("GameList"); - WriteSetting("iconSize", UISettings::values.game_list_icon_size, 2); - WriteSetting("row1", UISettings::values.game_list_row_1, 2); - WriteSetting("row2", UISettings::values.game_list_row_2, 0); + WriteSetting("iconSize", static_cast(UISettings::values.game_list_icon_size), 2); + WriteSetting("row1", static_cast(UISettings::values.game_list_row_1), 2); + WriteSetting("row2", static_cast(UISettings::values.game_list_row_2), 0); WriteSetting("hideNoIcon", UISettings::values.game_list_hide_no_icon, false); qt_config->endGroup(); diff --git a/src/citra_qt/configuration/configure_ui.cpp b/src/citra_qt/configuration/configure_ui.cpp index a6baee2fd..7972970ad 100644 --- a/src/citra_qt/configuration/configure_ui.cpp +++ b/src/citra_qt/configuration/configure_ui.cpp @@ -40,18 +40,23 @@ void ConfigureUi::setConfiguration() { ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); ui->language_combobox->setCurrentIndex( ui->language_combobox->findData(UISettings::values.language)); - ui->icon_size_combobox->setCurrentIndex(UISettings::values.game_list_icon_size); - ui->row_1_text_combobox->setCurrentIndex(UISettings::values.game_list_row_1); - ui->row_2_text_combobox->setCurrentIndex(UISettings::values.game_list_row_2 + 1); + ui->icon_size_combobox->setCurrentIndex( + static_cast(UISettings::values.game_list_icon_size)); + ui->row_1_text_combobox->setCurrentIndex(static_cast(UISettings::values.game_list_row_1)); + ui->row_2_text_combobox->setCurrentIndex(static_cast(UISettings::values.game_list_row_2) + + 1); ui->toggle_hide_no_icon->setChecked(UISettings::values.game_list_hide_no_icon); } void ConfigureUi::applyConfiguration() { UISettings::values.theme = ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); - UISettings::values.game_list_icon_size = ui->icon_size_combobox->currentIndex(); - UISettings::values.game_list_row_1 = ui->row_1_text_combobox->currentIndex(); - UISettings::values.game_list_row_2 = ui->row_2_text_combobox->currentIndex() - 1; + UISettings::values.game_list_icon_size = + static_cast(ui->icon_size_combobox->currentIndex()); + UISettings::values.game_list_row_1 = + static_cast(ui->row_1_text_combobox->currentIndex()); + UISettings::values.game_list_row_2 = + static_cast(ui->row_2_text_combobox->currentIndex() - 1); UISettings::values.game_list_hide_no_icon = ui->toggle_hide_no_icon->isChecked(); } diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index a0b432eca..cc8b92851 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -124,6 +124,13 @@ public: } }; +/// Game list icon sizes (in px) +static const std::unordered_map IconSizes{ + {UISettings::GameListIconSize::NoIcon, 0}, + {UISettings::GameListIconSize::SmallIcon, 24}, + {UISettings::GameListIconSize::LargeIcon, 48}, +}; + /** * A specialization of GameListItem for path values. * This class ensures that for every full path value it holds, a correct string representation @@ -145,16 +152,17 @@ public: setData(qulonglong(program_id), ProgramIdRole); setData(qulonglong(extdata_id), ExtdataIdRole); - if (!UISettings::values.game_list_icon_size) { + if (UISettings::values.game_list_icon_size == UISettings::GameListIconSize::NoIcon) { // Do not display icons setData(QPixmap(), Qt::DecorationRole); } - bool large = UISettings::values.game_list_icon_size == 2; + bool large = + UISettings::values.game_list_icon_size == UISettings::GameListIconSize::LargeIcon; if (!Loader::IsValidSMDH(smdh_data)) { // SMDH is not valid, set a default icon - if (UISettings::values.game_list_icon_size) + if (UISettings::values.game_list_icon_size != UISettings::GameListIconSize::NoIcon) setData(GetDefaultIcon(large), Qt::DecorationRole); return; } @@ -163,7 +171,7 @@ public: memcpy(&smdh, smdh_data.data(), sizeof(Loader::SMDH)); // Get icon from SMDH - if (UISettings::values.game_list_icon_size) + if (UISettings::values.game_list_icon_size != UISettings::GameListIconSize::NoIcon) setData(GetQPixmapFromSMDH(smdh, large), Qt::DecorationRole); // Get title from SMDH @@ -181,19 +189,19 @@ public: Common::SplitPath(data(FullPathRole).toString().toStdString(), &path, &filename, &extension); - const std::array display_texts{{ - QString::fromStdString(filename + extension), // file name - data(FullPathRole).toString(), // full path - data(TitleRole).toString(), // title name - QString::fromStdString( - fmt::format("{:016X}", data(ProgramIdRole).toULongLong())), // title id - }}; + const std::unordered_map display_texts{ + {UISettings::GameListText::FileName, QString::fromStdString(filename + extension)}, + {UISettings::GameListText::FullPath, data(FullPathRole).toString()}, + {UISettings::GameListText::TitleName, data(TitleRole).toString()}, + {UISettings::GameListText::TitleID, + QString::fromStdString(fmt::format("{:016X}", data(ProgramIdRole).toULongLong()))}, + }; const QString& row1 = display_texts.at(UISettings::values.game_list_row_1); QString row2; - int row_2_id = UISettings::values.game_list_row_2; - if (row_2_id != -1) { + auto row_2_id = UISettings::values.game_list_row_2; + if (row_2_id != UISettings::GameListText::NoText) { row2 = (row1.isEmpty() ? "" : "\n ") + display_texts.at(row_2_id); } return row1 + row2; @@ -324,9 +332,7 @@ public: UISettings::GameDir* game_dir = &directory; setData(QVariant::fromValue(game_dir), GameDirRole); - constexpr std::array icon_sizes{{0, 24, 48}}; - - int icon_size = icon_sizes[UISettings::values.game_list_icon_size]; + int icon_size = IconSizes.at(UISettings::values.game_list_icon_size); switch (dir_type) { case GameListItemType::InstalledDir: setData(QIcon::fromTheme("sd_card").pixmap(icon_size), Qt::DecorationRole); @@ -357,8 +363,7 @@ public: explicit GameListAddDir() { setData(type(), TypeRole); - constexpr std::array icon_sizes{{0, 24, 48}}; - int icon_size = icon_sizes[UISettings::values.game_list_icon_size]; + int icon_size = IconSizes.at(UISettings::values.game_list_icon_size); setData(QIcon::fromTheme("plus").pixmap(icon_size), Qt::DecorationRole); setData("Add New Game Directory", Qt::DisplayRole); } diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h index 7cbbea522..caa6a353f 100644 --- a/src/citra_qt/ui_settings.h +++ b/src/citra_qt/ui_settings.h @@ -31,6 +31,20 @@ struct GameDir { }; }; +enum class GameListIconSize { + NoIcon, ///< Do not display icons + SmallIcon, ///< Display a small (24x24) icon + LargeIcon, ///< Display a large (48x48) icon +}; + +enum class GameListText { + NoText = -1, ///< No text + FileName, ///< Display the file name of the entry + FullPath, ///< Display the full path of the entry + TitleName, ///< Display the name of the title + TitleID, ///< Display the title ID +}; + struct Values { QByteArray geometry; QByteArray state; @@ -59,9 +73,9 @@ struct Values { bool enable_discord_presence; // Game List - int game_list_icon_size; - int game_list_row_1; - int game_list_row_2; + GameListIconSize game_list_icon_size; + GameListText game_list_row_1; + GameListText game_list_row_2; bool game_list_hide_no_icon; QString roms_path;