Port yuzu-emu/yuzu#4700: "game_list: Eliminate redundant argument copies" (#5571)

* game_list: Eliminate redundant argument copies

Several functions can be taken by const reference to avoid copies

Co-Authored-By: LC <712067+lioncash@users.noreply.github.com>

* game_list: Make game list function naming consistent

Makes the naming consistent with the rest of the functions that are
present.

Co-Authored-By: LC <712067+lioncash@users.noreply.github.com>

Co-authored-by: Lioncash <mathew1800@gmail.com>
Co-authored-by: LC <712067+lioncash@users.noreply.github.com>
This commit is contained in:
Tobias 2020-12-07 16:05:13 +01:00 committed by GitHub
parent c557b290af
commit 702af87f0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 53 deletions

View file

@ -64,7 +64,7 @@ bool GameListSearchField::KeyReleaseEater::eventFilter(QObject* obj, QEvent* eve
case Qt::Key_Return: case Qt::Key_Return:
case Qt::Key_Enter: { case Qt::Key_Enter: {
if (gamelist->search_field->visible == 1) { if (gamelist->search_field->visible == 1) {
QString file_path = gamelist->getLastFilterResultItem(); const QString file_path = gamelist->GetLastFilterResultItem();
// To avoid loading error dialog loops while confirming them using enter // To avoid loading error dialog loops while confirming them using enter
// Also users usually want to run a different game after closing one // Also users usually want to run a different game after closing one
@ -99,22 +99,25 @@ void GameListSearchField::setFilterResult(int visible, int total) {
QStringLiteral("%1 %2 %3 %4").arg(visible).arg(result_of_text).arg(total).arg(result_text)); QStringLiteral("%1 %2 %3 %4").arg(visible).arg(result_of_text).arg(total).arg(result_text));
} }
QString GameList::getLastFilterResultItem() const { QString GameList::GetLastFilterResultItem() const {
QStandardItem* folder;
QStandardItem* child;
QString file_path; QString file_path;
const int folderCount = item_model->rowCount(); const int folderCount = item_model->rowCount();
for (int i = 0; i < folderCount; ++i) { for (int i = 0; i < folderCount; ++i) {
folder = item_model->item(i, 0); const QStandardItem* folder = item_model->item(i, 0);
const QModelIndex folder_index = folder->index(); const QModelIndex folder_index = folder->index();
const int children_count = folder->rowCount(); const int children_count = folder->rowCount();
for (int j = 0; j < children_count; ++j) { for (int j = 0; j < children_count; ++j) {
if (!tree_view->isRowHidden(j, folder_index)) { if (tree_view->isRowHidden(j, folder_index)) {
child = folder->child(j, 0); continue;
file_path = child->data(GameListItemPath::FullPathRole).toString();
} }
const QStandardItem* child = folder->child(j, 0);
file_path = child->data(GameListItemPath::FullPathRole).toString();
} }
} }
return file_path; return file_path;
} }
@ -139,7 +142,7 @@ GameListSearchField::GameListSearchField(GameList* parent) : QWidget{parent} {
edit_filter->setPlaceholderText(tr("Enter pattern to filter")); edit_filter->setPlaceholderText(tr("Enter pattern to filter"));
edit_filter->installEventFilter(key_release_eater); edit_filter->installEventFilter(key_release_eater);
edit_filter->setClearButtonEnabled(true); edit_filter->setClearButtonEnabled(true);
connect(edit_filter, &QLineEdit::textChanged, parent, &GameList::onTextChanged); connect(edit_filter, &QLineEdit::textChanged, parent, &GameList::OnTextChanged);
label_filter_result = new QLabel; label_filter_result = new QLabel;
button_filter_close = new QToolButton(this); button_filter_close = new QToolButton(this);
button_filter_close->setText(QStringLiteral("X")); button_filter_close->setText(QStringLiteral("X"));
@ -149,7 +152,7 @@ GameListSearchField::GameListSearchField(GameList* parent) : QWidget{parent} {
"#000000; font-weight: bold; background: #F0F0F0; }" "#000000; font-weight: bold; background: #F0F0F0; }"
"QToolButton:hover{ border: none; padding: 0px; color: " "QToolButton:hover{ border: none; padding: 0px; color: "
"#EEEEEE; font-weight: bold; background: #E81123}")); "#EEEEEE; font-weight: bold; background: #E81123}"));
connect(button_filter_close, &QToolButton::clicked, parent, &GameList::onFilterCloseClicked); connect(button_filter_close, &QToolButton::clicked, parent, &GameList::OnFilterCloseClicked);
layout_filter->setSpacing(10); layout_filter->setSpacing(10);
layout_filter->addWidget(label_filter); layout_filter->addWidget(label_filter);
layout_filter->addWidget(edit_filter); layout_filter->addWidget(edit_filter);
@ -175,16 +178,22 @@ static bool ContainsAllWords(const QString& haystack, const QString& userinput)
} }
// Syncs the expanded state of Game Directories with settings to persist across sessions // Syncs the expanded state of Game Directories with settings to persist across sessions
void GameList::onItemExpanded(const QModelIndex& item) { void GameList::OnItemExpanded(const QModelIndex& item) {
const auto type = item.data(GameListItem::TypeRole).value<GameListItemType>(); const auto type = item.data(GameListItem::TypeRole).value<GameListItemType>();
if (type == GameListItemType::CustomDir || type == GameListItemType::InstalledDir || const bool is_dir = type == GameListItemType::CustomDir ||
type == GameListItemType::SystemDir) type == GameListItemType::InstalledDir ||
UISettings::values.game_dirs[item.data(GameListDir::GameDirRole).toInt()].expanded = type == GameListItemType::SystemDir;
tree_view->isExpanded(item);
if (!is_dir) {
return;
}
UISettings::values.game_dirs[item.data(GameListDir::GameDirRole).toInt()].expanded =
tree_view->isExpanded(item);
} }
// Event in order to filter the gamelist after editing the searchfield // Event in order to filter the gamelist after editing the searchfield
void GameList::onTextChanged(const QString& new_text) { void GameList::OnTextChanged(const QString& new_text) {
const int folder_count = tree_view->model()->rowCount(); const int folder_count = tree_view->model()->rowCount();
QString edit_filter_text = new_text.toLower(); QString edit_filter_text = new_text.toLower();
QStandardItem* folder; QStandardItem* folder;
@ -240,7 +249,7 @@ void GameList::onTextChanged(const QString& new_text) {
} }
} }
void GameList::onUpdateThemedIcons() { void GameList::OnUpdateThemedIcons() {
for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) { for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) {
QStandardItem* child = item_model->invisibleRootItem()->child(i); QStandardItem* child = item_model->invisibleRootItem()->child(i);
@ -270,7 +279,7 @@ void GameList::onUpdateThemedIcons() {
} }
} }
void GameList::onFilterCloseClicked() { void GameList::OnFilterCloseClicked() {
main_window->filterBarSetChecked(false); main_window->filterBarSetChecked(false);
} }
@ -304,11 +313,11 @@ GameList::GameList(GMainWindow* parent) : QWidget{parent} {
item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size")); item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size"));
item_model->setSortRole(GameListItemPath::SortRole); item_model->setSortRole(GameListItemPath::SortRole);
connect(main_window, &GMainWindow::UpdateThemedIcons, this, &GameList::onUpdateThemedIcons); connect(main_window, &GMainWindow::UpdateThemedIcons, this, &GameList::OnUpdateThemedIcons);
connect(tree_view, &QTreeView::activated, this, &GameList::ValidateEntry); connect(tree_view, &QTreeView::activated, this, &GameList::ValidateEntry);
connect(tree_view, &QTreeView::customContextMenuRequested, this, &GameList::PopupContextMenu); connect(tree_view, &QTreeView::customContextMenuRequested, this, &GameList::PopupContextMenu);
connect(tree_view, &QTreeView::expanded, this, &GameList::onItemExpanded); connect(tree_view, &QTreeView::expanded, this, &GameList::OnItemExpanded);
connect(tree_view, &QTreeView::collapsed, this, &GameList::onItemExpanded); connect(tree_view, &QTreeView::collapsed, this, &GameList::OnItemExpanded);
// We must register all custom types with the Qt Automoc system so that we are able to use // We must register all custom types with the Qt Automoc system so that we are able to use
// it with signals/slots. In this case, QList falls under the umbrells of custom types. // it with signals/slots. In this case, QList falls under the umbrells of custom types.
@ -325,17 +334,17 @@ GameList::~GameList() {
emit ShouldCancelWorker(); emit ShouldCancelWorker();
} }
void GameList::setFilterFocus() { void GameList::SetFilterFocus() {
if (tree_view->model()->rowCount() > 0) { if (tree_view->model()->rowCount() > 0) {
search_field->setFocus(); search_field->setFocus();
} }
} }
void GameList::setFilterVisible(bool visibility) { void GameList::SetFilterVisible(bool visibility) {
search_field->setVisible(visibility); search_field->setVisible(visibility);
} }
void GameList::setDirectoryWatcherEnabled(bool enabled) { void GameList::SetDirectoryWatcherEnabled(bool enabled) {
if (enabled) { if (enabled) {
connect(watcher, &QFileSystemWatcher::directoryChanged, this, connect(watcher, &QFileSystemWatcher::directoryChanged, this,
&GameList::RefreshGameDirectory, Qt::UniqueConnection); &GameList::RefreshGameDirectory, Qt::UniqueConnection);
@ -345,7 +354,7 @@ void GameList::setDirectoryWatcherEnabled(bool enabled) {
} }
} }
void GameList::clearFilter() { void GameList::ClearFilter() {
search_field->clear(); search_field->clear();
} }
@ -384,21 +393,23 @@ void GameList::ValidateEntry(const QModelIndex& item) {
} }
} }
bool GameList::isEmpty() const { bool GameList::IsEmpty() const {
for (int i = 0; i < item_model->rowCount(); i++) { for (int i = 0; i < item_model->rowCount(); i++) {
const QStandardItem* child = item_model->invisibleRootItem()->child(i); const QStandardItem* child = item_model->invisibleRootItem()->child(i);
const auto type = static_cast<GameListItemType>(child->type()); const auto type = static_cast<GameListItemType>(child->type());
if (!child->hasChildren() && if (!child->hasChildren() &&
(type == GameListItemType::InstalledDir || type == GameListItemType::SystemDir)) { (type == GameListItemType::InstalledDir || type == GameListItemType::SystemDir)) {
item_model->invisibleRootItem()->removeRow(child->row()); item_model->invisibleRootItem()->removeRow(child->row());
i--; i--;
} }
} }
return !item_model->invisibleRootItem()->hasChildren(); return !item_model->invisibleRootItem()->hasChildren();
} }
void GameList::DonePopulating(QStringList watch_list) { void GameList::DonePopulating(const QStringList& watch_list) {
emit ShowList(!isEmpty()); emit ShowList(!IsEmpty());
item_model->invisibleRootItem()->appendRow(new GameListAddDir()); item_model->invisibleRootItem()->appendRow(new GameListAddDir());
@ -689,12 +700,15 @@ void GameList::SaveInterfaceLayout() {
} }
void GameList::LoadInterfaceLayout() { void GameList::LoadInterfaceLayout() {
auto header = tree_view->header(); auto* header = tree_view->header();
if (!header->restoreState(UISettings::values.gamelist_header_state)) {
// We are using the name column to display icons and titles if (header->restoreState(UISettings::values.gamelist_header_state)) {
// so make it as large as possible as default. return;
header->resizeSection(COLUMN_NAME, header->width());
} }
// We are using the name column to display icons and titles
// so make it as large as possible as default.
header->resizeSection(COLUMN_NAME, header->width());
} }
const QStringList GameList::supported_file_extensions = { const QStringList GameList::supported_file_extensions = {

View file

@ -55,12 +55,12 @@ public:
explicit GameList(GMainWindow* parent = nullptr); explicit GameList(GMainWindow* parent = nullptr);
~GameList() override; ~GameList() override;
QString getLastFilterResultItem() const; QString GetLastFilterResultItem() const;
void clearFilter(); void ClearFilter();
void setFilterFocus(); void SetFilterFocus();
void setFilterVisible(bool visibility); void SetFilterVisible(bool visibility);
void setDirectoryWatcherEnabled(bool enabled); void SetDirectoryWatcherEnabled(bool enabled);
bool isEmpty() const; bool IsEmpty() const;
void LoadCompatibilityList(); void LoadCompatibilityList();
void PopulateAsync(QVector<UISettings::GameDir>& game_dirs); void PopulateAsync(QVector<UISettings::GameDir>& game_dirs);
@ -77,7 +77,7 @@ public:
static const QStringList supported_file_extensions; static const QStringList supported_file_extensions;
signals: signals:
void GameChosen(QString game_path); void GameChosen(const QString& game_path);
void ShouldCancelWorker(); void ShouldCancelWorker();
void OpenFolderRequested(u64 program_id, GameListOpenTarget target); void OpenFolderRequested(u64 program_id, GameListOpenTarget target);
void NavigateToGamedbEntryRequested(u64 program_id, void NavigateToGamedbEntryRequested(u64 program_id,
@ -89,16 +89,16 @@ signals:
void PopulatingCompleted(); void PopulatingCompleted();
private slots: private slots:
void onItemExpanded(const QModelIndex& item); void OnItemExpanded(const QModelIndex& item);
void onTextChanged(const QString& new_text); void OnTextChanged(const QString& new_text);
void onFilterCloseClicked(); void OnFilterCloseClicked();
void onUpdateThemedIcons(); void OnUpdateThemedIcons();
private: private:
void AddDirEntry(GameListDir* entry_items); void AddDirEntry(GameListDir* entry_items);
void AddEntry(const QList<QStandardItem*>& entry_items, GameListDir* parent); void AddEntry(const QList<QStandardItem*>& entry_items, GameListDir* parent);
void ValidateEntry(const QModelIndex& item); void ValidateEntry(const QModelIndex& item);
void DonePopulating(QStringList watch_list); void DonePopulating(const QStringList& watch_list);
void PopupContextMenu(const QPoint& menu_location); void PopupContextMenu(const QPoint& menu_location);
void AddGamePopup(QMenu& context_menu, const QString& path, u64 program_id, u64 extdata_id); void AddGamePopup(QMenu& context_menu, const QString& path, u64 program_id, u64 extdata_id);

View file

@ -619,7 +619,7 @@ void GMainWindow::RestoreUIState() {
OnDisplayTitleBars(ui->action_Display_Dock_Widget_Headers->isChecked()); OnDisplayTitleBars(ui->action_Display_Dock_Widget_Headers->isChecked());
ui->action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar); ui->action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar);
game_list->setFilterVisible(ui->action_Show_Filter_Bar->isChecked()); game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
ui->action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar); ui->action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar);
statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked()); statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked());
@ -1143,11 +1143,11 @@ void GMainWindow::ShutdownGame() {
render_window->hide(); render_window->hide();
loading_screen->hide(); loading_screen->hide();
loading_screen->Clear(); loading_screen->Clear();
if (game_list->isEmpty()) if (game_list->IsEmpty())
game_list_placeholder->show(); game_list_placeholder->show();
else else
game_list->show(); game_list->show();
game_list->setFilterFocus(); game_list->SetFilterFocus();
setMouseTracking(false); setMouseTracking(false);
@ -1449,7 +1449,7 @@ void GMainWindow::OnMenuInstallCIA() {
void GMainWindow::InstallCIA(QStringList filepaths) { void GMainWindow::InstallCIA(QStringList filepaths) {
ui->action_Install_CIA->setEnabled(false); ui->action_Install_CIA->setEnabled(false);
game_list->setDirectoryWatcherEnabled(false); game_list->SetDirectoryWatcherEnabled(false);
progress_bar->show(); progress_bar->show();
progress_bar->setMaximum(INT_MAX); progress_bar->setMaximum(INT_MAX);
@ -1503,7 +1503,7 @@ void GMainWindow::OnCIAInstallReport(Service::AM::InstallStatus status, QString
void GMainWindow::OnCIAInstallFinished() { void GMainWindow::OnCIAInstallFinished() {
progress_bar->hide(); progress_bar->hide();
progress_bar->setValue(0); progress_bar->setValue(0);
game_list->setDirectoryWatcherEnabled(true); game_list->SetDirectoryWatcherEnabled(true);
ui->action_Install_CIA->setEnabled(true); ui->action_Install_CIA->setEnabled(true);
game_list->PopulateAsync(UISettings::values.game_dirs); game_list->PopulateAsync(UISettings::values.game_dirs);
} }
@ -1818,11 +1818,11 @@ void GMainWindow::OnOpenCitraFolder() {
} }
void GMainWindow::OnToggleFilterBar() { void GMainWindow::OnToggleFilterBar() {
game_list->setFilterVisible(ui->action_Show_Filter_Bar->isChecked()); game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
if (ui->action_Show_Filter_Bar->isChecked()) { if (ui->action_Show_Filter_Bar->isChecked()) {
game_list->setFilterFocus(); game_list->SetFilterFocus();
} else { } else {
game_list->clearFilter(); game_list->ClearFilter();
} }
} }