mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	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:
		
							parent
							
								
									601fd81d5c
								
							
						
					
					
						commit
						a85511cd7d
					
				
					 9 changed files with 107 additions and 171 deletions
				
			
		|  | @ -172,7 +172,8 @@ void GMainWindow::InitializeWidgets() { | ||||||
|     game_list = new GameList(this); |     game_list = new GameList(this); | ||||||
|     ui.horizontalLayout->addWidget(game_list); |     ui.horizontalLayout->addWidget(game_list); | ||||||
| 
 | 
 | ||||||
|     multiplayer_state = new MultiplayerState(this, game_list->GetModel()); |     multiplayer_state = new MultiplayerState(this, game_list->GetModel(), ui.action_Leave_Room, | ||||||
|  |                                              ui.action_Show_Room); | ||||||
|     multiplayer_state->setVisible(false); |     multiplayer_state->setVisible(false); | ||||||
| 
 | 
 | ||||||
|     // Setup updater
 |     // Setup updater
 | ||||||
|  | @ -436,11 +437,11 @@ void GMainWindow::ConnectMenuEvents() { | ||||||
|             &MultiplayerState::OnViewLobby); |             &MultiplayerState::OnViewLobby); | ||||||
|     connect(ui.action_Start_Room, &QAction::triggered, multiplayer_state, |     connect(ui.action_Start_Room, &QAction::triggered, multiplayer_state, | ||||||
|             &MultiplayerState::OnCreateRoom); |             &MultiplayerState::OnCreateRoom); | ||||||
|     connect(ui.action_Stop_Room, &QAction::triggered, multiplayer_state, |     connect(ui.action_Leave_Room, &QAction::triggered, multiplayer_state, | ||||||
|             &MultiplayerState::OnCloseRoom); |             &MultiplayerState::OnCloseRoom); | ||||||
|     connect(ui.action_Connect_To_Room, &QAction::triggered, multiplayer_state, |     connect(ui.action_Connect_To_Room, &QAction::triggered, multiplayer_state, | ||||||
|             &MultiplayerState::OnDirectConnectToRoom); |             &MultiplayerState::OnDirectConnectToRoom); | ||||||
|     connect(ui.action_Chat, &QAction::triggered, multiplayer_state, |     connect(ui.action_Show_Room, &QAction::triggered, multiplayer_state, | ||||||
|             &MultiplayerState::OnOpenNetworkRoom); |             &MultiplayerState::OnOpenNetworkRoom); | ||||||
| 
 | 
 | ||||||
