diff --git a/src/headers/macro-controls.hpp b/src/headers/macro-controls.hpp index 4e2c0291..a62ed4ff 100644 --- a/src/headers/macro-controls.hpp +++ b/src/headers/macro-controls.hpp @@ -23,6 +23,7 @@ signals: void Down(); private: + bool _visible = false; QPushButton *_add; QPushButton *_remove; QPushButton *_up; diff --git a/src/headers/macro-segment.hpp b/src/headers/macro-segment.hpp index 93d9f30b..97393525 100644 --- a/src/headers/macro-segment.hpp +++ b/src/headers/macro-segment.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include #include class Macro; @@ -46,6 +47,8 @@ protected slots: void Up(); void Down(); void Collapsed(bool); + void ShowControls(); + void HideControls(); signals: void MacroAdded(const QString &name); void MacroRemoved(const QString &name); @@ -67,6 +70,8 @@ protected: MacroEntryControls *_controls; private: + QTimer _enterTimer; + QTimer _leaveTimer; virtual MacroSegment *Data() = 0; }; diff --git a/src/macro-controls.cpp b/src/macro-controls.cpp index d53f627e..1b67179d 100644 --- a/src/macro-controls.cpp +++ b/src/macro-controls.cpp @@ -64,7 +64,11 @@ MacroEntryControls::MacroEntryControls(const int animationDuration, void MacroEntryControls::Show(bool visible) { + if (_visible == visible) { + return; + } _animation->setDirection(visible ? QAbstractAnimation::Forward : QAbstractAnimation::Backward); _animation->start(); + _visible = visible; } diff --git a/src/macro-segment.cpp b/src/macro-segment.cpp index a67224ec..13526676 100644 --- a/src/macro-segment.cpp +++ b/src/macro-segment.cpp @@ -46,6 +46,11 @@ MacroSegmentEdit::MacroSegmentEdit(QWidget *parent) : QWidget(parent) _headerInfo = new QLabel(); _controls = new MacroEntryControls(); + _enterTimer.setSingleShot(true); + _enterTimer.setInterval(1000); + _leaveTimer.setSingleShot(true); + _leaveTimer.setInterval(1000); + QWidget::connect(_section, &Section::Collapsed, this, &MacroSegmentEdit::Collapsed); @@ -78,6 +83,10 @@ MacroSegmentEdit::MacroSegmentEdit(QWidget *parent) : QWidget(parent) &MacroSegmentEdit::Up); QWidget::connect(_controls, &MacroEntryControls::Down, this, &MacroSegmentEdit::Down); + QWidget::connect(&_enterTimer, &QTimer::timeout, this, + &MacroSegmentEdit::ShowControls); + QWidget::connect(&_leaveTimer, &QTimer::timeout, this, + &MacroSegmentEdit::HideControls); } void MacroSegmentEdit::HeaderInfoChanged(const QString &text) @@ -122,16 +131,28 @@ void MacroSegmentEdit::Collapsed(bool collapsed) } } -void MacroSegmentEdit::enterEvent(QEvent *) +void MacroSegmentEdit::ShowControls() { _controls->Show(true); } -void MacroSegmentEdit::leaveEvent(QEvent *) +void MacroSegmentEdit::HideControls() { _controls->Show(false); } +void MacroSegmentEdit::enterEvent(QEvent *) +{ + _enterTimer.start(); + _leaveTimer.stop(); +} + +void MacroSegmentEdit::leaveEvent(QEvent *) +{ + _enterTimer.stop(); + _leaveTimer.start(); +} + void MacroSegmentEdit::SetFocusPolicyOfWidgets() { QList widgets = this->findChildren();