From 450ab7c2890021905e77681bb4d0438797c6653c Mon Sep 17 00:00:00 2001 From: Megamouse Date: Tue, 18 Apr 2023 21:33:31 +0200 Subject: [PATCH] Qt: add grid filters --- rpcs3/rpcs3qt/game_list_frame.cpp | 16 +++-- rpcs3/rpcs3qt/game_list_frame.h | 1 + rpcs3/rpcs3qt/gui_settings.cpp | 106 ++++++++++-------------------- rpcs3/rpcs3qt/gui_settings.h | 18 ++++- rpcs3/rpcs3qt/main_window.cpp | 34 ++++++---- rpcs3/rpcs3qt/main_window.h | 1 + 6 files changed, 81 insertions(+), 95 deletions(-) diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index b825367639..40b534d5db 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -236,7 +236,8 @@ void game_list_frame::LoadSettings() { m_col_sort_order = m_gui_settings->GetValue(gui::gl_sortAsc).toBool() ? Qt::AscendingOrder : Qt::DescendingOrder; m_sort_column = m_gui_settings->GetValue(gui::gl_sortCol).toInt(); - m_category_filters = m_gui_settings->GetGameListCategoryFilters(); + m_category_filters = m_gui_settings->GetGameListCategoryFilters(true); + m_grid_category_filters = m_gui_settings->GetGameListCategoryFilters(false); m_draw_compat_status_to_grid = m_gui_settings->GetValue(gui::gl_draw_compat).toBool(); m_show_custom_icons = m_gui_settings->GetValue(gui::gl_custom_icon).toBool(); m_play_hover_movies = m_gui_settings->GetValue(gui::gl_hover_gifs).toBool(); @@ -337,15 +338,14 @@ void game_list_frame::OnColClicked(int col) // Get visibility of entries bool game_list_frame::IsEntryVisible(const game_info& game) { - auto matches_category = [&]() + const auto matches_category = [&]() { if (m_is_list_layout) { return m_category_filters.contains(qstr(game->info.category)); } - const auto cat_boot = Localized().category.cat_boot; - return cat_boot.find(qstr(game->info.category)) != cat_boot.end(); + return m_grid_category_filters.contains(qstr(game->info.category)); }; const QString serial = qstr(game->info.serial); @@ -912,15 +912,17 @@ void game_list_frame::OnCompatFinished() void game_list_frame::ToggleCategoryFilter(const QStringList& categories, bool show) { + QStringList& filters = m_is_list_layout ? m_category_filters : m_grid_category_filters; + if (show) { - m_category_filters.append(categories); + filters.append(categories); } else { - for (const auto& cat : categories) + for (const QString& cat : categories) { - m_category_filters.removeAll(cat); + filters.removeAll(cat); } } diff --git a/rpcs3/rpcs3qt/game_list_frame.h b/rpcs3/rpcs3qt/game_list_frame.h index 0395476bc1..dd04a405f5 100644 --- a/rpcs3/rpcs3qt/game_list_frame.h +++ b/rpcs3/rpcs3qt/game_list_frame.h @@ -144,6 +144,7 @@ private: // Categories QStringList m_category_filters; + QStringList m_grid_category_filters; // List Mode bool m_is_list_layout = true; diff --git a/rpcs3/rpcs3qt/gui_settings.cpp b/rpcs3/rpcs3qt/gui_settings.cpp index 07fb3380b5..c29d53160d 100644 --- a/rpcs3/rpcs3qt/gui_settings.cpp +++ b/rpcs3/rpcs3qt/gui_settings.cpp @@ -18,89 +18,33 @@ gui_settings::gui_settings(QObject* parent) : settings(parent) m_settings.reset(new QSettings(ComputeSettingsDir() + gui::Settings + ".ini", QSettings::Format::IniFormat, parent)); } -QStringList gui_settings::GetGameListCategoryFilters() const +QStringList gui_settings::GetGameListCategoryFilters(bool is_list_mode) const { QStringList filterList; - if (GetCategoryVisibility(Category::HDD_Game)) filterList.append(cat::cat_hdd_game); - if (GetCategoryVisibility(Category::Disc_Game)) filterList.append(cat::cat_disc_game); - if (GetCategoryVisibility(Category::PS1_Game)) filterList.append(cat::cat_ps1_game); - if (GetCategoryVisibility(Category::PS2_Game)) filterList.append(cat::ps2_games); - if (GetCategoryVisibility(Category::PSP_Game)) filterList.append(cat::psp_games); - if (GetCategoryVisibility(Category::Home)) filterList.append(cat::cat_home); - if (GetCategoryVisibility(Category::Media)) filterList.append(cat::media); - if (GetCategoryVisibility(Category::Data)) filterList.append(cat::data); - if (GetCategoryVisibility(Category::Unknown_Cat)) filterList.append(cat::cat_unknown); - if (GetCategoryVisibility(Category::Others)) filterList.append(cat::others); + if (GetCategoryVisibility(Category::HDD_Game, is_list_mode)) filterList.append(cat::cat_hdd_game); + if (GetCategoryVisibility(Category::Disc_Game, is_list_mode)) filterList.append(cat::cat_disc_game); + if (GetCategoryVisibility(Category::PS1_Game, is_list_mode)) filterList.append(cat::cat_ps1_game); + if (GetCategoryVisibility(Category::PS2_Game, is_list_mode)) filterList.append(cat::ps2_games); + if (GetCategoryVisibility(Category::PSP_Game, is_list_mode)) filterList.append(cat::psp_games); + if (GetCategoryVisibility(Category::Home, is_list_mode)) filterList.append(cat::cat_home); + if (GetCategoryVisibility(Category::Media, is_list_mode)) filterList.append(cat::media); + if (GetCategoryVisibility(Category::Data, is_list_mode)) filterList.append(cat::data); + if (GetCategoryVisibility(Category::Unknown_Cat, is_list_mode)) filterList.append(cat::cat_unknown); + if (GetCategoryVisibility(Category::Others, is_list_mode)) filterList.append(cat::others); return filterList; } -bool gui_settings::GetCategoryVisibility(int cat) const +bool gui_settings::GetCategoryVisibility(int cat, bool is_list_mode) const { - gui_save value; - - switch (cat) - { - case Category::HDD_Game: - value = gui::cat_hdd_game; break; - case Category::Disc_Game: - value = gui::cat_disc_game; break; - case Category::PS1_Game: - value = gui::cat_ps1_game; break; - case Category::PS2_Game: - value = gui::cat_ps2_game; break; - case Category::PSP_Game: - value = gui::cat_psp_game; break; - case Category::Home: - value = gui::cat_home; break; - case Category::Media: - value = gui::cat_audio_video; break; - case Category::Data: - value = gui::cat_game_data; break; - case Category::Unknown_Cat: - value = gui::cat_unknown; break; - case Category::Others: - value = gui::cat_other; break; - default: - cfg_log.warning("GetCategoryVisibility: wrong cat <%d>", cat); - break; - } - + const gui_save value = GetGuiSaveForCategory(cat, is_list_mode); return GetValue(value).toBool(); } -void gui_settings::SetCategoryVisibility(int cat, const bool& val) const +void gui_settings::SetCategoryVisibility(int cat, bool val, bool is_list_mode) const { - gui_save value; - - switch (cat) - { - case Category::HDD_Game: - value = gui::cat_hdd_game; break; - case Category::Disc_Game: - value = gui::cat_disc_game; break; - case Category::Home: - value = gui::cat_home; break; - case Category::PS1_Game: - value = gui::cat_ps1_game; break; - case Category::PS2_Game: - value = gui::cat_ps2_game; break; - case Category::PSP_Game: - value = gui::cat_psp_game; break; - case Category::Media: - value = gui::cat_audio_video; break; - case Category::Data: - value = gui::cat_game_data; break; - case Category::Unknown_Cat: - value = gui::cat_unknown; break; - case Category::Others: - value = gui::cat_other; break; - default: - cfg_log.warning("SetCategoryVisibility: wrong cat <%d>", cat); - break; - } - + const gui_save value = GetGuiSaveForCategory(cat, is_list_mode); SetValue(value, val); } @@ -245,3 +189,23 @@ gui_save gui_settings::GetGuiSaveForColumn(int col) const bool show = col != gui::column_sound && col != gui::column_parental && col != gui::column_firmware && col != gui::column_path; return gui_save{ gui::game_list, "visibility_" + gui::get_game_list_column_name(static_cast(col)), show }; } + +gui_save gui_settings::GetGuiSaveForCategory(int cat, bool is_list_mode) +{ + switch (cat) + { + case Category::HDD_Game: return is_list_mode ? gui::cat_hdd_game : gui::grid_cat_hdd_game; + case Category::Disc_Game: return is_list_mode ? gui::cat_disc_game : gui::grid_cat_disc_game; + case Category::Home: return is_list_mode ? gui::cat_home : gui::grid_cat_home; + case Category::PS1_Game: return is_list_mode ? gui::cat_ps1_game : gui::grid_cat_ps1_game; + case Category::PS2_Game: return is_list_mode ? gui::cat_ps2_game : gui::grid_cat_ps2_game; + case Category::PSP_Game: return is_list_mode ? gui::cat_psp_game : gui::grid_cat_psp_game; + case Category::Media: return is_list_mode ? gui::cat_audio_video : gui::grid_cat_audio_video; + case Category::Data: return is_list_mode ? gui::cat_game_data : gui::grid_cat_game_data; + case Category::Unknown_Cat: return is_list_mode ? gui::cat_unknown : gui::grid_cat_unknown; + case Category::Others: return is_list_mode ? gui::cat_other : gui::grid_cat_other; + default: + cfg_log.warning("GetGuiSaveForCategory: wrong cat <%d>", cat); + return {}; + } +} diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 4e442bcadd..9f1b1c7038 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -169,6 +169,17 @@ namespace gui const gui_save cat_unknown = gui_save(game_list, "categoryVisibleUnknown", true); const gui_save cat_other = gui_save(game_list, "categoryVisibleOther", true); + const gui_save grid_cat_hdd_game = gui_save(game_list, "gridCategoryVisibleHDDGame", true); + const gui_save grid_cat_disc_game = gui_save(game_list, "gridCategoryVisibleDiscGame", true); + const gui_save grid_cat_ps1_game = gui_save(game_list, "gridCategoryVisiblePS1Game", true); + const gui_save grid_cat_ps2_game = gui_save(game_list, "gridCategoryVisiblePS2Game", true); + const gui_save grid_cat_psp_game = gui_save(game_list, "gridCategoryVisiblePSPGame", true); + const gui_save grid_cat_home = gui_save(game_list, "gridCategoryVisibleHome", true); + const gui_save grid_cat_audio_video = gui_save(game_list, "gridCategoryVisibleAudioVideo", true); + const gui_save grid_cat_game_data = gui_save(game_list, "gridCategoryVisibleGameData", false); + const gui_save grid_cat_unknown = gui_save(game_list, "gridCategoryVisibleUnknown", true); + const gui_save grid_cat_other = gui_save(game_list, "gridCategoryVisibleOther", true); + const gui_save gl_sortAsc = gui_save(game_list, "sortAsc", true); const gui_save gl_sortCol = gui_save(game_list, "sortCol", 1); const gui_save gl_state = gui_save(game_list, "state", QByteArray()); @@ -276,7 +287,7 @@ class gui_settings : public settings public: explicit gui_settings(QObject* parent = nullptr); - bool GetCategoryVisibility(int cat) const; + bool GetCategoryVisibility(int cat, bool is_list_mode) const; void ShowConfirmationBox(const QString& title, const QString& text, const gui_save& entry, int* result, QWidget* parent); void ShowInfoBox(const QString& title, const QString& text, const gui_save& entry, QWidget* parent); @@ -286,11 +297,11 @@ public: bool GetGamelistColVisibility(int col) const; QColor GetCustomColor(int col) const; QStringList GetStylesheetEntries() const; - QStringList GetGameListCategoryFilters() const; + QStringList GetGameListCategoryFilters(bool is_list_mode) const; public Q_SLOTS: /** Sets the visibility of the chosen category. */ - void SetCategoryVisibility(int cat, const bool& val) const; + void SetCategoryVisibility(int cat, bool val, bool is_list_mode) const; void SetGamelistColVisibility(int col, bool val) const; @@ -298,6 +309,7 @@ public Q_SLOTS: static QSize SizeFromSlider(int pos); static gui_save GetGuiSaveForColumn(int col); + static gui_save GetGuiSaveForCategory(int cat, bool is_list_mode); private: void ShowBox(QMessageBox::Icon icon, const QString& title, const QString& text, const gui_save& entry, int* result, QWidget* parent, bool always_on_top); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 31f1c44547..f5075cc900 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -2136,6 +2136,20 @@ void main_window::UpdateLanguageActions(const QStringList& language_codes, const } } +void main_window::UpdateFilterActions() +{ + ui->showCatHDDGameAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::HDD_Game, m_is_list_mode)); + ui->showCatDiscGameAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Disc_Game, m_is_list_mode)); + ui->showCatPS1GamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PS1_Game, m_is_list_mode)); + ui->showCatPS2GamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PS2_Game, m_is_list_mode)); + ui->showCatPSPGamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PSP_Game, m_is_list_mode)); + ui->showCatHomeAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Home, m_is_list_mode)); + ui->showCatAudioVideoAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Media, m_is_list_mode)); + ui->showCatGameDataAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Data, m_is_list_mode)); + ui->showCatUnknownAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Unknown_Cat, m_is_list_mode)); + ui->showCatOtherAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Others, m_is_list_mode)); +} + void main_window::RepaintGui() { if (m_game_list_frame) @@ -2634,7 +2648,7 @@ void main_window::CreateConnects() { const bool checked = act->isChecked(); m_game_list_frame->ToggleCategoryFilter(categories, checked); - m_gui_settings->SetCategoryVisibility(id, checked); + m_gui_settings->SetCategoryVisibility(id, checked, m_is_list_mode); } }); @@ -2724,7 +2738,8 @@ void main_window::CreateConnects() m_is_list_mode = is_list_act; m_game_list_frame->SetListMode(m_is_list_mode); - m_category_visible_act_group->setEnabled(m_is_list_mode); + + UpdateFilterActions(); }); connect(ui->toolbar_open, &QAction::triggered, this, &main_window::BootGame); @@ -2967,24 +2982,15 @@ void main_window::ConfigureGuiFromSettings() ui->showCustomIconsAct->setChecked(m_gui_settings->GetValue(gui::gl_custom_icon).toBool()); ui->playHoverGifsAct->setChecked(m_gui_settings->GetValue(gui::gl_hover_gifs).toBool()); - ui->showCatHDDGameAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::HDD_Game)); - ui->showCatDiscGameAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Disc_Game)); - ui->showCatPS1GamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PS1_Game)); - ui->showCatPS2GamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PS2_Game)); - ui->showCatPSPGamesAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::PSP_Game)); - ui->showCatHomeAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Home)); - ui->showCatAudioVideoAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Media)); - ui->showCatGameDataAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Data)); - ui->showCatUnknownAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Unknown_Cat)); - ui->showCatOtherAct->setChecked(m_gui_settings->GetCategoryVisibility(Category::Others)); + m_is_list_mode = m_gui_settings->GetValue(gui::gl_listMode).toBool(); + + UpdateFilterActions(); // handle icon size options - m_is_list_mode = m_gui_settings->GetValue(gui::gl_listMode).toBool(); if (m_is_list_mode) ui->setlistModeListAct->setChecked(true); else ui->setlistModeGridAct->setChecked(true); - m_category_visible_act_group->setEnabled(m_is_list_mode); const int icon_size_index = m_gui_settings->GetValue(m_is_list_mode ? gui::gl_iconSize : gui::gl_iconSizeGrid).toInt(); m_other_slider_pos = m_gui_settings->GetValue(!m_is_list_mode ? gui::gl_iconSize : gui::gl_iconSizeGrid).toInt(); diff --git a/rpcs3/rpcs3qt/main_window.h b/rpcs3/rpcs3qt/main_window.h index f4f86c87e4..7f2e3a8535 100644 --- a/rpcs3/rpcs3qt/main_window.h +++ b/rpcs3/rpcs3qt/main_window.h @@ -165,6 +165,7 @@ private: void AddRecentAction(const q_string_pair& entry); void UpdateLanguageActions(const QStringList& language_codes, const QString& language); + void UpdateFilterActions(); static QString GetCurrentTitle();