Qt: add grid filters

This commit is contained in:
Megamouse 2023-04-18 21:33:31 +02:00
parent 32bfb808ae
commit 450ab7c289
6 changed files with 81 additions and 95 deletions

View File

@ -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);
}
}

View File

@ -144,6 +144,7 @@ private:
// Categories
QStringList m_category_filters;
QStringList m_grid_category_filters;
// List Mode
bool m_is_list_layout = true;

View File

@ -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<gui::game_list_columns>(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 {};
}
}

View File

@ -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);

View File

@ -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();

View File

@ -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();