diff --git a/plugins/base/macro-condition-transition.cpp b/plugins/base/macro-condition-transition.cpp index 0a0725e4..2d8ce332 100644 --- a/plugins/base/macro-condition-transition.cpp +++ b/plugins/base/macro-condition-transition.cpp @@ -407,15 +407,16 @@ void MacroConditionTransitionEdit::SetWidgetVisibility() _entryData->_condition == MacroConditionTransition::Condition::DURATION); - bool addCurrent = _entryData->_condition == - MacroConditionTransition::Condition::DURATION; - bool addAny = _entryData->_condition == - MacroConditionTransition::Condition::STARTED || - _entryData->_condition == - MacroConditionTransition::Condition::ENDED || - _entryData->_condition == - MacroConditionTransition::Condition::VIDEO_ENDED; - _transitions->Repopulate(addCurrent, addAny); + _transitions->EnableCurrentEntry( + _entryData->_condition == + MacroConditionTransition::Condition::DURATION); + _transitions->EnableAnyEntry( + _entryData->_condition == + MacroConditionTransition::Condition::STARTED || + _entryData->_condition == + MacroConditionTransition::Condition::ENDED || + _entryData->_condition == + MacroConditionTransition::Condition::VIDEO_ENDED); } void MacroConditionTransitionEdit::UpdateEntryData() diff --git a/plugins/base/utils/transition-selection.cpp b/plugins/base/utils/transition-selection.cpp index 7713a003..09792c14 100644 --- a/plugins/base/utils/transition-selection.cpp +++ b/plugins/base/utils/transition-selection.cpp @@ -72,7 +72,9 @@ std::string TransitionSelection::ToString() const TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent, bool current, bool any) : FilterComboBox(parent, - obs_module_text("AdvSceneSwitcher.selectTransition")) + obs_module_text("AdvSceneSwitcher.selectTransition")), + _addCurrent(current), + _addAny(any) { setDuplicatesEnabled(true); PopulateTransitionSelection(this, current, any, false); @@ -81,7 +83,7 @@ TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent, this, SLOT(SelectionChanged(const QString &))); } -void TransitionSelectionWidget::SetTransition(TransitionSelection &t) +void TransitionSelectionWidget::SetTransition(const TransitionSelection &t) { // Order of entries // 1. Any transition @@ -106,19 +108,35 @@ void TransitionSelectionWidget::SetTransition(TransitionSelection &t) } } -void TransitionSelectionWidget::Repopulate(bool current, bool any) +void TransitionSelectionWidget::EnableCurrentEntry(bool enable) { - { - const QSignalBlocker blocker(this); - clear(); - PopulateTransitionSelection(this, current, any); - setCurrentIndex(-1); - } - TransitionSelection t; - emit TransitionChanged(t); + _addCurrent = enable; + Populate(); } -static bool isFirstEntry(QComboBox *l, QString name, int idx) +void TransitionSelectionWidget::EnableAnyEntry(bool enable) +{ + _addAny = enable; + Populate(); +} + +void TransitionSelectionWidget::showEvent(QShowEvent *event) +{ + FilterComboBox::showEvent(event); + const auto selection = GetCurrentSelection(); + const QSignalBlocker b(this); + Populate(); + SetTransition(selection); +} + +void TransitionSelectionWidget::Populate() +{ + const QSignalBlocker blocker(this); + clear(); + PopulateTransitionSelection(this, _addCurrent, _addAny); +} + +static bool isFirstEntry(const QComboBox *l, QString name, int idx) { for (auto i = l->count() - 1; i >= 0; i--) { if (l->itemText(i) == name) { @@ -130,7 +148,27 @@ static bool isFirstEntry(QComboBox *l, QString name, int idx) return false; } -bool TransitionSelectionWidget::IsCurrentTransitionSelected(const QString &name) +TransitionSelection TransitionSelectionWidget::GetCurrentSelection() const +{ + TransitionSelection result; + const auto text = currentText(); + auto transition = GetWeakTransitionByQString(text); + if (transition) { + result._type = TransitionSelection::Type::TRANSITION; + result._transition = transition; + } else { + if (IsCurrentTransitionSelected(text)) { + result._type = TransitionSelection::Type::CURRENT; + } + if (IsAnyTransitionSelected(text)) { + result._type = TransitionSelection::Type::ANY; + } + } + return result; +} + +bool TransitionSelectionWidget::IsCurrentTransitionSelected( + const QString &name) const { if (name == QString::fromStdString((obs_module_text( "AdvSceneSwitcher.currentTransition")))) { @@ -139,7 +177,8 @@ bool TransitionSelectionWidget::IsCurrentTransitionSelected(const QString &name) return false; } -bool TransitionSelectionWidget::IsAnyTransitionSelected(const QString &name) +bool TransitionSelectionWidget::IsAnyTransitionSelected( + const QString &name) const { if (name == QString::fromStdString((obs_module_text( "AdvSceneSwitcher.anyTransition")))) { @@ -148,25 +187,9 @@ bool TransitionSelectionWidget::IsAnyTransitionSelected(const QString &name) return false; } -void TransitionSelectionWidget::SelectionChanged(const QString &name) +void TransitionSelectionWidget::SelectionChanged(const QString &) { - TransitionSelection t; - auto transition = GetWeakTransitionByQString(name); - if (transition) { - t._type = TransitionSelection::Type::TRANSITION; - t._transition = transition; - } - - if (!transition) { - if (IsCurrentTransitionSelected(name)) { - t._type = TransitionSelection::Type::CURRENT; - } - if (IsAnyTransitionSelected(name)) { - t._type = TransitionSelection::Type::ANY; - } - } - - emit TransitionChanged(t); + emit TransitionChanged(GetCurrentSelection()); } } // namespace advss diff --git a/plugins/base/utils/transition-selection.hpp b/plugins/base/utils/transition-selection.hpp index 15790a36..f77e319f 100644 --- a/plugins/base/utils/transition-selection.hpp +++ b/plugins/base/utils/transition-selection.hpp @@ -34,8 +34,13 @@ class TransitionSelectionWidget : public FilterComboBox { public: TransitionSelectionWidget(QWidget *parent, bool current = true, bool any = false); - void SetTransition(TransitionSelection &); - void Repopulate(bool current, bool any); + void SetTransition(const TransitionSelection &); + void EnableCurrentEntry(bool enable); + void EnableAnyEntry(bool enable); + +protected: + void showEvent(QShowEvent *event) override; + signals: void TransitionChanged(const TransitionSelection &); @@ -43,8 +48,13 @@ private slots: void SelectionChanged(const QString &name); private: - bool IsCurrentTransitionSelected(const QString &name); - bool IsAnyTransitionSelected(const QString &name); + void Populate(); + TransitionSelection GetCurrentSelection() const; + bool IsCurrentTransitionSelected(const QString &name) const; + bool IsAnyTransitionSelected(const QString &name) const; + + bool _addCurrent; + bool _addAny; }; } // namespace advss