#include "basic-controls.hpp" #include "window-basic-main.hpp" OBSBasicControls::OBSBasicControls(OBSBasic *main) : QFrame(nullptr), ui(new Ui::OBSBasicControls) { /* Create UI elements */ ui->setupUi(this); streamButtonMenu.reset(new QMenu()); startStreamAction = streamButtonMenu->addAction(QTStr("Basic.Main.StartStreaming")); stopStreamAction = streamButtonMenu->addAction(QTStr("Basic.Main.StopStreaming")); QAction *forceStopStreamAction = streamButtonMenu->addAction( QTStr("Basic.Main.ForceStopStreaming")); /* Transfer buttons signals as OBSBasicControls signals */ connect( ui->streamButton, &QPushButton::clicked, this, [this]() { emit this->StreamButtonClicked(); }, Qt::DirectConnection); connect( ui->broadcastButton, &QPushButton::clicked, this, [this]() { emit this->BroadcastButtonClicked(); }, Qt::DirectConnection); connect( ui->recordButton, &QPushButton::clicked, this, [this]() { emit this->RecordButtonClicked(); }, Qt::DirectConnection); connect( ui->pauseRecordButton, &QPushButton::clicked, this, [this]() { emit this->PauseRecordButtonClicked(); }, Qt::DirectConnection); connect( ui->replayBufferButton, &QPushButton::clicked, this, [this]() { emit this->ReplayBufferButtonClicked(); }, Qt::DirectConnection); connect( ui->saveReplayButton, &QPushButton::clicked, this, [this]() { emit this->SaveReplayBufferButtonClicked(); }, Qt::DirectConnection); connect( ui->virtualCamButton, &QPushButton::clicked, this, [this]() { emit this->VirtualCamButtonClicked(); }, Qt::DirectConnection); connect( ui->virtualCamConfigButton, &QPushButton::clicked, this, [this]() { emit this->VirtualCamConfigButtonClicked(); }, Qt::DirectConnection); connect( ui->modeSwitch, &QPushButton::clicked, this, [this]() { emit this->StudioModeButtonClicked(); }, Qt::DirectConnection); connect( ui->settingsButton, &QPushButton::clicked, this, [this]() { emit this->SettingsButtonClicked(); }, Qt::DirectConnection); connect( ui->exitButton, &QPushButton::clicked, this, [this]() { emit this->ExitButtonClicked(); }, Qt::DirectConnection); /* Transfer menu actions signals as OBSBasicControls signals */ connect( startStreamAction.get(), &QAction::triggered, this, [this]() { emit this->StartStreamMenuActionClicked(); }, Qt::DirectConnection); connect( stopStreamAction.get(), &QAction::triggered, this, [this]() { emit this->StopStreamMenuActionClicked(); }, Qt::DirectConnection); connect( forceStopStreamAction, &QAction::triggered, this, [this]() { emit this->ForceStopStreamMenuActionClicked(); }, Qt::DirectConnection); /* Set up default visibilty */ ui->broadcastButton->setVisible(false); ui->pauseRecordButton->setVisible(false); ui->replayBufferButton->setVisible(false); ui->saveReplayButton->setVisible(false); ui->virtualCamButton->setVisible(false); ui->virtualCamConfigButton->setVisible(false); /* Set up state update connections */ connect(main, &OBSBasic::StreamingPreparing, this, &OBSBasicControls::StreamingPreparing); connect(main, &OBSBasic::StreamingStarting, this, &OBSBasicControls::StreamingStarting); connect(main, &OBSBasic::StreamingStarted, this, &OBSBasicControls::StreamingStarted); connect(main, &OBSBasic::StreamingStopping, this, &OBSBasicControls::StreamingStopping); connect(main, &OBSBasic::StreamingStopped, this, &OBSBasicControls::StreamingStopped); connect(main, &OBSBasic::BroadcastStreamReady, this, &OBSBasicControls::BroadcastStreamReady); connect(main, &OBSBasic::BroadcastStreamActive, this, &OBSBasicControls::BroadcastStreamActive); connect(main, &OBSBasic::BroadcastStreamStarted, this, &OBSBasicControls::BroadcastStreamStarted); connect(main, &OBSBasic::RecordingStarted, this, &OBSBasicControls::RecordingStarted); connect(main, &OBSBasic::RecordingPaused, this, &OBSBasicControls::RecordingPaused); connect(main, &OBSBasic::RecordingUnpaused, this, &OBSBasicControls::RecordingUnpaused); connect(main, &OBSBasic::RecordingStopping, this, &OBSBasicControls::RecordingStopping); connect(main, &OBSBasic::RecordingStopped, this, &OBSBasicControls::RecordingStopped); connect(main, &OBSBasic::ReplayBufStarted, this, &OBSBasicControls::ReplayBufferStarted); connect(main, &OBSBasic::ReplayBufStopping, this, &OBSBasicControls::ReplayBufferStopping); connect(main, &OBSBasic::ReplayBufStopped, this, &OBSBasicControls::ReplayBufferStopped); connect(main, &OBSBasic::VirtualCamStarted, this, &OBSBasicControls::VirtualCamStarted); connect(main, &OBSBasic::VirtualCamStopped, this, &OBSBasicControls::VirtualCamStopped); connect(main, &OBSBasic::PreviewProgramModeChanged, this, &OBSBasicControls::UpdateStudioModeState); /* Set up enablement connection */ connect(main, &OBSBasic::BroadcastFlowEnabled, this, &OBSBasicControls::EnableBroadcastFlow); connect(main, &OBSBasic::ReplayBufEnabled, this, &OBSBasicControls::EnableReplayBufferButtons); connect(main, &OBSBasic::VirtualCamEnabled, this, &OBSBasicControls::EnableVirtualCamButtons); } void OBSBasicControls::StreamingPreparing() { ui->streamButton->setEnabled(false); ui->streamButton->setText(QTStr("Basic.Main.PreparingStream")); } void OBSBasicControls::StreamingStarting(bool broadcastAutoStart) { ui->streamButton->setText(QTStr("Basic.Main.Connecting")); if (!broadcastAutoStart) { // well, we need to disable button while stream is not active ui->broadcastButton->setEnabled(false); ui->broadcastButton->setText( QTStr("Basic.Main.StartBroadcast")); ui->broadcastButton->setProperty("broadcastState", "ready"); ui->broadcastButton->style()->unpolish(ui->broadcastButton); ui->broadcastButton->style()->polish(ui->broadcastButton); } } void OBSBasicControls::StreamingStarted(bool withDelay) { ui->streamButton->setEnabled(true); ui->streamButton->setChecked(true); ui->streamButton->setText(QTStr("Basic.Main.StopStreaming")); if (withDelay) { ui->streamButton->setMenu(streamButtonMenu.get()); startStreamAction->setVisible(false); stopStreamAction->setVisible(true); } } void OBSBasicControls::StreamingStopping() { ui->streamButton->setText(QTStr("Basic.Main.StoppingStreaming")); } void OBSBasicControls::StreamingStopped(bool withDelay) { ui->streamButton->setEnabled(true); ui->streamButton->setChecked(false); ui->streamButton->setText(QTStr("Basic.Main.StartStreaming")); if (withDelay) { if (!ui->streamButton->menu()) ui->streamButton->setMenu(streamButtonMenu.get()); startStreamAction->setVisible(true); stopStreamAction->setVisible(false); } else { ui->streamButton->setMenu(nullptr); } } void OBSBasicControls::BroadcastStreamReady(bool ready) { ui->broadcastButton->setChecked(ready); } void OBSBasicControls::BroadcastStreamActive() { ui->broadcastButton->setEnabled(true); } void OBSBasicControls::BroadcastStreamStarted(bool autoStop) { ui->broadcastButton->setText( QTStr(autoStop ? "Basic.Main.AutoStopEnabled" : "Basic.Main.StopBroadcast")); if (autoStop) ui->broadcastButton->setEnabled(false); ui->broadcastButton->setProperty("broadcastState", "active"); ui->broadcastButton->style()->unpolish(ui->broadcastButton); ui->broadcastButton->style()->polish(ui->broadcastButton); } void OBSBasicControls::RecordingStarted(bool pausable) { ui->recordButton->setChecked(true); ui->recordButton->setText(QTStr("Basic.Main.StopRecording")); if (pausable) { ui->pauseRecordButton->setVisible(pausable); RecordingUnpaused(); } } void OBSBasicControls::RecordingPaused() { QString text = QTStr("Basic.Main.UnpauseRecording"); ui->pauseRecordButton->setChecked(true); ui->pauseRecordButton->setAccessibleName(text); ui->pauseRecordButton->setToolTip(text); ui->saveReplayButton->setEnabled(false); } void OBSBasicControls::RecordingUnpaused() { QString text = QTStr("Basic.Main.PauseRecording"); ui->pauseRecordButton->setChecked(false); ui->pauseRecordButton->setAccessibleName(text); ui->pauseRecordButton->setToolTip(text); ui->saveReplayButton->setEnabled(true); } void OBSBasicControls::RecordingStopping() { ui->recordButton->setText(QTStr("Basic.Main.StoppingRecording")); } void OBSBasicControls::RecordingStopped() { ui->recordButton->setChecked(false); ui->recordButton->setText(QTStr("Basic.Main.StartRecording")); ui->pauseRecordButton->setVisible(false); } void OBSBasicControls::ReplayBufferStarted() { ui->replayBufferButton->setChecked(true); ui->replayBufferButton->setText(QTStr("Basic.Main.StopReplayBuffer")); ui->saveReplayButton->setVisible(true); } void OBSBasicControls::ReplayBufferStopping() { ui->replayBufferButton->setText( QTStr("Basic.Main.StoppingReplayBuffer")); } void OBSBasicControls::ReplayBufferStopped() { ui->replayBufferButton->setChecked(false); ui->replayBufferButton->setText(QTStr("Basic.Main.StartReplayBuffer")); ui->saveReplayButton->setVisible(false); } void OBSBasicControls::VirtualCamStarted() { ui->virtualCamButton->setChecked(true); ui->virtualCamButton->setText(QTStr("Basic.Main.StopVirtualCam")); } void OBSBasicControls::VirtualCamStopped() { ui->virtualCamButton->setChecked(false); ui->virtualCamButton->setText(QTStr("Basic.Main.StartVirtualCam")); } void OBSBasicControls::UpdateStudioModeState(bool enabled) { ui->modeSwitch->setChecked(enabled); } void OBSBasicControls::EnableBroadcastFlow(bool enabled) { ui->broadcastButton->setVisible(enabled); ui->broadcastButton->setEnabled(enabled); ui->broadcastButton->setText(QTStr("Basic.Main.SetupBroadcast")); ui->broadcastButton->setProperty("broadcastState", "idle"); ui->broadcastButton->style()->unpolish(ui->broadcastButton); ui->broadcastButton->style()->polish(ui->broadcastButton); } void OBSBasicControls::EnableReplayBufferButtons(bool enabled) { ui->replayBufferButton->setVisible(enabled); } void OBSBasicControls::EnableVirtualCamButtons() { ui->virtualCamButton->setVisible(true); ui->virtualCamConfigButton->setVisible(true); }