state.h 2.7 KB

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