mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-04-07 09:45:44 -05:00
Persist collapse / expand state
This commit is contained in:
parent
3fc82df278
commit
fd789b476b
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ protected:
|
|||
private slots:
|
||||
void AnimationFinished();
|
||||
void Collapse(bool collapse);
|
||||
signals:
|
||||
void Collapsed(bool);
|
||||
|
||||
private:
|
||||
void SetupAnimations();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user