diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index e401898a..67bf60c5 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -153,6 +153,11 @@ public slots: void RemoveMacroCondition(int idx); void MoveMacroConditionUp(int idx); void MoveMacroConditionDown(int idx); + void FadeOutActionControls(); + void FadeOutConditionControls(); + void ResetOpacityActionControls(); + void ResetOpacityConditionControls(); + void HighlightControls(); void HighlightMatchedMacros(); void MacroDragDropReorder(QModelIndex, int, int, QModelIndex, int); diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp index 2bb301a8..0278ef1c 100644 --- a/src/macro-action-edit.cpp +++ b/src/macro-action-edit.cpp @@ -322,4 +322,5 @@ void AdvSceneSwitcher::MacroActionSelectionChanged(int idx) currentActionIdx = idx; } currentConditionIdx = -1; + HighlightControls(); } diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp index 2053c453..8c308afe 100644 --- a/src/macro-condition-edit.cpp +++ b/src/macro-condition-edit.cpp @@ -464,4 +464,5 @@ void AdvSceneSwitcher::MacroConditionSelectionChanged(int idx) currentConditionIdx = idx; } currentActionIdx = -1; + HighlightControls(); } diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp index 3721c63e..bc49cf8f 100644 --- a/src/macro-tab.cpp +++ b/src/macro-tab.cpp @@ -8,6 +8,8 @@ #include #include +#include +#include static QTimer highlightMatchTimer; static QMetaObject::Connection addPulse; @@ -312,6 +314,7 @@ void AdvSceneSwitcher::SetEditMacro(Macro &m) currentActionIdx = -1; currentConditionIdx = -1; + HighlightControls(); } void AdvSceneSwitcher::HighlightAction(int idx) @@ -636,3 +639,75 @@ void AdvSceneSwitcher::DeleteMacroSegementHotkey() RemoveMacroCondition(currentConditionIdx); } } + +void fade(QWidget *widget, bool fadeOut) +{ + auto curEffect = widget->graphicsEffect(); + if (curEffect) { + auto curOpacity = + dynamic_cast(curEffect); + if (curOpacity && ((fadeOut && curOpacity->opacity() == 0.3) || + (!fadeOut && curOpacity->opacity() == 1))) { + return; + } + } else if (!fadeOut) { + return; + } + + QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect(); + widget->setGraphicsEffect(opacityEffect); + QPropertyAnimation *animation = + new QPropertyAnimation(opacityEffect, "opacity"); + animation->setDuration(350); + animation->setStartValue(fadeOut ? 1 : 0.3); + animation->setEndValue(fadeOut ? .3 : 1); + animation->setEasingCurve(QEasingCurve::OutQuint); + animation->start(QPropertyAnimation::DeleteWhenStopped); +} + +void AdvSceneSwitcher::FadeOutActionControls() +{ + fade(ui->actionAdd, true); + fade(ui->actionRemove, true); + fade(ui->actionUp, true); + fade(ui->actionDown, true); +} + +void AdvSceneSwitcher::FadeOutConditionControls() +{ + fade(ui->conditionAdd, true); + fade(ui->conditionRemove, true); + fade(ui->conditionUp, true); + fade(ui->conditionDown, true); +} + +void AdvSceneSwitcher::ResetOpacityActionControls() +{ + fade(ui->actionAdd, false); + fade(ui->actionRemove, false); + fade(ui->actionUp, false); + fade(ui->actionDown, false); +} + +void AdvSceneSwitcher::ResetOpacityConditionControls() +{ + fade(ui->conditionAdd, false); + fade(ui->conditionRemove, false); + fade(ui->conditionUp, false); + fade(ui->conditionDown, false); +} + +void AdvSceneSwitcher::HighlightControls() +{ + if ((currentActionIdx == -1 && currentConditionIdx == -1) || + (currentActionIdx != -1 && currentConditionIdx != -1)) { + ResetOpacityActionControls(); + ResetOpacityConditionControls(); + } else if (currentActionIdx != -1) { + FadeOutConditionControls(); + ResetOpacityActionControls(); + } else { + FadeOutActionControls(); + ResetOpacityConditionControls(); + } +}