From 17db97b698c3edf6fa4cce04b7b936d64165b6c9 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Mon, 27 Jun 2011 18:33:20 +0200 Subject: [PATCH] QmlProfiler: show ranges in time display Change-Id: I6f42db3d5de02ee0198ff51aae8421bbdc5ea9c4 Reviewed-on: http://codereview.qt.nokia.com/836 Reviewed-by: Qt Sanity Bot Reviewed-by: Kai Koehne --- src/plugins/qmlprofiler/qml/MainView.qml | 56 +++++++++++++++++ src/plugins/qmlprofiler/qml/RangeMover.qml | 1 + src/plugins/qmlprofiler/qml/TimeDisplay.qml | 70 ++++++++++++++------- 3 files changed, 103 insertions(+), 24 deletions(-) diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index cdb5cfb6bf3..cbdfbc96ada 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -439,4 +439,60 @@ Rectangle { opacity: 0 anchors.top: canvas.top } + + // the next elements are here because I want them rendered on top of the other + Rectangle { + id: timeDisplayLabel + color: "lightsteelblue" + border.color: Qt.darker(color) + border.width: 1 + radius: 2 + height: Math.max(labels.y-2, timeDisplayText.height); + y: timeDisplayEnd.visible ? flick.height - 1 : 1 + width: timeDisplayText.width + 10 + ( timeDisplayEnd.visible ? timeDisplayCloseControl.width + 10 : 0 ) + visible: false + + function hideAll() { + timeDisplayBegin.visible = false; + timeDisplayEnd.visible = false; + timeDisplayLabel.visible = false; + } + Text { + id: timeDisplayText + x: 5 + y: parent.height/2 - height/2 + 1 + font.pointSize: 8 + } + + Text { + id: timeDisplayCloseControl + text:"X" + anchors.right: parent.right + anchors.rightMargin: 3 + y: parent.height/2 - height/2 + 1 + visible: timeDisplayEnd.visible + MouseArea { + anchors.fill: parent + onClicked: { + timeDisplayLabel.hideAll(); + } + } + } + } + + Rectangle { + id: timeDisplayBegin + width: 1 + color: Qt.rgba(0,0,64,0.7); + height: flick.height + labels.y + visible: false + } + + Rectangle { + id: timeDisplayEnd + width: 1 + color: Qt.rgba(0,0,64,0.7); + height: flick.height + labels.y + visible: false + } } diff --git a/src/plugins/qmlprofiler/qml/RangeMover.qml b/src/plugins/qmlprofiler/qml/RangeMover.qml index 936ca54c7b0..193921c6887 100644 --- a/src/plugins/qmlprofiler/qml/RangeMover.qml +++ b/src/plugins/qmlprofiler/qml/RangeMover.qml @@ -43,6 +43,7 @@ Item { property color darkerColor:"#cc6da1e8" property real value: (canvas.canvasWindow.x + x) * Plotter.xScale(canvas) property real zoomWidth: 20 + onZoomWidthChanged: timeDisplayLabel.hideAll(); function updateZoomControls() { rightRange.x = rangeMover.width; diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml index 28c0dd5b7a3..026846f900e 100644 --- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml +++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml @@ -112,31 +112,53 @@ TiledCanvas { width: parent.width height: labels.y hoverEnabled: true - onMousePositionChanged: { - var realTime = startTime + mouseX * timePerPixel; - displayText.text = detailedPrintTime(realTime); - displayRect.x = mouseX - displayRect.visible = true - } - onExited: displayRect.visible = false - onEntered: root.hideRangeDetails(); - } - Rectangle { - id: displayRect - color: "lightsteelblue" - border.color: Qt.darker(color) - border.width: 1 - radius: 2 - height: labels.y - 2 - y: 1 - width: displayText.width + 10 - visible: false - Text { - id: displayText - x: 5 - y: labels.y/2 - 6 - font.pointSize: 8 + function setStartTime(xpos) { + var realTime = startTime + xpos * timePerPixel; + timeDisplayText.text = detailedPrintTime(realTime); + timeDisplayBegin.visible = true; + timeDisplayBegin.x = xpos + flick.x; + } + + function setEndTime(xpos) { + var bt = startTime + (timeDisplayBegin.x - flick.x) * timePerPixel; + var et = startTime + xpos * timePerPixel; + var timeDisplayBeginTime = Math.min(bt, et); + var timeDisplayEndTime = Math.max(bt, et); + + timeDisplayText.text = qsTr("length:")+detailedPrintTime(timeDisplayEndTime-timeDisplayBeginTime); + timeDisplayEnd.visible = true; + timeDisplayEnd.x = xpos + flick.x + } + + onMousePositionChanged: { + if (!Plotter.ranges.length) + return; + + if (!pressed && timeDisplayEnd.visible) + return; + + timeDisplayLabel.x = mouseX + flick.x + timeDisplayLabel.visible = true + + if (pressed) { + setEndTime(mouseX); + } else { + setStartTime(mouseX); + } + } + + onPressed: { + setStartTime(mouseX); + } + + onEntered: { + root.hideRangeDetails(); + } + onExited: { + if ((!pressed) && (!timeDisplayEnd.visible)) { + timeDisplayLabel.hideAll(); + } } } }