From 64a167c2f5d22dd23c23ad86c87cf89ce682d6da Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@nokia.com>
Date: Tue, 19 Jan 2010 12:40:41 +0100
Subject: [PATCH] Add option in the toolbar to toogle selection of items with
 no content

---
 .../components/formeditor/formeditor.qrc      |   3 ++
 .../components/formeditor/formeditorview.cpp  |   8 +++++
 .../components/formeditor/formeditorview.h    |   1 +
 .../formeditor/formeditorwidget.cpp           |  20 ++++++++++-
 .../components/formeditor/formeditorwidget.h  |   3 ++
 .../components/formeditor/selectiontool.cpp   |  33 ++++++++++--------
 .../components/formeditor/selectiontool.h     |   4 +++
 .../formeditor/selectonlycontentitems.png     | Bin 0 -> 308 bytes
 .../formeditor/singleselectionmanipulator.cpp |   4 +--
 .../formeditor/singleselectionmanipulator.h   |   2 +-
 10 files changed, 60 insertions(+), 18 deletions(-)
 create mode 100644 src/plugins/qmldesigner/components/formeditor/selectonlycontentitems.png

diff --git a/src/plugins/qmldesigner/components/formeditor/formeditor.qrc b/src/plugins/qmldesigner/components/formeditor/formeditor.qrc
index 12ad311853b..c954ee32b8a 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditor.qrc
+++ b/src/plugins/qmldesigner/components/formeditor/formeditor.qrc
@@ -10,4 +10,7 @@
         <file>snapping.png</file>
 	<file>boundingrect.png</file>
     </qresource>
+    <qresource prefix="/icon/selection">
+        <file>selectonlycontentitems.png</file>
+    </qresource>
 </RCC>
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index c1a941e46f7..3f533bf789b 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -68,6 +68,8 @@ FormEditorView::FormEditorView(QObject *parent)
 {
     connect(widget()->zoomAction(), SIGNAL(zoomLevelChanged(double)), SLOT(updateGraphicsIndicators()));
     connect(widget()->showBoundingRectAction(), SIGNAL(toggled(bool)), scene(), SLOT(setShowBoundingRects(bool)));
+    connect(widget()->selectOnlyContentItemsAction(), SIGNAL(toggled(bool)), this, SLOT(setSelectOnlyContentItemsAction(bool)));
+
 }
 
 FormEditorScene* FormEditorView::scene() const
@@ -519,6 +521,12 @@ void FormEditorView::updateGraphicsIndicators()
     m_currentTool->formEditorItemsChanged(scene()->allFormEditorItems());
 }
 
+
+void FormEditorView::setSelectOnlyContentItemsAction(bool selectOnlyContentItems)
+{
+    m_selectionTool->setSelectOnlyContentItems(selectOnlyContentItems);
+}
+
 void FormEditorView::updateItem(const QmlObjectNode &qmlObjectNode)
 {
 
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index 82b6f18a756..6f8f7d43172 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -118,6 +118,7 @@ protected:
 protected slots:
     QList<ModelNode> adjustStatesForModelNodes(const QList<ModelNode> &nodeList) const;
     void updateGraphicsIndicators();
+    void setSelectOnlyContentItemsAction(bool selectOnlyContentItems);
 
 private: //functions
     void setupFormEditorItemTree(const QmlItemNode &qmlItemNode);
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
index 6c5eddde2f2..02ebd6e5a73 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
@@ -121,7 +121,20 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
     connect(m_zoomAction.data(), SIGNAL(zoomLevelChanged(double)), SLOT(setZoomLevel(double)));
     addAction(m_zoomAction.data());
 
-    QAction *separatorAction = new QAction(toolActionGroup());
+    QAction *separatorAction = new QAction(this);
+    separatorAction->setSeparator(true);
+    addAction(separatorAction);
+
+    m_selectOnlyContentItemsAction = layoutActionGroup->addAction("Select Only Items with Content (Press Key T)");
+    m_selectOnlyContentItemsAction->setShortcut(Qt::Key_T);
+    m_selectOnlyContentItemsAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
+    m_selectOnlyContentItemsAction->setCheckable(true);
+    m_selectOnlyContentItemsAction->setChecked(true);
+    m_selectOnlyContentItemsAction->setIcon(QPixmap(":/icon/selection/selectonlycontentitems.png"));
+
+    addAction(m_selectOnlyContentItemsAction.data());
+
+    separatorAction = new QAction(toolActionGroup());
     separatorAction->setSeparator(true);
     addAction(separatorAction);
 
@@ -192,6 +205,11 @@ QAction *FormEditorWidget::showBoundingRectAction() const
     return m_showBoundingRectAction.data();
 }
 
