Enable use of variables in macro dock widgets

This commit is contained in:
WarmUpTill 2023-06-09 20:59:52 +02:00 committed by WarmUpTill
parent e7c6afbc6a
commit 101a85b063
6 changed files with 99 additions and 116 deletions

View File

@ -6,19 +6,21 @@
namespace advss {
MacroDock::MacroDock(Macro *m, QWidget *parent, const QString &runButtonText,
const QString &pauseButtonText,
const QString &unpauseButtonText,
const QString &conditionsTrueText,
const QString &conditionsFalseText)
MacroDock::MacroDock(Macro *m, QWidget *parent,
const StringVariable &runButtonText,
const StringVariable &pauseButtonText,
const StringVariable &unpauseButtonText,
const StringVariable &conditionsTrueText,
const StringVariable &conditionsFalseText)
: OBSDock(parent),
_runButtonText(runButtonText),
_pauseButtonText(pauseButtonText),
_unpauseButtonText(unpauseButtonText),
_conditionsTrueText(conditionsTrueText),
_conditionsFalseText(conditionsFalseText),
_run(new QPushButton(runButtonText)),
_run(new QPushButton(runButtonText.c_str())),
_pauseToggle(new QPushButton()),
_statusText(new QLabel(conditionsFalseText)),
_statusText(new QLabel(conditionsFalseText.c_str())),
_macro(m)
{
if (_macro) {
@ -42,14 +44,9 @@ MacroDock::MacroDock(Macro *m, QWidget *parent, const QString &runButtonText,
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();
UpdateText();
QWidget::connect(&_timer, SIGNAL(timeout()), this, SLOT(UpdateText()));
_timer.start(500);
// QFrame wrapper is necessary to avoid dock being partially
// transparent
@ -73,9 +70,10 @@ void MacroDock::ShowRunButton(bool value)
_run->setVisible(value);
}
void MacroDock::SetRunButtonText(const QString &text)
void MacroDock::SetRunButtonText(const StringVariable &text)
{
_run->setText(text);
_runButtonText = text;
_run->setText(text.c_str());
}
void MacroDock::ShowPauseButton(bool value)
@ -83,16 +81,16 @@ void MacroDock::ShowPauseButton(bool value)
_pauseToggle->setVisible(value);
}
void MacroDock::SetPauseButtonText(const QString &text)
void MacroDock::SetPauseButtonText(const StringVariable &text)
{
_pauseButtonText = text;
UpdatePauseText();
UpdateText();
}
void MacroDock::SetUnpauseButtonText(const QString &text)
void MacroDock::SetUnpauseButtonText(const StringVariable &text)
{
_unpauseButtonText = text;
UpdatePauseText();
UpdateText();
}
void MacroDock::ShowStatusLabel(bool value)
@ -100,16 +98,16 @@ void MacroDock::ShowStatusLabel(bool value)
_statusText->setVisible(value);
}
void MacroDock::SetConditionsTrueText(const QString &text)
void MacroDock::SetConditionsTrueText(const StringVariable &text)
{
_conditionsTrueText = text;
UpdateStatusText();
UpdateText();
}
void MacroDock::SetConditionsFalseText(const QString &text)
void MacroDock::SetConditionsFalseText(const StringVariable &text)
{
_conditionsFalseText = text;
UpdateStatusText();
UpdateText();
}
void MacroDock::RunClicked()
@ -133,27 +131,21 @@ void MacroDock::PauseToggleClicked()
}
_macro->SetPaused(!_macro->Paused());
UpdatePauseText();
UpdateText();
}
void MacroDock::UpdatePauseText()
void MacroDock::UpdateText()
{
_run->setText(_runButtonText.c_str());
if (!_macro) {
return;
}
_pauseToggle->setText(_macro->Paused() ? _unpauseButtonText
: _pauseButtonText);
}
void MacroDock::UpdateStatusText()
{
if (!_macro) {
return;
}
_statusText->setText(_macro->Matched() ? _conditionsTrueText
: _conditionsFalseText);
_pauseToggle->setText(_macro->Paused() ? _unpauseButtonText.c_str()
: _pauseButtonText.c_str());
_statusText->setText(_macro->Matched() ? _conditionsTrueText.c_str()
: _conditionsFalseText.c_str());
}
} // namespace advss

View File

