From 795a52c75a33d9bafa5a7df01077b8d6175d3f5a Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 2 Dec 2025 21:08:56 -0500 Subject: [PATCH] [qt] remove full/empty filters, replace with public lobby filter" Signed-off-by: lizzie --- src/qt_common/config/uisettings.h | 10 ++-- src/yuzu/multiplayer/lobby.cpp | 81 +++++++++---------------------- src/yuzu/multiplayer/lobby.h | 5 +- src/yuzu/multiplayer/lobby.ui | 11 +---- 4 files changed, 29 insertions(+), 78 deletions(-) diff --git a/src/qt_common/config/uisettings.h b/src/qt_common/config/uisettings.h index 65d03cc990..c4c36eb214 100644 --- a/src/qt_common/config/uisettings.h +++ b/src/qt_common/config/uisettings.h @@ -170,14 +170,10 @@ struct Values { // multiplayer settings Setting multiplayer_nickname{linkage, {}, "nickname", Category::Multiplayer}; Setting multiplayer_filter_text{linkage, {}, "filter_text", Category::Multiplayer}; - Setting multiplayer_filter_games_owned{linkage, false, "filter_games_owned", - Category::Multiplayer}; - Setting multiplayer_filter_hide_empty{linkage, false, "filter_games_hide_empty", - Category::Multiplayer}; - Setting multiplayer_filter_hide_full{linkage, false, "filter_games_hide_full", - Category::Multiplayer}; + Setting multiplayer_filter_games_owned{linkage, true, "filter_games_owned", Category::Multiplayer}; + Setting multiplayer_filter_public_rooms{linkage, true, "filter_games_public_room", Category::Multiplayer}; Setting multiplayer_ip{linkage, {}, "ip", Category::Multiplayer}; - Setting multiplayer_port{linkage, 24872, 0, + Setting multiplayer_port{linkage, 24872, 0, UINT16_MAX, "port", Category::Multiplayer}; Setting multiplayer_room_nickname{ linkage, {}, "room_nickname", Category::Multiplayer}; diff --git a/src/yuzu/multiplayer/lobby.cpp b/src/yuzu/multiplayer/lobby.cpp index fab9a56b2c..02a3ec8e84 100644 --- a/src/yuzu/multiplayer/lobby.cpp +++ b/src/yuzu/multiplayer/lobby.cpp @@ -62,14 +62,12 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, ui->room_list->setContextMenuPolicy(Qt::CustomContextMenu); ui->nickname->setValidator(validation.GetNickname()); - ui->nickname->setText( - QString::fromStdString(UISettings::values.multiplayer_nickname.GetValue())); + ui->nickname->setText(QString::fromStdString(UISettings::values.multiplayer_nickname.GetValue())); // Try find the best nickname by default if (ui->nickname->text().isEmpty() || ui->nickname->text() == QStringLiteral("Eden")) { - if (!Settings::values.eden_username.GetValue().empty()) { - ui->nickname->setText( - QString::fromStdString(Settings::values.eden_username.GetValue())); + if (auto const username = Settings::values.eden_username.GetValue(); !username.empty()) { + ui->nickname->setText(QString::fromStdString(username)); } else if (!GetProfileUsername().empty()) { ui->nickname->setText(QString::fromStdString(GetProfileUsername())); } else { @@ -81,21 +79,17 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, connect(ui->refresh_list, &QPushButton::clicked, this, &Lobby::RefreshLobby); connect(ui->search, &QLineEdit::textChanged, proxy, &LobbyFilterProxyModel::SetFilterSearch); connect(ui->games_owned, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterOwned); - connect(ui->hide_empty, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterEmpty); - connect(ui->hide_full, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterFull); + connect(ui->public_rooms, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterPublic); connect(ui->room_list, &QTreeView::doubleClicked, this, &Lobby::OnJoinRoom); connect(ui->room_list, &QTreeView::clicked, this, &Lobby::OnExpandRoom); // Actions - connect(&room_list_watcher, &QFutureWatcher::finished, this, - &Lobby::OnRefreshLobby); + connect(&room_list_watcher, &QFutureWatcher::finished, this, &Lobby::OnRefreshLobby); // Load persistent filters after events are connected to make sure they apply - ui->search->setText( - QString::fromStdString(UISettings::values.multiplayer_filter_text.GetValue())); + ui->search->setText(QString::fromStdString(UISettings::values.multiplayer_filter_text.GetValue())); ui->games_owned->setChecked(UISettings::values.multiplayer_filter_games_owned.GetValue()); - ui->hide_empty->setChecked(UISettings::values.multiplayer_filter_hide_empty.GetValue()); - ui->hide_full->setChecked(UISettings::values.multiplayer_filter_hide_full.GetValue()); + ui->public_rooms->setChecked(UISettings::values.multiplayer_filter_public_rooms.GetValue()); } Lobby::~Lobby() = default; @@ -215,12 +209,9 @@ void Lobby::OnJoinRoom(const QModelIndex& source) { UISettings::values.multiplayer_nickname = ui->nickname->text().toStdString(); UISettings::values.multiplayer_filter_text = ui->search->text().toStdString(); UISettings::values.multiplayer_filter_games_owned = ui->games_owned->isChecked(); - UISettings::values.multiplayer_filter_hide_empty = ui->hide_empty->isChecked(); - UISettings::values.multiplayer_filter_hide_full = ui->hide_full->isChecked(); - UISettings::values.multiplayer_ip = - proxy->data(connection_index, LobbyItemHost::HostIPRole).value().toStdString(); - UISettings::values.multiplayer_port = - proxy->data(connection_index, LobbyItemHost::HostPortRole).toInt(); + UISettings::values.multiplayer_filter_public_rooms = ui->public_rooms->isChecked(); + UISettings::values.multiplayer_ip = proxy->data(connection_index, LobbyItemHost::HostIPRole).value().toStdString(); + UISettings::values.multiplayer_port = proxy->data(connection_index, LobbyItemHost::HostPortRole).toInt(); emit SaveConfig(); } @@ -228,8 +219,8 @@ void Lobby::ResetModel() { model->clear(); model->insertColumns(0, Column::TOTAL); model->setHeaderData(Column::MEMBER, Qt::Horizontal, tr("Players"), Qt::DisplayRole); - model->setHeaderData(Column::ROOM_NAME, Qt::Horizontal, tr("Room Name"), Qt::DisplayRole); - model->setHeaderData(Column::GAME_NAME, Qt::Horizontal, tr("Preferred Game"), Qt::DisplayRole); + model->setHeaderData(Column::ROOM_NAME, Qt::Horizontal, tr("Name"), Qt::DisplayRole); + model->setHeaderData(Column::GAME_NAME, Qt::Horizontal, tr("Game"), Qt::DisplayRole); model->setHeaderData(Column::HOST, Qt::Horizontal, tr("Host"), Qt::DisplayRole); } @@ -345,26 +336,12 @@ bool LobbyFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& s return true; } - // filter by empty rooms - if (filter_empty) { - QModelIndex member_list = sourceModel()->index(sourceRow, Column::MEMBER, sourceParent); - int player_count = - sourceModel()->data(member_list, LobbyItemMemberList::MemberListRole).toList().size(); - if (player_count == 0) { + // filter by non-password protected + if (filter_public) { + QModelIndex password_index = sourceModel()->index(sourceRow, Column::ROOM_NAME); + bool has_password = sourceModel()->data(password_index, LobbyItemName::PasswordRole).toBool(); + if (has_password) return false; - } - } - - // filter by filled rooms - if (filter_full) { - QModelIndex member_list = sourceModel()->index(sourceRow, Column::MEMBER, sourceParent); - int player_count = - sourceModel()->data(member_list, LobbyItemMemberList::MemberListRole).toList().size(); - int max_players = - sourceModel()->data(member_list, LobbyItemMemberList::MaxPlayerRole).toInt(); - if (player_count >= max_players) { - return false; - } } // filter by search parameters @@ -372,18 +349,9 @@ bool LobbyFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& s QModelIndex game_name = sourceModel()->index(sourceRow, Column::GAME_NAME, sourceParent); QModelIndex room_name = sourceModel()->index(sourceRow, Column::ROOM_NAME, sourceParent); QModelIndex host_name = sourceModel()->index(sourceRow, Column::HOST, sourceParent); - bool preferred_game_match = sourceModel() - ->data(game_name, LobbyItemGame::GameNameRole) - .toString() - .contains(filter_search, filterCaseSensitivity()); - bool room_name_match = sourceModel() - ->data(room_name, LobbyItemName::NameRole) - .toString() - .contains(filter_search, filterCaseSensitivity()); - bool username_match = sourceModel() - ->data(host_name, LobbyItemHost::HostUsernameRole) - .toString() - .contains(filter_search, filterCaseSensitivity()); + bool preferred_game_match = sourceModel()->data(game_name, LobbyItemGame::GameNameRole).toString().contains(filter_search, filterCaseSensitivity()); + bool room_name_match = sourceModel()->data(room_name, LobbyItemName::NameRole).toString().contains(filter_search, filterCaseSensitivity()); + bool username_match = sourceModel()->data(host_name, LobbyItemHost::HostUsernameRole).toString().contains(filter_search, filterCaseSensitivity()); if (!preferred_game_match && !room_name_match && !username_match) { return false; } @@ -425,13 +393,8 @@ void LobbyFilterProxyModel::SetFilterOwned(bool filter) { invalidate(); } -void LobbyFilterProxyModel::SetFilterEmpty(bool filter) { - filter_empty = filter; - invalidate(); -} - -void LobbyFilterProxyModel::SetFilterFull(bool filter) { - filter_full = filter; +void LobbyFilterProxyModel::SetFilterPublic(bool filter) { + filter_public = filter; invalidate(); } diff --git a/src/yuzu/multiplayer/lobby.h b/src/yuzu/multiplayer/lobby.h index 46dec45125..18985f4ee9 100644 --- a/src/yuzu/multiplayer/lobby.h +++ b/src/yuzu/multiplayer/lobby.h @@ -126,14 +126,13 @@ public: public slots: void SetFilterOwned(bool); - void SetFilterEmpty(bool); - void SetFilterFull(bool); + void SetFilterPublic(bool); void SetFilterSearch(const QString&); private: QStandardItemModel* game_list; bool filter_owned = false; bool filter_empty = false; - bool filter_full = false; + bool filter_public = false; QString filter_search; }; diff --git a/src/yuzu/multiplayer/lobby.ui b/src/yuzu/multiplayer/lobby.ui index 0ef0ef762d..afcdc4f81f 100644 --- a/src/yuzu/multiplayer/lobby.ui +++ b/src/yuzu/multiplayer/lobby.ui @@ -78,16 +78,9 @@ - + - Hide Empty Rooms - - - - - - - Hide Full Rooms + Public Rooms