aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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