host_room.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // SPDX-FileCopyrightText: Copyright 2017 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <QDialog>
  6. #include <QSortFilterProxyModel>
  7. #include <QStandardItemModel>
  8. #include <QVariant>
  9. #include "network/network.h"
  10. #include "yuzu/multiplayer/chat_room.h"
  11. #include "yuzu/multiplayer/validation.h"
  12. namespace Ui {
  13. class HostRoom;
  14. }
  15. namespace Core {
  16. class System;
  17. class AnnounceMultiplayerSession;
  18. } // namespace Core
  19. class ConnectionError;
  20. class ComboBoxProxyModel;
  21. class ChatMessage;
  22. namespace Network::VerifyUser {
  23. class Backend;
  24. };
  25. class HostRoomWindow : public QDialog {
  26. Q_OBJECT
  27. public:
  28. explicit HostRoomWindow(QWidget* parent, QStandardItemModel* list,
  29. std::shared_ptr<Core::AnnounceMultiplayerSession> session,
  30. Core::System& system_);
  31. ~HostRoomWindow();
  32. /**
  33. * Updates the dialog with a new game list model.
  34. * This model should be the original model of the game list.
  35. */
  36. void UpdateGameList(QStandardItemModel* list);
  37. void RetranslateUi();
  38. private:
  39. void Host();
  40. std::unique_ptr<Network::VerifyUser::Backend> CreateVerifyBackend(bool use_validation) const;
  41. std::unique_ptr<Ui::HostRoom> ui;
  42. std::weak_ptr<Core::AnnounceMultiplayerSession> announce_multiplayer_session;
  43. QStandardItemModel* game_list;
  44. ComboBoxProxyModel* proxy;
  45. Validation validation;
  46. Core::System& system;
  47. Network::RoomNetwork& room_network;
  48. };
  49. /**
  50. * Proxy Model for the game list combo box so we can reuse the game list model while still
  51. * displaying the fields slightly differently
  52. */
  53. class ComboBoxProxyModel : public QSortFilterProxyModel {
  54. Q_OBJECT
  55. public:
  56. int columnCount(const QModelIndex& idx) const override {
  57. return 1;
  58. }
  59. QVariant data(const QModelIndex& idx, int role) const override;
  60. bool lessThan(const QModelIndex& left, const QModelIndex& right) const override;
  61. };