Add macro condition "Macro" (previously "Count")

The macro condition "Macro" contains the condition type previously named
"Count" and also add the options to check the condition state of other
macros.

This allows nesting of macro conditions.
For example the following can now be configured using this new option:

"If (scene 1 or scene 2 or scene 3 is active) for at least x amount of
time"
This commit is contained in:
WarmUpTill
2021-06-12 18:54:34 +02:00
committed by WarmUpTill
parent 056e7ef737
commit a7e03245bd
3 changed files with 215 additions and 69 deletions

View File

@@ -6,13 +6,18 @@
#include <QLabel>
#include <QTimer>
enum class MacroConditionMacroType {
COUNT,
STATE,
};
enum class CounterCondition {
BELOW,
ABOVE,
EQUAL,
};
class MacroConditionCounter : public MacroRefCondition {
class MacroConditionMacro : public MacroRefCondition {
public:
bool CheckCondition();
bool Save(obs_data_t *obj);
@@ -20,36 +25,41 @@ public:
std::string GetId() { return id; };
static std::shared_ptr<MacroCondition> Create()
{
return std::make_shared<MacroConditionCounter>();
return std::make_shared<MacroConditionMacro>();
}
CounterCondition _condition = CounterCondition::BELOW;
MacroConditionMacroType _type = MacroConditionMacroType::STATE;
CounterCondition _counterCondition = CounterCondition::BELOW;
int _count = 0;
private:
bool CheckCountCondition();
bool CheckStateCondition();
static bool _registered;
static const std::string id;
};
class MacroConditionCounterEdit : public QWidget {
class MacroConditionMacroEdit : public QWidget {
Q_OBJECT
public:
MacroConditionCounterEdit(
MacroConditionMacroEdit(
QWidget *parent,
std::shared_ptr<MacroConditionCounter> cond = nullptr);
std::shared_ptr<MacroConditionMacro> cond = nullptr);
void UpdateEntryData();
static QWidget *Create(QWidget *parent,
std::shared_ptr<MacroCondition> cond)
{
return new MacroConditionCounterEdit(
return new MacroConditionMacroEdit(
parent,
std::dynamic_pointer_cast<MacroConditionCounter>(cond));
std::dynamic_pointer_cast<MacroConditionMacro>(cond));
}
private slots:
void MacroChanged(const QString &text);
void MacroRemove(const QString &name);
void TypeChanged(int type);
void CountChanged(int value);
void ConditionChanged(int cond);
void ResetClicked();
@@ -57,14 +67,20 @@ private slots:
protected:
MacroSelection *_macros;
QComboBox *_conditions;
QComboBox *_types;
QComboBox *_counterConditions;
QSpinBox *_count;
QLabel *_currentCount;
QPushButton *_resetCount;
QHBoxLayout *_settingsLine1;
QHBoxLayout *_settingsLine2;
std::unique_ptr<QTimer> _timer;
std::shared_ptr<MacroConditionCounter> _entryData;
std::shared_ptr<MacroConditionMacro> _entryData;
private:
void ClearLayouts();
void SetupStateWidgets();
void SetupCountWidgets();
void ResetTimer();
bool _loading = true;
};