diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp | 169 |
1 files changed, 86 insertions, 83 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp b/SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp index c6823e4..b5b0264 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp @@ -9,10 +9,10 @@ #include <QEvent> #include <QHBoxLayout> #include <QGraphicsDropShadowEffect> -#include <QSequentialAnimationGroup> -#include <QPropertyAnimation> #include <QDebug> #include <QScrollArea> +#include <QToolTip> +#include <QEnterEvent> QHash<QWidget*,WidgetStateIndicator*> WidgetStateIndicator::instances; @@ -54,7 +54,6 @@ void WidgetStateIndicator::initEffects() { initGlowEffects(); initHighlightingEffects(); - initAnimations(); } void WidgetStateIndicator::initGlowEffects() @@ -73,27 +72,6 @@ void WidgetStateIndicator::initHighlightingEffects() highlightingEffect->setEnabled(false); } -void WidgetStateIndicator::initAnimations() -{ - animation = new QSequentialAnimationGroup(this); - animation->setLoopCount(-1); - - // Animation of glow efect - QPropertyAnimation* varAnim = new QPropertyAnimation(glowEffect, "blurRadius"); - varAnim->setStartValue(3.0); - varAnim->setEndValue(14.0); - varAnim->setEasingCurve(QEasingCurve::InOutCubic); - varAnim->setDuration(300); - animation->addAnimation(varAnim); - - varAnim = new QPropertyAnimation(glowEffect, "blurRadius"); - varAnim->setStartValue(14.0); - varAnim->setEndValue(3.0); - varAnim->setEasingCurve(QEasingCurve::InOutCubic); - varAnim->setDuration(300); - animation->addAnimation(varAnim); -} - void WidgetStateIndicator::initPositionMode() { if (dynamic_cast<QGroupBox*>(widget)) @@ -106,8 +84,15 @@ void WidgetStateIndicator::initPositionMode() void WidgetStateIndicator::finalInit() { - label->setFixedSize(label->pixmap()->size()); - labelParent->setFixedSize(label->pixmap()->size()); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) + QPixmap pixmap = label->pixmap(Qt::ReturnByValue); + label->setFixedSize(pixmap.size()); + labelParent->setFixedSize(pixmap.size()); +#else + const QPixmap* pixmap = label->pixmap(); + label->setFixedSize(pixmap->size()); + labelParent->setFixedSize(pixmap->size()); +#endif widgetVisible = widget->isVisible(); labelParent->setVisible(false); } @@ -120,7 +105,6 @@ void WidgetStateIndicator::setMessage(const QString& msg) else message = paraTpl.arg(msg); - label->setToolTip(message); if (!msg.isNull()) label->setCursor(Qt::WhatsThisCursor); else @@ -129,7 +113,7 @@ void WidgetStateIndicator::setMessage(const QString& msg) void WidgetStateIndicator::clearMessage() { - message = QString::null; + message = QString(); label->setToolTip(message); label->unsetCursor(); } @@ -151,13 +135,10 @@ void WidgetStateIndicator::setMode(WidgetStateIndicator::Mode mode) updateMode(); } -void WidgetStateIndicator::show(const QString& msg, bool animated) +void WidgetStateIndicator::show(const QString& msg) { visibilityRequested = true; setMessage(msg); - if (animated && animation->state() != QAbstractAnimation::Running) - animation->start(); - updateVisibility(); } @@ -165,9 +146,6 @@ void WidgetStateIndicator::hide() { visibilityRequested = false; clearMessage(); - if (animation->state() == QAbstractAnimation::Running) - animation->stop(); - updateVisibility(); } @@ -186,28 +164,28 @@ void WidgetStateIndicator::release() deleteLater(); } -void WidgetStateIndicator::info(const QString& msg, bool animated) +void WidgetStateIndicator::info(const QString& msg) { setMode(Mode::INFO); - show(msg, animated); + show(msg); } -void WidgetStateIndicator::warn(const QString& msg, bool animated) +void WidgetStateIndicator::warn(const QString& msg) { setMode(Mode::WARNING); - show(msg, animated); + show(msg); } -void WidgetStateIndicator::error(const QString& msg, bool animated) +void WidgetStateIndicator::error(const QString& msg) { setMode(Mode::ERROR); - show(msg, animated); + show(msg); } -void WidgetStateIndicator::hint(const QString& msg, bool animated) +void WidgetStateIndicator::hint(const QString& msg) { setMode(Mode::HINT); - show(msg, animated); + show(msg); } bool WidgetStateIndicator::exists(QWidget* widget) @@ -226,47 +204,11 @@ WidgetStateIndicator* WidgetStateIndicator::getInstance(QWidget* widget) bool WidgetStateIndicator::eventFilter(QObject* obj, QEvent* ev) { if (obj == widget) - { - switch (ev->type()) - { - case QEvent::Move: - case QEvent::Resize: - case QEvent::Scroll: - updatePosition(); - break; - case QEvent::Show: - widgetVisible = true; - updateVisibility(); - break; - case QEvent::Hide: - widgetVisible = false; - updateVisibility(); - break; - case QEvent::EnabledChange: - updateVisibility(); - break; - default: - break; - } - } + return eventFilterFromWidget(ev); else if (obj == windowParent) - { - switch (ev->type()) - { - case QEvent::ParentChange: - detectWindowParent(); - break; - default: - break; - } - } + return eventFilterFromParentWidget(ev); else if (obj == label) - { - if (ev->type() == QEvent::Enter) - highlightingEffect->setEnabled(true); - else if (ev->type() == QEvent::Leave) - highlightingEffect->setEnabled(false); - } + return eventFilterFromIndicatorLabel(ev); return false; } @@ -328,7 +270,7 @@ void WidgetStateIndicator::updatePositionGroupBox() QFont font = gb->font(); QFontMetrics fm(font); QString txt = gb->title(); - QPoint diff(fm.width(txt), 2); + QPoint diff(fm.horizontalAdvance(txt), 2); labelParent->move(xy + diff); } @@ -390,6 +332,67 @@ bool WidgetStateIndicator::shouldShow() return true; } + +bool WidgetStateIndicator::eventFilterFromWidget(QEvent* ev) +{ + switch (ev->type()) + { + case QEvent::Move: + case QEvent::Resize: + case QEvent::Scroll: + updatePosition(); + break; + case QEvent::Show: + widgetVisible = true; + updateVisibility(); + break; + case QEvent::Hide: + widgetVisible = false; + updateVisibility(); + break; + case QEvent::EnabledChange: + updateVisibility(); + break; + default: + break; + } + return false; +} + +bool WidgetStateIndicator::eventFilterFromParentWidget(QEvent* ev) +{ + switch (ev->type()) + { + case QEvent::ParentChange: + detectWindowParent(); + break; + default: + break; + } + return false; +} + +bool WidgetStateIndicator::eventFilterFromIndicatorLabel(QEvent* ev) +{ + switch (ev->type()) + { + case QEvent::Enter: + { + highlightingEffect->setEnabled(true); + QEnterEvent* e = dynamic_cast<QEnterEvent*>(ev); + QToolTip::showText(e->globalPos(), message); + break; + } + case QEvent::Leave: + highlightingEffect->setEnabled(false); + QToolTip::hideText(); + break; + default: + break; + } + return false; +} + WidgetStateIndicator::PositionMode WidgetStateIndicator::getPositionMode() const { return positionMode; |
