From 476dcb1915be79481d045478b9f17985accb7915 Mon Sep 17 00:00:00 2001 From: vitor-k Date: Fri, 27 Sep 2019 22:15:20 -0300 Subject: [PATCH] Use the displayed text for sorting GameListItemPath. By default, DisplayRole is used as the SortRole. This behaviour is what's expected by the user. Made it so that an access to SortRole is equivalent to one to DisplayRole. Also fixes a bug with directory sorting. --- src/citra_qt/game_list.cpp | 2 +- src/citra_qt/game_list_p.h | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp index 933077a7e..1069db22b 100644 --- a/src/citra_qt/game_list.cpp +++ b/src/citra_qt/game_list.cpp @@ -294,7 +294,7 @@ GameList::GameList(GMainWindow* parent) : QWidget{parent} { item_model->setHeaderData(COLUMN_REGION, Qt::Horizontal, tr("Region")); item_model->setHeaderData(COLUMN_FILE_TYPE, Qt::Horizontal, tr("File type")); item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size")); - item_model->setSortRole(GameListItemPath::TitleRole); + item_model->setSortRole(GameListItemPath::SortRole); connect(main_window, &GMainWindow::UpdateThemedIcons, this, &GameList::onUpdateThemedIcons); connect(tree_view, &QTreeView::activated, this, &GameList::ValidateEntry); diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index fb64c34c0..94b7680c6 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -146,11 +146,11 @@ static const std::unordered_map IconSizes{ */ class GameListItemPath : public GameListItem { public: - static const int TitleRole = SortRole; - static const int FullPathRole = SortRole + 1; - static const int ProgramIdRole = SortRole + 2; - static const int ExtdataIdRole = SortRole + 3; - static const int LongTitleRole = SortRole + 4; + static const int TitleRole = SortRole + 1; + static const int FullPathRole = SortRole + 2; + static const int ProgramIdRole = SortRole + 3; + static const int ExtdataIdRole = SortRole + 4; + static const int LongTitleRole = SortRole + 5; GameListItemPath() = default; GameListItemPath(const QString& game_path, const std::vector& smdh_data, u64 program_id, @@ -196,7 +196,7 @@ public: } QVariant data(int role) const override { - if (role == Qt::DisplayRole) { + if (role == Qt::DisplayRole || role == SortRole) { std::string path, filename, extension; Common::SplitPath(data(FullPathRole).toString().toStdString(), &path, &filename, &extension); @@ -374,6 +374,13 @@ public: return static_cast(dir_type); } + /** + * Override to prevent automatic sorting. + */ + bool operator<(const QStandardItem& other) const override { + return false; + } + private: GameListItemType dir_type; }; @@ -391,6 +398,10 @@ public: int type() const override { return static_cast(GameListItemType::AddDir); } + + bool operator<(const QStandardItem& other) const override { + return false; + } }; class GameList;