QmlProfiler: Use bindings instead of JS methods for RangeMover

It's more intuitive to use and more QML-like.

Change-Id: Ifbd05df59d8afaeb62acc9a6f1f3d4786f822169
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
This commit is contained in:
Ulf Hermann
2014-07-08 14:46:17 +02:00
parent 57fe9b7b5e
commit b0a3b2950a
4 changed files with 35 additions and 43 deletions

View File

@@ -376,8 +376,8 @@ Rectangle {
} }
// hack to pass mouse events to the other mousearea if enabled // hack to pass mouse events to the other mousearea if enabled
startDragArea: selectionRange.ready ? selectionRange.getLeft() : -x startDragArea: selectionRange.ready ? selectionRange.rangeLeft : -x
endDragArea: selectionRange.ready ? selectionRange.getRight() : -x - 1 endDragArea: selectionRange.ready ? selectionRange.rangeRight : -x - 1
} }
MouseArea { MouseArea {
id: selectionRangeControl id: selectionRangeControl
@@ -419,7 +419,7 @@ Rectangle {
startTime: selectionRange.startTimeString startTime: selectionRange.startTimeString
duration: selectionRange.durationString duration: selectionRange.durationString
endTime: selectionRange.endTimeString endTime: selectionRange.endTimeString
showDuration: selectionRange.getWidth() > 1 showDuration: selectionRange.rangeWidth > 1
} }
RangeDetails { RangeDetails {

View File

@@ -61,8 +61,8 @@ Canvas {
function updateRange() { function updateRange() {
if (recursionGuard) if (recursionGuard)
return; return;
var newStartTime = Math.round(rangeMover.getLeft() * qmlProfilerModelProxy.traceDuration() / width) + qmlProfilerModelProxy.traceStartTime(); var newStartTime = Math.round(rangeMover.rangeLeft * qmlProfilerModelProxy.traceDuration() / width) + qmlProfilerModelProxy.traceStartTime();
var newEndTime = Math.round(rangeMover.getRight() * qmlProfilerModelProxy.traceDuration() / width) + qmlProfilerModelProxy.traceStartTime(); var newEndTime = Math.round(rangeMover.rangeRight * qmlProfilerModelProxy.traceDuration() / width) + qmlProfilerModelProxy.traceStartTime();
if (startTime !== newStartTime || endTime !== newEndTime) if (startTime !== newStartTime || endTime !== newEndTime)
zoomControl.setRange(newStartTime, Math.max(newEndTime, newStartTime + 500)); zoomControl.setRange(newStartTime, Math.max(newEndTime, newStartTime + 500));
} }
@@ -81,13 +81,13 @@ Canvas {
endTime = clamp(zoomControl.endTime(), startTime, qmlProfilerModelProxy.traceEndTime()); endTime = clamp(zoomControl.endTime(), startTime, qmlProfilerModelProxy.traceEndTime());
var newRangeX = (startTime - qmlProfilerModelProxy.traceStartTime()) * width / qmlProfilerModelProxy.traceDuration(); var newRangeX = (startTime - qmlProfilerModelProxy.traceStartTime()) * width / qmlProfilerModelProxy.traceDuration();
var newWidth = (endTime - startTime) * width / qmlProfilerModelProxy.traceDuration(); var newWidth = (endTime - startTime) * width / qmlProfilerModelProxy.traceDuration();
var widthChanged = Math.abs(newWidth - rangeMover.getWidth()) > 1; var widthChanged = Math.abs(newWidth - rangeMover.rangeWidth) > 1;
var leftChanged = Math.abs(newRangeX - rangeMover.getLeft()) > 1; var leftChanged = Math.abs(newRangeX - rangeMover.rangeLeft) > 1;
if (leftChanged) if (leftChanged)
rangeMover.setLeft(newRangeX); rangeMover.rangeLeft = newRangeX;
if (leftChanged || widthChanged) if (leftChanged || widthChanged)
rangeMover.setRight(newRangeX + newWidth); rangeMover.rangeRight = newRangeX + newWidth;
recursionGuard = false; recursionGuard = false;
} }
} }
@@ -137,19 +137,18 @@ Canvas {
MouseArea { MouseArea {
anchors.fill: canvas anchors.fill: canvas
function jumpTo(posX) { function jumpTo(posX) {
var rangeWidth = rangeMover.getWidth(); var newX = posX - rangeMover.rangeWidth / 2;
var newX = posX - rangeWidth / 2;
if (newX < 0) if (newX < 0)
newX = 0; newX = 0;
if (newX + rangeWidth > canvas.width) if (newX + rangeMover.rangeWidth > canvas.width)
newX = canvas.width - rangeWidth; newX = canvas.width - rangeMover.rangeWidth;
if (newX < rangeMover.getLeft()) { if (newX < rangeMover.rangeLeft) {
rangeMover.setLeft(newX); rangeMover.rangeLeft = newX;
rangeMover.setRight(newX + rangeWidth); rangeMover.rangeRight = newX + rangeMover.rangeWidth;
} else if (newX > rangeMover.getLeft()) { } else if (newX > rangeMover.rangeLeft) {
rangeMover.setRight(newX + rangeWidth); rangeMover.rangeRight = newX + rangeMover.rangeWidth;
rangeMover.setLeft(newX); rangeMover.rangeLeft = newX;
} }
} }
@@ -164,7 +163,8 @@ Canvas {
RangeMover { RangeMover {
id: rangeMover id: rangeMover
visible: dataReady visible: dataReady
onRangeChanged: canvas.updateRange() onRangeLeftChanged: canvas.updateRange()
onRangeRightChanged: canvas.updateRange()
} }
Rectangle { Rectangle {

View File

@@ -33,7 +33,6 @@ Rectangle {
id: rangeMover id: rangeMover
anchors.fill: parent anchors.fill: parent
color: "transparent" color: "transparent"
signal rangeChanged()
signal rangeDoubleClicked() signal rangeDoubleClicked()
property color handleColor: "#869cd1" property color handleColor: "#869cd1"
@@ -43,13 +42,9 @@ Rectangle {
property color dragMarkerColor: "#4a64b8" property color dragMarkerColor: "#4a64b8"
property color singleLineColor: "#4a64b8" property color singleLineColor: "#4a64b8"
function setLeft(left) { leftRange.x = left } property alias rangeLeft: leftRange.x
function getLeft() { return leftRange.x } property alias rangeRight: rightRange.x
readonly property alias rangeWidth: selectedRange.width
function setRight(right) { rightRange.x = right }
function getRight() { return rightRange.x }
function getWidth() { return rightRange.x - leftRange.x }
Rectangle { Rectangle {
id: selectedRange id: selectedRange
@@ -59,9 +54,6 @@ Rectangle {
height: parent.height height: parent.height
color: width > 1 ? (dragArea.pressed ? dragColor : rangeColor) : singleLineColor color: width > 1 ? (dragArea.pressed ? dragColor : rangeColor) : singleLineColor
onXChanged: parent.rangeChanged()
onWidthChanged: parent.rangeChanged()
} }
Rectangle { Rectangle {

View File

@@ -38,8 +38,8 @@ RangeMover {
property string endTimeString: detailedPrintTime(startTime+duration) property string endTimeString: detailedPrintTime(startTime+duration)
property string durationString: detailedPrintTime(duration) property string durationString: detailedPrintTime(duration)
property double startTime: getLeft() * viewTimePerPixel + zoomControl.windowStart() property double startTime: rangeLeft * viewTimePerPixel + zoomControl.windowStart()
property double duration: Math.max(getWidth() * viewTimePerPixel, 500) property double duration: Math.max(rangeWidth * viewTimePerPixel, 500)
property double viewTimePerPixel: 1 property double viewTimePerPixel: 1
property double creationReference : 0 property double creationReference : 0
property int creationState : 0 property int creationState : 0
@@ -50,9 +50,9 @@ RangeMover {
var oldTimePerPixel = selectionRange.viewTimePerPixel; var oldTimePerPixel = selectionRange.viewTimePerPixel;
selectionRange.viewTimePerPixel = Math.abs(zoomControl.endTime() - zoomControl.startTime()) / view.intWidth; selectionRange.viewTimePerPixel = Math.abs(zoomControl.endTime() - zoomControl.startTime()) / view.intWidth;
if (creationState === 3 && oldTimePerPixel != selectionRange.viewTimePerPixel) { if (creationState === 3 && oldTimePerPixel != selectionRange.viewTimePerPixel) {
var newWidth = getWidth() * oldTimePerPixel / viewTimePerPixel; var newWidth = rangeWidth * oldTimePerPixel / viewTimePerPixel;
setLeft(getLeft() * oldTimePerPixel / viewTimePerPixel); rangeLeft = rangeLeft * oldTimePerPixel / viewTimePerPixel;
setRight(getLeft() + newWidth); rangeRight = rangeLeft + newWidth;
} }
} }
} }
@@ -63,7 +63,7 @@ RangeMover {
} }
function reset() { function reset() {
setRight(getLeft() + 1); rangeRight = rangeLeft + 1;
creationState = 0; creationState = 0;
creationReference = 0; creationReference = 0;
} }
@@ -77,16 +77,16 @@ RangeMover {
switch (creationState) { switch (creationState) {
case 1: case 1:
creationReference = pos; creationReference = pos;
setLeft(pos); rangeLeft = pos;
setRight(pos + 1); rangeRight = pos + 1;
break; break;
case 2: case 2:
if (pos > creationReference) { if (pos > creationReference) {
setLeft(creationReference); rangeLeft = creationReference;
setRight(pos); rangeRight = pos;
} else if (pos < creationReference) { } else if (pos < creationReference) {
setLeft(pos); rangeLeft = pos;
setRight(creationReference); rangeRight = creationReference;
} }
break; break;
} }