Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
329 changes: 329 additions & 0 deletions UI/basic-controls.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,329 @@
#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::ReplayBufferStopping, 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);
}
Loading