basic-controls.cpp 9.8 KB

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