From ba69c69a88266ad50b001c090e7c5963336c4659 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@digia.com>
Date: Thu, 7 Mar 2013 16:57:59 +0100
Subject: [PATCH] QmlDesigner: Add interface to add custom form editor tools

Change-Id: Iae3d4b5db84c4a5f59ff8b4b1208b02b895df00f
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
---
 .../qmldesigner/components/formeditor/formeditorview.cpp    | 6 ++++++
 .../qmldesigner/components/formeditor/formeditorview.h      | 3 +++
 src/plugins/qmldesigner/designercore/include/viewmanager.h  | 1 +
 src/plugins/qmldesigner/designercore/model/viewmanager.cpp  | 5 +++++
 4 files changed, 15 insertions(+)

diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index db051d203a4..b5316e35522 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -90,6 +90,7 @@ FormEditorView::~FormEditorView()
     delete m_dragTool;
     m_dragTool = 0;
 
+    qDeleteAll(m_toolList);
 
     // delete scene after tools to prevent double deletion
     // of items
@@ -406,6 +407,11 @@ void FormEditorView::changeToTransformTools()
     changeToSelectionTool();
 }
 
+void FormEditorView::registerTool(AbstractFormEditorTool *tool)
+{
+    m_toolList.append(tool);
+}
+
 void FormEditorView::nodeSlidedToIndex(const NodeListProperty &listProperty, int /*newIndex*/, int /*oldIndex*/)
 {
     QList<ModelNode> newOrderModelNodeList = listProperty.toModelNodeList();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index 09b7f6c7898..63853dcef51 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -98,6 +98,8 @@ public:
     void changeToResizeTool();
     void changeToTransformTools();
 
+    void registerTool(AbstractFormEditorTool *tool);
+
     void nodeSlidedToIndex(const NodeListProperty &listProperty, int newIndex, int oldIndex);
     void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data);
 
@@ -136,6 +138,7 @@ private: //functions
 private: //variables
     QWeakPointer<FormEditorWidget> m_formEditorWidget;
     QWeakPointer<FormEditorScene> m_scene;
+    QList<AbstractFormEditorTool*> m_toolList;
     MoveTool *m_moveTool;
     SelectionTool *m_selectionTool;
     ResizeTool *m_resizeTool;
diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h
index b38b964ea4b..405e9a23861 100644
--- a/src/plugins/qmldesigner/designercore/include/viewmanager.h
+++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h
@@ -69,6 +69,7 @@ public:
     void setNodeInstanceViewQtPath(const QString & qtPath);
 
     void resetPropertyEditorView();
+    void resisterFormEditorTool(AbstractFormEditorTool *tool); // takes ownership
 
     QWidget *formEditorWidget();
     QWidget *propertyEditorWidget();
diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
index c65292dbf6f..d309ea79dea 100644
--- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
@@ -82,6 +82,11 @@ void ViewManager::resetPropertyEditorView()
     m_propertyEditorView.resetView();
 }
 
+void ViewManager::resisterFormEditorTool(AbstractFormEditorTool *tool)
+{
+    m_formEditorView.registerTool(tool);
+}
+
 void ViewManager::detachViewsExceptRewriterAndComponetView()
 {
     switchStateEditorViewToBaseState();
-- 
GitLab