Fix multiplayer dropdowns and proxy model

* Filters in the lobby properly remove rooms
* Multiplayer menu items for Show Room and Leave Room work as intended
This commit is contained in:
James Rowe 2018-04-17 12:01:14 -06:00
parent 601fd81d5c
commit a85511cd7d
9 changed files with 107 additions and 171 deletions

View file

@ -2,6 +2,7 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include <QAction>
#include <QIcon>
#include <QMessageBox>
#include <QStandardItemModel>
@ -16,8 +17,10 @@
#include "common/announce_multiplayer_room.h"
#include "common/logging/log.h"
MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_list_model)
: QWidget(parent), game_list_model(game_list_model) {
MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_list_model,
QAction* leave_room, QAction* show_room)
: QWidget(parent), game_list_model(game_list_model), leave_room(leave_room),
show_room(show_room) {
if (auto member = Network::GetRoomMember().lock()) {
// register the network structs to use in slots and signals
state_callback_handle = member->BindOnStateChanged(
@ -67,10 +70,14 @@ void MultiplayerState::OnNetworkStateChanged(const Network::RoomMember::State& s
if (state == Network::RoomMember::State::Joined) {
status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16));
status_text->setText(tr("Connected"));
leave_room->setEnabled(true);
show_room->setEnabled(true);
return;
}
status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16));
status_text->setText(tr("Not Connected"));
leave_room->setEnabled(false);
show_room->setEnabled(false);
}
void MultiplayerState::OnAnnounceFailed(const Common::WebResult& result) {
@ -103,14 +110,20 @@ void MultiplayerState::OnCreateRoom() {
}
void MultiplayerState::OnCloseRoom() {
if (!NetworkMessage::WarnCloseRoom())
return;
if (auto room = Network::GetRoom().lock()) {
// if you are in a room, leave it
if (auto member = Network::GetRoomMember().lock()) {
member->Leave();
}
// if you are hosting a room, also stop hosting
if (room->GetState() != Network::Room::State::Open) {
return;
}
if (NetworkMessage::WarnCloseRoom()) {
room->Destroy();
announce_multiplayer_session->Stop();
}
room->Destroy();
announce_multiplayer_session->Stop();
}
}