aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/widgetstateindicator.cpp169
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;