aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiguel Gómez <magomez@igalia.com>2010-08-26 12:59:17 +0200
committerDaniel d'Andrada <daniel.dandrada@nokia.com>2010-09-13 13:46:39 +0300
commit5e997484f91d17cef5c42e2a5a954337c2924b96 (patch)
tree897ec840617d7aef506d6d238cb83c50b9f74cab /src
parent37d4588b959c4d7683f49c325332777e8fad802d (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.cpp58
-rw-r--r--src/views/mpositionindicatorview.h3
-rw-r--r--src/views/mpositionindicatorview_p.h7
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