Skip to content

Commit

Permalink
Merge pull request #7278 from tytan652/control_dock_separation
Browse files Browse the repository at this point in the history
Separation of the controls dock from the main window
  • Loading branch information
RytoEX authored Jun 5, 2024
2 parents 29994af + a2785b7 commit 93d5191
Show file tree
Hide file tree
Showing 15 changed files with 1,133 additions and 810 deletions.
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

0 comments on commit 93d5191

Please sign in to comment.