mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-27 17:42:40 -06:00
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:
parent
c557b290af
commit
702af87f0d
3 changed files with 67 additions and 53 deletions
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QStandardItem* child = folder->child(j, 0);
|
||||||
file_path = child->data(GameListItemPath::FullPathRole).toString();
|
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 ||
|
||||||
|
type == GameListItemType::SystemDir;
|
||||||
|
|
||||||
|
if (!is_dir) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
UISettings::values.game_dirs[item.data(GameListDir::GameDirRole).toInt()].expanded =
|
UISettings::values.game_dirs[item.data(GameListDir::GameDirRole).toInt()].expanded =
|
||||||
tree_view->isExpanded(item);
|
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,13 +700,16 @@ 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)) {
|
|
||||||
|
if (header->restoreState(UISettings::values.gamelist_header_state)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// We are using the name column to display icons and titles
|
// We are using the name column to display icons and titles
|
||||||
// so make it as large as possible as default.
|
// so make it as large as possible as default.
|
||||||
header->resizeSection(COLUMN_NAME, header->width());
|
header->resizeSection(COLUMN_NAME, header->width());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const QStringList GameList::supported_file_extensions = {
|
const QStringList GameList::supported_file_extensions = {
|
||||||
QStringLiteral("3ds"), QStringLiteral("3dsx"), QStringLiteral("elf"), QStringLiteral("axf"),
|
QStringLiteral("3ds"), QStringLiteral("3dsx"), QStringLiteral("elf"), QStringLiteral("axf"),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue