state.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // SPDX-FileCopyrightText: Copyright 2018 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <QWidget>
  5. #include "core/announce_multiplayer_session.h"
  6. #include "network/network.h"
  7. class QStandardItemModel;
  8. class Lobby;
  9. class HostRoomWindow;
  10. class ClientRoomWindow;
  11. class DirectConnectWindow;
  12. class ClickableLabel;
  13. class MultiplayerState : public QWidget {
  14. Q_OBJECT;
  15. public:
  16. explicit MultiplayerState(QWidget* parent, QStandardItemModel* game_list, QAction* leave_room,
  17. QAction* show_room, Network::RoomNetwork& room_network_);
  18. ~MultiplayerState();
  19. /**
  20. * Close all open multiplayer related dialogs
  21. */
  22. void Close();
  23. ClickableLabel* GetStatusText() const {
  24. return status_text;
  25. }
  26. ClickableLabel* GetStatusIcon() const {
  27. return status_icon;
  28. }
  29. void retranslateUi();
  30. /**
  31. * Whether a public room is being hosted or not.
  32. * When this is true, Web Services configuration should be disabled.
  33. */
  34. bool IsHostingPublicRoom() const;
  35. void UpdateCredentials();
  36. /**
  37. * Updates the multiplayer dialogs with a new game list model.
  38. * This model should be the original model of the game list.
  39. */
  40. void UpdateGameList(QStandardItemModel* game_list);
  41. public slots:
  42. void OnNetworkStateChanged(const Network::RoomMember::State& state);
  43. void OnNetworkError(const Network::RoomMember::Error& error);
  44. void OnViewLobby();
  45. void OnCreateRoom();
  46. bool OnCloseRoom();
  47. void OnOpenNetworkRoom();
  48. void OnDirectConnectToRoom();
  49. void OnAnnounceFailed(const WebService::WebResult&);
  50. void UpdateThemedIcons();
  51. void ShowNotification();
  52. void HideNotification();
  53. signals:
  54. void NetworkStateChanged(const Network::RoomMember::State&);
  55. void NetworkError(const Network::RoomMember::Error&);
  56. void AnnounceFailed(const WebService::WebResult&);
  57. private:
  58. Lobby* lobby = nullptr;
  59. HostRoomWindow* host_room = nullptr;
  60. ClientRoomWindow* client_room = nullptr;
  61. DirectConnectWindow* direct_connect = nullptr;
  62. ClickableLabel* status_icon = nullptr;
  63. ClickableLabel* status_text = nullptr;
  64. QStandardItemModel* game_list_model = nullptr;
  65. QAction* leave_room;
  66. QAction* show_room;
  67. std::shared_ptr<Core::AnnounceMultiplayerSession> announce_multiplayer_session;
  68. Network::RoomMember::State current_state = Network::RoomMember::State::Uninitialized;
  69. bool has_mod_perms = false;
  70. Network::RoomMember::CallbackHandle<Network::RoomMember::State> state_callback_handle;
  71. Network::RoomMember::CallbackHandle<Network::RoomMember::Error> error_callback_handle;
  72. bool show_notification = false;
  73. Network::RoomNetwork& room_network;
  74. };
  75. Q_DECLARE_METATYPE(WebService::WebResult);