mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2024-07-04 23:31:19 +01:00
yuzu: Fixes to game list sorting
Should fix citra-emu/citra#4593. As the issue might not be entirely clear, I'll offer a short explanation from what I understood from it and found from experimentation. Currently yuzu offers the user the option to change the text that's displayed in the "Name" column in the game list. Generally, it is expected that the items are sorted based on the displayed text, but yuzu would sort them by title instead. Made it so that an access to SortRole returns the same as DisplayRole. There shouldn't be any UI changes, only change in behaviour. Also fixes a bug with directory sorting, where having the directories out of order would enable you to try to "move up" to the addDirectory button, which would crash the emulator. Co-Authored-By: Vitor K <vitor-k@users.noreply.github.com>
This commit is contained in:
parent
69277de29d
commit
8d0fb33ac4
2 changed files with 22 additions and 8 deletions
|
@ -315,7 +315,7 @@ GameList::GameList(FileSys::VirtualFilesystem vfs, FileSys::ManualContentProvide
|
|||
item_model->setHeaderData(COLUMN_FILE_TYPE - 1, Qt::Horizontal, tr("File type"));
|
||||
item_model->setHeaderData(COLUMN_SIZE - 1, 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);
|
||||
|
@ -441,6 +441,8 @@ void GameList::DonePopulating(QStringList watch_list) {
|
|||
if (children_total > 0) {
|
||||
search_field->setFocus();
|
||||
}
|
||||
item_model->sort(tree_view->header()->sortIndicatorSection(),
|
||||
tree_view->header()->sortIndicatorOrder());
|
||||
}
|
||||
|
||||
void GameList::PopupContextMenu(const QPoint& menu_location) {
|
||||
|
@ -666,8 +668,6 @@ void GameList::LoadInterfaceLayout() {
|
|||
// so make it as large as possible as default.
|
||||
header->resizeSection(COLUMN_NAME, header->width());
|
||||
}
|
||||
|
||||
item_model->sort(header->sortIndicatorSection(), header->sortIndicatorOrder());
|
||||
}
|
||||
|
||||
const QStringList GameList::supported_file_extensions = {
|
||||
|
|
|
@ -65,10 +65,10 @@ public:
|
|||
*/
|
||||
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 FileTypeRole = SortRole + 3;
|
||||
static const int TitleRole = SortRole + 1;
|
||||
static const int FullPathRole = SortRole + 2;
|
||||
static const int ProgramIdRole = SortRole + 3;
|
||||
static const int FileTypeRole = SortRole + 4;
|
||||
|
||||
GameListItemPath() = default;
|
||||
GameListItemPath(const QString& game_path, const std::vector<u8>& picture_data,
|
||||
|
@ -95,7 +95,7 @@ public:
|
|||
}
|
||||
|
||||
QVariant data(int role) const override {
|
||||
if (role == Qt::DisplayRole) {
|
||||
if (role == Qt::DisplayRole || role == SortRole) {
|
||||
std::string filename;
|
||||
Common::SplitPath(data(FullPathRole).toString().toStdString(), nullptr, &filename,
|
||||
nullptr);
|
||||
|
@ -110,6 +110,9 @@ public:
|
|||
const auto& row1 = row_data.at(UISettings::values.row_1_text_id);
|
||||
const int row2_id = UISettings::values.row_2_text_id;
|
||||
|
||||
if (role == SortRole)
|
||||
return row1.toLower();
|
||||
|
||||
if (row2_id == 4) // None
|
||||
return row1;
|
||||
|
||||
|
@ -123,6 +126,13 @@ public:
|
|||
|
||||
return GameListItem::data(role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Override to prevent automatic sorting.
|
||||
*/
|
||||
bool operator<(const QStandardItem& other) const override {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class GameListItemCompat : public GameListItem {
|
||||
|
@ -289,6 +299,10 @@ public:
|
|||
int type() const override {
|
||||
return static_cast<int>(GameListItemType::AddDir);
|
||||
}
|
||||
|
||||
bool operator<(const QStandardItem& other) const override {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class GameList;
|
||||
|
|
Loading…
Reference in a new issue