Fade out segment controls which will likely not be needed

This was done to give some hints which controls will likely need to be
used to avoid mistakenly clicking on the action controls when editing
conditions.
This commit is contained in:
WarmUpTill
2022-02-25 23:08:35 +01:00
committed by WarmUpTill
parent ae13a68cae
commit 4253c99cf2
4 changed files with 82 additions and 0 deletions

View File

@@ -8,6 +8,8 @@
#include <QColor>
#include <QMenu>
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
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<QGraphicsOpacityEffect *>(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();
}
}