MainPanel.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include <QMutex>
  3. #include <QStringList>
  4. #include <QTimer>
  5. #include <QWaitCondition>
  6. #include <QWidget>
  7. #include "qobjectdefs.h"
  8. class QSplitter;
  9. class UserProfileWidget;
  10. class ChatWindow;
  11. class WebSocketClient;
  12. class StatsWidget;
  13. class AudioDeviceSelectorIcon;
  14. class AudioDeviceSelectorIconDecoupled;
  15. namespace ADS {
  16. class DockManager;
  17. class DockWidget;
  18. }
  19. class MainPanel : public QWidget
  20. {
  21. Q_OBJECT
  22. public:
  23. explicit MainPanel(QWidget *parent = nullptr);
  24. ~MainPanel();
  25. void setRole(const QStringList &roleList);
  26. void setPushRoomId(const QString &room);
  27. signals:
  28. void logoutClicked();
  29. public slots:
  30. private:
  31. void setPlayerWidget(QWidget *newPlayer);
  32. void handleDebouncedPlay(); // 防抖处理函数
  33. private:
  34. QSplitter *splitter = nullptr;
  35. QWidget *playerContainer = nullptr;
  36. QWidget *playerWidget = nullptr;
  37. UserProfileWidget *userProfile = nullptr;
  38. ChatWindow *chatView = nullptr;
  39. WebSocketClient *webSocketClient = nullptr;
  40. StatsWidget *statsWidget = nullptr;
  41. bool m_isStartingPlay = false;
  42. QMutex m_playMutex;
  43. QWaitCondition m_playCond;
  44. QTimer *m_debounceTimer = nullptr;
  45. QString m_pendingRoomId;
  46. class PopoverButtonGroup *buttonGroup;
  47. AudioDeviceSelectorIcon *m_audioDeviceSelector = nullptr;
  48. AudioDeviceSelectorIconDecoupled *m_audioDeviceSelectorDecoupled = nullptr;
  49. // DockManager 相关
  50. ADS::DockManager *m_dockManager = nullptr;
  51. private slots:
  52. void initAudioDeviceSelectors();
  53. };