mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-27 03:36:00 -05:00
Rework TransitionSelectionWidget to support widget caching
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user