From 1068b288f657051a22ba00ea8c31856423cb7162 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Thu, 13 Jun 2013 14:10:45 +0200 Subject: QmlProfiler: fix zoom when item selected Change-Id: If00ed1510386d64f4672ee23eaef5575e784c605 Reviewed-by: Kai Koehne --- plugins/qmlprofiler/qml/MainView.qml | 20 ++++++++++++-------- plugins/qmlprofiler/qml/RangeDetails.qml | 2 +- plugins/qmlprofiler/timelinemodelaggregator.cpp | 9 ++++++++- plugins/qmlprofiler/timelinemodelaggregator.h | 2 ++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/plugins/qmlprofiler/qml/MainView.qml b/plugins/qmlprofiler/qml/MainView.qml index f1420d3be5..849d22b8b7 100644 --- a/plugins/qmlprofiler/qml/MainView.qml +++ b/plugins/qmlprofiler/qml/MainView.qml @@ -216,7 +216,7 @@ Rectangle { if (view.selectedItem !== -1) { // center on selected item if it's inside the current screen - var newFixedPoint = qmlProfilerModelProxy.getStartTime(view.selectedItem); + var newFixedPoint = qmlProfilerModelProxy.getStartTime(view.selectedModel, view.selectedItem); if (newFixedPoint >= view.startTime && newFixedPoint < view.endTime) fixedPoint = newFixedPoint; } @@ -258,16 +258,16 @@ Rectangle { zoomControl.setRange(newStart, newStart + windowLength); } - function recenterOnItem( itemIndex ) + function recenterOnItem( modelIndex, itemIndex ) { if (itemIndex === -1) return; // if item is outside of the view, jump back to its position - if (qmlProfilerModelProxy.getEndTime(itemIndex) < view.startTime || - qmlProfilerModelProxy.getStartTime(itemIndex) > view.endTime) { - recenter((qmlProfilerModelProxy.getStartTime(itemIndex) + - qmlProfilerModelProxy.getEndTime(itemIndex)) / 2); + if (qmlProfilerModelProxy.getEndTime(modelIndex, itemIndex) < view.startTime || + qmlProfilerModelProxy.getStartTime(modelIndex, itemIndex) > view.endTime) { + recenter((qmlProfilerModelProxy.getStartTime(modelIndex, itemIndex) + + qmlProfilerModelProxy.getEndTime(modelIndex, itemIndex)) / 2); } } @@ -295,15 +295,19 @@ Rectangle { function selectNextWithId( eventId ) { + // this is a slot responding to events from the other pane + // which tracks only events from the basic model if (!lockItemSelection) { lockItemSelection = true; var itemIndex = view.nextItemFromId( eventId ); + var modelIndex = qmlProfilerModelProxy.basicModelIndex(); // select an item, lock to it, and recenter if necessary - if (view.selectedItem != itemIndex) { + if (view.selectedItem != itemIndex || view.selectedModel != modelIndex) { + view.selectedModel = modelIndex; view.selectedItem = itemIndex; if (itemIndex !== -1) { view.selectionLocked = true; - recenterOnItem(itemIndex); + recenterOnItem(modelIndex, itemIndex); } } lockItemSelection = false; diff --git a/plugins/qmlprofiler/qml/RangeDetails.qml b/plugins/qmlprofiler/qml/RangeDetails.qml index c066b06bde..a0fb3e8d77 100644 --- a/plugins/qmlprofiler/qml/RangeDetails.qml +++ b/plugins/qmlprofiler/qml/RangeDetails.qml @@ -196,7 +196,7 @@ Item { drag.maximumY: root.candidateHeight - parent.height + yoffset onClicked: { root.gotoSourceLocation(file, line, column); - root.recenterOnItem(view.selectedItem); + root.recenterOnItem(view.selectedModel, view.selectedItem); } } diff --git a/plugins/qmlprofiler/timelinemodelaggregator.cpp b/plugins/qmlprofiler/timelinemodelaggregator.cpp index 99c284aea8..238a7a0f3a 100644 --- a/plugins/qmlprofiler/timelinemodelaggregator.cpp +++ b/plugins/qmlprofiler/timelinemodelaggregator.cpp @@ -47,6 +47,7 @@ public: TimelineModelAggregator *q; + int basicModelIndex; QList modelList; QmlProfilerModelManager *modelManager; }; @@ -82,7 +83,8 @@ void TimelineModelAggregator::setModelManager(QmlProfilerModelManager *modelMana BasicTimelineModel *basicTimelineModel = new BasicTimelineModel(this); basicTimelineModel->setModelManager(modelManager); addModel(basicTimelineModel); - + // the basic model is the last one here + d->basicModelIndex = d->modelList.count() - 1; } @@ -145,6 +147,11 @@ bool TimelineModelAggregator::eventAccepted(const QmlProfilerSimpleModel::QmlEve return true; } +int TimelineModelAggregator::basicModelIndex() const +{ + return d->basicModelIndex; +} + qint64 TimelineModelAggregator::lastTimeMark() const { qint64 mark = -1; diff --git a/plugins/qmlprofiler/timelinemodelaggregator.h b/plugins/qmlprofiler/timelinemodelaggregator.h index 4f650bb4a5..c0fa1d92b4 100644 --- a/plugins/qmlprofiler/timelinemodelaggregator.h +++ b/plugins/qmlprofiler/timelinemodelaggregator.h @@ -63,6 +63,8 @@ public: bool eventAccepted(const QmlProfilerSimpleModel::QmlEventData &event) const; + Q_INVOKABLE int basicModelIndex() const; + Q_INVOKABLE qint64 lastTimeMark() const; Q_INVOKABLE void setExpanded(int modelIndex, int category, bool expanded); -- cgit v1.2.3