diff options
author | Ulf Hermann <[email protected]> | 2015-05-18 13:13:39 +0200 |
---|---|---|
committer | Ulf Hermann <[email protected]> | 2015-05-18 12:35:29 +0000 |
commit | 469ec258356fbc750165672b76820b171848df78 (patch) | |
tree | a02b1fc7bed2d2241ef8e96b56cee18328c965cc | |
parent | ef09282c2277865c67a52f8709c475d877b61712 (diff) |
Timeline: Expose the "moving" state of the zoom control window
This is very handy for testing.
Change-Id: If07efebdc3da027d6f6a3b6d3a421bdb71a51e11
Reviewed-by: Joerg Bornemann <[email protected]>
-rw-r--r-- | src/libs/timeline/timelinezoomcontrol.cpp | 19 | ||||
-rw-r--r-- | src/libs/timeline/timelinezoomcontrol.h | 4 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/libs/timeline/timelinezoomcontrol.cpp b/src/libs/timeline/timelinezoomcontrol.cpp index cd7f164375d..50e59a8c84e 100644 --- a/src/libs/timeline/timelinezoomcontrol.cpp +++ b/src/libs/timeline/timelinezoomcontrol.cpp @@ -47,6 +47,8 @@ void TimelineZoomControl::clear() bool changeRange = (m_rangeStart != -1 || m_rangeEnd != -1); setWindowLocked(false); + if (changeWindow && !m_timer.isActive()) + emit windowMovingChanged(true); m_traceStart = m_traceEnd = m_windowStart = m_windowEnd = m_rangeStart = m_rangeEnd = -1; if (changeTrace) @@ -55,6 +57,7 @@ void TimelineZoomControl::clear() if (changeWindow) { emit windowChanged(-1, -1); m_timer.stop(); + emit windowMovingChanged(false); } else { QTC_ASSERT(!m_timer.isActive(), m_timer.stop()); } @@ -80,7 +83,10 @@ void TimelineZoomControl::setRange(qint64 start, qint64 end) { Q_ASSERT(start <= end); if (m_rangeStart != start || m_rangeEnd != end) { - m_timer.stop(); + if (m_timer.isActive()) { + m_timer.stop(); + emit windowMovingChanged(false); + } m_rangeStart = start; m_rangeEnd = end; rebuildWindow(); @@ -136,8 +142,16 @@ void TimelineZoomControl::rebuildWindow() m_timer.start(500); } if (oldWindowStart != m_windowStart || oldWindowEnd != m_windowEnd) { - clampRangeToWindow(); + bool runTimer = m_timer.isActive(); + if (!runTimer) + m_timer.start(std::numeric_limits<int>::max()); + emit windowMovingChanged(true); + clampRangeToWindow(); // can stop the timer emit windowChanged(m_windowStart, m_windowEnd); + if (!runTimer && m_timer.isActive()) { + m_timer.stop(); + emit windowMovingChanged(false); + } } } @@ -150,6 +164,7 @@ void TimelineZoomControl::moveWindow() qint64 offset = (m_rangeEnd - m_windowEnd + m_rangeStart - m_windowStart) / 2; if (offset == 0 || (offset < 0 && m_windowStart == m_traceStart) || (offset > 0 && m_windowEnd == m_traceEnd)) { + emit windowMovingChanged(false); return; } else if (offset > rangeDuration()) { offset = (offset + rangeDuration()) / 2; diff --git a/src/libs/timeline/timelinezoomcontrol.h b/src/libs/timeline/timelinezoomcontrol.h index a3ffe5d2128..6386f117c2d 100644 --- a/src/libs/timeline/timelinezoomcontrol.h +++ b/src/libs/timeline/timelinezoomcontrol.h @@ -56,6 +56,7 @@ class TIMELINE_EXPORT TimelineZoomControl : public QObject { Q_PROPERTY(qint64 selectionDuration READ selectionDuration NOTIFY selectionChanged) Q_PROPERTY(bool windowLocked READ windowLocked WRITE setWindowLocked NOTIFY windowLockedChanged) + Q_PROPERTY(bool windowMoving READ windowMoving NOTIFY windowMovingChanged) public: static const qint64 MAX_ZOOM_FACTOR = 1 << 10; @@ -78,6 +79,8 @@ public: qint64 selectionDuration() const { return m_selectionEnd - m_selectionStart; } bool windowLocked() const { return m_windowLocked; } + bool windowMoving() const { return m_timer.isActive(); } + virtual void clear(); signals: @@ -86,6 +89,7 @@ signals: void rangeChanged(qint64 start, qint64 end); void selectionChanged(qint64 start, qint64 end); void windowLockedChanged(bool windowLocked); + void windowMovingChanged(bool windowMoving); public slots: void setTrace(qint64 start, qint64 end); |