QmlProfiler: Update selection also when only model changes

Previously, if you selected an event with the same ID from a different
model the rangeDetails wouldn't be updated. Now modelId and itemId can only
be updated together and a single signal is emitted for that. This signal is
then used to update the details.

Change-Id: Ie1e971f5ac8c041b49df347fa0fbb401d5422766
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
This commit is contained in:
Ulf Hermann
2014-03-26 11:47:52 +01:00
parent fa1b5eebb5
commit 84eadb01c8
4 changed files with 42 additions and 49 deletions

View File

@@ -172,13 +172,9 @@ Rectangle {
var modelIndex = qmlProfilerModelProxy.basicModelIndex(); var modelIndex = qmlProfilerModelProxy.basicModelIndex();
var itemIndex = view.nextItemFromId(modelIndex, eventId); var itemIndex = view.nextItemFromId(modelIndex, eventId);
// select an item, lock to it, and recenter if necessary // select an item, lock to it, and recenter if necessary
if (view.selectedItem != itemIndex || view.selectedModel != modelIndex) { view.selectFromId(modelIndex, itemIndex); // triggers recentering
view.selectedModel = modelIndex; if (itemIndex !== -1)
view.selectedItem = itemIndex; view.selectionLocked = true;
if (itemIndex !== -1) {
view.selectionLocked = true;
}
}
lockItemSelection = false; lockItemSelection = false;
} }
} }
@@ -331,7 +327,7 @@ Rectangle {
recursionGuard = false; recursionGuard = false;
} }
onSelectedItemChanged: { onSelectionChanged: {
if (selectedItem !== -1) { if (selectedItem !== -1) {
// display details // display details
rangeDetails.showInfo(qmlProfilerModelProxy.getEventDetails(selectedModel, selectedItem)); rangeDetails.showInfo(qmlProfilerModelProxy.getEventDetails(selectedModel, selectedItem));

View File

@@ -220,7 +220,7 @@ Item {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
root.hideRangeDetails(); root.hideRangeDetails();
view.selectedItem = -1; view.selectFromId(view.selectedModel, -1);
} }
} }
} }

View File

@@ -307,9 +307,7 @@ void TimelineRenderer::manageClicked()
} else { } else {
setSelectionLocked(false); setSelectionLocked(false);
} }
setSelectedModel(m_currentSelection.modelIndex); selectFromId(m_currentSelection.modelIndex, m_currentSelection.eventIndex);
setSelectedItem(m_currentSelection.eventIndex);
} }
void TimelineRenderer::manageHovered(int mouseX, int mouseY) void TimelineRenderer::manageHovered(int mouseX, int mouseY)
@@ -362,10 +360,8 @@ void TimelineRenderer::manageHovered(int mouseX, int mouseY)
m_currentSelection.endTime = itemEnd; m_currentSelection.endTime = itemEnd;
m_currentSelection.row = row; m_currentSelection.row = row;
m_currentSelection.modelIndex = modelIndex; m_currentSelection.modelIndex = modelIndex;
if (!m_selectionLocked) { if (!m_selectionLocked)
setSelectedModel(modelIndex); selectFromId(modelIndex, i);
setSelectedItem(i);
}
return; return;
} }
} }
@@ -457,8 +453,7 @@ void TimelineRenderer::selectNext()
} }
} }
setSelectedModel(candidateModelIndex); selectFromId(candidateModelIndex, itemIndex);
setSelectedItem(itemIndex);
} }
void TimelineRenderer::selectPrev() void TimelineRenderer::selectPrev()
@@ -510,8 +505,7 @@ void TimelineRenderer::selectPrev()
} }
} }
setSelectedModel(candidateModelIndex); selectFromId(candidateModelIndex, itemIndex);
setSelectedItem(itemIndex);
} }
int TimelineRenderer::nextItemFromId(int modelIndex, int eventId) const int TimelineRenderer::nextItemFromId(int modelIndex, int eventId) const
@@ -553,20 +547,21 @@ int TimelineRenderer::prevItemFromId(int modelIndex, int eventId) const
return -1; return -1;
} }
void TimelineRenderer::selectNextFromId(int modelIndex, int eventId) void TimelineRenderer::selectFromId(int modelIndex, int eventIndex)
{ {
int eventIndex = nextItemFromId(modelIndex, eventId); if (modelIndex != m_selectedModel || eventIndex != m_selectedItem) {
if (eventIndex != -1) {
setSelectedModel(modelIndex); setSelectedModel(modelIndex);
setSelectedItem(eventIndex); setSelectedItem(eventIndex);
emit selectionChanged(modelIndex, eventIndex);
} }
} }
void TimelineRenderer::selectNextFromId(int modelIndex, int eventId)
{
selectFromId(modelIndex, nextItemFromId(modelIndex, eventId));
}
void TimelineRenderer::selectPrevFromId(int modelIndex, int eventId) void TimelineRenderer::selectPrevFromId(int modelIndex, int eventId)
{ {
int eventIndex = prevItemFromId(modelIndex, eventId); selectFromId(modelIndex, prevItemFromId(modelIndex, eventId));
if (eventIndex != -1) {
setSelectedModel(modelIndex);
setSelectedItem(eventIndex);
}
} }

