From c60ce7897e39d22f4d5b533a971e6229f5895e07 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 10 Mar 2023 11:14:15 +0200 Subject: [PATCH] sort columns , and sort order --- shadPS4/gui/game_list_frame.cpp | 40 +++++++++++++++++++++++++++++++-- shadPS4/gui/game_list_frame.h | 2 ++ shadPS4/gui/gui_settings.h | 4 ++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/shadPS4/gui/game_list_frame.cpp b/shadPS4/gui/game_list_frame.cpp index a3af8174..03cfc12d 100644 --- a/shadPS4/gui/game_list_frame.cpp +++ b/shadPS4/gui/game_list_frame.cpp @@ -1,7 +1,7 @@ #include "game_list_frame.h" #include "gui_settings.h" -game_list_frame::game_list_frame(std::shared_ptr gui_settings,QWidget* parent) +game_list_frame::game_list_frame(std::shared_ptr gui_settings, QWidget* parent) : QWidget(parent) , m_gui_settings(std::move(gui_settings)) { @@ -88,8 +88,9 @@ game_list_frame::game_list_frame(std::shared_ptr gui_settings,QWid configure->addActions(m_columnActs); configure->exec(m_game_list->horizontalHeader()->viewport()->mapToGlobal(pos)); }); + connect(m_game_list->horizontalHeader(), &QHeaderView::sectionClicked, this, &game_list_frame::OnHeaderColumnClicked); } -game_list_frame::~game_list_frame(){ +game_list_frame::~game_list_frame() { SaveSettings(); } void game_list_frame::FixNarrowColumns() const @@ -200,14 +201,46 @@ void game_list_frame::SortGameList() const // Shorten the last section to remove horizontal scrollbar if possible m_game_list->resizeColumnToContents(gui::column_count - 1); } + +void game_list_frame::OnHeaderColumnClicked(int col) +{ + if (col == 0) return; // Don't "sort" icons. + + if (col == m_sort_column) + { + m_col_sort_order = (m_col_sort_order == Qt::AscendingOrder) ? Qt::DescendingOrder : Qt::AscendingOrder; + } + else + { + m_col_sort_order = Qt::AscendingOrder; + } + m_sort_column = col; + + m_gui_settings->SetValue(gui::game_list_sortAsc, m_col_sort_order == Qt::AscendingOrder); + m_gui_settings->SetValue(gui::game_list_sortCol, col); + + SortGameList(); +} + void game_list_frame::LoadSettings() { + m_col_sort_order = m_gui_settings->GetValue(gui::game_list_sortAsc).toBool() ? Qt::AscendingOrder : Qt::DescendingOrder; + m_sort_column = m_gui_settings->GetValue(gui::game_list_sortCol).toInt(); + + const QByteArray state = m_gui_settings->GetValue(gui::game_list_state).toByteArray(); + if (!m_game_list->horizontalHeader()->restoreState(state) && m_game_list->rowCount()) + { + // If no settings exist, resize to contents. + ResizeColumnsToContents(); + } + for (int col = 0; col < m_columnActs.count(); ++col) { const bool vis = m_gui_settings->GetGamelistColVisibility(col); m_columnActs[col]->setChecked(vis); m_game_list->setColumnHidden(col, !vis); } + SortGameList(); FixNarrowColumns(); m_game_list->horizontalHeader()->restoreState(m_game_list->horizontalHeader()->saveState()); @@ -219,4 +252,7 @@ void game_list_frame::SaveSettings() { m_gui_settings->SetGamelistColVisibility(col, m_columnActs[col]->isChecked()); } + m_gui_settings->SetValue(gui::game_list_sortCol, m_sort_column); + m_gui_settings->SetValue(gui::game_list_sortAsc, m_col_sort_order == Qt::AscendingOrder); + m_gui_settings->SetValue(gui::game_list_state, m_game_list->horizontalHeader()->saveState()); } \ No newline at end of file diff --git a/shadPS4/gui/game_list_frame.h b/shadPS4/gui/game_list_frame.h index 7991d55d..684d0b47 100644 --- a/shadPS4/gui/game_list_frame.h +++ b/shadPS4/gui/game_list_frame.h @@ -25,6 +25,8 @@ public : /** Resizes the columns to their contents and adds a small spacing */ void ResizeColumnsToContents(int spacing = 20) const; +private Q_SLOTS: + void OnHeaderColumnClicked(int col); private: void SortGameList() const; diff --git a/shadPS4/gui/gui_settings.h b/shadPS4/gui/gui_settings.h index 57f5e9b9..234c6c9c 100644 --- a/shadPS4/gui/gui_settings.h +++ b/shadPS4/gui/gui_settings.h @@ -44,6 +44,10 @@ namespace gui const QString game_list = "GameList"; + const gui_save game_list_sortAsc = gui_save(game_list, "sortAsc", true); + const gui_save game_list_sortCol = gui_save(game_list, "sortCol", 1); + const gui_save game_list_state = gui_save(game_list, "state", QByteArray()); + } class gui_settings : public settings