From b7788bd80853eccd216b87c7751fde2e67a777df Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Wed, 1 Sep 2010 13:42:24 +0200
Subject: [PATCH] QmlJsDebugger: Make DebugServer a singleton

---
 .../include/qdeclarativedesigndebugserver.h   |  4 +-
 .../qdeclarativedesigndebugserver.cpp         | 11 +++-
 .../qmljsdebugger/qdeclarativedesignview.cpp  | 57 +++++++++----------
 .../qmljsdebugger/qdeclarativedesignview_p.h  |  3 +
 4 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h b/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
index 174187d6e95..a6efe3a440e 100644
--- a/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
+++ b/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
@@ -60,7 +60,8 @@ class QMLJSDEBUGGER_EXPORT QDeclarativeDesignDebugServer : public QDeclarativeDe
 {
     Q_OBJECT
 public:
-    QDeclarativeDesignDebugServer(QObject *parent = 0);
+    QDeclarativeDesignDebugServer();
+    static QDeclarativeDesignDebugServer *instance();
 
     void setDesignModeBehavior(bool inDesignMode);
     void setCurrentObjects(QList<QObject*> items);
@@ -99,7 +100,6 @@ protected:
 
 private:
     QHash<int, QString> m_stringIdForObjectId;
-
 };
 
 QT_END_NAMESPACE
diff --git a/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp b/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
index a8bd60736ac..cbb64752bba 100644
--- a/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
+++ b/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
@@ -46,9 +46,16 @@
 
 #include <QDebug>
 
-QDeclarativeDesignDebugServer::QDeclarativeDesignDebugServer(QObject *parent)
-    : QDeclarativeDebugService(QLatin1String("QDeclarativeDesignMode"), parent)
+Q_GLOBAL_STATIC(QDeclarativeDesignDebugServer, qmlDesignDebugServer)
+
+QDeclarativeDesignDebugServer::QDeclarativeDesignDebugServer()
+    : QDeclarativeDebugService(QLatin1String("QDeclarativeDesignMode"))
+{
+}
+
+QDeclarativeDesignDebugServer *QDeclarativeDesignDebugServer::instance()
 {
+    return qmlDesignDebugServer();
 }
 
 void QDeclarativeDesignDebugServer::messageReceived(const QByteArray &message)
diff --git a/share/qtcreator/qmljsdebugger/qdeclarativedesignview.cpp b/share/qtcreator/qmljsdebugger/qdeclarativedesignview.cpp
index 029f126b38e..f9e2a806de4 100644
--- a/share/qtcreator/qmljsdebugger/qdeclarativedesignview.cpp
+++ b/share/qtcreator/qmljsdebugger/qdeclarativedesignview.cpp
@@ -56,8 +56,6 @@ namespace QmlViewer {
 
 const int SceneChangeUpdateInterval = 5000;
 
-Q_GLOBAL_STATIC(QDeclarativeDesignDebugServer, qmlDesignDebugServer)
-
 QDeclarativeDesignViewPrivate::QDeclarativeDesignViewPrivate(QDeclarativeDesignView *q) :
     q(q),
     designModeBehavior(false),
@@ -85,34 +83,35 @@ QDeclarativeDesignView::QDeclarativeDesignView(QWidget *parent) :
 
     setMouseTracking(true);
 
-    connect(qmlDesignDebugServer(), SIGNAL(designModeBehaviorChanged(bool)), SLOT(setDesignModeBehavior(bool)));
-    connect(qmlDesignDebugServer(), SIGNAL(reloadRequested()), SLOT(_q_reloadView()));
-    connect(qmlDesignDebugServer(),
+    data->debugServer = QDeclarativeDesignDebugServer::instance();
+    connect(data->debugServer, SIGNAL(designModeBehaviorChanged(bool)), SLOT(setDesignModeBehavior(bool)));
+    connect(data->debugServer, SIGNAL(reloadRequested()), SLOT(_q_reloadView()));
+    connect(data->debugServer,
             SIGNAL(currentObjectsChanged(QList<QObject*>)),
             SLOT(_q_onCurrentObjectsChanged(QList<QObject*>)));
-    connect(qmlDesignDebugServer(), SIGNAL(animationSpeedChangeRequested(qreal)), SLOT(changeAnimationSpeed(qreal)));
-    connect(qmlDesignDebugServer(), SIGNAL(colorPickerToolRequested()), SLOT(_q_changeToColorPickerTool()));
-    connect(qmlDesignDebugServer(), SIGNAL(selectMarqueeToolRequested()), SLOT(_q_changeToMarqueeSelectTool()));
-    connect(qmlDesignDebugServer(), SIGNAL(selectToolRequested()), SLOT(_q_changeToSingleSelectTool()));
-    connect(qmlDesignDebugServer(), SIGNAL(zoomToolRequested()), SLOT(_q_changeToZoomTool()));
-    connect(qmlDesignDebugServer(),
+    connect(data->debugServer, SIGNAL(animationSpeedChangeRequested(qreal)), SLOT(changeAnimationSpeed(qreal)));
+    connect(data->debugServer, SIGNAL(colorPickerToolRequested()), SLOT(_q_changeToColorPickerTool()));
+    connect(data->debugServer, SIGNAL(selectMarqueeToolRequested()), SLOT(_q_changeToMarqueeSelectTool()));
+    connect(data->debugServer, SIGNAL(selectToolRequested()), SLOT(_q_changeToSingleSelectTool()));
+    connect(data->debugServer, SIGNAL(zoomToolRequested()), SLOT(_q_changeToZoomTool()));
+    connect(data->debugServer,
             SIGNAL(objectCreationRequested(QString,QObject*,QStringList,QString)),
             SLOT(_q_createQmlObject(QString,QObject*,QStringList,QString)));
-    connect(qmlDesignDebugServer(),
+    connect(data->debugServer,
             SIGNAL(objectReparentRequested(QObject *, QObject *)),
             SLOT(_q_reparentQmlObject(QObject *, QObject *)));
-    connect(qmlDesignDebugServer(), SIGNAL(contextPathIndexChanged(int)), SLOT(_q_changeContextPathIndex(int)));
-    connect(qmlDesignDebugServer(), SIGNAL(clearComponentCacheRequested()), SLOT(_q_clearComponentCache()));
+    connect(data->debugServer, SIGNAL(contextPathIndexChanged(int)), SLOT(_q_changeContextPathIndex(int)));
+    connect(data->debugServer, SIGNAL(clearComponentCacheRequested()), SLOT(_q_clearComponentCache()));
     connect(this, SIGNAL(statusChanged(QDeclarativeView::Status)), SLOT(_q_onStatusChanged(QDeclarativeView::Status)));
 
     connect(data->colorPickerTool, SIGNAL(selectedColorChanged(QColor)), SIGNAL(selectedColorChanged(QColor)));
     connect(data->colorPickerTool, SIGNAL(selectedColorChanged(QColor)),
-            qmlDesignDebugServer(), SLOT(selectedColorChanged(QColor)));
+            data->debugServer, SLOT(selectedColorChanged(QColor)));
 
     connect(data->subcomponentEditorTool, SIGNAL(cleared()), SIGNAL(inspectorContextCleared()));
     connect(data->subcomponentEditorTool, SIGNAL(contextPushed(QString)), SIGNAL(inspectorContextPushed(QString)));
     connect(data->subcomponentEditorTool, SIGNAL(contextPopped()), SIGNAL(inspectorContextPopped()));
-    connect(data->subcomponentEditorTool, SIGNAL(contextPathChanged(QStringList)), qmlDesignDebugServer(), SLOT(contextPathUpdated(QStringList)));
+    connect(data->subcomponentEditorTool, SIGNAL(contextPathChanged(QStringList)), data->debugServer, SLOT(contextPathUpdated(QStringList)));
 
     data->createToolbar();
 
@@ -131,7 +130,7 @@ void QDeclarativeDesignView::setInspectorContext(int contextIndex)
     if (data->subcomponentEditorTool->contextIndex() != contextIndex) {
         QGraphicsObject *object = data->subcomponentEditorTool->setContext(contextIndex);
         if (object)
-            qmlDesignDebugServer()->setCurrentObjects(QList<QObject*>() << object);
+            data->debugServer->setCurrentObjects(QList<QObject*>() << object);
     }
 }
 
@@ -202,7 +201,7 @@ void QDeclarativeDesignView::mouseReleaseEvent(QMouseEvent *event)
     data->cursorPos = event->pos();
     data->currentTool->mouseReleaseEvent(event);
 
-    qmlDesignDebugServer()->setCurrentObjects(AbstractFormEditorTool::toObjectList(selectedItems()));
+    data->debugServer->setCurrentObjects(AbstractFormEditorTool::toObjectList(selectedItems()));
 }
 
 void QDeclarativeDesignView::keyPressEvent(QKeyEvent *event)
@@ -335,7 +334,7 @@ void QDeclarativeDesignView::mouseDoubleClickEvent(QMouseEvent *event)
     if ((event->buttons() & Qt::LeftButton) && itemToEnter) {
         QGraphicsObject *objectToEnter = itemToEnter->toGraphicsObject();
         if (objectToEnter)
-            qmlDesignDebugServer()->setCurrentObjects(QList<QObject*>() << objectToEnter);
+            data->debugServer->setCurrentObjects(QList<QObject*>() << objectToEnter);
     }
 
 }
@@ -364,7 +363,7 @@ void QDeclarativeDesignView::setDesignModeBehavior(bool value)
     emit designModeBehaviorChanged(value);
 
     data->toolbar->setDesignModeBehavior(value);
-    qmlDesignDebugServer()->setDesignModeBehavior(value);
+    data->debugServer->setDesignModeBehavior(value);
 
     data->designModeBehavior = value;
     if (data->subcomponentEditorTool) {
@@ -414,7 +413,7 @@ void QDeclarativeDesignViewPrivate::setSelectedItemsForTools(QList<QGraphicsItem
 void QDeclarativeDesignViewPrivate::setSelectedItems(QList<QGraphicsItem *> items)
 {
     setSelectedItemsForTools(items);
-    qmlDesignDebugServer()->setCurrentObjects(AbstractFormEditorTool::toObjectList(items));
+    debugServer->setCurrentObjects(AbstractFormEditorTool::toObjectList(items));
 }
 
 QList<QGraphicsItem *> QDeclarativeDesignViewPrivate::selectedItems()
@@ -504,7 +503,7 @@ void QDeclarativeDesignViewPrivate::_q_changeToSingleSelectTool()
     changeToSelectTool();
 
     emit q->selectToolActivated();
-    qmlDesignDebugServer()->setCurrentTool(Constants::SelectionToolMode);
+    debugServer->setCurrentTool(Constants::SelectionToolMode);
 }
 
 void QDeclarativeDesignViewPrivate::changeToSelectTool()
@@ -525,7 +524,7 @@ void QDeclarativeDesignViewPrivate::_q_changeToMarqueeSelectTool()
     selectionTool->setRubberbandSelectionMode(true);
 
     emit q->marqueeSelectToolActivated();
-    qmlDesignDebugServer()->setCurrentTool(Constants::MarqueeSelectionToolMode);
+    debugServer->setCurrentTool(Constants::MarqueeSelectionToolMode);
 }
 
 void QDeclarativeDesignViewPrivate::_q_changeToZoomTool()
@@ -536,7 +535,7 @@ void QDeclarativeDesignViewPrivate::_q_changeToZoomTool()
     currentTool->clear();
 
     emit q->zoomToolActivated();
-    qmlDesignDebugServer()->setCurrentTool(Constants::ZoomMode);
+    debugServer->setCurrentTool(Constants::ZoomMode);
 }
 
 void QDeclarativeDesignViewPrivate::_q_changeToColorPickerTool()
@@ -550,7 +549,7 @@ void QDeclarativeDesignViewPrivate::_q_changeToColorPickerTool()
     currentTool->clear();
 
     emit q->colorPickerActivated();
-    qmlDesignDebugServer()->setCurrentTool(Constants::ColorPickerMode);
+    debugServer->setCurrentTool(Constants::ColorPickerMode);
 }
 
 void QDeclarativeDesignViewPrivate::_q_changeContextPathIndex(int index)
@@ -583,7 +582,7 @@ void QDeclarativeDesignView::continueExecution(qreal slowdownFactor)
     data->executionPaused = false;
 
     emit executionStarted(data->slowdownFactor);
-    qmlDesignDebugServer()->setAnimationSpeed(data->slowdownFactor);
+    data->debugServer->setAnimationSpeed(data->slowdownFactor);
 }
 
 void QDeclarativeDesignView::pauseExecution()
@@ -594,7 +593,7 @@ void QDeclarativeDesignView::pauseExecution()
     data->executionPaused = true;
 
     emit executionPaused();
-    qmlDesignDebugServer()->setAnimationSpeed(0);
+    data->debugServer->setAnimationSpeed(0);
 }
 
 void QDeclarativeDesignViewPrivate::_q_applyChangesFromClient()
@@ -654,7 +653,7 @@ void QDeclarativeDesignViewPrivate::_q_onStatusChanged(QDeclarativeView::Status
             emit q->executionStarted(1.0f);
 
         }
-        qmlDesignDebugServer()->reloaded();
+        debugServer->reloaded();
     }
 }
 
@@ -678,7 +677,7 @@ void QDeclarativeDesignViewPrivate::_q_onCurrentObjectsChanged(QList<QObject*> o
 
 QString QDeclarativeDesignView::idStringForObject(QObject *obj)
 {
-    return qmlDesignDebugServer()->idStringForObject(obj);
+    return QDeclarativeDesignDebugServer::instance()->idStringForObject(obj);
 }
 
 // adjusts bounding boxes on edges of screen to be visible
diff --git a/share/qtcreator/qmljsdebugger/qdeclarativedesignview_p.h b/share/qtcreator/qmljsdebugger/qdeclarativedesignview_p.h
index 5166f60d23e..e5a63d99826 100644
--- a/share/qtcreator/qmljsdebugger/qdeclarativedesignview_p.h
+++ b/share/qtcreator/qmljsdebugger/qdeclarativedesignview_p.h
@@ -35,6 +35,7 @@
 #include <QTimer>
 
 #include "qdeclarativedesignview.h"
+#include "qdeclarativedesigndebugserver.h"
 
 QT_FORWARD_DECLARE_CLASS(JSDebuggerAgent)
 
@@ -65,6 +66,8 @@ public:
     ~QDeclarativeDesignViewPrivate();
 
     QDeclarativeDesignView *q;
+    QDeclarativeDesignDebugServer *debugServer;
+
     QPointF cursorPos;
     QList<QWeakPointer<QGraphicsObject> > currentSelection;
 
-- 
GitLab