From 9e58ab2ac88c9beae06b7ef371b32c8bb5a54b0b Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
Date: Mon, 16 Sep 2013 14:33:07 +0200
Subject: [PATCH] QmlProfiler: Initial conversion from Quick 1 to Quick 2

Updated class names and functions. Fixed imports.

Change-Id: I5f12e3a108a0e60c091acc9c415ff77e52118029
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
---
 src/plugins/plugins.pro                       |  8 +-
 .../qmlprofiler/canvas/qdeclarativecanvas.cpp | 24 +++--
 .../qmlprofiler/canvas/qdeclarativecanvas_p.h | 17 ++--
 .../canvas/qdeclarativecanvastimer.cpp        | 14 +--
 .../canvas/qdeclarativecanvastimer_p.h        | 14 ++-
 .../canvas/qdeclarativecontext2d.cpp          | 12 ++-
 .../canvas/qdeclarativecontext2d_p.h          | 14 +--
 .../qmlprofiler/canvas/qmlprofilercanvas.cpp  |  6 +-
 .../qmlprofiler/canvas/qmlprofilercanvas.h    |  6 +-
 src/plugins/qmlprofiler/qml/Detail.qml        |  2 +-
 src/plugins/qmlprofiler/qml/Label.qml         |  2 +-
 src/plugins/qmlprofiler/qml/MainView.qml      |  4 +-
 src/plugins/qmlprofiler/qml/Overview.qml      |  4 +-
 src/plugins/qmlprofiler/qml/RangeDetails.qml  |  2 +-
 src/plugins/qmlprofiler/qml/RangeMover.qml    |  2 +-
 .../qmlprofiler/qml/SelectionRange.qml        |  2 +-
 .../qmlprofiler/qml/SelectionRangeDetails.qml |  2 +-
 src/plugins/qmlprofiler/qml/TimeDisplay.qml   |  2 +-
 src/plugins/qmlprofiler/qml/TimeMarks.qml     |  2 +-
 src/plugins/qmlprofiler/qmlprofiler.pro       |  2 +-
 src/plugins/qmlprofiler/qmlprofiler.qbs       |  2 +-
 .../qmlprofiler/qmlprofilertraceview.cpp      | 88 ++++++++++---------
 .../qmlprofiler/qmlprofilertraceview.h        |  9 +-
 src/plugins/qmlprofiler/timelinerenderer.cpp  | 21 +++--
 src/plugins/qmlprofiler/timelinerenderer.h    | 18 ++--
 25 files changed, 143 insertions(+), 136 deletions(-)

diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 95de5cf33c4..73cf7b15e9b 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -64,16 +64,18 @@ isEmpty(IDE_PACKAGE_MODE) {
 
 contains(QT_CONFIG, declarative)|!isEmpty(QT.declarative.name) {
     SUBDIRS += \
-        qmlprojectmanager \
-        qmlprofiler
+        qmlprojectmanager
 
     greaterThan(QT_MAJOR_VERSION, 4):greaterThan(QT_MINOR_VERSION, 0) {
         SUBDIRS += \
             qmldesigner \
+            qmlprofiler \
             welcome
     } else {
         warning("QmlDesigner plugin has been disabled.")
-        warning("The plugin needs at least Qt 5.1.")
+        warning("QmlProfiler plugin has been disabled.")
+        warning("Welcome plugin has been disabled.")
+        warning("These plugins need at least Qt 5.1.")
     }
 } else {
     warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative")
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
index 70a849f39b9..4611d7096b3 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
@@ -35,16 +35,14 @@
 
 QT_BEGIN_NAMESPACE
 
-Canvas::Canvas(QDeclarativeItem *parent)
-    : QDeclarativeItem(parent),
+Canvas::Canvas(QQuickPaintedItem *parent)
+    : QQuickPaintedItem(parent),
     m_context(new Context2D(this)),
     m_canvasWidth(0),
     m_canvasHeight(0),
     m_fillMode(Canvas::Stretch),
     m_color(Qt::white)
 {
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
-    setCacheMode(QGraphicsItem::DeviceCoordinateCache);
 }
 
 
@@ -57,10 +55,10 @@ void Canvas::componentComplete()
 
     connect(m_context, SIGNAL(changed()), this, SLOT(requestPaint()));
     emit init();
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
-void Canvas::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+void Canvas::paint(QPainter *painter)
 {
     m_context->setInPaint(true);
     emit paint();
@@ -160,7 +158,7 @@ void Canvas::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometr
         && newGeometry.width() > 0 && newGeometry.height() > 0) {
         m_context->setSize(width(), height());
     }
-    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
+    QQuickItem::geometryChanged(newGeometry, oldGeometry);
 }
 
 void Canvas::setCanvasWidth(int newWidth)
@@ -219,24 +217,24 @@ CanvasImage *Canvas::toImage() const
     return new CanvasImage(m_context->pixmap());
 }
 
-void Canvas::setTimeout(const QScriptValue &handler, long timeout)
+void Canvas::setTimeout(const QJSValue &handler, long timeout)
 {
-    if (handler.isFunction())
+    if (handler.isCallable())
         CanvasTimer::createTimer(this, handler, timeout, true);
 }
 
-void Canvas::setInterval(const QScriptValue &handler, long interval)
+void Canvas::setInterval(const QJSValue &handler, long interval)
 {
-    if (handler.isFunction())
+    if (handler.isCallable())
         CanvasTimer::createTimer(this, handler, interval, false);
 }
 
-void Canvas::clearTimeout(const QScriptValue &handler)
+void Canvas::clearTimeout(const QJSValue &handler)
 {
     CanvasTimer::removeTimer(handler);
 }
 
-void Canvas::clearInterval(const QScriptValue &handler)
+void Canvas::clearInterval(const QJSValue &handler)
 {
     CanvasTimer::removeTimer(handler);
 }
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
index 429097d5b42..3f4fd8b0dd5 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
@@ -30,15 +30,14 @@
 #ifndef QDECLARATIVECANVAS_P_H
 #define QDECLARATIVECANVAS_P_H
 
-#include <qdeclarativeitem.h>
+#include <QQuickPaintedItem>
 
 #include "qdeclarativecontext2d_p.h"
 #include "qdeclarativecanvastimer_p.h"
 
 QT_BEGIN_NAMESPACE
 
-QT_MODULE(Declarative)
-class Canvas : public QDeclarativeItem
+class Canvas : public QQuickPaintedItem
 {
     Q_OBJECT
 
@@ -49,11 +48,11 @@ class Canvas : public QDeclarativeItem
     Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
 
 public:
-    Canvas(QDeclarativeItem *parent = 0);
+    Canvas(QQuickPaintedItem *parent = 0);
     enum FillMode { Stretch, PreserveAspectFit, PreserveAspectCrop, Tile, TileVertically, TileHorizontally };
 
 
-    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    void paint(QPainter *);
     void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
     void setCanvasWidth(int newWidth);
     int canvasWidth() {return m_canvasWidth;}
@@ -78,10 +77,10 @@ public Q_SLOTS:
     bool save(const QString& filename) const;
 
     // Timers
-    void setInterval(const QScriptValue &handler, long timeout);
-    void setTimeout(const QScriptValue &handler, long timeout);
-    void clearInterval(const QScriptValue &handler);
-    void clearTimeout(const QScriptValue &handler);
+    void setInterval(const QJSValue &handler, long timeout);
+    void setTimeout(const QJSValue &handler, long timeout);
+    void clearInterval(const QJSValue &handler);
+    void clearTimeout(const QJSValue &handler);
 
 Q_SIGNALS:
     void fillModeChanged();
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
index 4d41aec983b..8069fbbcb70 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
@@ -29,28 +29,28 @@
 
 #include "qdeclarativecanvastimer_p.h"
 
-#include <qscriptengine.h>
-#include <qscriptvalue.h>
+#include <QJSEngine>
+#include <QJSValue>
 #include <qtimer.h>
 
 QT_BEGIN_NAMESPACE
 
 Q_GLOBAL_STATIC(QList<CanvasTimer*> , activeTimers);
 
-CanvasTimer::CanvasTimer(QObject *parent, const QScriptValue &data)
+CanvasTimer::CanvasTimer(QObject *parent, const QJSValue &data)
     : QTimer(parent), m_value(data)
 {
 }
 
 void CanvasTimer::handleTimeout()
 {
-    Q_ASSERT(m_value.isFunction());
+    Q_ASSERT(m_value.isCallable());
     m_value.call();
     if (isSingleShot())
         removeTimer(this);
 }
 
-void CanvasTimer::createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot)
+void CanvasTimer::createTimer(QObject *parent, const QJSValue &val, long timeout, bool singleshot)
 {
 
     CanvasTimer *timer = new CanvasTimer(parent, val);
@@ -67,9 +67,9 @@ void CanvasTimer::removeTimer(CanvasTimer *timer)
     timer->deleteLater();
 }
 
-void CanvasTimer::removeTimer(const QScriptValue &val)
+void CanvasTimer::removeTimer(const QJSValue &val)
 {
-    if (!val.isFunction())
+    if (!val.isCallable())
         return;
 
     for (int i = 0 ; i < activeTimers()->count() ; ++i) {
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
index 915afa542dd..b25a98eb44f 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
@@ -30,32 +30,30 @@
 #ifndef QDECLARATIVECANVASTIMER_P_H
 #define QDECLARATIVECANVASTIMER_P_H
 
-#include <qscriptvalue.h>
+#include <QJSValue>
 #include <qtimer.h>
 #include <qlist.h>
 
 QT_BEGIN_NAMESPACE
 
-QT_MODULE(Declarative)
-
 class CanvasTimer : public QTimer
 {
     Q_OBJECT
 
 public:
-    CanvasTimer(QObject *parent, const QScriptValue &data);
+    CanvasTimer(QObject *parent, const QJSValue &data);
 
 public Q_SLOTS:
     void handleTimeout();
-    bool equals(const QScriptValue &value){return m_value.equals(value);}
+    bool equals(const QJSValue &value){return m_value.equals(value);}
 
 public:
-    static void createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot);
+    static void createTimer(QObject *parent, const QJSValue &val, long timeout, bool singleshot);
     static void removeTimer(CanvasTimer *timer);
-    static void removeTimer(const QScriptValue &);
+    static void removeTimer(const QJSValue &);
 
 private:
-    QScriptValue m_value;
+    QJSValue m_value;
 
 };
 
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
index 5121aac3320..be092b12ad7 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
@@ -39,6 +39,7 @@
 #include <qgraphicseffect.h>
 
 #include <QImage>
+#include <QWidget>
 
 QT_BEGIN_NAMESPACE
 
@@ -737,8 +738,8 @@ void Context2D::strokeRect(qreal x, qreal y, qreal w, qreal h)
     scheduleChange();
 }
 
-void Context2D::mouseArea(qreal x, qreal y, qreal w, qreal h, const QScriptValue &callback,
-                          const QScriptValue &data)
+void Context2D::mouseArea(qreal x, qreal y, qreal w, qreal h, const QJSValue &callback,
+                          const QJSValue &data)
 {
     MouseArea a = { callback, data, QRectF(x, y, w, h), m_state.matrix };
     m_mouseAreas << a;
@@ -1103,9 +1104,14 @@ void Context2D::setPainterTranslate(const QPoint &translate)
 }
 
 void Context2D::scheduleChange()
+{
+    QMetaObject::invokeMethod(this, "onScheduleChange", Qt::QueuedConnection, Q_ARG(int, 0));
+}
+
+void Context2D::onScheduleChange(int interval)
 {
     if (m_changeTimerId == -1 && !m_inPaint)
-        m_changeTimerId = startTimer(0);
+        m_changeTimerId = startTimer(interval);
 }
 
 void Context2D::timerEvent(QTimerEvent *e)
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
index 71838757689..cd84e1fa2b3 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
@@ -38,11 +38,10 @@
 #include <qmetatype.h>
 #include <qcoreevent.h>
 #include <qvariant.h>
-#include <qscriptvalue.h>
 
-QT_BEGIN_NAMESPACE
+#include <QJSValue>
 
-QT_MODULE(Declarative)
+QT_BEGIN_NAMESPACE
 
 QColor colorFromString(const QString &name);
 
@@ -174,8 +173,8 @@ public:
     void setShadowColor(const QString &str);
 
     struct MouseArea {
-        QScriptValue callback;
-        QScriptValue data;
+        QJSValue callback;
+        QJSValue data;
         QRectF rect;
         QMatrix matrix;
     };
@@ -209,7 +208,7 @@ public slots:
     void strokeRect(qreal x, qreal y, qreal w, qreal h);
 
     // mouse
-    void mouseArea(qreal x, qreal y, qreal w, qreal h, const QScriptValue &, const QScriptValue & = QScriptValue());
+    void mouseArea(qreal x, qreal y, qreal w, qreal h, const QJSValue &, const QJSValue & = QJSValue());
 
     // path API
     void beginPath();
@@ -239,6 +238,9 @@ public slots:
     void putImageData(ImageData image, qreal dx, qreal dy);
     void endPainting();
 
+private slots:
+    void onScheduleChange(int interval);
+
 signals:
     void changed();
 
diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
index 01e3b3cdda1..e0786808639 100644
--- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
+++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
@@ -41,9 +41,7 @@ QmlProfilerCanvas::QmlProfilerCanvas()
     : m_context2d(new Context2D(this))
     , m_dirty(true)
 {
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
     setAcceptedMouseButtons(Qt::LeftButton);
-    setCacheMode(QGraphicsItem::DeviceCoordinateCache);
 }
 
 void QmlProfilerCanvas::requestPaint()
@@ -57,7 +55,7 @@ void QmlProfilerCanvas::requestRedraw()
     update();
 }
 
-void QmlProfilerCanvas::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
+void QmlProfilerCanvas::paint(QPainter *p)
 {
     if (m_context2d->size().width() != width() || m_context2d->size().height() != height()) {
         m_dirty = true;
@@ -84,7 +82,7 @@ void QmlProfilerCanvas::componentComplete()
         if (p.hasNotifySignal())
             QMetaObject::connect(this, p.notifySignalIndex(), this, requestPaintMethod, 0, 0);
     }
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
 }
diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
index 51289d8b964..f7837f2ed06 100644
--- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
+++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
@@ -30,7 +30,7 @@
 #ifndef QMLPROFILERCANVAS_H
 #define QMLPROFILERCANVAS_H
 
-#include <QDeclarativeItem>
+#include <QQuickPaintedItem>
 
 QT_BEGIN_NAMESPACE
 class Context2D;
@@ -39,7 +39,7 @@ QT_END_NAMESPACE
 namespace QmlProfiler {
 namespace Internal {
 
-class QmlProfilerCanvas : public QDeclarativeItem
+class QmlProfilerCanvas : public QQuickPaintedItem
 {
     Q_OBJECT
 
@@ -67,7 +67,7 @@ public slots:
     void requestRedraw();
 
 protected:
-    virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    virtual void paint(QPainter *);
     virtual void componentComplete();
 
 private:
diff --git a/src/plugins/qmlprofiler/qml/Detail.qml b/src/plugins/qmlprofiler/qml/Detail.qml
index 7bc28178d99..6eab0bbc3d3 100644
--- a/src/plugins/qmlprofiler/qml/Detail.qml
+++ b/src/plugins/qmlprofiler/qml/Detail.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/Label.qml b/src/plugins/qmlprofiler/qml/Label.qml
index 015391a3f53..608bb53f766 100644
--- a/src/plugins/qmlprofiler/qml/Label.qml
+++ b/src/plugins/qmlprofiler/qml/Label.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Item {
     id: labelContainer
diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml
index 9e859258ee7..0cdb3b81eaa 100644
--- a/src/plugins/qmlprofiler/qml/MainView.qml
+++ b/src/plugins/qmlprofiler/qml/MainView.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Rectangle {
@@ -502,7 +502,7 @@ Rectangle {
             onPressed:  {
                 selectionRange.pressedOnCreation();
             }
-            onMousePositionChanged: {
+            onPositionChanged: {
                 selectionRange.movedOnCreation();
             }
         }
diff --git a/src/plugins/qmlprofiler/qml/Overview.qml b/src/plugins/qmlprofiler/qml/Overview.qml
index d90e1e6c7dc..42bc387e19c 100644
--- a/src/plugins/qmlprofiler/qml/Overview.qml
+++ b/src/plugins/qmlprofiler/qml/Overview.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 import "Overview.js" as Plotter
 
@@ -108,7 +108,7 @@ Canvas2D {
         onPressed: {
             jumpTo(mouse.x);
         }
-        onMousePositionChanged: {
+        onPositionChanged: {
             jumpTo(mouse.x);
         }
     }
diff --git a/src/plugins/qmlprofiler/qml/RangeDetails.qml b/src/plugins/qmlprofiler/qml/RangeDetails.qml
index a0fb3e8d779..dae4db3818e 100644
--- a/src/plugins/qmlprofiler/qml/RangeDetails.qml
+++ b/src/plugins/qmlprofiler/qml/RangeDetails.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/RangeMover.qml b/src/plugins/qmlprofiler/qml/RangeMover.qml
index 18226d8d25f..4e1fa4290c9 100644
--- a/src/plugins/qmlprofiler/qml/RangeMover.qml
+++ b/src/plugins/qmlprofiler/qml/RangeMover.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Rectangle {
     id: rangeMover
diff --git a/src/plugins/qmlprofiler/qml/SelectionRange.qml b/src/plugins/qmlprofiler/qml/SelectionRange.qml
index b302de614a7..6079b071359 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRange.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRange.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Rectangle {
     id: selectionRange
diff --git a/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml b/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
index 5af24af14da..529bf3b980f 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml
index 2f5a8bfaafa..dd6ece60838 100644
--- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml
+++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Canvas2D {
diff --git a/src/plugins/qmlprofiler/qml/TimeMarks.qml b/src/plugins/qmlprofiler/qml/TimeMarks.qml
index f2ba65f66e7..742bc096295 100644
--- a/src/plugins/qmlprofiler/qml/TimeMarks.qml
+++ b/src/plugins/qmlprofiler/qml/TimeMarks.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Canvas2D {
diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro
index c9f7ba7ed7f..f5b68699d5d 100644
--- a/src/plugins/qmlprofiler/qmlprofiler.pro
+++ b/src/plugins/qmlprofiler/qmlprofiler.pro
@@ -1,6 +1,6 @@
 DEFINES += QMLPROFILER_LIBRARY
 
-QT += network script declarative
+QT += network qml quick
 
 include(../../qtcreatorplugin.pri)
 include(canvas/canvas.pri)
diff --git a/src/plugins/qmlprofiler/qmlprofiler.qbs b/src/plugins/qmlprofiler/qmlprofiler.qbs
index 82bf351cf81..48df39e062a 100644
--- a/src/plugins/qmlprofiler/qmlprofiler.qbs
+++ b/src/plugins/qmlprofiler/qmlprofiler.qbs
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
 QtcPlugin {
     name: "QmlProfiler"
 
-    Depends { name: "Qt"; submodules: ["widgets", "network", "script", "declarative"] }
+    Depends { name: "Qt"; submodules: ["widgets", "network", "qml", "quick"] }
     Depends { name: "Core" }
     Depends { name: "AnalyzerBase" }
     Depends { name: "QmlProjectManager" }
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
index c094a07f131..76874e92729 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
@@ -42,7 +42,7 @@
 
 #include <utils/styledbar.h>
 
-#include <QDeclarativeContext>
+#include <QQmlContext>
 #include <QToolButton>
 #include <QEvent>
 #include <QVBoxLayout>
@@ -50,6 +50,7 @@
 #include <QScrollBar>
 #include <QSlider>
 #include <QMenu>
+#include <QQuickItem>
 
 #include <math.h>
 
@@ -86,23 +87,22 @@ void ZoomControl::setRange(qint64 startTime, qint64 endTime)
 }
 
 /////////////////////////////////////////////////////////
-ScrollableDeclarativeView::ScrollableDeclarativeView(QWidget *parent)
-    : QDeclarativeView(parent)
+ScrollableQuickView::ScrollableQuickView(QQuickView *parent)
+    : QQuickView(parent)
 {
 }
 
-ScrollableDeclarativeView::~ScrollableDeclarativeView()
+ScrollableQuickView::~ScrollableQuickView()
 {
 }
 
-void ScrollableDeclarativeView::scrollContentsBy(int dx, int dy)
+void ScrollableQuickView::scrollContentsBy(int /*dx*/, int dy)
 {
     // special workaround to track the scrollbar
     if (rootObject()) {
         int scrollY = rootObject()->property("scrollY").toInt();
         rootObject()->setProperty("scrollY", QVariant(scrollY - dy));
     }
-    QDeclarativeView::scrollContentsBy(dx,dy);
 }
 
 /////////////////////////////////////////////////////////
@@ -110,6 +110,13 @@ class QmlProfilerTraceView::QmlProfilerTraceViewPrivate
 {
 public:
     QmlProfilerTraceViewPrivate(QmlProfilerTraceView *qq) : q(qq) {}
+    ~QmlProfilerTraceViewPrivate()
+    {
+        delete m_mainView;
+        delete m_timebar;
+        delete m_overview;
+    }
+
     QmlProfilerTraceView *q;
 
     QmlProfilerStateManager *m_profilerState;
@@ -118,9 +125,9 @@ public:
 
     QSize m_sizeHint;
 
-    ScrollableDeclarativeView *m_mainView;
-    QDeclarativeView *m_timebar;
-    QDeclarativeView *m_overview;
+    ScrollableQuickView *m_mainView;
+    QQuickView *m_timebar;
+    QQuickView *m_overview;
     QmlProfilerModelManager *m_modelManager;
     TimelineModelAggregator *m_modelProxy;
 
@@ -145,40 +152,38 @@ QmlProfilerTraceView::QmlProfilerTraceView(QWidget *parent, Analyzer::IAnalyzerT
     groupLayout->setContentsMargins(0, 0, 0, 0);
     groupLayout->setSpacing(0);
 
-    d->m_mainView = new ScrollableDeclarativeView(this);
-    d->m_mainView->setResizeMode(QDeclarativeView::SizeViewToRootObject);
-    d->m_mainView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-    d->m_mainView->setBackgroundBrush(QBrush(Qt::white));
-    d->m_mainView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
-    d->m_mainView->setFocus();
+    d->m_mainView = new ScrollableQuickView();
+    d->m_mainView->setResizeMode(QQuickView::SizeViewToRootObject);
+    QWidget *mainViewContainer = QWidget::createWindowContainer(d->m_mainView);
 
     MouseWheelResizer *resizer = new MouseWheelResizer(this);
     connect(resizer,SIGNAL(mouseWheelMoved(int,int,int)), this, SLOT(mouseWheelMoved(int,int,int)));
-    d->m_mainView->viewport()->installEventFilter(resizer);
 
     QHBoxLayout *toolsLayout = new QHBoxLayout;
 
-    d->m_timebar = new QDeclarativeView(this);
-    d->m_timebar->setResizeMode(QDeclarativeView::SizeRootObjectToView);
-    d->m_timebar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    d->m_timebar->setFixedHeight(24);
+    d->m_timebar = new QQuickView();
+    d->m_timebar->setResizeMode(QQuickView::SizeRootObjectToView);
+    QWidget *timeBarContainer = QWidget::createWindowContainer(d->m_timebar);
+    timeBarContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    timeBarContainer->setFixedHeight(24);
 
-    d->m_overview = new QDeclarativeView(this);
-    d->m_overview->setResizeMode(QDeclarativeView::SizeRootObjectToView);
-    d->m_overview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    d->m_overview->setMaximumHeight(50);
+    d->m_overview = new QQuickView();
+    d->m_overview->setResizeMode(QQuickView::SizeRootObjectToView);
+    QWidget *overviewContainer = QWidget::createWindowContainer(d->m_overview);
+    overviewContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    overviewContainer->setMaximumHeight(50);
 
     d->m_zoomToolbar = createZoomToolbar();
     d->m_zoomToolbar->move(0, d->m_timebar->height());
     d->m_zoomToolbar->setVisible(false);
 
     toolsLayout->addWidget(createToolbar());
-    toolsLayout->addWidget(d->m_timebar);
+    toolsLayout->addWidget(timeBarContainer);
     emit enableToolbar(false);
 
     groupLayout->addLayout(toolsLayout);
-    groupLayout->addWidget(d->m_mainView);
-    groupLayout->addWidget(d->m_overview);
+    groupLayout->addWidget(mainViewContainer);
+    groupLayout->addWidget(overviewContainer);
 
     setLayout(groupLayout);
 
@@ -224,7 +229,7 @@ void QmlProfilerTraceView::reset()
     d->m_overview->setSource(QUrl(QLatin1String("qrc:/qmlprofiler/Overview.qml")));
 
     d->m_mainView->setSource(QUrl(QLatin1String("qrc:/qmlprofiler/MainView.qml")));
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     rootObject->setProperty("width", QVariant(width()));
     rootObject->setProperty("candidateHeight", QVariant(height() - d->m_timebar->height() - d->m_overview->height()));
 
@@ -345,7 +350,7 @@ QWidget *QmlProfilerTraceView::createZoomToolbar()
 /////////////////////////////////////////////////////////
 bool QmlProfilerTraceView::hasValidSelection() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeReady").toBool();
     return false;
@@ -353,7 +358,7 @@ bool QmlProfilerTraceView::hasValidSelection() const
 
 qint64 QmlProfilerTraceView::selectionStart() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeStart").toLongLong();
     return 0;
@@ -361,7 +366,7 @@ qint64 QmlProfilerTraceView::selectionStart() const
 
 qint64 QmlProfilerTraceView::selectionEnd() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeEnd").toLongLong();
     return 0;
@@ -380,7 +385,7 @@ void QmlProfilerTraceView::clearDisplay()
 
 void QmlProfilerTraceView::selectNextEventByHash(const QString &hash)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
 
     if (rootObject)
         QMetaObject::invokeMethod(rootObject, "selectNextByHash",
@@ -392,7 +397,7 @@ void QmlProfilerTraceView::selectNextEventByLocation(const QString &filename, co
     int eventId = d->m_modelProxy->getEventIdForLocation(filename, line, column);
 
     if (eventId != -1) {
-        QGraphicsObject *rootObject = d->m_mainView->rootObject();
+        QQuickItem *rootObject = d->m_mainView->rootObject();
         if (rootObject)
             QMetaObject::invokeMethod(rootObject, "selectNextById",
                                       Q_ARG(QVariant,QVariant(eventId)));
@@ -403,7 +408,7 @@ void QmlProfilerTraceView::selectNextEventByLocation(const QString &filename, co
 // Goto source location
 void QmlProfilerTraceView::updateCursorPosition()
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     emit gotoSourceLocation(rootObject->property("fileName").toString(),
                             rootObject->property("lineNumber").toInt(),
                             rootObject->property("columnNumber").toInt());
@@ -413,7 +418,7 @@ void QmlProfilerTraceView::updateCursorPosition()
 // Toolbar buttons
 void QmlProfilerTraceView::toggleRangeMode(bool active)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     bool rangeMode = rootObject->property("selectionRangeMode").toBool();
     if (active != rangeMode) {
         if (active)
@@ -436,7 +441,7 @@ void QmlProfilerTraceView::updateRangeButton()
 
 void QmlProfilerTraceView::toggleLockMode(bool active)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     bool lockMode = !rootObject->property("selectionLocked").toBool();
     if (active != lockMode) {
         rootObject->setProperty("selectionLocked", QVariant(!active));
@@ -480,7 +485,7 @@ void QmlProfilerTraceView::updateRange()
 void QmlProfilerTraceView::mouseWheelMoved(int mouseX, int mouseY, int wheelDelta)
 {
     Q_UNUSED(mouseY);
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject) {
         QMetaObject::invokeMethod(rootObject, "wheelZoom",
                                   Q_ARG(QVariant, QVariant(mouseX)),
@@ -493,15 +498,14 @@ void QmlProfilerTraceView::updateToolTip(const QString &text)
     setToolTip(text);
 }
 
-void QmlProfilerTraceView::updateVerticalScroll(int newPosition)
+void QmlProfilerTraceView::updateVerticalScroll(int /*newPosition*/)
 {
-    d->m_mainView->verticalScrollBar()->setValue(newPosition);
 }
 
 void QmlProfilerTraceView::resizeEvent(QResizeEvent *event)
 {
     QWidget::resizeEvent(event);
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject) {
         rootObject->setProperty("width", QVariant(event->size().width()));
         int newHeight = event->size().height() - d->m_timebar->height() - d->m_overview->height();
@@ -560,14 +564,14 @@ void QmlProfilerTraceView::contextMenuEvent(QContextMenuEvent *ev)
 // Tell QML the state of the profiler
 void QmlProfilerTraceView::setRecording(bool recording)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         rootObject->setProperty("recordingEnabled", QVariant(recording));
 }
 
 void QmlProfilerTraceView::setAppKilled()
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         rootObject->setProperty("appKilled",QVariant(true));
 }
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.h b/src/plugins/qmlprofiler/qmlprofilertraceview.h
index dd7d233ff08..985838f7aa6 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.h
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.h
@@ -30,7 +30,8 @@
 #ifndef QMLPROFILERTRACEVIEW_H
 #define QMLPROFILERTRACEVIEW_H
 
-#include <QDeclarativeView>
+#include <QQuickView>
+#include <QWidget>
 
 namespace Analyzer {
 class IAnalyzerTool;
@@ -74,12 +75,12 @@ private:
     qint64 m_endTime;
 };
 
-class ScrollableDeclarativeView : public QDeclarativeView
+class ScrollableQuickView : public QQuickView
 {
     Q_OBJECT
 public:
-    explicit ScrollableDeclarativeView(QWidget *parent = 0);
-    ~ScrollableDeclarativeView();
+    explicit ScrollableQuickView(QQuickView *parent = 0);
+    ~ScrollableQuickView();
 protected:
     void scrollContentsBy(int dx, int dy);
 };
diff --git a/src/plugins/qmlprofiler/timelinerenderer.cpp b/src/plugins/qmlprofiler/timelinerenderer.cpp
index 4f86f2cd9a3..77d895cf249 100644
--- a/src/plugins/qmlprofiler/timelinerenderer.cpp
+++ b/src/plugins/qmlprofiler/timelinerenderer.cpp
@@ -29,8 +29,8 @@
 
 #include "timelinerenderer.h"
 
-#include <qdeclarativecontext.h>
-#include <qdeclarativeproperty.h>
+#include <QQmlContext>
+#include <QQmlProperty>
 #include <QTimer>
 #include <QPixmap>
 #include <QPainter>
@@ -43,13 +43,12 @@ using namespace QmlProfiler::Internal;
 
 const int DefaultRowHeight = 30;
 
-TimelineRenderer::TimelineRenderer(QDeclarativeItem *parent) :
-    QDeclarativeItem(parent), m_startTime(0), m_endTime(0), m_spacing(0),
+TimelineRenderer::TimelineRenderer(QQuickPaintedItem *parent) :
+    QQuickPaintedItem(parent), m_startTime(0), m_endTime(0), m_spacing(0),
     m_lastStartTime(0), m_lastEndTime(0)
   , m_profilerModelProxy(0)
 {
     clearData();
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
     setAcceptedMouseButtons(Qt::LeftButton);
     setAcceptHoverEvents(true);
 }
@@ -77,7 +76,7 @@ void TimelineRenderer::componentComplete()
         if (p.hasNotifySignal())
             QMetaObject::connect(this, p.notifySignalIndex(), this, requestPaintMethod, 0, 0);
     }
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
 void TimelineRenderer::requestPaint()
@@ -85,7 +84,7 @@ void TimelineRenderer::requestPaint()
     update();
 }
 
-void TimelineRenderer::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
+void TimelineRenderer::paint(QPainter *p)
 {
     qint64 windowDuration = m_endTime - m_startTime;
     if (windowDuration <= 0)
@@ -260,7 +259,7 @@ int TimelineRenderer::modelFromPosition(int y)
     return 0;
 }
 
-void TimelineRenderer::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mousePressEvent(QMouseEvent *event)
 {
     // special case: if there is a drag area below me, don't accept the
     // events unless I'm actually clicking inside an item
@@ -271,19 +270,19 @@ void TimelineRenderer::mousePressEvent(QGraphicsSceneMouseEvent *event)
 
 }
 
-void TimelineRenderer::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_UNUSED(event);
     manageClicked();
 }
 
-void TimelineRenderer::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mouseMoveEvent(QMouseEvent *event)
 {
     event->setAccepted(false);
 }
 
 
-void TimelineRenderer::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+void TimelineRenderer::hoverMoveEvent(QHoverEvent *event)
 {
     Q_UNUSED(event);
     manageHovered(event->pos().x(), event->pos().y());
diff --git a/src/plugins/qmlprofiler/timelinerenderer.h b/src/plugins/qmlprofiler/timelinerenderer.h
index d4c70a4d9ed..e5018565d72 100644
--- a/src/plugins/qmlprofiler/timelinerenderer.h
+++ b/src/plugins/qmlprofiler/timelinerenderer.h
@@ -30,15 +30,15 @@
 #ifndef TIMELINERENDERER_H
 #define TIMELINERENDERER_H
 
-#include <QDeclarativeItem>
-#include <QScriptValue>
+#include <QQuickPaintedItem>
+#include <QJSValue>
 #include "qmlprofilertimelinemodelproxy.h"
 #include "timelinemodelaggregator.h"
 
 namespace QmlProfiler {
 namespace Internal {
 
-class TimelineRenderer : public QDeclarativeItem
+class TimelineRenderer : public QQuickPaintedItem
 {
     Q_OBJECT
     Q_PROPERTY(qint64 startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
@@ -51,7 +51,7 @@ class TimelineRenderer : public QDeclarativeItem
     Q_PROPERTY(int endDragArea READ endDragArea WRITE setEndDragArea NOTIFY endDragAreaChanged)
 
 public:
-    explicit TimelineRenderer(QDeclarativeItem *parent = 0);
+    explicit TimelineRenderer(QQuickPaintedItem *parent = 0);
 
     qint64 startTime() const
     {
@@ -176,12 +176,12 @@ public slots:
     }
 
 protected:
-    virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    virtual void paint(QPainter *);
     virtual void componentComplete();
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void hoverMoveEvent(QHoverEvent *event);
 
 private:
     void drawItemsToPainter(QPainter *p, int modelIndex, int fromIndex, int toIndex);
-- 
GitLab