|     ui.action_Fullscreen->setShortcut(GetHotkey("Main Window", "Fullscreen", this)->key()); |     ui.action_Fullscreen->setShortcut(GetHotkey("Main Window", "Fullscreen", this)->key()); | ||||||
|  | @ -1331,18 +1332,6 @@ void GMainWindow::SyncMenuUISettings() { | ||||||
|     ui.action_Screen_Layout_Swap_Screens->setChecked(Settings::values.swap_screen); |     ui.action_Screen_Layout_Swap_Screens->setChecked(Settings::values.swap_screen); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GMainWindow::ChangeRoomState() { |  | ||||||
|     if (auto room = Network::GetRoom().lock()) { |  | ||||||
|         if (room->GetState() == Network::Room::State::Open) { |  | ||||||
|             ui.action_Start_Room->setDisabled(true); |  | ||||||
|             ui.action_Stop_Room->setEnabled(true); |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         ui.action_Start_Room->setEnabled(true); |  | ||||||
|         ui.action_Stop_Room->setDisabled(true); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #ifdef main | #ifdef main | ||||||
| #undef main | #undef main | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -12,7 +12,6 @@ | ||||||
| #include "common/announce_multiplayer_room.h" | #include "common/announce_multiplayer_room.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/hle/service/am/am.h" | #include "core/hle/service/am/am.h" | ||||||
| #include "network/network.h" |  | ||||||
| #include "ui_main.h" | #include "ui_main.h" | ||||||
| 
 | 
 | ||||||
| class AboutDialog; | class AboutDialog; | ||||||
|  | @ -55,7 +54,6 @@ class GMainWindow : public QMainWindow { | ||||||
| public: | public: | ||||||
|     void filterBarSetChecked(bool state); |     void filterBarSetChecked(bool state); | ||||||
|     void UpdateUITheme(); |     void UpdateUITheme(); | ||||||
|     void ChangeRoomState(); |  | ||||||
| 
 | 
 | ||||||
|     GameList* game_list; |     GameList* game_list; | ||||||
|     GMainWindow(); |     GMainWindow(); | ||||||
|  |  | ||||||
|  | @ -116,10 +116,10 @@ | ||||||
|     </property> |     </property> | ||||||
|     <addaction name="action_View_Lobby"/> |     <addaction name="action_View_Lobby"/> | ||||||
|     <addaction name="action_Start_Room"/> |     <addaction name="action_Start_Room"/> | ||||||
|     <addaction name="action_Stop_Room"/> |  | ||||||
|     <addaction name="action_Connect_To_Room"/> |     <addaction name="action_Connect_To_Room"/> | ||||||
|     <addaction name="separator"/> |     <addaction name="separator"/> | ||||||
|     <addaction name="action_Chat"/> |     <addaction name="action_Show_Room"/> | ||||||
|  |     <addaction name="action_Leave_Room"/> | ||||||
|    </widget> |    </widget> | ||||||
|    <widget class="QMenu" name="menu_Help"> |    <widget class="QMenu" name="menu_Help"> | ||||||
|     <property name="title"> |     <property name="title"> | ||||||
|  | @ -259,12 +259,12 @@ | ||||||
|     <string>Create Room</string> |     <string>Create Room</string> | ||||||
|    </property> |    </property> | ||||||
|   </action> |   </action> | ||||||
|   <action name="action_Stop_Room"> |   <action name="action_Leave_Room"> | ||||||
|    <property name="enabled"> |    <property name="enabled"> | ||||||
|     <bool>false</bool> |     <bool>false</bool> | ||||||
|    </property> |    </property> | ||||||
|    <property name="text"> |    <property name="text"> | ||||||
|     <string>Close Room</string> |     <string>Leave Room</string> | ||||||
|    </property> |    </property> | ||||||
|   </action> |   </action> | ||||||
|   <action name="action_Connect_To_Room"> |   <action name="action_Connect_To_Room"> | ||||||
|  | @ -272,12 +272,12 @@ | ||||||
|     <string>Direct Connect to Room</string> |     <string>Direct Connect to Room</string> | ||||||
|    </property> |    </property> | ||||||
|   </action> |   </action> | ||||||
|   <action name="action_Chat"> |   <action name="action_Show_Room"> | ||||||
|    <property name="enabled"> |    <property name="enabled"> | ||||||
|     <bool>false</bool> |     <bool>false</bool> | ||||||
|    </property> |    </property> | ||||||
|    <property name="text"> |    <property name="text"> | ||||||
|     <string>Current Room</string> |     <string>Show Current Room</string> | ||||||
|    </property> |    </property> | ||||||
|   </action> |   </action> | ||||||
|   <action name="action_Fullscreen"> |   <action name="action_Fullscreen"> | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
|     <x>0</x> |     <x>0</x> | ||||||
|     <y>0</y> |     <y>0</y> | ||||||
|     <width>455</width> |     <width>455</width> | ||||||
|     <height>239</height> |     <height>161</height> | ||||||
|    </rect> |    </rect> | ||||||
|   </property> |   </property> | ||||||
|   <property name="windowTitle"> |   <property name="windowTitle"> | ||||||
|  | @ -18,28 +18,6 @@ | ||||||
|     <layout class="QVBoxLayout" name="verticalLayout_3"> |     <layout class="QVBoxLayout" name="verticalLayout_3"> | ||||||
|      <item> |      <item> | ||||||
|       <layout class="QVBoxLayout" name="verticalLayout_2"> |       <layout class="QVBoxLayout" name="verticalLayout_2"> | ||||||
|        <item> |  | ||||||
|         <widget class="QGroupBox" name="instructions_2"> |  | ||||||
|          <property name="title"> |  | ||||||
|           <string>Instructions</string> |  | ||||||
|          </property> |  | ||||||
|          <layout class="QVBoxLayout" name="verticalLayout_4"> |  | ||||||
|           <item> |  | ||||||
|            <widget class="QLabel" name="instructions"> |  | ||||||
|             <property name="text"> |  | ||||||
|              <string><html><head/><body><p>Directly connect to a friend by <span style=" font-weight:600;">Traversal server</span> or by<span style=" font-weight:600;"> IP address</span>. </p><p>To use the <span style=" font-weight:600;">Traversal Server</span>, ask the game host for their &quot;<span style=" font-weight:600;">Host Code</span>&quot; which will be visible on the create room screen after it is created.</p></body></html></string> |  | ||||||
|             </property> |  | ||||||
|             <property name="textFormat"> |  | ||||||
|              <enum>Qt::RichText</enum> |  | ||||||
|             </property> |  | ||||||
|             <property name="wordWrap"> |  | ||||||
|              <bool>true</bool> |  | ||||||
|             </property> |  | ||||||
|            </widget> |  | ||||||
|           </item> |  | ||||||
|          </layout> |  | ||||||
|         </widget> |  | ||||||
|        </item> |  | ||||||
|        <item> |        <item> | ||||||
|         <layout class="QHBoxLayout" name="horizontalLayout"> |         <layout class="QHBoxLayout" name="horizontalLayout"> | ||||||
|          <property name="spacing"> |          <property name="spacing"> | ||||||
|  |  | ||||||
|  | @ -32,6 +32,7 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, | ||||||
|     model = new QStandardItemModel(ui->room_list); |     model = new QStandardItemModel(ui->room_list); | ||||||
|     proxy = new LobbyFilterProxyModel(this, game_list); |     proxy = new LobbyFilterProxyModel(this, game_list); | ||||||
|     proxy->setSourceModel(model); |     proxy->setSourceModel(model); | ||||||
|  |     proxy->setDynamicSortFilter(true); | ||||||
|     proxy->setFilterCaseSensitivity(Qt::CaseInsensitive); |     proxy->setFilterCaseSensitivity(Qt::CaseInsensitive); | ||||||
|     proxy->setSortLocaleAware(true); |     proxy->setSortLocaleAware(true); | ||||||
|     ui->room_list->setModel(proxy); |     ui->room_list->setModel(proxy); | ||||||
|  | @ -45,7 +46,6 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, | ||||||
|     ui->room_list->setSortingEnabled(true); |     ui->room_list->setSortingEnabled(true); | ||||||
|     ui->room_list->setEditTriggers(QHeaderView::NoEditTriggers); |     ui->room_list->setEditTriggers(QHeaderView::NoEditTriggers); | ||||||
|     ui->room_list->setExpandsOnDoubleClick(false); |     ui->room_list->setExpandsOnDoubleClick(false); | ||||||
|     // ui->room_list->setUniformRowHeights(true);
 |  | ||||||
|     ui->room_list->setContextMenuPolicy(Qt::CustomContextMenu); |     ui->room_list->setContextMenuPolicy(Qt::CustomContextMenu); | ||||||
| 
 | 
 | ||||||
|     ui->nickname->setValidator(Validation::nickname); |     ui->nickname->setValidator(Validation::nickname); | ||||||
|  | @ -54,7 +54,6 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, | ||||||
|     // UI Buttons
 |     // UI Buttons
 | ||||||
|     MultiplayerState* p = reinterpret_cast<MultiplayerState*>(parent); |     MultiplayerState* p = reinterpret_cast<MultiplayerState*>(parent); | ||||||
|     connect(ui->refresh_list, &QPushButton::pressed, this, &Lobby::RefreshLobby); |     connect(ui->refresh_list, &QPushButton::pressed, this, &Lobby::RefreshLobby); | ||||||
|     connect(ui->chat, &QPushButton::pressed, p, &MultiplayerState::OnOpenNetworkRoom); |  | ||||||
|     connect(ui->games_owned, &QCheckBox::stateChanged, proxy, |     connect(ui->games_owned, &QCheckBox::stateChanged, proxy, | ||||||
|             &LobbyFilterProxyModel::SetFilterOwned); |             &LobbyFilterProxyModel::SetFilterOwned); | ||||||
|     connect(ui->hide_full, &QCheckBox::stateChanged, proxy, &LobbyFilterProxyModel::SetFilterFull); |     connect(ui->hide_full, &QCheckBox::stateChanged, proxy, &LobbyFilterProxyModel::SetFilterFull); | ||||||
|  | @ -68,28 +67,11 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, | ||||||
|     // TODO(jroweboy): change this slot to OnConnected?
 |     // TODO(jroweboy): change this slot to OnConnected?
 | ||||||
|     connect(this, &Lobby::Connected, p, &MultiplayerState::OnOpenNetworkRoom); |     connect(this, &Lobby::Connected, p, &MultiplayerState::OnOpenNetworkRoom); | ||||||
| 
 | 
 | ||||||
|     // setup the callbacks for network updates
 |  | ||||||
|     if (auto member = Network::GetRoomMember().lock()) { |  | ||||||
|         member->BindOnStateChanged( |  | ||||||
|             [this](const Network::RoomMember::State& state) { emit StateChanged(state); }); |  | ||||||
|         connect(this, &Lobby::StateChanged, this, &Lobby::OnStateChanged); |  | ||||||
|     } else { |  | ||||||
|         // TODO (jroweboy) network was not initialized?
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // manually start a refresh when the window is opening
 |     // manually start a refresh when the window is opening
 | ||||||
|     // TODO(jroweboy): if this refresh is slow for people with bad internet, then don't do it as
 |     // TODO(jroweboy): if this refresh is slow for people with bad internet, then don't do it as
 | ||||||
|     // part of the constructor, but offload the refresh until after the window shown. perhaps emit a
 |     // part of the constructor, but offload the refresh until after the window shown. perhaps emit a
 | ||||||
|     // refreshroomlist signal from places that open the lobby
 |     // refreshroomlist signal from places that open the lobby
 | ||||||
|     RefreshLobby(); |     RefreshLobby(); | ||||||
| 
 |  | ||||||
|     if (auto member = Network::GetRoomMember().lock()) { |  | ||||||
|         if (member->IsConnected()) { |  | ||||||
|             ui->chat->setEnabled(true); |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     ui->chat->setDisabled(true); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const QString Lobby::PasswordPrompt() { | const QString Lobby::PasswordPrompt() { | ||||||
|  | @ -148,16 +130,6 @@ void Lobby::OnJoinRoom(const QModelIndex& index) { | ||||||
|     Settings::Apply(); |     Settings::Apply(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Lobby::OnStateChanged(const Network::RoomMember::State& state) { |  | ||||||
|     if (auto member = Network::GetRoomMember().lock()) { |  | ||||||
|         if (member->IsConnected()) { |  | ||||||
|             ui->chat->setEnabled(true); |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     ui->chat->setDisabled(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void Lobby::ResetModel() { | void Lobby::ResetModel() { | ||||||
|     model->clear(); |     model->clear(); | ||||||
|     model->insertColumns(0, Column::TOTAL); |     model->insertColumns(0, Column::TOTAL); | ||||||
|  | @ -218,7 +190,7 @@ void Lobby::OnRefreshLobby() { | ||||||
|             first_item->appendRow(new LobbyItemExpandedMemberList(members)); |             first_item->appendRow(new LobbyItemExpandedMemberList(members)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     ui->room_list->setModel(model); |     proxy->setSourceModel(model); | ||||||
| 
 | 
 | ||||||
|     // Reenable the refresh button and resize the columns
 |     // Reenable the refresh button and resize the columns
 | ||||||
|     ui->refresh_list->setEnabled(true); |     ui->refresh_list->setEnabled(true); | ||||||
|  | @ -311,12 +283,12 @@ void LobbyFilterProxyModel::sort(int column, Qt::SortOrder order) { | ||||||
| 
 | 
 | ||||||
| void LobbyFilterProxyModel::SetFilterOwned(bool filter) { | void LobbyFilterProxyModel::SetFilterOwned(bool filter) { | ||||||
|     filter_owned = filter; |     filter_owned = filter; | ||||||
|     invalidateFilter(); |     invalidate(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void LobbyFilterProxyModel::SetFilterFull(bool filter) { | void LobbyFilterProxyModel::SetFilterFull(bool filter) { | ||||||
|     filter_full = filter; |     filter_full = filter; | ||||||
|     invalidateFilter(); |     invalidate(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Lobby::OnConnection() { | void Lobby::OnConnection() { | ||||||
|  |  | ||||||
|  | @ -68,8 +68,6 @@ private slots: | ||||||
|      */ |      */ | ||||||
|     void OnConnection(); |     void OnConnection(); | ||||||
| 
 | 
 | ||||||
|     void OnStateChanged(const Network::RoomMember::State&); |  | ||||||
| 
 |  | ||||||
| signals: | signals: | ||||||
|     /**
 |     /**
 | ||||||
|      * Signalled when the latest lobby data is retrieved. |      * Signalled when the latest lobby data is retrieved. | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
|    <rect> |    <rect> | ||||||
|     <x>0</x> |     <x>0</x> | ||||||
|     <y>0</y> |     <y>0</y> | ||||||
|     <width>850</width> |     <width>903</width> | ||||||
|     <height>487</height> |     <height>487</height> | ||||||
|    </rect> |    </rect> | ||||||
|   </property> |   </property> | ||||||
|  | @ -24,98 +24,83 @@ | ||||||
|        <property name="spacing"> |        <property name="spacing"> | ||||||
|         <number>6</number> |         <number>6</number> | ||||||
|        </property> |        </property> | ||||||
|        <item> |  | ||||||
|         <widget class="QGroupBox" name="general"> |  | ||||||
|          <property name="title"> |  | ||||||
|           <string>Nickname</string> |  | ||||||
|          </property> |  | ||||||
|          <property name="flat"> |  | ||||||
|           <bool>false</bool> |  | ||||||
|          </property> |  | ||||||
|          <layout class="QHBoxLayout" name="horizontalLayout_2"> |  | ||||||
|           <property name="leftMargin"> |  | ||||||
|            <number>6</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="topMargin"> |  | ||||||
|            <number>1</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="rightMargin"> |  | ||||||
|            <number>6</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="bottomMargin"> |  | ||||||
|            <number>4</number> |  | ||||||
|           </property> |  | ||||||
|           <item> |  | ||||||
|            <widget class="QLineEdit" name="nickname"> |  | ||||||
|             <property name="placeholderText"> |  | ||||||
|              <string>Nickname</string> |  | ||||||
|             </property> |  | ||||||
|            </widget> |  | ||||||
|           </item> |  | ||||||
|          </layout> |  | ||||||
|         </widget> |  | ||||||
|        </item> |  | ||||||
|        <item> |  | ||||||
|         <widget class="QGroupBox" name="filters"> |  | ||||||
|          <property name="title"> |  | ||||||
|           <string>Filters</string> |  | ||||||
|          </property> |  | ||||||
|          <property name="flat"> |  | ||||||
|           <bool>false</bool> |  | ||||||
|          </property> |  | ||||||
|          <layout class="QHBoxLayout" name="horizontalLayout"> |  | ||||||
|           <property name="leftMargin"> |  | ||||||
|            <number>6</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="topMargin"> |  | ||||||
|            <number>1</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="rightMargin"> |  | ||||||
|            <number>6</number> |  | ||||||
|           </property> |  | ||||||
|           <property name="bottomMargin"> |  | ||||||
|            <number>4</number> |  | ||||||
|           </property> |  | ||||||
|           <item> |  | ||||||
|            <widget class="QLineEdit" name="search"> |  | ||||||
|             <property name="placeholderText"> |  | ||||||
|              <string>Search</string> |  | ||||||
|             </property> |  | ||||||
|             <property name="clearButtonEnabled"> |  | ||||||
|              <bool>true</bool> |  | ||||||
|             </property> |  | ||||||
|            </widget> |  | ||||||
|           </item> |  | ||||||
|           <item> |  | ||||||
|            <widget class="QCheckBox" name="games_owned"> |  | ||||||
|             <property name="text"> |  | ||||||
|              <string>Games I Own</string> |  | ||||||
|             </property> |  | ||||||
|            </widget> |  | ||||||
|           </item> |  | ||||||
|           <item> |  | ||||||
|            <widget class="QCheckBox" name="hide_full"> |  | ||||||
|             <property name="text"> |  | ||||||
|              <string>Hide Full Games</string> |  | ||||||
|             </property> |  | ||||||
|            </widget> |  | ||||||
|           </item> |  | ||||||
|          </layout> |  | ||||||
|         </widget> |  | ||||||
|        </item> |  | ||||||
|        <item> |        <item> | ||||||
|         <layout class="QHBoxLayout" name="horizontalLayout_5"> |         <layout class="QHBoxLayout" name="horizontalLayout_5"> | ||||||
|          <item> |          <item> | ||||||
|           <widget class="QPushButton" name="refresh_list"> |           <widget class="QLabel" name="label"> | ||||||
|            <property name="text"> |            <property name="text"> | ||||||
|             <string>Refresh Lobby</string> |             <string>Nickname</string> | ||||||
|            </property> |            </property> | ||||||
|           </widget> |           </widget> | ||||||
|          </item> |          </item> | ||||||
|          <item> |          <item> | ||||||
|           <widget class="QPushButton" name="chat"> |           <widget class="QLineEdit" name="nickname"> | ||||||
|  |            <property name="placeholderText"> | ||||||
|  |             <string>Nickname</string> | ||||||
|  |            </property> | ||||||
|  |           </widget> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <spacer name="horizontalSpacer_2"> | ||||||
|  |            <property name="orientation"> | ||||||
|  |             <enum>Qt::Horizontal</enum> | ||||||
|  |            </property> | ||||||
|  |            <property name="sizeHint" stdset="0"> | ||||||
|  |             <size> | ||||||
|  |              <width>40</width> | ||||||
|  |              <height>20</height> | ||||||
|  |             </size> | ||||||
|  |            </property> | ||||||
|  |           </spacer> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <widget class="QLabel" name="label_2"> | ||||||
|            <property name="text"> |            <property name="text"> | ||||||
|             <string>Chat</string> |             <string>Filters</string> | ||||||
|  |            </property> | ||||||
|  |           </widget> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <widget class="QLineEdit" name="search"> | ||||||
|  |            <property name="placeholderText"> | ||||||
|  |             <string>Search</string> | ||||||
|  |            </property> | ||||||
|  |            <property name="clearButtonEnabled"> | ||||||
|  |             <bool>true</bool> | ||||||
|  |            </property> | ||||||
|  |           </widget> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <widget class="QCheckBox" name="games_owned"> | ||||||
|  |            <property name="text"> | ||||||
|  |             <string>Games I Own</string> | ||||||
|  |            </property> | ||||||
|  |           </widget> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <widget class="QCheckBox" name="hide_full"> | ||||||
|  |            <property name="text"> | ||||||
|  |             <string>Hide Full Games</string> | ||||||
|  |            </property> | ||||||
|  |           </widget> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <spacer name="horizontalSpacer"> | ||||||
|  |            <property name="orientation"> | ||||||
|  |             <enum>Qt::Horizontal</enum> | ||||||
|  |            </property> | ||||||
|  |            <property name="sizeHint" stdset="0"> | ||||||
|  |             <size> | ||||||
|  |              <width>40</width> | ||||||
|  |              <height>20</height> | ||||||
|  |             </size> | ||||||
|  |            </property> | ||||||
|  |           </spacer> | ||||||
|  |          </item> | ||||||
|  |          <item> | ||||||
|  |           <widget class="QPushButton" name="refresh_list"> | ||||||
|  |            <property name="text"> | ||||||
|  |             <string>Refresh Lobby</string> | ||||||
|            </property> |            </property> | ||||||
|           </widget> |           </widget> | ||||||
|          </item> |          </item> | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include <QAction> | ||||||
| #include <QIcon> | #include <QIcon> | ||||||
| #include <QMessageBox> | #include <QMessageBox> | ||||||
| #include <QStandardItemModel> | #include <QStandardItemModel> | ||||||
|  | @ -16,8 +17,10 @@ | ||||||
| #include "common/announce_multiplayer_room.h" | #include "common/announce_multiplayer_room.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| 
 | 
 | ||||||
| MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_list_model) | MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_list_model, | ||||||
|     : QWidget(parent), game_list_model(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()) { |     if (auto member = Network::GetRoomMember().lock()) { | ||||||
|         // register the network structs to use in slots and signals
 |         // register the network structs to use in slots and signals
 | ||||||
|         state_callback_handle = member->BindOnStateChanged( |         state_callback_handle = member->BindOnStateChanged( | ||||||
|  | @ -67,10 +70,14 @@ void MultiplayerState::OnNetworkStateChanged(const Network::RoomMember::State& s | ||||||
|     if (state == Network::RoomMember::State::Joined) { |     if (state == Network::RoomMember::State::Joined) { | ||||||
|         status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16)); |         status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16)); | ||||||
|         status_text->setText(tr("Connected")); |         status_text->setText(tr("Connected")); | ||||||
|  |         leave_room->setEnabled(true); | ||||||
|  |         show_room->setEnabled(true); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16)); |     status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16)); | ||||||
|     status_text->setText(tr("Not Connected")); |     status_text->setText(tr("Not Connected")); | ||||||
|  |     leave_room->setEnabled(false); | ||||||
|  |     show_room->setEnabled(false); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MultiplayerState::OnAnnounceFailed(const Common::WebResult& result) { | void MultiplayerState::OnAnnounceFailed(const Common::WebResult& result) { | ||||||
|  | @ -103,14 +110,20 @@ void MultiplayerState::OnCreateRoom() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MultiplayerState::OnCloseRoom() { | void MultiplayerState::OnCloseRoom() { | ||||||
|  |     if (!NetworkMessage::WarnCloseRoom()) | ||||||
|  |         return; | ||||||
|     if (auto room = Network::GetRoom().lock()) { |     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) { |         if (room->GetState() != Network::Room::State::Open) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (NetworkMessage::WarnCloseRoom()) { |         room->Destroy(); | ||||||
|             room->Destroy(); |         announce_multiplayer_session->Stop(); | ||||||
|             announce_multiplayer_session->Stop(); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -21,7 +21,8 @@ class MultiplayerState : public QWidget { | ||||||
|     Q_OBJECT; |     Q_OBJECT; | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|     explicit MultiplayerState(QWidget* parent, QStandardItemModel* game_list); |     explicit MultiplayerState(QWidget* parent, QStandardItemModel* game_list, QAction* leave_room, | ||||||
|  |                               QAction* show_room); | ||||||
|     ~MultiplayerState(); |     ~MultiplayerState(); | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|  | @ -58,6 +59,8 @@ private: | ||||||
|     ClickableLabel* status_icon = nullptr; |     ClickableLabel* status_icon = nullptr; | ||||||
|     ClickableLabel* status_text = nullptr; |     ClickableLabel* status_text = nullptr; | ||||||
|     QStandardItemModel* game_list_model = nullptr; |     QStandardItemModel* game_list_model = nullptr; | ||||||
|  |     QAction* leave_room; | ||||||
|  |     QAction* show_room; | ||||||
|     std::shared_ptr<Core::AnnounceMultiplayerSession> announce_multiplayer_session; |     std::shared_ptr<Core::AnnounceMultiplayerSession> announce_multiplayer_session; | ||||||
|     Network::RoomMember::CallbackHandle<Network::RoomMember::State> state_callback_handle; |     Network::RoomMember::CallbackHandle<Network::RoomMember::State> state_callback_handle; | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue