mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-14 01:27:00 +00:00
Qt: add grid filters
This commit is contained in:
parent
32bfb808ae
commit
450ab7c289
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,6 +144,7 @@ private:
|
||||
|
||||
// Categories
|
||||
QStringList m_category_filters;
|
||||
QStringList m_grid_category_filters;
|
||||
|
||||
// List Mode
|
||||
bool m_is_list_layout = true;
|
||||
|
@ -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 {};
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user