Persist collapse / expand state

This commit is contained in:
WarmUpTill 2021-07-17 23:56:32 +02:00 committed by WarmUpTill
parent 3fc82df278
commit fd789b476b
9 changed files with 66 additions and 31 deletions

View File

@ -40,9 +40,8 @@ class MacroActionEdit : public QWidget {
public:
MacroActionEdit(QWidget *parent = nullptr,
std::shared_ptr<MacroAction> * = 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);

View File

@ -41,11 +41,10 @@ class MacroConditionEdit : public QWidget {
public:
MacroConditionEdit(QWidget *parent = nullptr,
std::shared_ptr<MacroCondition> * = 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);

View File

@ -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 {

View File

@ -23,6 +23,8 @@ protected:
private slots:
void AnimationFinished();
void Collapse(bool collapse);
signals:
void Collapsed(bool);
private:
void SetupAnimations();

View File

@ -59,8 +59,8 @@ static inline void populateActionSelection(QComboBox *list)
MacroActionEdit::MacroActionEdit(QWidget *parent,
std::shared_ptr<MacroAction> *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);

View File

@ -87,7 +87,7 @@ static inline void populateConditionSelection(QComboBox *list)
MacroConditionEdit::MacroConditionEdit(
QWidget *parent, std::shared_ptr<MacroCondition> *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<int>(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);

View File

@ -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);

View File

@ -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<int>(_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<int>(_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<LogicType>(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;
}

View File

@ -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)