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