aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2015-03-23 18:50:47 +0100
committerUlf Hermann <[email protected]>2015-03-24 11:36:16 +0000
commita4b3c46250d1e8c4826fdb76b15e0b92aeede2a1 (patch)
treeae6793e95756972bf5bfe6d2256bf0a05f281c98
parent5e805bfb7c307872a527a67d5705a1aa04aa22f0 (diff)
Timeline: Centralize the selection in zoom control.
This is where it logically belongs, given that trace, window, and range are already there. Also, it fixes the types to qint64, making it easier to reason about type conversions and numerical overflows. Change-Id: I2f88b2646b9a649d34bdf4fe87c37e7afdeee078 Task-number: QTCREATORBUG-14170 Reviewed-by: Joerg Bornemann <[email protected]>
-rw-r--r--src/libs/timeline/qml/MainView.qml24
-rw-r--r--src/libs/timeline/qml/SelectionRange.qml12
-rw-r--r--src/libs/timeline/timelinezoomcontrol.cpp15
-rw-r--r--src/libs/timeline/timelinezoomcontrol.h12
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertraceview.cpp10
5 files changed, 49 insertions, 24 deletions
diff --git a/src/libs/timeline/qml/MainView.qml b/src/libs/timeline/qml/MainView.qml
index 78d2be0c48c..d7d168495a1 100644
--- a/src/libs/timeline/qml/MainView.qml
+++ b/src/libs/timeline/qml/MainView.qml
@@ -47,8 +47,6 @@ Rectangle {
property bool selectionRangeMode: false
property bool selectionRangeReady: selectionRange.ready
- property real selectionRangeStart: selectionRange.startTime
- property real selectionRangeEnd: selectionRange.startTime + selectionRange.duration
property int typeId: content.typeId
onTypeIdChanged: updateCursorPosition()
@@ -317,7 +315,12 @@ Rectangle {
visible: parent.visible
onRangeDoubleClicked: {
- zoomControl.setRange(startTime, endTime);
+ var diff = 500 - zoomer.selectionDuration;
+ if (diff > 0)
+ zoomControl.setRange(zoomer.selectionStart - diff / 2,
+ zoomer.selectionEnd + diff / 2);
+ else
+ zoomControl.setRange(zoomer.selectionStart, zoomer.selectionEnd);
root.selectionRangeMode = false;
}
@@ -331,16 +334,17 @@ Rectangle {
id: selectionRangeDetails
visible: selectionRange.visible
- startTime: selectionRange.startTime
- duration: selectionRange.duration
- endTime: selectionRange.endTime
+ startTime: zoomControl.selectionStart
+ duration: zoomControl.selectionDuration
+ endTime: zoomControl.selectionEnd
showDuration: selectionRange.rangeWidth > 1
onRecenter: {
- if ((selectionRange.startTime < zoomControl.rangeStart) ^
- (selectionRange.endTime > zoomControl.rangeEnd)) {
- var center = selectionRange.startTime + selectionRange.duration / 2;
- var halfDuration = Math.max(selectionRange.duration, zoomControl.rangeDuration / 2);
+ if ((zoomControl.selectionStart < zoomControl.rangeStart) ^
+ (zoomControl.selectionEnd > zoomControl.rangeEnd)) {
+ var center = (zoomControl.selectionStart + zoomControl.selectionEnd) / 2;
+ var halfDuration = Math.max(zoomControl.selectionDuration,
+ zoomControl.rangeDuration) / 2;
zoomControl.setRange(center - halfDuration, center + halfDuration);
}
}
diff --git a/src/libs/timeline/qml/SelectionRange.qml b/src/libs/timeline/qml/SelectionRange.qml
index b25e9d2d174..9a700674678 100644
--- a/src/libs/timeline/qml/SelectionRange.qml
+++ b/src/libs/timeline/qml/SelectionRange.qml
@@ -41,10 +41,6 @@ RangeMover {
property bool ready: visible && creationState === creationFinished
- property double startTime: rangeLeft * viewTimePerPixel + zoomer.windowStart
- property double duration: Math.max(rangeWidth * viewTimePerPixel, 500)
- property double endTime: startTime + duration
-
property double viewTimePerPixel: 1
property double creationReference : 0
property int creationState : creationInactive
@@ -55,6 +51,14 @@ RangeMover {
creationReference = 0;
}
+ function updateZoomer() {
+ zoomer.setSelection(rangeLeft * viewTimePerPixel + zoomer.windowStart,
+ rangeRight * viewTimePerPixel + zoomer.windowStart)
+ }
+
+ onRangeWidthChanged: updateZoomer()
+ onRangeLeftChanged: updateZoomer()
+
function setPos(pos) {
if (pos < 0)
pos = 0;
diff --git a/src/libs/timeline/timelinezoomcontrol.cpp b/src/libs/timeline/timelinezoomcontrol.cpp
index 8aa9170c7a5..fc4985cc65f 100644
--- a/src/libs/timeline/timelinezoomcontrol.cpp
+++ b/src/libs/timeline/timelinezoomcontrol.cpp
@@ -31,8 +31,10 @@
namespace Timeline {
-TimelineZoomControl::TimelineZoomControl(QObject *parent) : QObject(parent), m_traceStart(-1), m_traceEnd(-1),
- m_windowStart(-1), m_windowEnd(-1), m_rangeStart(-1), m_rangeEnd(-1), m_windowLocked(false)
+TimelineZoomControl::TimelineZoomControl(QObject *parent) : QObject(parent),
+ m_traceStart(-1), m_traceEnd(-1), m_windowStart(-1), m_windowEnd(-1),
+ m_rangeStart(-1), m_rangeEnd(-1), m_selectionStart(-1), m_selectionEnd(-1),
+ m_windowLocked(false)
{
connect(&m_timer, &QTimer::timeout, this, &TimelineZoomControl::moveWindow);
}
@@ -68,6 +70,15 @@ void TimelineZoomControl::setRange(qint64 start, qint64 end)
}
}
+void TimelineZoomControl::setSelection(qint64 start, qint64 end)
+{
+ if (m_selectionStart != start || m_selectionEnd != end) {
+ m_selectionStart = start;
+ m_selectionEnd = end;
+ emit selectionChanged(start, end);
+ }
+}
+
void TimelineZoomControl::setWindowLocked(bool windowLocked)
{
if (windowLocked != m_windowLocked) {
diff --git a/src/libs/timeline/timelinezoomcontrol.h b/src/libs/timeline/timelinezoomcontrol.h
index fa6cb166ff2..a3ffe5d2128 100644
--- a/src/libs/timeline/timelinezoomcontrol.h
+++ b/src/libs/timeline/timelinezoomcontrol.h
@@ -51,6 +51,10 @@ class TIMELINE_EXPORT TimelineZoomControl : public QObject {
Q_PROPERTY(qint64 rangeEnd READ rangeEnd NOTIFY rangeChanged)
Q_PROPERTY(qint64 rangeDuration READ rangeDuration NOTIFY rangeChanged)
+ Q_PROPERTY(qint64 selectionStart READ selectionStart NOTIFY selectionChanged)
+ Q_PROPERTY(qint64 selectionEnd READ selectionEnd NOTIFY selectionChanged)
+ Q_PROPERTY(qint64 selectionDuration READ selectionDuration NOTIFY selectionChanged)
+
Q_PROPERTY(bool windowLocked READ windowLocked WRITE setWindowLocked NOTIFY windowLockedChanged)
public:
@@ -69,6 +73,10 @@ public:
qint64 rangeEnd() const { return m_rangeEnd; }
qint64 rangeDuration() const { return m_rangeEnd - m_rangeStart; }
+ qint64 selectionStart() const { return m_selectionStart; }
+ qint64 selectionEnd() const { return m_selectionEnd; }
+ qint64 selectionDuration() const { return m_selectionEnd - m_selectionStart; }
+
bool windowLocked() const { return m_windowLocked; }
virtual void clear();
@@ -76,11 +84,13 @@ signals:
void traceChanged(qint64 start, qint64 end);
void windowChanged(qint64 start, qint64 end);
void rangeChanged(qint64 start, qint64 end);
+ void selectionChanged(qint64 start, qint64 end);
void windowLockedChanged(bool windowLocked);
public slots:
void setTrace(qint64 start, qint64 end);
void setRange(qint64 start, qint64 end);
+ void setSelection(qint64 start, qint64 end);
void setWindowLocked(bool windowLocked);
protected slots:
@@ -93,6 +103,8 @@ protected:
qint64 m_windowEnd;
qint64 m_rangeStart;
qint64 m_rangeEnd;
+ qint64 m_selectionStart;
+ qint64 m_selectionEnd;
QTimer m_timer;
bool m_windowLocked;
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
index 94d71028bcc..a4d60a9d7a3 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
@@ -171,18 +171,12 @@ bool QmlProfilerTraceView::hasValidSelection() const
qint64 QmlProfilerTraceView::selectionStart() const
{
- QQuickItem *rootObject = d->m_mainView->rootObject();
- if (rootObject)
- return rootObject->property("selectionRangeStart").toLongLong();
- return 0;
+ return d->m_zoomControl->selectionStart();
}
qint64 QmlProfilerTraceView::selectionEnd() const
{
- QQuickItem *rootObject = d->m_mainView->rootObject();
- if (rootObject)
- return rootObject->property("selectionRangeEnd").toLongLong();
- return 0;
+ return d->m_zoomControl->selectionEnd();
}
void QmlProfilerTraceView::clear()