diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/views/mpositionindicatorview.cpp | 58 | ||||
-rw-r--r-- | src/views/mpositionindicatorview.h | 3 | ||||
-rw-r--r-- | src/views/mpositionindicatorview_p.h | 7 |
3 files changed, 59 insertions, 9 deletions
diff --git a/src/views/mpositionindicatorview.cpp b/src/views/mpositionindicatorview.cpp index 5589184d..5ff00afc 100644 --- a/src/views/mpositionindicatorview.cpp +++ b/src/views/mpositionindicatorview.cpp @@ -34,7 +34,8 @@ MPositionIndicatorViewPrivate::MPositionIndicatorViewPrivate() : controller(0), hideTimer(new QTimer()), - visible(false) + visible(false), + onDisplay(false) { } @@ -43,16 +44,45 @@ MPositionIndicatorViewPrivate::~MPositionIndicatorViewPrivate() delete this->hideTimer; } +void MPositionIndicatorViewPrivate::init(MPositionIndicator *controller) +{ + Q_Q(MPositionIndicatorView); + + this->controller = controller; + hideTimer->setSingleShot(true); + fadeAnimation = new QPropertyAnimation(controller, "opacity", q); + + q->connect(hideTimer, SIGNAL(timeout()), SLOT(hide())); + q->connect(controller, SIGNAL(displayEntered()), SLOT(_q_displayEntered())); + q->connect(controller, SIGNAL(displayExited()), SLOT(_q_displayExited())); +} + +void MPositionIndicatorViewPrivate::_q_displayEntered() +{ + Q_Q(MPositionIndicatorView); + + onDisplay = true; + hideTimer->start(q->style()->hideTimeout()); +} + +void MPositionIndicatorViewPrivate::_q_displayExited() +{ + Q_Q(MPositionIndicatorView); + + /* stop everything and keep indicator visible for next use */ + onDisplay = false; + hideTimer->stop(); + fadeAnimation->stop(); + controller->setProperty("opacity", 1.0f); + visible = true; + q->update(); +} + MPositionIndicatorView::MPositionIndicatorView(MPositionIndicator *controller) : MWidgetView(* new MPositionIndicatorViewPrivate, controller) { Q_D(MPositionIndicatorView); - d->controller = controller; - - connect(d->hideTimer, SIGNAL(timeout()), this, SLOT(hide())); - d->hideTimer->setSingleShot(true); - - d->fadeAnimation = new QPropertyAnimation(controller, "opacity", this); + d->init(controller); } MPositionIndicatorView::~MPositionIndicatorView() @@ -146,17 +176,25 @@ void MPositionIndicatorView::drawContents(QPainter *painter, const QStyleOptionG void MPositionIndicatorView::updateData(const QList<const char *>& modifications) { + Q_D(MPositionIndicatorView); + MWidgetView::updateData(modifications); - resetHideTimer(); + if (d->onDisplay) { + resetHideTimer(); + } update(); } void MPositionIndicatorView::setupModel() { + Q_D(MPositionIndicatorView); + MWidgetView::setupModel(); - resetHideTimer(); + if (d->onDisplay) { + resetHideTimer(); + } update(); } @@ -205,3 +243,5 @@ void MPositionIndicatorView::resetHideTimer() } M_REGISTER_VIEW_NEW(MPositionIndicatorView, MPositionIndicator) + +#include "moc_mpositionindicatorview.cpp" diff --git a/src/views/mpositionindicatorview.h b/src/views/mpositionindicatorview.h index 4ad46e3a..350434f0 100644 --- a/src/views/mpositionindicatorview.h +++ b/src/views/mpositionindicatorview.h @@ -90,6 +90,9 @@ private: Q_DISABLE_COPY(MPositionIndicatorView) Q_DECLARE_PRIVATE(MPositionIndicatorView) + Q_PRIVATE_SLOT(d_func(), void _q_displayEntered()) + Q_PRIVATE_SLOT(d_func(), void _q_displayExited()) + friend class Ut_MPositionIndicatorView; }; diff --git a/src/views/mpositionindicatorview_p.h b/src/views/mpositionindicatorview_p.h index 6ccdbf8a..59a2f62f 100644 --- a/src/views/mpositionindicatorview_p.h +++ b/src/views/mpositionindicatorview_p.h @@ -29,15 +29,22 @@ class QPropertyAnimation; class MPositionIndicatorViewPrivate : public MWidgetViewPrivate { + Q_DECLARE_PUBLIC(MPositionIndicatorView) + public: MPositionIndicatorViewPrivate(); + void init(MPositionIndicator *controller); virtual ~MPositionIndicatorViewPrivate(); MPositionIndicator *controller; QTimer *hideTimer; bool visible; + bool onDisplay; QPropertyAnimation *fadeAnimation; + + void _q_displayEntered(); + void _q_displayExited(); }; #endif |