@ -1,5 +1,6 @@
#pragma once
#include "obs-dock.hpp"
#include "variable-string.hpp"
#include <QPushButton>
#include <QTimer>
@ -14,32 +15,32 @@ class MacroDock : public OBSDock {
Q_OBJECT
public:
MacroDock(Macro *, QWidget *parent, const QString &runButtonText,
const QString &pauseButtonText,
const QString &unpauseButtonText,
const QString &conditionsTrueText,
const QString &conditionsFalseText);
MacroDock(Macro *, QWidget *parent, const StringVariable &runButtonText,
const StringVariable &pauseButtonText,
const StringVariable &unpauseButtonText,
const StringVariable &conditionsTrueText,
const StringVariable &conditionsFalseText);
void SetName(const QString &);
void ShowRunButton(bool);
void SetRunButtonText(const QString &);
void SetRunButtonText(const StringVariable &);
void ShowPauseButton(bool);
void SetPauseButtonText(const QString &);
void SetUnpauseButtonText(const QString &);
void SetPauseButtonText(const StringVariable &);
void SetUnpauseButtonText(const StringVariable &);
void ShowStatusLabel(bool);
void SetConditionsTrueText(const QString &);
void SetConditionsFalseText(const QString &);
void SetConditionsTrueText(const StringVariable &);
void SetConditionsFalseText(const StringVariable &);
private slots:
void RunClicked();
void PauseToggleClicked();
void UpdatePauseText();
void UpdateStatusText();
void UpdateText();
private:
QString _pauseButtonText;
QString _unpauseButtonText;
QString _conditionsTrueText;
QString _conditionsFalseText;
StringVariable _runButtonText;
StringVariable _pauseButtonText;
StringVariable _unpauseButtonText;
StringVariable _conditionsTrueText;
StringVariable _conditionsFalseText;
QPushButton *_run;
QPushButton *_pauseToggle;
QLabel *_statusText;

View File

@ -76,11 +76,11 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
"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()),
_runButtonText(new VariableLineEdit(this)),
_pauseButtonText(new VariableLineEdit(this)),
_unpauseButtonText(new VariableLineEdit(this)),
_conditionsTrueStatusText(new VariableLineEdit(this)),
_conditionsFalseStatusText(new VariableLineEdit(this)),
_dockOptions(new QGroupBox(
obs_module_text("AdvSceneSwitcher.macroTab.dockSettings"))),
_dockLayout(new QGridLayout())
@ -189,15 +189,11 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent,
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()));
_runButtonText->setText(macro->RunButtonText());
_pauseButtonText->setText(macro->PauseButtonText());
_unpauseButtonText->setText(macro->UnpauseButtonText());
_conditionsTrueStatusText->setText(macro->ConditionsTrueStatusText());
_conditionsFalseStatusText->setText(macro->ConditionsFalseStatusText());
_currentMacroDockAddRunButton->setVisible(dockEnabled);
_currentMacroDockAddPauseButton->setVisible(dockEnabled);

View File

@ -1,5 +1,6 @@
#pragma once
#include "macro.hpp"
#include "variable-line-edit.hpp"
#include <QWidget>
#include <QDialog>
@ -50,11 +51,11 @@ private:
QCheckBox *_currentMacroDockAddRunButton;
QCheckBox *_currentMacroDockAddPauseButton;
QCheckBox *_currentMacroDockAddStatusLabel;
QLineEdit *_runButtonText;
QLineEdit *_pauseButtonText;
QLineEdit *_unpauseButtonText;
QLineEdit *_conditionsTrueStatusText;
QLineEdit *_conditionsFalseStatusText;
VariableLineEdit *_runButtonText;
VariableLineEdit *_pauseButtonText;
VariableLineEdit *_unpauseButtonText;
VariableLineEdit *_conditionsTrueStatusText;
VariableLineEdit *_conditionsFalseStatusText;
QGroupBox *_dockOptions;
QGridLayout *_dockLayout;

View File

