diff options
author | Miguel Gómez <magomez@igalia.com> | 2010-08-26 12:59:17 +0200 |
---|---|---|
committer | Daniel d'Andrada <daniel.dandrada@nokia.com> | 2010-09-13 13:46:39 +0300 |
commit | 5e997484f91d17cef5c42e2a5a954337c2924b96 (patch) | |
tree | 897ec840617d7aef506d6d238cb83c50b9f74cab /src | |
parent | 37d4588b959c4d7683f49c325332777e8fad802d (diff) |
Fixes: NB#186723 - Scroll indicator doesn't appear in scrollable views
RevBy: Michał Guminiak, Daniel d'Andrada
Details:
Use controller's displayEntered() and displayExited() to handle visibility.
When exiting the display, the indicator is kept visible so when entering the
display again the fade in animation doesn't happen.
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 |