mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-19 14:17:01 +02:00
[qt] remove full/empty filters, replace with public lobby filter"
Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
e22756160c
commit
795a52c75a
4 changed files with 29 additions and 78 deletions
|
|
@ -170,14 +170,10 @@ struct Values {
|
||||||
// multiplayer settings
|
// multiplayer settings
|
||||||
Setting<std::string> multiplayer_nickname{linkage, {}, "nickname", Category::Multiplayer};
|
Setting<std::string> multiplayer_nickname{linkage, {}, "nickname", Category::Multiplayer};
|
||||||
Setting<std::string> multiplayer_filter_text{linkage, {}, "filter_text", Category::Multiplayer};
|
Setting<std::string> multiplayer_filter_text{linkage, {}, "filter_text", Category::Multiplayer};
|
||||||
Setting<bool> multiplayer_filter_games_owned{linkage, false, "filter_games_owned",
|
Setting<bool> multiplayer_filter_games_owned{linkage, true, "filter_games_owned", Category::Multiplayer};
|
||||||
Category::Multiplayer};
|
Setting<bool> multiplayer_filter_public_rooms{linkage, true, "filter_games_public_room", Category::Multiplayer};
|
||||||
Setting<bool> multiplayer_filter_hide_empty{linkage, false, "filter_games_hide_empty",
|
|
||||||
Category::Multiplayer};
|
|
||||||
Setting<bool> multiplayer_filter_hide_full{linkage, false, "filter_games_hide_full",
|
|
||||||
Category::Multiplayer};
|
|
||||||
Setting<std::string> multiplayer_ip{linkage, {}, "ip", Category::Multiplayer};
|
Setting<std::string> multiplayer_ip{linkage, {}, "ip", Category::Multiplayer};
|
||||||
Setting<u16, true> multiplayer_port{linkage, 24872, 0,
|
Setting<u16, true> multiplayer_port{linkage, 24872, 0,
|
||||||
UINT16_MAX, "port", Category::Multiplayer};
|
UINT16_MAX, "port", Category::Multiplayer};
|
||||||
Setting<std::string> multiplayer_room_nickname{
|
Setting<std::string> multiplayer_room_nickname{
|
||||||
linkage, {}, "room_nickname", Category::Multiplayer};
|
linkage, {}, "room_nickname", Category::Multiplayer};
|
||||||
|
|
|
||||||
|
|
@ -62,14 +62,12 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list,
|
||||||
ui->room_list->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui->room_list->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
|
||||||
ui->nickname->setValidator(validation.GetNickname());
|
ui->nickname->setValidator(validation.GetNickname());
|
||||||
ui->nickname->setText(
|
ui->nickname->setText(QString::fromStdString(UISettings::values.multiplayer_nickname.GetValue()));
|
||||||
QString::fromStdString(UISettings::values.multiplayer_nickname.GetValue()));
|
|
||||||
|
|
||||||
// Try find the best nickname by default
|
// Try find the best nickname by default
|
||||||
if (ui->nickname->text().isEmpty() || ui->nickname->text() == QStringLiteral("Eden")) {
|
if (ui->nickname->text().isEmpty() || ui->nickname->text() == QStringLiteral("Eden")) {
|
||||||
if (!Settings::values.eden_username.GetValue().empty()) {
|
if (auto const username = Settings::values.eden_username.GetValue(); !username.empty()) {
|
||||||
ui->nickname->setText(
|
ui->nickname->setText(QString::fromStdString(username));
|
||||||
QString::fromStdString(Settings::values.eden_username.GetValue()));
|
|
||||||
} else if (!GetProfileUsername().empty()) {
|
} else if (!GetProfileUsername().empty()) {
|
||||||
ui->nickname->setText(QString::fromStdString(GetProfileUsername()));
|
ui->nickname->setText(QString::fromStdString(GetProfileUsername()));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -81,21 +79,17 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list,
|
||||||
connect(ui->refresh_list, &QPushButton::clicked, this, &Lobby::RefreshLobby);
|
connect(ui->refresh_list, &QPushButton::clicked, this, &Lobby::RefreshLobby);
|
||||||
connect(ui->search, &QLineEdit::textChanged, proxy, &LobbyFilterProxyModel::SetFilterSearch);
|
connect(ui->search, &QLineEdit::textChanged, proxy, &LobbyFilterProxyModel::SetFilterSearch);
|
||||||
connect(ui->games_owned, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterOwned);
|
connect(ui->games_owned, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterOwned);
|
||||||
connect(ui->hide_empty, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterEmpty);
|
connect(ui->public_rooms, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterPublic);
|
||||||
connect(ui->hide_full, &QCheckBox::toggled, proxy, &LobbyFilterProxyModel::SetFilterFull);
|
|
||||||
connect(ui->room_list, &QTreeView::doubleClicked, this, &Lobby::OnJoinRoom);
|
connect(ui->room_list, &QTreeView::doubleClicked, this, &Lobby::OnJoinRoom);
|
||||||
connect(ui->room_list, &QTreeView::clicked, this, &Lobby::OnExpandRoom);
|
connect(ui->room_list, &QTreeView::clicked, this, &Lobby::OnExpandRoom);
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
connect(&room_list_watcher, &QFutureWatcher<AnnounceMultiplayerRoom::RoomList>::finished, this,
|
connect(&room_list_watcher, &QFutureWatcher<AnnounceMultiplayerRoom::RoomList>::finished, this, &Lobby::OnRefreshLobby);
|
||||||
&Lobby::OnRefreshLobby);
|
|
||||||
|
|
||||||
// Load persistent filters after events are connected to make sure they apply
|
// Load persistent filters after events are connected to make sure they apply
|
||||||
ui->search->setText(
|
ui->search->setText(QString::fromStdString(UISettings::values.multiplayer_filter_text.GetValue()));
|
||||||
QString::fromStdString(UISettings::values.multiplayer_filter_text.GetValue()));
|
|
||||||
ui->games_owned->setChecked(UISettings::values.multiplayer_filter_games_owned.GetValue());
|
ui->games_owned->setChecked(UISettings::values.multiplayer_filter_games_owned.GetValue());
|
||||||
ui->hide_empty->setChecked(UISettings::values.multiplayer_filter_hide_empty.GetValue());
|
ui->public_rooms->setChecked(UISettings::values.multiplayer_filter_public_rooms.GetValue());
|
||||||
ui->hide_full->setChecked(UISettings::values.multiplayer_filter_hide_full.GetValue());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Lobby::~Lobby() = default;
|
Lobby::~Lobby() = default;
|
||||||
|
|
@ -215,12 +209,9 @@ void Lobby::OnJoinRoom(const QModelIndex& source) {
|
||||||
UISettings::values.multiplayer_nickname = ui->nickname->text().toStdString();
|
UISettings::values.multiplayer_nickname = ui->nickname->text().toStdString();
|
||||||
UISettings::values.multiplayer_filter_text = ui->search->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_games_owned = ui->games_owned->isChecked();
|
||||||
UISettings::values.multiplayer_filter_hide_empty = ui->hide_empty->isChecked();
|
UISettings::values.multiplayer_filter_public_rooms = ui->public_rooms->isChecked();
|
||||||
UISettings::values.multiplayer_filter_hide_full = ui->hide_full->isChecked();
|
UISettings::values.multiplayer_ip = proxy->data(connection_index, LobbyItemHost::HostIPRole).value<QString>().toStdString();
|
||||||
UISettings::values.multiplayer_ip =
|
UISettings::values.multiplayer_port = proxy->data(connection_index, LobbyItemHost::HostPortRole).toInt();
|
||||||
proxy->data(connection_index, LobbyItemHost::HostIPRole).value<QString>().toStdString();
|
|
||||||
UISettings::values.multiplayer_port =
|
|
||||||
proxy->data(connection_index, LobbyItemHost::HostPortRole).toInt();
|
|
||||||
emit SaveConfig();
|
emit SaveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -228,8 +219,8 @@ void Lobby::ResetModel() {
|
||||||
model->clear();
|
model->clear();
|
||||||
model->insertColumns(0, Column::TOTAL);
|
model->insertColumns(0, Column::TOTAL);
|
||||||
model->setHeaderData(Column::MEMBER, Qt::Horizontal, tr("Players"), Qt::DisplayRole);
|
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::ROOM_NAME, Qt::Horizontal, tr("Name"), Qt::DisplayRole);
|
||||||
model->setHeaderData(Column::GAME_NAME, Qt::Horizontal, tr("Preferred Game"), Qt::DisplayRole);
|
model->setHeaderData(Column::GAME_NAME, Qt::Horizontal, tr("Game"), Qt::DisplayRole);
|
||||||
model->setHeaderData(Column::HOST, Qt::Horizontal, tr("Host"), 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter by empty rooms
|
// filter by non-password protected
|
||||||
if (filter_empty) {
|
if (filter_public) {
|
||||||
QModelIndex member_list = sourceModel()->index(sourceRow, Column::MEMBER, sourceParent);
|
QModelIndex password_index = sourceModel()->index(sourceRow, Column::ROOM_NAME);
|
||||||
int player_count =
|
bool has_password = sourceModel()->data(password_index, LobbyItemName::PasswordRole).toBool();
|
||||||
sourceModel()->data(member_list, LobbyItemMemberList::MemberListRole).toList().size();
|
if (has_password)
|
||||||
if (player_count == 0) {
|
|
||||||
return false;
|
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
|
// 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 game_name = sourceModel()->index(sourceRow, Column::GAME_NAME, sourceParent);
|
||||||
QModelIndex room_name = sourceModel()->index(sourceRow, Column::ROOM_NAME, sourceParent);
|
QModelIndex room_name = sourceModel()->index(sourceRow, Column::ROOM_NAME, sourceParent);
|
||||||
QModelIndex host_name = sourceModel()->index(sourceRow, Column::HOST, sourceParent);
|
QModelIndex host_name = sourceModel()->index(sourceRow, Column::HOST, sourceParent);
|
||||||
bool preferred_game_match = sourceModel()
|
bool preferred_game_match = sourceModel()->data(game_name, LobbyItemGame::GameNameRole).toString().contains(filter_search, filterCaseSensitivity());
|
||||||
->data(game_name, LobbyItemGame::GameNameRole)
|
bool room_name_match = sourceModel()->data(room_name, LobbyItemName::NameRole).toString().contains(filter_search, filterCaseSensitivity());
|
||||||
.toString()
|
bool username_match = sourceModel()->data(host_name, LobbyItemHost::HostUsernameRole).toString().contains(filter_search, filterCaseSensitivity());
|
||||||
.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) {
|
if (!preferred_game_match && !room_name_match && !username_match) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -425,13 +393,8 @@ void LobbyFilterProxyModel::SetFilterOwned(bool filter) {
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LobbyFilterProxyModel::SetFilterEmpty(bool filter) {
|
void LobbyFilterProxyModel::SetFilterPublic(bool filter) {
|
||||||
filter_empty = filter;
|
filter_public = filter;
|
||||||
invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LobbyFilterProxyModel::SetFilterFull(bool filter) {
|
|
||||||
filter_full = filter;
|
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -126,14 +126,13 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void SetFilterOwned(bool);
|
void SetFilterOwned(bool);
|
||||||
void SetFilterEmpty(bool);
|
void SetFilterPublic(bool);
|
||||||
void SetFilterFull(bool);
|
|
||||||
void SetFilterSearch(const QString&);
|
void SetFilterSearch(const QString&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStandardItemModel* game_list;
|
QStandardItemModel* game_list;
|
||||||
bool filter_owned = false;
|
bool filter_owned = false;
|
||||||
bool filter_empty = false;
|
bool filter_empty = false;
|
||||||
bool filter_full = false;
|
bool filter_public = false;
|
||||||
QString filter_search;
|
QString filter_search;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -78,16 +78,9 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="hide_empty">
|
<widget class="QCheckBox" name="public_rooms">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Hide Empty Rooms</string>
|
<string>Public Rooms</string>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="hide_full">
|
|
||||||
<property name="text">
|
|
||||||
<string>Hide Full Rooms</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue