diff --git a/src/plugins/qmldesigner/components/formeditor/formeditor.qrc b/src/plugins/qmldesigner/components/formeditor/formeditor.qrc index 12ad311853b260e26e5f58723be95a15c08fb501..c954ee32b8acb85da9c9c1bd9ca79eb479e26bc6 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 c1a941e46f7984cc9496a6cfa29f79495b353c93..3f533bf789b61c9e17c02db3bc670d87383bdea7 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 82b6f18a75643724e9295fc7285144539878a415..6f8f7d43172b3899380bc3c7177d3e45ced4f531 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 6c5eddde2f232d5121d2022b42aa2077987af0ee..02ebd6e5a733732b11aceca4e4ff01730e344e5e 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 2f9089b8650366338f364381f5a54a63d7c9ed31..a3c0ec35f50dc7bf89d8a5e50b524b8796a9fa6e 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 8dffee98d006ed33d0c9af5e37fd426ab9951e66..ab91ca57b662c5a86b8defc8a7dd32df1880e679 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 062eb20fbc9ae8489f45a912f268497d73332b16..6af700daec9a75024454e5c6e8687fe111711e00 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 Binary files /dev/null and b/src/plugins/qmldesigner/components/formeditor/selectonlycontentitems.png differ diff --git a/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/singleselectionmanipulator.cpp index 43625eb9550420e1de57ce83bb0a635c1eca1d49..c7765558d25386b3a5e0c966b74a75b02b56ef68 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 a97abaa14532a08fdd5eb10ab1f45fbcac15b204..af541305c6d2eb0b90aa9245e7b916b93580284f 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();