basic-controls.cpp 9.7 KB

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