From 68d323014e38cf6f2e3fc7b5c940765b16ca24d4 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Tue, 8 Mar 2011 16:54:29 +0100
Subject: [PATCH] QmlDesigner.formEditor: allow selection of non movable items

Some items are not movable, but the user should still be able
to select them in the form editor.

Best example are items inside a positioner.
---
 .../components/formeditor/formeditorview.cpp       | 14 ++++++++++++++
 .../components/formeditor/formeditorview.h         |  1 +
 .../formeditor/singleselectionmanipulator.cpp      |  2 --
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 1f10304f011..9cc920b4684 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -290,6 +290,9 @@ void FormEditorView::changeToMoveTool()
     if (m_currentTool == m_moveTool)
         return;
 
+    if (!isMoveToolAvailable())
+        return;
+
     scene()->setPaintMode(FormEditorScene::NormalMode);
     m_scene->updateAllFormEditorItems();
     setCursor(Qt::SizeAllCursor);
@@ -319,6 +322,9 @@ void FormEditorView::changeToMoveTool(const QPointF &beginPoint)
     if (m_currentTool == m_moveTool)
         return;
 
+    if (!isMoveToolAvailable())
+        return;
+
     scene()->setPaintMode(FormEditorScene::NormalMode);
     m_scene->updateAllFormEditorItems();
     setCursor(Qt::SizeAllCursor);
@@ -600,6 +606,14 @@ void FormEditorView::setSelectOnlyContentItemsAction(bool selectOnlyContentItems
     m_selectionTool->setSelectOnlyContentItems(selectOnlyContentItems);
 }
 
+bool FormEditorView::isMoveToolAvailable() const
+{
+    if (selectedQmlItemNodes().count() == 1)
+        return selectedQmlItemNodes().first().instanceIsMovable() &&
+               !selectedQmlItemNodes().first().instanceIsInPositioner();
+    return true;
+}
+
 void FormEditorView::stateChanged(const QmlModelState &newQmlModelState, const QmlModelState &oldQmlModelState)
 {
     QmlModelView::stateChanged(newQmlModelState, oldQmlModelState);
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index b8a4c57d190..452f61914b6 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -135,6 +135,7 @@ protected slots:
     QList<ModelNode> adjustStatesForModelNodes(const QList<ModelNode> &nodeList) const;
     void updateGraphicsIndicators();
     void setSelectOnlyContentItemsAction(bool selectOnlyContentItems);
+    bool isMoveToolAvailable() const;
 
 private: //functions
     void setupFormEditorItemTree(const QmlItemNode &qmlItemNode);
diff --git a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
index 944ecd8f1e2..cfbddc50fab 100644
--- a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
@@ -85,8 +85,6 @@ void SingleSelectionManipulator::select(SelectionType selectionType, bool select
 
         if (formEditorItem
            && formEditorItem->qmlItemNode().isValid()
-           && formEditorItem->qmlItemNode().instanceIsMovable()
-           && !formEditorItem->qmlItemNode().instanceIsInPositioner()
            && (formEditorItem->qmlItemNode().hasShowContent() || !selectOnlyContentItems))
         {
             selectedNode = formEditorItem->qmlItemNode();
-- 
GitLab