OBSBasicControls.cpp 9.7 KB

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