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()