diff --git a/src/headers/macro-action-edit.hpp b/src/headers/macro-action-edit.hpp index 9b857d8c..863c0889 100644 --- a/src/headers/macro-action-edit.hpp +++ b/src/headers/macro-action-edit.hpp @@ -40,9 +40,8 @@ class MacroActionEdit : public QWidget { public: MacroActionEdit(QWidget *parent = nullptr, std::shared_ptr * = nullptr, - const std::string &id = "scene_switch", - bool startCollapsed = false); - void UpdateEntryData(const std::string &id, bool collapse); + const std::string &id = "scene_switch"); + void UpdateEntryData(const std::string &id); private slots: void ActionSelectionChanged(const QString &text); @@ -51,6 +50,7 @@ private slots: void Remove(); void Up(); void Down(); + void Collapsed(bool); signals: void MacroAdded(const QString &name); void MacroRemoved(const QString &name); diff --git a/src/headers/macro-condition-edit.hpp b/src/headers/macro-condition-edit.hpp index 6ea52dad..ab65b2f9 100644 --- a/src/headers/macro-condition-edit.hpp +++ b/src/headers/macro-condition-edit.hpp @@ -41,11 +41,10 @@ class MacroConditionEdit : public QWidget { public: MacroConditionEdit(QWidget *parent = nullptr, std::shared_ptr * = nullptr, - const std::string &id = "scene", bool root = true, - bool startCollapsed = false); + const std::string &id = "scene", bool root = true); bool IsRootNode(); void SetRootNode(bool); - void UpdateEntryData(const std::string &id, bool collapse); + void UpdateEntryData(const std::string &id); private slots: void LogicSelectionChanged(int idx); @@ -58,6 +57,7 @@ private slots: void Remove(); void Up(); void Down(); + void Collapsed(bool); signals: void MacroAdded(const QString &name); void MacroRemoved(const QString &name); diff --git a/src/headers/macro.hpp b/src/headers/macro.hpp index b7d69a00..34e3c8f4 100644 --- a/src/headers/macro.hpp +++ b/src/headers/macro.hpp @@ -40,9 +40,14 @@ class MacroSegment { public: void SetIndex(int idx) { _idx = idx; } int GetIndex() { return _idx; } + void SetCollapsed(bool collapsed) { _collapsed = collapsed; } + bool GetCollapsed() { return _collapsed; } + virtual bool Save(obs_data_t *obj) = 0; + virtual bool Load(obs_data_t *obj) = 0; protected: int _idx; + bool _collapsed = false; }; class MacroCondition : public MacroSegment { diff --git a/src/headers/section.hpp b/src/headers/section.hpp index b3a1ef2b..8eb27112 100644 --- a/src/headers/section.hpp +++ b/src/headers/section.hpp @@ -23,6 +23,8 @@ protected: private slots: void AnimationFinished(); void Collapse(bool collapse); +signals: + void Collapsed(bool); private: void SetupAnimations(); diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp index 709056bd..f4369875 100644 --- a/src/macro-action-edit.cpp +++ b/src/macro-action-edit.cpp @@ -59,8 +59,8 @@ static inline void populateActionSelection(QComboBox *list) MacroActionEdit::MacroActionEdit(QWidget *parent, std::shared_ptr *entryData, - const std::string &id, bool startCollapsed) - : QWidget(parent) + const std::string &id) + : QWidget(parent), _entryData(entryData) { _actionSelection = new QComboBox(); _section = new Section(300); @@ -70,6 +70,8 @@ MacroActionEdit::MacroActionEdit(QWidget *parent, QWidget::connect(_actionSelection, SIGNAL(currentTextChanged(const QString &)), this, SLOT(ActionSelectionChanged(const QString &))); + QWidget::connect(_section, &Section::Collapsed, this, + &MacroActionEdit::Collapsed); // Macro signals QWidget::connect(parent, SIGNAL(MacroAdded(const QString &)), this, SIGNAL(MacroAdded(const QString &))); @@ -107,7 +109,7 @@ MacroActionEdit::MacroActionEdit(QWidget *parent, setLayout(mainLayout); _entryData = entryData; - UpdateEntryData(id, startCollapsed); + UpdateEntryData(id); _loading = false; } @@ -140,7 +142,7 @@ void MacroActionEdit::ActionSelectionChanged(const QString &text) _section->SetContent(widget, false); } -void MacroActionEdit::UpdateEntryData(const std::string &id, bool collapse) +void MacroActionEdit::UpdateEntryData(const std::string &id) { _actionSelection->setCurrentText( obs_module_text(MacroActionFactory::GetActionName(id).c_str())); @@ -149,7 +151,7 @@ void MacroActionEdit::UpdateEntryData(const std::string &id, bool collapse) this, SLOT(HeaderInfoChanged(const QString &))); HeaderInfoChanged( QString::fromStdString((*_entryData)->GetShortDesc())); - _section->SetContent(widget, collapse); + _section->SetContent(widget, (*_entryData)->GetCollapsed()); } void MacroActionEdit::HeaderInfoChanged(const QString &text) @@ -187,6 +189,13 @@ void MacroActionEdit::Down() } } +void MacroActionEdit::Collapsed(bool collapsed) +{ + if (_entryData) { + (*_entryData)->SetCollapsed(collapsed); + } +} + void AdvSceneSwitcher::AddMacroAction(int idx) { auto macro = getSelectedMacro(); @@ -277,8 +286,8 @@ void AdvSceneSwitcher::SwapActions(Macro *m, int pos1, int pos2) auto item2 = ui->macroEditActionLayout->takeAt(pos2 - 1); deleteLayoutItem(item1); deleteLayoutItem(item2); - auto widget1 = new MacroActionEdit(this, &(*a1), (*a1)->GetId(), false); - auto widget2 = new MacroActionEdit(this, &(*a2), (*a2)->GetId(), false); + auto widget1 = new MacroActionEdit(this, &(*a1), (*a1)->GetId()); + auto widget2 = new MacroActionEdit(this, &(*a2), (*a2)->GetId()); ConnectControlSignals(widget1); ConnectControlSignals(widget2); ui->macroEditActionLayout->insertWidget(pos1, widget1); diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp index 4e577387..cc53bfd3 100644 --- a/src/macro-condition-edit.cpp +++ b/src/macro-condition-edit.cpp @@ -87,7 +87,7 @@ static inline void populateConditionSelection(QComboBox *list) MacroConditionEdit::MacroConditionEdit( QWidget *parent, std::shared_ptr *entryData, - const std::string &id, bool root, bool startCollapsed) + const std::string &id, bool root) : QWidget(parent), _isRoot(root), _entryData(entryData) { _logicSelection = new QComboBox(); @@ -99,6 +99,8 @@ MacroConditionEdit::MacroConditionEdit( QWidget::connect(_logicSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(LogicSelectionChanged(int))); + QWidget::connect(_section, &Section::Collapsed, this, + &MacroConditionEdit::Collapsed); QWidget::connect(_conditionSelection, SIGNAL(currentTextChanged(const QString &)), this, SLOT(ConditionSelectionChanged(const QString &))); @@ -149,7 +151,7 @@ MacroConditionEdit::MacroConditionEdit( mainLayout->addWidget(_controls); setLayout(mainLayout); - UpdateEntryData(id, startCollapsed); + UpdateEntryData(id); _loading = false; } @@ -192,7 +194,7 @@ void MacroConditionEdit::SetRootNode(bool root) populateLogicSelection(_logicSelection, root); } -void MacroConditionEdit::UpdateEntryData(const std::string &id, bool collapse) +void MacroConditionEdit::UpdateEntryData(const std::string &id) { _conditionSelection->setCurrentText(obs_module_text( MacroConditionFactory::GetConditionName(id).c_str())); @@ -209,7 +211,7 @@ void MacroConditionEdit::UpdateEntryData(const std::string &id, bool collapse) _logicSelection->setCurrentIndex(static_cast(logic) - logic_root_offset); } - _section->SetContent(widget, collapse); + _section->SetContent(widget, (*_entryData)->GetCollapsed()); _dur->setVisible(MacroConditionFactory::UsesDurationConstraint(id)); auto constraint = (*_entryData)->GetDurationConstraint(); @@ -306,6 +308,13 @@ void MacroConditionEdit::Down() } } +void MacroConditionEdit::Collapsed(bool collapsed) +{ + if (_entryData) { + (*_entryData)->SetCollapsed(collapsed); + } +} + void AdvSceneSwitcher::AddMacroCondition(int idx) { auto macro = getSelectedMacro(); @@ -417,10 +426,10 @@ void AdvSceneSwitcher::SwapConditions(Macro *m, int pos1, int pos2) auto item2 = ui->macroEditConditionLayout->takeAt(pos2 - 1); deleteLayoutItem(item1); deleteLayoutItem(item2); - auto widget1 = new MacroConditionEdit(this, &(*c1), (*c1)->GetId(), - root, false); - auto widget2 = new MacroConditionEdit(this, &(*c2), (*c2)->GetId(), - false, false); + auto widget1 = + new MacroConditionEdit(this, &(*c1), (*c1)->GetId(), root); + auto widget2 = + new MacroConditionEdit(this, &(*c2), (*c2)->GetId(), false); ConnectControlSignals(widget1); ConnectControlSignals(widget2); ui->macroEditConditionLayout->insertWidget(pos1, widget1); diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp index 8e16cd26..fc350926 100644 --- a/src/macro-tab.cpp +++ b/src/macro-tab.cpp @@ -8,9 +8,6 @@ static QMetaObject::Connection addPulse; -const auto conditionsCollapseThreshold = 4; -const auto actionsCollapseThreshold = 4; - bool macroNameExists(std::string name) { return !!GetMacroByName(name.c_str()); @@ -175,21 +172,18 @@ void AdvSceneSwitcher::SetEditMacro(Macro &m) clearLayout(ui->macroEditConditionLayout); clearLayout(ui->macroEditActionLayout); - bool collapse = m.Conditions().size() > conditionsCollapseThreshold; bool root = true; for (auto &c : m.Conditions()) { - auto newEntry = new MacroConditionEdit(this, &c, c->GetId(), - root, collapse); + auto newEntry = + new MacroConditionEdit(this, &c, c->GetId(), root); ConnectControlSignals(newEntry); ui->macroEditConditionLayout->addWidget(newEntry); ui->macroEditConditionHelp->setVisible(false); root = false; } - collapse = m.Actions().size() > actionsCollapseThreshold; for (auto &a : m.Actions()) { - auto newEntry = - new MacroActionEdit(this, &a, a->GetId(), collapse); + auto newEntry = new MacroActionEdit(this, &a, a->GetId()); ConnectControlSignals(newEntry); ui->macroEditActionLayout->addWidget(newEntry); ui->macroEditActionHelp->setVisible(false); diff --git a/src/macro.cpp b/src/macro.cpp index c9bafcec..382a63df 100644 --- a/src/macro.cpp +++ b/src/macro.cpp @@ -383,8 +383,21 @@ void Macro::SetHotkeysDesc() hotkeyDesc.toStdString().c_str()); } +bool MacroSegment::Save(obs_data_t *obj) +{ + obs_data_set_bool(obj, "collapsed", static_cast(_collapsed)); + return true; +} + +bool MacroSegment::Load(obs_data_t *obj) +{ + _collapsed = obs_data_get_bool(obj, "collapsed"); + return true; +} + bool MacroCondition::Save(obs_data_t *obj) { + MacroSegment::Save(obj); obs_data_set_string(obj, "id", GetId().c_str()); obs_data_set_int(obj, "logic", static_cast(_logic)); _duration.Save(obj); @@ -393,6 +406,7 @@ bool MacroCondition::Save(obs_data_t *obj) bool MacroCondition::Load(obs_data_t *obj) { + MacroSegment::Load(obj); _logic = static_cast(obs_data_get_int(obj, "logic")); _duration.Load(obj); return true; @@ -425,13 +439,14 @@ void MacroCondition::SetDuration(double seconds) bool MacroAction::Save(obs_data_t *obj) { + MacroSegment::Save(obj); obs_data_set_string(obj, "id", GetId().c_str()); return true; } bool MacroAction::Load(obs_data_t *obj) { - UNUSED_PARAMETER(obj); + MacroSegment::Load(obj); return true; } diff --git a/src/section.cpp b/src/section.cpp index f38fa63a..11e265d0 100644 --- a/src/section.cpp +++ b/src/section.cpp @@ -51,6 +51,7 @@ void Section::Collapse(bool collapse) _transitioning = true; _collapsed = collapse; _toggleAnimation->start(); + emit Collapsed(collapse); } void Section::SetContent(QWidget *w, bool collapsed)