OBSBasicControls.cpp 9.6 KB

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