View File

@@ -45,8 +45,8 @@ class TimelineRenderer : public QQuickPaintedItem
Q_PROPERTY(qint64 endTime READ endTime WRITE setEndTime NOTIFY endTimeChanged) Q_PROPERTY(qint64 endTime READ endTime WRITE setEndTime NOTIFY endTimeChanged)
Q_PROPERTY(QObject *profilerModelProxy READ profilerModelProxy WRITE setProfilerModelProxy NOTIFY profilerModelProxyChanged) Q_PROPERTY(QObject *profilerModelProxy READ profilerModelProxy WRITE setProfilerModelProxy NOTIFY profilerModelProxyChanged)
Q_PROPERTY(bool selectionLocked READ selectionLocked WRITE setSelectionLocked NOTIFY selectionLockedChanged) Q_PROPERTY(bool selectionLocked READ selectionLocked WRITE setSelectionLocked NOTIFY selectionLockedChanged)
Q_PROPERTY(int selectedItem READ selectedItem WRITE setSelectedItem NOTIFY selectedItemChanged) Q_PROPERTY(int selectedItem READ selectedItem NOTIFY selectedItemChanged)
Q_PROPERTY(int selectedModel READ selectedModel WRITE setSelectedModel NOTIFY selectedModelChanged) Q_PROPERTY(int selectedModel READ selectedModel NOTIFY selectedModelChanged)
Q_PROPERTY(int startDragArea READ startDragArea WRITE setStartDragArea NOTIFY startDragAreaChanged) Q_PROPERTY(int startDragArea READ startDragArea WRITE setStartDragArea NOTIFY startDragAreaChanged)
Q_PROPERTY(int endDragArea READ endDragArea WRITE setEndDragArea NOTIFY endDragAreaChanged) Q_PROPERTY(int endDragArea READ endDragArea WRITE setEndDragArea NOTIFY endDragAreaChanged)
@@ -97,6 +97,7 @@ public:
Q_INVOKABLE void selectPrev(); Q_INVOKABLE void selectPrev();
Q_INVOKABLE int nextItemFromId(int modelIndex, int eventId) const; Q_INVOKABLE int nextItemFromId(int modelIndex, int eventId) const;
Q_INVOKABLE int prevItemFromId(int modelIndex, int eventId) const; Q_INVOKABLE int prevItemFromId(int modelIndex, int eventId) const;
Q_INVOKABLE void selectFromId(int modelIndex, int eventId);
Q_INVOKABLE void selectNextFromId(int modelIndex, int eventId); Q_INVOKABLE void selectNextFromId(int modelIndex, int eventId);
Q_INVOKABLE void selectPrevFromId(int modelIndex, int eventId); Q_INVOKABLE void selectPrevFromId(int modelIndex, int eventId);
@@ -105,8 +106,9 @@ signals:
void endTimeChanged(qint64 arg); void endTimeChanged(qint64 arg);
void profilerModelProxyChanged(TimelineModelAggregator *list); void profilerModelProxyChanged(TimelineModelAggregator *list);
void selectionLockedChanged(bool locked); void selectionLockedChanged(bool locked);
void selectedItemChanged(int modelIndex, int itemIndex); void selectedItemChanged(int itemIndex);
void selectedModelChanged(int modelIndex); void selectedModelChanged(int modelIndex);
void selectionChanged(int modelIndex, int itemIndex);
void startDragAreaChanged(int startDragArea); void startDragAreaChanged(int startDragArea);
void endDragAreaChanged(int endDragArea); void endDragAreaChanged(int endDragArea);
void itemPressed(int modelIndex, int pressedItem); void itemPressed(int modelIndex, int pressedItem);
@@ -141,24 +143,6 @@ public slots:
} }
} }
void setSelectedItem(int itemIndex)
{
if (m_selectedItem != itemIndex) {
m_selectedItem = itemIndex;
update();
emit selectedItemChanged(m_selectedModel, itemIndex);
}
}
void setSelectedModel(int modelIndex)
{
if (m_selectedModel != modelIndex) {
m_selectedModel = modelIndex;
update();
emit selectedModelChanged(modelIndex);
}
}
void setStartDragArea(int startDragArea) void setStartDragArea(int startDragArea)
{ {
if (m_startDragArea != startDragArea) { if (m_startDragArea != startDragArea) {
@@ -192,6 +176,24 @@ private:
void manageClicked(); void manageClicked();
void manageHovered(int mouseX, int mouseY); void manageHovered(int mouseX, int mouseY);
void setSelectedItem(int itemIndex)
{
if (m_selectedItem != itemIndex) {
m_selectedItem = itemIndex;
update();
emit selectedItemChanged(itemIndex);
}
}
void setSelectedModel(int modelIndex)
{
if (m_selectedModel != modelIndex) {
m_selectedModel = modelIndex;
update();
emit selectedModelChanged(modelIndex);
}
}
private: private:
qint64 m_startTime; qint64 m_startTime;
qint64 m_endTime; qint64 m_endTime;