OBSBasicControls.cpp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. #include "OBSBasicControls.hpp"
  2. #include "OBSBasic.hpp"
  3. #include "qt-wrappers.hpp"
  4. #include "moc_OBSBasicControls.cpp"
  5. OBSBasicControls::OBSBasicControls(OBSBasic *main) : QFrame(nullptr), ui(new Ui::OBSBasicControls)
  6. {
  7. /* Create UI elements */
  8. ui->setupUi(this);
  9. streamButtonMenu.reset(new QMenu());
  10. startStreamAction = streamButtonMenu->addAction(QTStr("Basic.Main.StartStreaming"));
  11. stopStreamAction = streamButtonMenu->addAction(QTStr("Basic.Main.StopStreaming"));
  12. QAction *forceStopStreamAction = streamButtonMenu->addAction(QTStr("Basic.Main.ForceStopStreaming"));
  13. /* Transfer buttons signals as OBSBasicControls signals */
  14. connect(
  15. ui->streamButton, &QPushButton::clicked, this, [this]() { emit this->StreamButtonClicked(); },
  16. Qt::DirectConnection);
  17. connect(
  18. ui->broadcastButton, &QPushButton::clicked, this, [this]() { emit this->BroadcastButtonClicked(); },
  19. Qt::DirectConnection);
  20. connect(
  21. ui->recordButton, &QPushButton::clicked, this, [this]() { emit this->RecordButtonClicked(); },
  22. Qt::DirectConnection);
  23. connect(
  24. ui->pauseRecordButton, &QPushButton::clicked, this, [this]() { emit this->PauseRecordButtonClicked(); },
  25. Qt::DirectConnection);
  26. connect(
  27. ui->replayBufferButton, &QPushButton::clicked, this,
  28. [this]() { emit this->ReplayBufferButtonClicked(); }, Qt::DirectConnection);
  29. connect(
  30. ui->saveReplayButton, &QPushButton::clicked, this,
  31. [this]() { emit this->SaveReplayBufferButtonClicked(); }, Qt::DirectConnection);
  32. connect(
  33. ui->virtualCamButton, &QPushButton::clicked, this, [this]() { emit this->VirtualCamButtonClicked(); },
  34. Qt::DirectConnection);
  35. connect(
  36. ui->virtualCamConfigButton, &QPushButton::clicked, this,
  37. [this]() { emit this->VirtualCamConfigButtonClicked(); }, Qt::DirectConnection);
  38. connect(
  39. ui->modeSwitch, &QPushButton::clicked, this, [this]() { emit this->StudioModeButtonClicked(); },
  40. Qt::DirectConnection);
  41. connect(
  42. ui->settingsButton, &QPushButton::clicked, this, [this]() { emit this->SettingsButtonClicked(); },
  43. Qt::DirectConnection);
  44. /* Transfer menu actions signals as OBSBasicControls signals */
  45. connect(
  46. startStreamAction.get(), &QAction::triggered, this,
  47. [this]() { emit this->StartStreamMenuActionClicked(); }, Qt::DirectConnection);
  48. connect(
  49. stopStreamAction.get(), &QAction::triggered, this,
  50. [this]() { emit this->StopStreamMenuActionClicked(); }, Qt::DirectConnection);
  51. connect(
  52. forceStopStreamAction, &QAction::triggered, this,
  53. [this]() { emit this->ForceStopStreamMenuActionClicked(); }, Qt::DirectConnection);
  54. /* Set up default visibilty */
  55. ui->broadcastButton->setVisible(false);
  56. ui->pauseRecordButton->setVisible(false);
  57. ui->replayBufferButton->setVisible(false);
  58. ui->saveReplayButton->setVisible(false);
  59. ui->virtualCamButton->setVisible(false);
  60. ui->virtualCamConfigButton->setVisible(false);
  61. /* Set up state update connections */
  62. connect(main, &OBSBasic::StreamingPreparing, this, &OBSBasicControls::StreamingPreparing);
  63. connect(main, &OBSBasic::StreamingStarting, this, &OBSBasicControls::StreamingStarting);
  64. connect(main, &OBSBasic::StreamingStarted, this, &OBSBasicControls::StreamingStarted);
  65. connect(main, &OBSBasic::StreamingStopping, this, &OBSBasicControls::StreamingStopping);
  66. connect(main, &OBSBasic::StreamingStopped, this, &OBSBasicControls::StreamingStopped);
  67. connect(main, &OBSBasic::BroadcastStreamReady, this, &OBSBasicControls::BroadcastStreamReady);
  68. connect(main, &OBSBasic::BroadcastStreamActive, this, &OBSBasicControls::BroadcastStreamActive);
  69. connect(main, &OBSBasic::BroadcastStreamStarted, this, &OBSBasicControls::BroadcastStreamStarted);
  70. connect(main, &OBSBasic::RecordingStarted, this, &OBSBasicControls::RecordingStarted);
  71. connect(main, &OBSBasic::RecordingPaused, this, &OBSBasicControls::RecordingPaused);
  72. connect(main, &OBSBasic::RecordingUnpaused, this, &OBSBasicControls::RecordingUnpaused);
  73. connect(main, &OBSBasic::RecordingStopping, this, &OBSBasicControls::RecordingStopping);
  74. connect(main, &OBSBasic::RecordingStopped, this, &OBSBasicControls::RecordingStopped);
  75. connect(main, &OBSBasic::ReplayBufStarted, this, &OBSBasicControls::ReplayBufferStarted);
  76. connect(main, &OBSBasic::ReplayBufStopping, this, &OBSBasicControls::ReplayBufferStopping);
  77. connect(main, &OBSBasic::ReplayBufStopped, this, &OBSBasicControls::ReplayBufferStopped);
  78. connect(main, &OBSBasic::VirtualCamStarted, this, &OBSBasicControls::VirtualCamStarted);
  79. connect(main, &OBSBasic::VirtualCamStopped, this, &OBSBasicControls::VirtualCamStopped);
  80. connect(main, &OBSBasic::PreviewProgramModeChanged, this, &OBSBasicControls::UpdateStudioModeState);
  81. /* Set up enablement connection */
  82. connect(main, &OBSBasic::BroadcastFlowEnabled, this, &OBSBasicControls::EnableBroadcastFlow);
  83. connect(main, &OBSBasic::ReplayBufEnabled, this, &OBSBasicControls::EnableReplayBufferButtons);
  84. connect(main, &OBSBasic::VirtualCamEnabled, this, &OBSBasicControls::EnableVirtualCamButtons);
  85. }
  86. void OBSBasicControls::StreamingPreparing()
  87. {
  88. ui->streamButton->setEnabled(false);
  89. ui->streamButton->setText(QTStr("Basic.Main.PreparingStream"));
  90. }
  91. void OBSBasicControls::StreamingStarting(bool broadcastAutoStart)
  92. {
  93. ui->streamButton->setText(QTStr("Basic.Main.Connecting"));
  94. if (!broadcastAutoStart) {
  95. // well, we need to disable button while stream is not active
  96. ui->broadcastButton->setEnabled(false);
  97. ui->broadcastButton->setText(QTStr("Basic.Main.StartBroadcast"));
  98. ui->broadcastButton->setProperty("broadcastState", "ready");
  99. ui->broadcastButton->style()->unpolish(ui->broadcastButton);
  100. ui->broadcastButton->style()->polish(ui->broadcastButton);
  101. }
  102. }
  103. void OBSBasicControls::StreamingStarted(bool withDelay)
  104. {
  105. ui->streamButton->setEnabled(true);
  106. setClasses(ui->streamButton, "state-active");
  107. ui->streamButton->setText(QTStr("Basic.Main.StopStreaming"));
  108. if (withDelay) {
  109. ui->streamButton->setMenu(streamButtonMenu.get());
  110. startStreamAction->setVisible(false);
  111. stopStreamAction->setVisible(true);
  112. }
  113. }
  114. void OBSBasicControls::StreamingStopping()
  115. {
  116. ui->streamButton->setText(QTStr("Basic.Main.StoppingStreaming"));
  117. }
  118. void OBSBasicControls::StreamingStopped(bool withDelay)
  119. {
  120. ui->streamButton->setEnabled(true);
  121. setClasses(ui->streamButton, "");
  122. ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
  123. if (withDelay) {
  124. if (!ui->streamButton->menu())
  125. ui->streamButton->setMenu(streamButtonMenu.get());
  126. startStreamAction->setVisible(true);
  127. stopStreamAction->setVisible(false);
  128. } else {
  129. ui->streamButton->setMenu(nullptr);
  130. }
  131. }
  132. void OBSBasicControls::BroadcastStreamReady(bool ready)
  133. {
  134. setClasses(ui->broadcastButton, ready ? "state-active" : "");
  135. }
  136. void OBSBasicControls::BroadcastStreamActive()
  137. {
  138. ui->broadcastButton->setEnabled(true);
  139. }
  140. void OBSBasicControls::BroadcastStreamStarted(bool autoStop)
  141. {
  142. ui->broadcastButton->setText(QTStr(autoStop ? "Basic.Main.AutoStopEnabled" : "Basic.Main.StopBroadcast"));
  143. if (autoStop)
  144. ui->broadcastButton->setEnabled(false);
  145. ui->broadcastButton->setProperty("broadcastState", "active");
  146. ui->broadcastButton->style()->unpolish(ui->broadcastButton);
  147. ui->broadcastButton->style()->polish(ui->broadcastButton);
  148. }
  149. void OBSBasicControls::RecordingStarted(bool pausable)
  150. {
  151. setClasses(ui->recordButton, "state-active");
  152. ui->recordButton->setText(QTStr("Basic.Main.StopRecording"));
  153. if (pausable) {
  154. ui->pauseRecordButton->setVisible(pausable);
  155. RecordingUnpaused();
  156. }
  157. }
  158. void OBSBasicControls::RecordingPaused()
  159. {
  160. QString text = QTStr("Basic.Main.UnpauseRecording");
  161. setClasses(ui->pauseRecordButton, "icon-media-pause state-active");
  162. ui->pauseRecordButton->setAccessibleName(text);
  163. ui->pauseRecordButton->setToolTip(text);
  164. ui->saveReplayButton->setEnabled(false);
  165. }
  166. void OBSBasicControls::RecordingUnpaused()
  167. {
  168. QString text = QTStr("Basic.Main.PauseRecording");
  169. setClasses(ui->pauseRecordButton, "icon-media-pause");
  170. ui->pauseRecordButton->setAccessibleName(text);
  171. ui->pauseRecordButton->setToolTip(text);
  172. ui->saveReplayButton->setEnabled(true);
  173. }
  174. void OBSBasicControls::RecordingStopping()
  175. {
  176. ui->recordButton->setText(QTStr("Basic.Main.StoppingRecording"));
  177. }
  178. void OBSBasicControls::RecordingStopped()
  179. {
  180. setClasses(ui->recordButton, "");
  181. ui->recordButton->setText(QTStr("Basic.Main.StartRecording"));
  182. ui->pauseRecordButton->setVisible(false);
  183. }
  184. void OBSBasicControls::ReplayBufferStarted()
  185. {
  186. setClasses(ui->replayBufferButton, "state-active");
  187. ui->replayBufferButton->setText(QTStr("Basic.Main.StopReplayBuffer"));
  188. ui->saveReplayButton->setVisible(true);
  189. }
  190. void OBSBasicControls::ReplayBufferStopping()
  191. {
  192. ui->replayBufferButton->setText(QTStr("Basic.Main.StoppingReplayBuffer"));
  193. }
  194. void OBSBasicControls::ReplayBufferStopped()
  195. {
  196. setClasses(ui->replayBufferButton, "");
  197. ui->replayBufferButton->setText(QTStr("Basic.Main.StartReplayBuffer"));
  198. ui->saveReplayButton->setVisible(false);
  199. }
  200. void OBSBasicControls::VirtualCamStarted()
  201. {
  202. setClasses(ui->virtualCamButton, "state-active");
  203. ui->virtualCamButton->setText(QTStr("Basic.Main.StopVirtualCam"));
  204. }
  205. void OBSBasicControls::VirtualCamStopped()
  206. {
  207. setClasses(ui->virtualCamButton, "");
  208. ui->virtualCamButton->setText(QTStr("Basic.Main.StartVirtualCam"));
  209. }
  210. void OBSBasicControls::UpdateStudioModeState(bool enabled)
  211. {
  212. setClasses(ui->modeSwitch, enabled ? "state-active" : "");
  213. }
  214. void OBSBasicControls::EnableBroadcastFlow(bool enabled)
  215. {
  216. ui->broadcastButton->setVisible(enabled);
  217. ui->broadcastButton->setEnabled(enabled);
  218. ui->broadcastButton->setText(QTStr("Basic.Main.SetupBroadcast"));
  219. ui->broadcastButton->setProperty("broadcastState", "idle");
  220. ui->broadcastButton->style()->unpolish(ui->broadcastButton);
  221. ui->broadcastButton->style()->polish(ui->broadcastButton);
  222. }
  223. void OBSBasicControls::EnableReplayBufferButtons(bool enabled)
  224. {
  225. ui->replayBufferButton->setVisible(enabled);
  226. }
  227. void OBSBasicControls::EnableVirtualCamButtons()
  228. {
  229. ui->virtualCamButton->setVisible(true);
  230. ui->virtualCamConfigButton->setVisible(true);
  231. }