@ -607,16 +607,13 @@ 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());
_runButtonText.Save(dockSettings, "runButtonText");
_pauseButtonText.Save(dockSettings, "pauseButtonText");
_unpauseButtonText.Save(dockSettings, "unpauseButtonText");
_conditionsTrueStatusText.Save(dockSettings,
"conditionsTrueStatusText");
_conditionsFalseStatusText.Save(dockSettings,
"conditionsFalseStatusText");
if (_dock) {
auto window = static_cast<QMainWindow *>(
obs_frontend_get_main_window());
@ -658,15 +655,13 @@ void Macro::LoadDockSettings(obs_data_t *obj)
obs_data_set_default_string(
dockSettings, "unpauseButtonText",
obs_module_text("AdvSceneSwitcher.macroDock.unpause"));
_runButtonText = obs_data_get_string(dockSettings, "runButtonText");
_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");
_runButtonText.Load(dockSettings, "runButtonText");
_pauseButtonText.Load(dockSettings, "pauseButtonText");
_unpauseButtonText.Load(dockSettings, "unpauseButtonText");
_conditionsTrueStatusText.Load(dockSettings,
"conditionsTrueStatusText");
_conditionsFalseStatusText.Load(dockSettings,
"conditionsFalseStatusText");
if (dockEnabled) {
_dockHasRunButton =
obs_data_get_bool(dockSettings, "hasRunButton");
@ -709,12 +704,9 @@ 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),
QString::fromStdString(_conditionsTrueStatusText),
QString::fromStdString(_conditionsFalseStatusText));
_dock = new MacroDock(this, window, _runButtonText, _pauseButtonText,
_unpauseButtonText, _conditionsTrueStatusText,
_conditionsFalseStatusText);
SetDockWidgetName(); // Used by OBS to restore position
// Register new dock
@ -770,7 +762,7 @@ void Macro::SetRunButtonText(const std::string &text)
if (!_dock) {
return;
}
_dock->SetRunButtonText(QString::fromStdString(text));
_dock->SetRunButtonText(text);
}
void Macro::SetPauseButtonText(const std::string &text)
@ -779,7 +771,7 @@ void Macro::SetPauseButtonText(const std::string &text)
if (!_dock) {
return;
}
_dock->SetPauseButtonText(QString::fromStdString(text));
_dock->SetPauseButtonText(text);
}
void Macro::SetUnpauseButtonText(const std::string &text)
@ -788,7 +780,7 @@ void Macro::SetUnpauseButtonText(const std::string &text)
if (!_dock) {
return;
}
_dock->SetUnpauseButtonText(QString::fromStdString(text));
_dock->SetUnpauseButtonText(text);
}
void Macro::SetConditionsTrueStatusText(const std::string &text)
@ -797,10 +789,10 @@ void Macro::SetConditionsTrueStatusText(const std::string &text)
if (!_dock) {
return;
}
_dock->SetConditionsTrueText(QString::fromStdString(text));
_dock->SetConditionsTrueText(text);
}
std::string Macro::ConditionsTrueStatusText() const
StringVariable Macro::ConditionsTrueStatusText() const
{
return _conditionsTrueStatusText;
}
@ -811,10 +803,10 @@ void Macro::SetConditionsFalseStatusText(const std::string &text)
if (!_dock) {
return;
}
_dock->SetConditionsFalseText(QString::fromStdString(text));
_dock->SetConditionsFalseText(text);
}
std::string Macro::ConditionsFalseStatusText() const
StringVariable Macro::ConditionsFalseStatusText() const
{
return _conditionsFalseStatusText;
}

View File

@ -2,6 +2,7 @@
#include "macro-action.hpp"
#include "macro-condition.hpp"
#include "macro-ref.hpp"
#include "variable-string.hpp"
#include <QString>
#include <QByteArray>
@ -91,16 +92,16 @@ public:
bool DockHasPauseButton() const { return _dockHasPauseButton; }
void SetDockHasStatusLabel(bool value);
bool DockHasStatusLabel() const { return _dockHasStatusLabel; }
std::string RunButtonText() const { return _runButtonText; }
StringVariable RunButtonText() const { return _runButtonText; }
void SetRunButtonText(const std::string &text);
std::string PauseButtonText() const { return _pauseButtonText; }
StringVariable PauseButtonText() const { return _pauseButtonText; }
void SetPauseButtonText(const std::string &text);
std::string UnpauseButtonText() const { return _unpauseButtonText; }
StringVariable UnpauseButtonText() const { return _unpauseButtonText; }
void SetUnpauseButtonText(const std::string &text);
void SetConditionsTrueStatusText(const std::string &text);
std::string ConditionsTrueStatusText() const;
StringVariable ConditionsTrueStatusText() const;
void SetConditionsFalseStatusText(const std::string &text);
std::string ConditionsFalseStatusText() const;
StringVariable ConditionsFalseStatusText() const;
private:
void SetupHotkeys();
@ -150,15 +151,15 @@ private:
bool _dockHasRunButton = true;
bool _dockHasPauseButton = true;
bool _dockHasStatusLabel = false;
std::string _runButtonText =
StringVariable _runButtonText =
obs_module_text("AdvSceneSwitcher.macroDock.run");
std::string _pauseButtonText =
StringVariable _pauseButtonText =
obs_module_text("AdvSceneSwitcher.macroDock.pause");
std::string _unpauseButtonText =
StringVariable _unpauseButtonText =
obs_module_text("AdvSceneSwitcher.macroDock.unpause");
std::string _conditionsTrueStatusText =
StringVariable _conditionsTrueStatusText =
obs_module_text("AdvSceneSwitcher.macroDock.statusLabel.true");
std::string _conditionsFalseStatusText =
StringVariable _conditionsFalseStatusText =
obs_module_text("AdvSceneSwitcher.macroDock.statusLabel.false");
bool _dockIsFloating = true;
bool _dockIsVisible = false;