mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add support for adding status labels to macro docks
This commit is contained in:
parent
a7ccfc3282
commit
18e19fb6c8
|
|
@ -107,13 +107,18 @@ AdvSceneSwitcher.macroTab.currentDisableHotkeys="Register hotkeys to control the
|
|||
AdvSceneSwitcher.macroTab.currentRegisterDock="Register dock widget to control the pause state of selected macro or run it manually"
|
||||
AdvSceneSwitcher.macroTab.currentDockAddRunButton="Add button to run the macro"
|
||||
AdvSceneSwitcher.macroTab.currentDockAddPauseButton="Add button to pause or unpause the macro"
|
||||
AdvSceneSwitcher.macroTab.currentDockAddStatusLabel="Add status label"
|
||||
AdvSceneSwitcher.macroTab.currentDockButtonText.run="Run button text:"
|
||||
AdvSceneSwitcher.macroTab.currentDockButtonText.pause="Pause button text:"
|
||||
AdvSceneSwitcher.macroTab.currentDockButtonText.unpause="Unpause button text:"
|
||||
AdvSceneSwitcher.macroTab.currentDockStatusText.true="Conditions true text:"
|
||||
AdvSceneSwitcher.macroTab.currentDockStatusText.false="Conditions false text:"
|
||||
|
||||
AdvSceneSwitcher.macroDock.pause="Pause"
|
||||
AdvSceneSwitcher.macroDock.unpause="Unpause"
|
||||
AdvSceneSwitcher.macroDock.run="Run"
|
||||
AdvSceneSwitcher.macroDock.statusLabel.true="Conditions are true."
|
||||
AdvSceneSwitcher.macroDock.statusLabel.false="Conditions are false."
|
||||
|
||||
; Macro List
|
||||
AdvSceneSwitcher.macroList.deleted="deleted"
|
||||
|
|
|
|||
|
|
@ -8,18 +8,24 @@ namespace advss {
|
|||
|
||||
MacroDock::MacroDock(Macro *m, QWidget *parent, const QString &runButtonText,
|
||||
const QString &pauseButtonText,
|
||||
const QString &unpauseButtonText)
|
||||
const QString &unpauseButtonText,
|
||||
const QString &conditionsTrueText,
|
||||
const QString &conditionsFalseText)
|
||||
: OBSDock(parent),
|
||||
_pauseButtonText(pauseButtonText),
|
||||
_unpauseButtonText(unpauseButtonText),
|
||||
_conditionsTrueText(conditionsTrueText),
|
||||
_conditionsFalseText(conditionsFalseText),
|
||||
_run(new QPushButton(runButtonText)),
|
||||
_pauseToggle(new QPushButton()),
|
||||
_statusText(new QLabel(conditionsFalseText)),
|
||||
_macro(m)
|
||||
{
|
||||
if (_macro) {
|
||||
setWindowTitle(QString::fromStdString(_macro->Name()));
|
||||
_run->setVisible(_macro->DockHasRunButton());
|
||||
_pauseToggle->setVisible(_macro->DockHasPauseButton());
|
||||
_statusText->setVisible(_macro->DockHasStatusLabel());
|
||||
} else {
|
||||
setWindowTitle("<deleted macro>");
|
||||
}
|
||||
|
|
@ -34,12 +40,16 @@ MacroDock::MacroDock(Macro *m, QWidget *parent, const QString &runButtonText,
|
|||
QVBoxLayout *layout = new QVBoxLayout;
|
||||
layout->addWidget(_run);
|
||||
layout->addWidget(_pauseToggle);
|
||||
layout->addWidget(_statusText);
|
||||
|
||||
QWidget::connect(&_timer, SIGNAL(timeout()), this,
|
||||
SLOT(UpdatePauseText()));
|
||||
QWidget::connect(&_timer, SIGNAL(timeout()), this,
|
||||
SLOT(UpdateStatusText()));
|
||||
_timer.start(1000);
|
||||
|
||||
UpdatePauseText();
|
||||
UpdateStatusText();
|
||||
|
||||
// QFrame wrapper is necessary to avoid dock being partially
|
||||
// transparent
|
||||
|
|
@ -85,6 +95,23 @@ void MacroDock::SetUnpauseButtonText(const QString &text)
|
|||
UpdatePauseText();
|
||||
}
|
||||
|
||||
void MacroDock::ShowStatusLabel(bool value)
|
||||
{
|
||||
_statusText->setVisible(value);
|
||||
}
|
||||
|
||||
void MacroDock::SetConditionsTrueText(const QString &text)
|
||||
{
|
||||
_conditionsTrueText = text;
|
||||
UpdateStatusText();
|
||||
}
|
||||
|
||||
void MacroDock::SetConditionsFalseText(const QString &text)
|
||||
{
|
||||
_conditionsFalseText = text;
|
||||
UpdateStatusText();
|
||||
}
|
||||
|
||||
void MacroDock::RunClicked()
|
||||
{
|
||||
if (!_macro) {
|
||||
|
|
@ -119,4 +146,14 @@ void MacroDock::UpdatePauseText()
|
|||
: _pauseButtonText);
|
||||
}
|
||||
|
||||
void MacroDock::UpdateStatusText()
|
||||
{
|
||||
if (!_macro) {
|
||||
return;
|
||||
}
|
||||
|
||||
_statusText->setText(_macro->Matched() ? _conditionsTrueText
|
||||
: _conditionsFalseText);
|
||||
}
|
||||
|
||||
} // namespace advss
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <QPushButton>
|
||||
#include <QTimer>
|
||||
#include <QLabel>
|
||||
#include <memory>
|
||||
|
||||
namespace advss {
|
||||
|
|
@ -15,24 +16,33 @@ class MacroDock : public OBSDock {
|
|||
public:
|
||||
MacroDock(Macro *, QWidget *parent, const QString &runButtonText,
|
||||
const QString &pauseButtonText,
|
||||
const QString &unpauseButtonText);
|
||||
const QString &unpauseButtonText,
|
||||
const QString &conditionsTrueText,
|
||||
const QString &conditionsFalseText);
|
||||
void SetName(const QString &);
|
||||
void ShowRunButton(bool);
|
||||
void SetRunButtonText(const QString &);
|
||||
void ShowPauseButton(bool);
|
||||
void SetPauseButtonText(const QString &);
|
||||
void SetUnpauseButtonText(const QString &);
|
||||
void ShowStatusLabel(bool);
|
||||
void SetConditionsTrueText(const QString &);
|
||||
void SetConditionsFalseText(const QString &);
|
||||
|
||||
private slots:
|
||||
void RunClicked();
|
||||
void PauseToggleClicked();
|
||||
void UpdatePauseText();
|
||||
void UpdateStatusText();
|
||||
|
||||
private:
|
||||
QString _pauseButtonText;
|
||||
QString _unpauseButtonText;
|
||||
QString _conditionsTrueText;
|
||||
QString _conditionsFalseText;
|
||||
QPushButton *_run;
|
||||
QPushButton *_pauseToggle;
|
||||
QLabel *_statusText;
|
||||
|
||||
QTimer _timer;
|
||||
|
||||
|
|
|
|||
|
|
@ -74,9 +74,13 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
|
|||
"AdvSceneSwitcher.macroTab.currentDockAddRunButton"))),
|
||||
_currentMacroDockAddPauseButton(new QCheckBox(obs_module_text(
|
||||
"AdvSceneSwitcher.macroTab.currentDockAddPauseButton"))),
|
||||
_currentMacroDockAddStatusLabel(new QCheckBox(obs_module_text(
|
||||
"AdvSceneSwitcher.macroTab.currentDockAddStatusLabel"))),
|
||||
_runButtonText(new QLineEdit()),
|
||||
_pauseButtonText(new QLineEdit()),
|
||||
_unpauseButtonText(new QLineEdit()),
|
||||
_conditionsTrueStatusText(new QLineEdit()),
|
||||
_conditionsFalseStatusText(new QLineEdit()),
|
||||
_dockOptions(new QGroupBox(
|
||||
obs_module_text("AdvSceneSwitcher.macroTab.dockSettings"))),
|
||||
_dockLayout(new QGridLayout())
|
||||
|
|
@ -127,6 +131,23 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
|
|||
row, 1);
|
||||
_dockLayout->addWidget(_unpauseButtonText, row, 2);
|
||||
_unpauseButtonTextRow = row;
|
||||
row++;
|
||||
_dockLayout->addWidget(_currentMacroDockAddStatusLabel, row, 1, 1, 2);
|
||||
row++;
|
||||
_dockLayout->addWidget(
|
||||
new QLabel(obs_module_text(
|
||||
"AdvSceneSwitcher.macroTab.currentDockStatusText.true")),
|
||||
row, 1);
|
||||
_dockLayout->addWidget(_conditionsTrueStatusText, row, 2);
|
||||
_conditionsTrueTextRow = row;
|
||||
row++;
|
||||
_dockLayout->addWidget(
|
||||
new QLabel(obs_module_text(
|
||||
"AdvSceneSwitcher.macroTab.currentDockStatusText.false")),
|
||||
row, 1);
|
||||
_dockLayout->addWidget(_conditionsFalseStatusText, row, 2);
|
||||
_conditionsFalseTextRow = row;
|
||||
|
||||
_dockOptions->setLayout(_dockLayout);
|
||||
|
||||
QDialogButtonBox *buttonbox = new QDialogButtonBox(
|
||||
|
|
@ -141,6 +162,8 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
|
|||
&MacroPropertiesDialog::RunButtonEnableChanged);
|
||||
connect(_currentMacroDockAddPauseButton, &QCheckBox::stateChanged, this,
|
||||
&MacroPropertiesDialog::PauseButtonEnableChanged);
|
||||
connect(_currentMacroDockAddStatusLabel, &QCheckBox::stateChanged, this,
|
||||
&MacroPropertiesDialog::StatusLabelEnableChanged);
|
||||
|
||||
auto layout = new QVBoxLayout;
|
||||
layout->addWidget(highlightOptions);
|
||||
|
|
@ -164,20 +187,31 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
|
|||
_currentMacroDockAddRunButton->setChecked(macro->DockHasRunButton());
|
||||
_currentMacroDockAddPauseButton->setChecked(
|
||||
macro->DockHasPauseButton());
|
||||
_currentMacroDockAddStatusLabel->setChecked(
|
||||
macro->DockHasStatusLabel());
|
||||
_runButtonText->setText(QString::fromStdString(macro->RunButtonText()));
|
||||
_pauseButtonText->setText(
|
||||
QString::fromStdString(macro->PauseButtonText()));
|
||||
_unpauseButtonText->setText(
|
||||
QString::fromStdString(macro->UnpauseButtonText()));
|
||||
_conditionsTrueStatusText->setText(
|
||||
QString::fromStdString(macro->ConditionsTrueStatusText()));
|
||||
_conditionsFalseStatusText->setText(
|
||||
QString::fromStdString(macro->ConditionsFalseStatusText()));
|
||||
|
||||
_currentMacroDockAddRunButton->setVisible(dockEnabled);
|
||||
_currentMacroDockAddPauseButton->setVisible(dockEnabled);
|
||||
_currentMacroDockAddStatusLabel->setVisible(dockEnabled);
|
||||
setGridLayoutRowVisible(_dockLayout, _runButtonTextRow,
|
||||
dockEnabled && macro->DockHasRunButton());
|
||||
setGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow,
|
||||
dockEnabled && macro->DockHasPauseButton());
|
||||
setGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow,
|
||||
dockEnabled && macro->DockHasPauseButton());
|
||||
setGridLayoutRowVisible(_dockLayout, _conditionsTrueTextRow,
|
||||
dockEnabled && macro->DockHasStatusLabel());
|
||||
setGridLayoutRowVisible(_dockLayout, _conditionsFalseTextRow,
|
||||
dockEnabled && macro->DockHasStatusLabel());
|
||||
MinimizeSizeOfColumn(_dockLayout, 0);
|
||||
Resize();
|
||||
}
|
||||
|
|
@ -186,9 +220,22 @@ void MacroPropertiesDialog::DockEnableChanged(int enabled)
|
|||
{
|
||||
_currentMacroDockAddRunButton->setVisible(enabled);
|
||||
_currentMacroDockAddPauseButton->setVisible(enabled);
|
||||
setGridLayoutRowVisible(_dockLayout, _runButtonTextRow, enabled);
|
||||
setGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow, enabled);
|
||||
setGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow, enabled);
|
||||
_currentMacroDockAddStatusLabel->setVisible(enabled);
|
||||
setGridLayoutRowVisible(
|
||||
_dockLayout, _runButtonTextRow,
|
||||
enabled && _currentMacroDockAddRunButton->isChecked());
|
||||
setGridLayoutRowVisible(
|
||||
_dockLayout, _pauseButtonTextRow,
|
||||
enabled && _currentMacroDockAddPauseButton->isChecked());
|
||||
setGridLayoutRowVisible(
|
||||
_dockLayout, _unpauseButtonTextRow,
|
||||
enabled && _currentMacroDockAddPauseButton->isChecked());
|
||||
setGridLayoutRowVisible(
|
||||
_dockLayout, _conditionsTrueTextRow,
|
||||
enabled && _currentMacroDockAddStatusLabel->isChecked());
|
||||
setGridLayoutRowVisible(
|
||||
_dockLayout, _conditionsFalseTextRow,
|
||||
enabled && _currentMacroDockAddStatusLabel->isChecked());
|
||||
Resize();
|
||||
}
|
||||
|
||||
|
|
@ -205,6 +252,13 @@ void MacroPropertiesDialog::PauseButtonEnableChanged(int enabled)
|
|||
Resize();
|
||||
}
|
||||
|
||||
void MacroPropertiesDialog::StatusLabelEnableChanged(int enabled)
|
||||
{
|
||||
setGridLayoutRowVisible(_dockLayout, _conditionsTrueTextRow, enabled);
|
||||
setGridLayoutRowVisible(_dockLayout, _conditionsFalseTextRow, enabled);
|
||||
Resize();
|
||||
}
|
||||
|
||||
void MacroPropertiesDialog::Resize()
|
||||
{
|
||||
_dockOptions->adjustSize();
|
||||
|
|
@ -238,11 +292,17 @@ bool MacroPropertiesDialog::AskForSettings(QWidget *parent,
|
|||
dialog._currentMacroDockAddRunButton->isChecked());
|
||||
macro->SetDockHasPauseButton(
|
||||
dialog._currentMacroDockAddPauseButton->isChecked());
|
||||
macro->SetDockHasStatusLabel(
|
||||
dialog._currentMacroDockAddStatusLabel->isChecked());
|
||||
macro->SetRunButtonText(dialog._runButtonText->text().toStdString());
|
||||
macro->SetPauseButtonText(
|
||||
dialog._pauseButtonText->text().toStdString());
|
||||
macro->SetUnpauseButtonText(
|
||||
dialog._unpauseButtonText->text().toStdString());
|
||||
macro->SetConditionsTrueStatusText(
|
||||
dialog._conditionsTrueStatusText->text().toStdString());
|
||||
macro->SetConditionsFalseStatusText(
|
||||
dialog._conditionsFalseStatusText->text().toStdString());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ private slots:
|
|||
void DockEnableChanged(int);
|
||||
void RunButtonEnableChanged(int);
|
||||
void PauseButtonEnableChanged(int);
|
||||
void StatusLabelEnableChanged(int);
|
||||
|
||||
private:
|
||||
void Resize();
|
||||
|
|
@ -48,15 +49,20 @@ private:
|
|||
QCheckBox *_currentMacroRegisterDock;
|
||||
QCheckBox *_currentMacroDockAddRunButton;
|
||||
QCheckBox *_currentMacroDockAddPauseButton;
|
||||
QCheckBox *_currentMacroDockAddStatusLabel;
|
||||
QLineEdit *_runButtonText;
|
||||
QLineEdit *_pauseButtonText;
|
||||
QLineEdit *_unpauseButtonText;
|
||||
QLineEdit *_conditionsTrueStatusText;
|
||||
QLineEdit *_conditionsFalseStatusText;
|
||||
QGroupBox *_dockOptions;
|
||||
QGridLayout *_dockLayout;
|
||||
|
||||
int _runButtonTextRow = -1;
|
||||
int _pauseButtonTextRow = -1;
|
||||
int _unpauseButtonTextRow = -1;
|
||||
int _conditionsTrueTextRow = -1;
|
||||
int _conditionsFalseTextRow = -1;
|
||||
};
|
||||
|
||||
} // namespace advss
|
||||
|
|
|
|||
|
|
@ -606,12 +606,17 @@ void Macro::SaveDockSettings(obs_data_t *obj) const
|
|||
}
|
||||
obs_data_set_bool(dockSettings, "hasRunButton", _dockHasRunButton);
|
||||
obs_data_set_bool(dockSettings, "hasPauseButton", _dockHasPauseButton);
|
||||
obs_data_set_bool(dockSettings, "hasStatusLabel", _dockHasStatusLabel);
|
||||
obs_data_set_string(dockSettings, "runButtonText",
|
||||
_runButtonText.c_str());
|
||||
obs_data_set_string(dockSettings, "pauseButtonText",
|
||||
_pauseButtonText.c_str());
|
||||
obs_data_set_string(dockSettings, "unpauseButtonText",
|
||||
_unpauseButtonText.c_str());
|
||||
obs_data_set_string(dockSettings, "conditionsTrueStatusText",
|
||||
_conditionsTrueStatusText.c_str());
|
||||
obs_data_set_string(dockSettings, "conditionsFalseStatusText",
|
||||
_conditionsFalseStatusText.c_str());
|
||||
if (_dock) {
|
||||
auto window = static_cast<QMainWindow *>(
|
||||
obs_frontend_get_main_window());
|
||||
|
|
@ -658,11 +663,18 @@ void Macro::LoadDockSettings(obs_data_t *obj)
|
|||
_pauseButtonText = obs_data_get_string(dockSettings, "pauseButtonText");
|
||||
_unpauseButtonText =
|
||||
obs_data_get_string(dockSettings, "unpauseButtonText");
|
||||
_conditionsTrueStatusText =
|
||||
obs_data_get_string(dockSettings, "conditionsTrueStatusText");
|
||||
_conditionsFalseStatusText =
|
||||
obs_data_get_string(dockSettings, "conditionsFalseStatusText");
|
||||
if (dockEnabled) {
|
||||
_dockHasRunButton =
|
||||
obs_data_get_bool(dockSettings, "hasRunButton");
|
||||
_dockHasPauseButton =
|
||||
obs_data_get_bool(dockSettings, "hasPauseButton");
|
||||
_dockHasStatusLabel =
|
||||
obs_data_get_bool(dockSettings, "hasStatusLabel");
|
||||
|
||||
_dockIsFloating = obs_data_get_bool(dockSettings, "isFloating");
|
||||
_dockArea = static_cast<Qt::DockWidgetArea>(
|
||||
obs_data_get_int(dockSettings, "area"));
|
||||
|
|
@ -697,10 +709,12 @@ void Macro::EnableDock(bool value)
|
|||
// Create new dock widget
|
||||
auto window =
|
||||
static_cast<QMainWindow *>(obs_frontend_get_main_window());
|
||||
_dock = new MacroDock(this, window,
|
||||
QString::fromStdString(_runButtonText),
|
||||
QString::fromStdString(_pauseButtonText),
|
||||
QString::fromStdString(_unpauseButtonText));
|
||||
_dock = new MacroDock(
|
||||
this, window, QString::fromStdString(_runButtonText),
|
||||
QString::fromStdString(_pauseButtonText),
|
||||
QString::fromStdString(_unpauseButtonText),
|
||||
QString::fromStdString(_conditionsTrueStatusText),
|
||||
QString::fromStdString(_conditionsFalseStatusText));
|
||||
SetDockWidgetName(); // Used by OBS to restore position
|
||||
|
||||
// Register new dock
|
||||
|
|
@ -741,6 +755,15 @@ void Macro::SetDockHasPauseButton(bool value)
|
|||
_dock->ShowPauseButton(value);
|
||||
}
|
||||
|
||||
void Macro::SetDockHasStatusLabel(bool value)
|
||||
{
|
||||
_dockHasStatusLabel = value;
|
||||
if (!_dock) {
|
||||
return;
|
||||
}
|
||||
_dock->ShowStatusLabel(value);
|
||||
}
|
||||
|
||||
void Macro::SetRunButtonText(const std::string &text)
|
||||
{
|
||||
_runButtonText = text;
|
||||
|
|
@ -768,6 +791,34 @@ void Macro::SetUnpauseButtonText(const std::string &text)
|
|||
_dock->SetUnpauseButtonText(QString::fromStdString(text));
|
||||
}
|
||||
|
||||
void Macro::SetConditionsTrueStatusText(const std::string &text)
|
||||
{
|
||||
_conditionsTrueStatusText = text;
|
||||
if (!_dock) {
|
||||
return;
|
||||
}
|
||||
_dock->SetConditionsTrueText(QString::fromStdString(text));
|
||||
}
|
||||
|
||||
std::string Macro::ConditionsTrueStatusText() const
|
||||
{
|
||||
return _conditionsTrueStatusText;
|
||||
}
|
||||
|
||||
void Macro::SetConditionsFalseStatusText(const std::string &text)
|
||||
{
|
||||
_conditionsFalseStatusText = text;
|
||||
if (!_dock) {
|
||||
return;
|
||||
}
|
||||
_dock->SetConditionsFalseText(QString::fromStdString(text));
|
||||
}
|
||||
|
||||
std::string Macro::ConditionsFalseStatusText() const
|
||||
{
|
||||
return _conditionsFalseStatusText;
|
||||
}
|
||||
|
||||
void Macro::RemoveDock()
|
||||
{
|
||||
if (_dock) {
|
||||
|
|
|
|||
|
|
@ -89,12 +89,18 @@ public:
|
|||
bool DockHasRunButton() const { return _dockHasRunButton; }
|
||||
void SetDockHasPauseButton(bool value);
|
||||
bool DockHasPauseButton() const { return _dockHasPauseButton; }
|
||||
void SetDockHasStatusLabel(bool value);
|
||||
bool DockHasStatusLabel() const { return _dockHasStatusLabel; }
|
||||
std::string RunButtonText() const { return _runButtonText; }
|
||||
void SetRunButtonText(const std::string &text);
|
||||
std::string PauseButtonText() const { return _pauseButtonText; }
|
||||
void SetPauseButtonText(const std::string &text);
|
||||
std::string UnpauseButtonText() const { return _unpauseButtonText; }
|
||||
void SetUnpauseButtonText(const std::string &text);
|
||||
void SetConditionsTrueStatusText(const std::string &text);
|
||||
std::string ConditionsTrueStatusText() const;
|
||||
void SetConditionsFalseStatusText(const std::string &text);
|
||||
std::string ConditionsFalseStatusText() const;
|
||||
|
||||
private:
|
||||
void SetupHotkeys();
|
||||
|
|
@ -143,12 +149,17 @@ private:
|
|||
bool _registerDock = false;
|
||||
bool _dockHasRunButton = true;
|
||||
bool _dockHasPauseButton = true;
|
||||
bool _dockHasStatusLabel = false;
|
||||
std::string _runButtonText =
|
||||
obs_module_text("AdvSceneSwitcher.macroDock.run");
|
||||
std::string _pauseButtonText =
|
||||
obs_module_text("AdvSceneSwitcher.macroDock.pause");
|
||||
std::string _unpauseButtonText =
|
||||
obs_module_text("AdvSceneSwitcher.macroDock.unpause");
|
||||
std::string _conditionsTrueStatusText =
|
||||
obs_module_text("AdvSceneSwitcher.macroDock.statusLabel.true");
|
||||
std::string _conditionsFalseStatusText =
|
||||
obs_module_text("AdvSceneSwitcher.macroDock.statusLabel.false");
|
||||
bool _dockIsFloating = true;
|
||||
bool _dockIsVisible = false;
|
||||
Qt::DockWidgetArea _dockArea;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user