From eef3d91ea183f4c0c455ce25e7fcf18ecd6d798b Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Wed, 14 Dec 2011 14:30:37 +0100
Subject: [PATCH] QmlProfiler: linking JS events with QML events

Change-Id: Id2f37caef0c62fa8fa830fed8f46dcbb0a565cdb
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
---
 .../qmlprofiler/qmlprofilereventview.cpp        | 17 +++++++++++++++++
 src/plugins/qmlprofiler/qmlprofilereventview.h  |  2 ++
 src/plugins/qmlprofiler/qmlprofilertool.cpp     |  3 +++
 3 files changed, 22 insertions(+)

diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
index a99c1531cc3..918b52572c8 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
@@ -181,6 +181,11 @@ void QmlProfilerEventsWidget::updateSelectedEvent(int eventId) const
         m_eventTree->selectEvent(eventId);
 }
 
+void QmlProfilerEventsWidget::selectBySourceLocation(const QString &filename, int line)
+{
+    m_eventTree->selectEventByLocation(filename, line);
+}
+
 bool QmlProfilerEventsWidget::hasGlobalStats() const
 {
     return m_globalStatsEnabled;
@@ -589,6 +594,18 @@ void QmlProfilerEventsMainView::selectEvent(int eventId)
     }
 }
 
+void QmlProfilerEventsMainView::selectEventByLocation(const QString &filename, int line)
+{
+    for (int i=0; i<d->m_model->rowCount(); i++) {
+        QStandardItem *infoItem = d->m_model->item(i, 0);
+        if (currentIndex() != d->m_model->indexFromItem(infoItem) && infoItem->data(FilenameRole).toString() == filename && infoItem->data(LineRole).toInt() == line) {
+            setCurrentIndex(d->m_model->indexFromItem(infoItem));
+            jumpToItem(currentIndex());
+            return;
+        }
+    }
+}
+
 QModelIndex QmlProfilerEventsMainView::selectedItem() const
 {
     QModelIndexList sel = selectedIndexes();
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.h b/src/plugins/qmlprofiler/qmlprofilereventview.h
index 48f37f2d5d1..93ae9479fb5 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.h
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.h
@@ -79,6 +79,7 @@ signals:
 
 public slots:
     void updateSelectedEvent(int eventId) const;
+    void selectBySourceLocation(const QString &filename, int line);
 
 protected:
     void contextMenuEvent(QContextMenuEvent *ev);
@@ -149,6 +150,7 @@ public slots:
     void clear();
     void jumpToItem(const QModelIndex &index);
     void selectEvent(int eventId);
+    void selectEventByLocation(const QString &filename, int line);
     void buildModel();
 
 private:
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index b44651242ba..694049913b7 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -388,6 +388,9 @@ QWidget *QmlProfilerTool::createWidgets()
     connect(d->m_v8profilerView, SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int)));
     connect(d->m_v8profilerView, SIGNAL(contextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint)));
 
+    connect(d->m_v8profilerView, SIGNAL(gotoSourceLocation(QString,int)), d->m_eventsView, SLOT(selectBySourceLocation(QString,int)));
+    connect(d->m_eventsView, SIGNAL(gotoSourceLocation(QString,int)), d->m_v8profilerView, SLOT(selectBySourceLocation(QString,int)));
+
     QDockWidget *eventsDock = AnalyzerManager::createDockWidget
             (this, tr("Events"), d->m_eventsView, Qt::BottomDockWidgetArea);
     QDockWidget *timelineDock = AnalyzerManager::createDockWidget
-- 
GitLab