+QAction *FormEditorWidget::selectOnlyContentItemsAction() const
+{
+    return m_selectOnlyContentItemsAction.data();
+}
+
 void FormEditorWidget::setZoomLevel(double zoomLevel)
 {
     m_graphicsView->resetTransform();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
index 2f9089b8650..a3c0ec35f50 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
@@ -54,6 +54,8 @@ public:
     QAction *anchorToolAction() const;
     QAction *transformToolAction() const;
     QAction *showBoundingRectAction() const;
+    QAction *selectOnlyContentItemsAction() const;
+
 
     void setScene(FormEditorScene *scene);
     ToolBox *toolBox() const;
@@ -85,6 +87,7 @@ private:
     QWeakPointer<NumberSeriesAction> m_snappingMarginAction;
     QWeakPointer<NumberSeriesAction> m_snappingSpacingAction;
     QWeakPointer<QAction> m_showBoundingRectAction;
+    QWeakPointer<QAction> m_selectOnlyContentItemsAction;
 };
 
 
diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
index 8dffee98d00..ab91ca57b66 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
@@ -49,8 +49,8 @@ SelectionTool::SelectionTool(FormEditorView *editorView)
     m_rubberbandSelectionManipulator(editorView->scene()->manipulatorLayerItem(), editorView),
     m_singleSelectionManipulator(editorView),
     m_selectionIndicator(editorView->scene()->manipulatorLayerItem()),
-    m_resizeIndicator(editorView->scene()->manipulatorLayerItem())
-
+    m_resizeIndicator(editorView->scene()->manipulatorLayerItem()),
+    m_selectOnlyContentItems(true)
 {
 //    view()->setCursor(Qt::CrossCursor);
 }
@@ -69,21 +69,21 @@ void SelectionTool::mousePressEvent(const QList<QGraphicsItem*> &itemList,
         m_singleSelectionManipulator.begin(event->scenePos());
 
         if (event->modifiers().testFlag(Qt::ControlModifier))
-            m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection);
+            m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection, m_selectOnlyContentItems);
         else if (event->modifiers().testFlag(Qt::ShiftModifier))
-            m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection);
+            m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection, m_selectOnlyContentItems);
         else
-            m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection);
+            m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection, m_selectOnlyContentItems);
     } else {
         if (event->modifiers().testFlag(Qt::AltModifier)) {
             m_singleSelectionManipulator.begin(event->scenePos());
 
             if (event->modifiers().testFlag(Qt::ControlModifier))
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection, m_selectOnlyContentItems);
             else if (event->modifiers().testFlag(Qt::ShiftModifier))
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection, m_selectOnlyContentItems);
             else
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection, m_selectOnlyContentItems);
 
             m_singleSelectionManipulator.end(event->scenePos());
             view()->changeToMoveTool(event->scenePos());
@@ -149,11 +149,11 @@ void SelectionTool::mouseReleaseEvent(const QList<QGraphicsItem*> &/*itemList*/,
             m_singleSelectionManipulator.begin(event->scenePos());
 
             if (event->modifiers().testFlag(Qt::ControlModifier))
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection, m_selectOnlyContentItems);
             else if (event->modifiers().testFlag(Qt::ShiftModifier))
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection, m_selectOnlyContentItems);
             else
-                m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection);
+                m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection, m_selectOnlyContentItems);
 
             m_singleSelectionManipulator.end(event->scenePos());
         } else {
@@ -226,6 +226,11 @@ void SelectionTool::pasteClipBoard()
     // QClipboard *clipboard = QApplication::clipboard();
 }
 
+void SelectionTool::setSelectOnlyContentItems(bool selectOnlyContentItems)
+{
+    m_selectOnlyContentItems = selectOnlyContentItems;
+}
+
 void SelectionTool::itemsAboutToRemoved(const QList<FormEditorItem*> &/*itemList*/)
 {
 
@@ -270,11 +275,11 @@ void SelectionTool::selectUnderPoint(QGraphicsSceneMouseEvent *event)
     m_singleSelectionManipulator.begin(event->scenePos());
 
     if (event->modifiers().testFlag(Qt::ControlModifier))
-        m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection);
+        m_singleSelectionManipulator.select(SingleSelectionManipulator::RemoveFromSelection, m_selectOnlyContentItems);
     else if (event->modifiers().testFlag(Qt::ShiftModifier))
-        m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection);
+        m_singleSelectionManipulator.select(SingleSelectionManipulator::AddToSelection, m_selectOnlyContentItems);
     else
-        m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection);
+        m_singleSelectionManipulator.select(SingleSelectionManipulator::InvertSelection, m_selectOnlyContentItems);
 
     m_singleSelectionManipulator.end(event->scenePos());
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.h b/src/plugins/qmldesigner/components/formeditor/selectiontool.h
index 062eb20fbc9..6af700daec9 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectiontool.h
+++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.h
@@ -81,12 +81,16 @@ public:
     void copySelectedNodeToClipBoard();
     void cutSelectedNodeToClipBoard();
     void pasteClipBoard();
+
+    void setSelectOnlyContentItems(bool selectOnlyContentItems);
+
 private:
     RubberBandSelectionManipulator m_rubberbandSelectionManipulator;
     SingleSelectionManipulator m_singleSelectionManipulator;
     SelectionIndicator m_selectionIndicator;
     ResizeIndicator m_resizeIndicator;
     QTime m_mousePressTimer;
+    bool m_selectOnlyContentItems;
 };
 
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/selectonlycontentitems.png b/src/plugins/qmldesigner/components/formeditor/selectonlycontentitems.png
new file mode 100644
index 0000000000000000000000000000000000000000..1af42301e947ddf4f58bc337b3bcd8f5ecbc9343
GIT binary patch
literal 308
zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}Y)RhkE<hRx
zemd{22U45`9+AZi4BWyX%*Zfnjs#GUy~NYkmHif@Ft;pYOY?VUpwJdi7sn8d^K&N|
za<v!;xW>0BRJ6=-W;w60a}B%a!q$lH1ZD29uvxmBc5!!S-(lB0bVk|u;o*bdtQyz7
zmS}4<7CB(iH&0q3dCEQgb2~LOPa82jDc+;KM)&HzX?LdIh@Zl7a@7U(cD2Gw=JrPy
zX<Ui)y|t}(+NxDd3*J|&_+EbT@skaI{jOY(%O-)BY|g8AGC9OvfB(ed`G##Fm%mud
x+WURY>#l2x>Zdm?*!u05#MkmC7TiBY{pU41Z!9lYc@K0ygQu&X%Q~loCIIX|bJ_p^

literal 0
HcmV?d00001

diff --git a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
index 43625eb9550..c7765558d25 100644
--- a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp
@@ -69,7 +69,7 @@ void SingleSelectionManipulator::end(const QPointF &/*updatePoint*/)
     m_isActive = false;
 }
 
-void SingleSelectionManipulator::select(SelectionType selectionType)
+void SingleSelectionManipulator::select(SelectionType selectionType, bool selectOnlyContentItems)
 {
     QList<QGraphicsItem*> itemList = m_editorView->scene()->items(m_beginPoint);
 
@@ -81,7 +81,7 @@ void SingleSelectionManipulator::select(SelectionType selectionType)
 
         if (formEditorItem
            && !formEditorItem->qmlItemNode().isRootNode()
-           && (formEditorItem->qmlItemNode().hasShowContent()))
+           && (formEditorItem->qmlItemNode().hasShowContent() || !selectOnlyContentItems))
         {
             selectedNode = formEditorItem->qmlItemNode();
             break;
diff --git a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.h b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.h
index a97abaa1453..af541305c6d 100644
--- a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.h
+++ b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.h
@@ -53,7 +53,7 @@ public:
     void update(const QPointF& updatePoint);
     void end(const QPointF& updatePoint);
 
-    void select(SelectionType selectionType);
+    void select(SelectionType selectionType, bool selectOnlyContentItems);
 
     void clear();
 
-- 
GitLab