MainPanel.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "MainPanel.h"
  2. #include <QSplitter>
  3. #include <QVBoxLayout>
  4. #include <QListWidget>
  5. #include "widgets/userprofilewidget.h"
  6. #include "widgets/chatView/chatwindow.h"
  7. #include "widgets/bubbletip.h"
  8. #include "api/roomapi.h"
  9. #include "api/userapi.h"
  10. #include "appevent.h"
  11. #include "ui/av_recorder.h"
  12. #include "AvPlayer2/PlayWidget.h"
  13. #include <QDebug>
  14. MainPanel::MainPanel(QWidget *parent)
  15. : QWidget(parent)
  16. , userProfile(nullptr)
  17. , chatView(nullptr)
  18. {
  19. // setupUI
  20. userProfile = new UserProfileWidget(this);
  21. chatView = new ChatWindow();
  22. chatView->setMinimumWidth(400);
  23. QWidget *rightWidget = new QWidget;
  24. QVBoxLayout *vbox = new QVBoxLayout(rightWidget);
  25. vbox->setContentsMargins(0, 0, 0, 0);
  26. vbox->addWidget(userProfile, 0);
  27. vbox->addWidget(chatView, 1);
  28. roomListWidget = new QListWidget;
  29. splitter = new QSplitter(Qt::Horizontal, this);
  30. playerContainer = new QWidget(this);
  31. splitter->addWidget(roomListWidget);
  32. splitter->addWidget(playerContainer);
  33. splitter->addWidget(rightWidget);
  34. splitter->setStretchFactor(0, 10);
  35. splitter->setStretchFactor(1, 60);
  36. splitter->setStretchFactor(2, 30);
  37. QVBoxLayout *mainLayout = new QVBoxLayout(this);
  38. mainLayout->addWidget(splitter, 1);
  39. mainLayout->setContentsMargins(0, 0, 0, 0);
  40. mainLayout->setSpacing(0);
  41. setLayout(mainLayout);
  42. // initConnect
  43. connect(AppEvent::instance(), &AppEvent::connectionStateChanged, this, [this](bool connected) {
  44. if (userProfile) {
  45. userProfile->setStatus(connected ? "在线" : "离线");
  46. }
  47. });
  48. }
  49. MainPanel::~MainPanel()
  50. {
  51. if (userProfile) {
  52. delete userProfile;
  53. userProfile = nullptr;
  54. }
  55. }
  56. void MainPanel::setPlayerWidget(QWidget *newPlayer)
  57. {
  58. if (playerWidget) {
  59. playerWidget->setParent(nullptr);
  60. playerWidget->deleteLater();
  61. }
  62. playerWidget = newPlayer;
  63. playerWidget->setParent(playerContainer);
  64. QLayout *oldLayout = playerContainer->layout();
  65. if (oldLayout) {
  66. QLayoutItem *item;
  67. while ((item = oldLayout->takeAt(0)) != nullptr) {
  68. if (item->widget())
  69. item->widget()->setParent(nullptr);
  70. delete item;
  71. }
  72. delete oldLayout;
  73. }
  74. QVBoxLayout *vbox = new QVBoxLayout(playerContainer);
  75. vbox->setContentsMargins(0, 0, 0, 0);
  76. vbox->addWidget(playerWidget);
  77. }
  78. void MainPanel::setRole(const QStringList &roleList)
  79. {
  80. QWidget *newPlayer = nullptr;
  81. if (roleList.contains("role.admin")) {
  82. newPlayer = new AvRecorder(this);
  83. } else {
  84. newPlayer = new PlayWidget(this);
  85. }
  86. setPlayerWidget(newPlayer);
  87. }