From d835b769c7d6b37e59a8a74a0d68260d34e7a7f9 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 17 May 2011 18:03:59 +0200 Subject: [PATCH] QmlProfiler: removed fixed height --- src/plugins/qmlprofiler/qml/MainView.qml | 22 +++++- src/plugins/qmlprofiler/qml/VerticalScrollbar.qml | 96 +++++++++++++++++++++++ src/plugins/qmlprofiler/qml/qml.qrc | 1 + src/plugins/qmlprofiler/qmlprofiler.pro | 3 +- src/plugins/qmlprofiler/tracewindow.cpp | 2 +- 5 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 src/plugins/qmlprofiler/qml/VerticalScrollbar.qml diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index 9b8af5cac2..0c05abd1fb 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -153,11 +153,13 @@ Rectangle { anchors.bottom: canvas.top contentWidth: view.totalWidth contentHeight: view.height + flickableDirection: Flickable.HorizontalFlick TimelineView { id: view - width: flick.width; height: flick.height + width: flick.width; + height: 50 * 5; startX: flick.contentX onStartXChanged: { @@ -239,6 +241,20 @@ Rectangle { } } + VerticalScrollbar { + id: verticalScrollbar + + flickable: flick + anchors.top: parent.top + anchors.right : flick.right + anchors.bottom : canvas.top + anchors.topMargin: 1 + anchors.bottomMargin: 1 + anchors.rightMargin: 0 + anchors.leftMargin: 0 + width: 10 + } + //popup showing the details for the hovered range RangeDetails { id: rangeDetails @@ -248,8 +264,8 @@ Rectangle { id: labels width: 150 color: "#dcdcdc" - anchors.top: root.top - anchors.bottom: canvas.top + y: -flick.contentY + height: flick.contentHeight Column { //### change to use Repeater + Plotter.names? diff --git a/src/plugins/qmlprofiler/qml/VerticalScrollbar.qml b/src/plugins/qmlprofiler/qml/VerticalScrollbar.qml new file mode 100644 index 0000000000..8c42d17731 --- /dev/null +++ b/src/plugins/qmlprofiler/qml/VerticalScrollbar.qml @@ -0,0 +1,96 @@ +import QtQuick 1.0 + +Item { + property variant flickable: this; + property int viewPosition: 0; + property int viewSize: ( flickable.height>=0 ? flickable.height : 0 ); + property int contentSize: ( flickable.contentHeight >= 0 ? flickable.contentHeight : 0 ); + + id: verticalScrollbar + + onViewPositionChanged: flickable.contentY = viewPosition; + onViewSizeChanged: { + if ((contentSize > viewSize) && (viewPosition > contentSize - viewSize)) + viewPosition = contentSize - viewSize; + } + + onContentSizeChanged: { + contentSizeDecreased(); + } + + function contentSizeDecreased() { + if ((contentSize > viewSize) && (viewPosition > contentSize - viewSize)) + viewPosition = contentSize - viewSize; + } + + Rectangle { + id: groove + height: parent.height - 4 + width: 6 + color: "#FFFFFF" + radius: 3 + border.width: 1 + border.color: "#666666" + anchors.top: parent.top + anchors.topMargin: 2 + anchors.bottom: parent.bottom + anchors.bottomMargin: 2 + anchors.horizontalCenter: parent.horizontalCenter + y: 2 + } + + // the scrollbar + Item { + id: bar + height: parent.height + width: parent.width + y: Math.floor( (verticalScrollbar.contentSize > 0 ? verticalScrollbar.viewPosition * verticalScrollbar.height / verticalScrollbar.contentSize : 0)); + + Rectangle { + id: handle + height: { + if (verticalScrollbar.contentSize > 0) { + if (verticalScrollbar.viewSize > verticalScrollbar.contentSize || parent.height < 0) { + verticalScrollbar.visible = false; + return parent.height; + } else { + verticalScrollbar.visible = true; + return Math.floor(verticalScrollbar.viewSize / verticalScrollbar.contentSize * parent.height); + } + } else { + return 0; + } + } + + width: parent.width + y:0 + border.color: "#666666" + border.width: 1 + radius: 3 + + gradient: Gradient { + GradientStop { position: 0.20; color: "#CCCCCC" } + GradientStop { position: 0.23; color: "#AAAAAA" } + GradientStop { position: 0.85; color: "#888888" } + } + + MouseArea { + property int dragging:0; + property int originalY:0; + + anchors.fill: parent + onPressed: { dragging = 1; originalY = mouse.y; } + onReleased: { dragging = 0; } + onPositionChanged: { + if (dragging) { + var newY = mouse.y - originalY + bar.y; + if (newY<0) newY=0; + if (newY>verticalScrollbar.height - handle.height) + newY=verticalScrollbar.height - handle.height; + verticalScrollbar.viewPosition = (newY * verticalScrollbar.contentSize / verticalScrollbar.height); + } + } + } + } + } +} diff --git a/src/plugins/qmlprofiler/qml/qml.qrc b/src/plugins/qmlprofiler/qml/qml.qrc index 84e33bfc89..bc6902e5ad 100644 --- a/src/plugins/qmlprofiler/qml/qml.qrc +++ b/src/plugins/qmlprofiler/qml/qml.qrc @@ -12,5 +12,6 @@ RecordButton.qml ToolButton.qml analyzer_category_small.png + VerticalScrollbar.qml diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro index bd8fbd623a..91f8fda681 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.pro +++ b/src/plugins/qmlprofiler/qmlprofiler.pro @@ -50,7 +50,8 @@ OTHER_FILES += \ qml/RangeMover.qml \ qml/RecordButton.qml \ qml/ToolButton.qml \ - qml/MainView.js + qml/MainView.js \ + qml/VerticalScrollbar.qml FORMS += \ qmlprofilerattachdialog.ui diff --git a/src/plugins/qmlprofiler/tracewindow.cpp b/src/plugins/qmlprofiler/tracewindow.cpp index 5331999689..b4731ae8ea 100644 --- a/src/plugins/qmlprofiler/tracewindow.cpp +++ b/src/plugins/qmlprofiler/tracewindow.cpp @@ -289,7 +289,7 @@ TraceWindow::TraceWindow(QWidget *parent) setLayout(groupLayout); // Maximum height: 5 rows of 50 pixels + scrollbar of 50 pixels - setFixedHeight(300); +// setFixedHeight(300); } TraceWindow::~TraceWindow() -- 2.11.0