diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-07-09 20:18:55 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-07-10 16:30:02 +0000 |
commit | c0d4127d7023fe3597727ea2225ef5e527ab6766 (patch) | |
tree | dcc2957650f034dd838db86eb1c8eb69a5e61973 /src/plugins/qmldesigner/components/componentcore | |
parent | 5bb462e070c4f66ea0e250ae02b1948a4859a852 (diff) |
QmlDesigner: Add remove group action
Task-number: QDS-2228
Change-Id: I4174a51b3de1c7ea82b69b85bef19e62a878aa28
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore')
4 files changed, 96 insertions, 30 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 806da7f428..6186575e43 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -83,6 +83,9 @@ const char decreaseIndexOfStackedContainerCommandId[] = "DecreaseIndexOfStackedC const char flowAssignEffectCommandId[] = "AssignFlowEffect"; const char flowAssignCustomEffectCommandId[] = "AssignFlowCustomEffect"; const char addToGroupItemCommandId[] = "AddToGroupItem"; +const char removeGroupItemCommandId[] = "RemoveToGroupItem"; +const char fitRootToScreenCommandId[] = "FitRootToScreen"; +const char fitSelectionToScreenCommandId[] = "FitSelectionToScreen"; const char selectionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Selection"); const char flowConnectionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Connect"); @@ -139,6 +142,8 @@ const char setFlowStartDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu const char removeLayoutDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Remove Layout"); const char addToGroupItemDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Group in GroupItem"); +const char removeGroupItemDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", + "Remove GroupItem"); const char addItemToStackedContainerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Item"); const char addTabBarToStackedContainerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Tab Bar"); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 8ccdef7acd..cbc987651a 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -660,6 +660,27 @@ bool isStackedContainerAndIndexCanBeIncreased(const SelectionContext &context) return value < maxValue; } +bool isGroup(const SelectionContext &context) +{ + if (!inBaseState(context)) + return false; + + if (!singleSelection(context)) + return false; + + ModelNode currentSelectedNode = context.currentSingleSelectedNode(); + + if (!currentSelectedNode.isValid()) + return false; + + NodeMetaInfo metaInfo = currentSelectedNode.metaInfo(); + + if (!metaInfo.isValid()) + return false; + + return metaInfo.isSubclassOf("QtQuick.Studio.Components.GroupItem"); +} + bool isLayout(const SelectionContext &context) { if (!inBaseState(context)) @@ -937,12 +958,10 @@ void DesignerActionManager::createDefaultDesignerActions() priorityLayoutCategory, &layoutOptionVisible)); - addDesignerAction(new ActionGroup( - groupCategoryDisplayName, - groupCategory, - priorityGroupCategory, - &positionOptionVisible, - &studioComponentsAvailable)); + addDesignerAction(new ActionGroup(groupCategoryDisplayName, + groupCategory, + priorityGroupCategory, + &studioComponentsAvailable)); addDesignerAction(new ActionGroup( flowCategoryDisplayName, @@ -1085,29 +1104,34 @@ void DesignerActionManager::createDefaultDesignerActions() &isLayout, &isLayout)); - addDesignerAction(new ModelNodeContextMenuAction( - addToGroupItemCommandId, - addToGroupItemDisplayName, - {}, - groupCategory, - QKeySequence(), - 110, - &addToGroupItem, - &selectionCanBeLayouted, - &selectionCanBeLayouted)); - - - addDesignerAction(new ModelNodeFormEditorAction( - addItemToStackedContainerCommandId, - addItemToStackedContainerDisplayName, - addIcon.icon(), - addItemToStackedContainerToolTip, - stackedContainerCategory, - QKeySequence("Ctrl+Shift+a"), - 110, - &addItemToStackedContainer, - &isStackedContainer, - &isStackedContainer)); + addDesignerAction(new ModelNodeContextMenuAction(addToGroupItemCommandId, + addToGroupItemDisplayName, + {}, + groupCategory, + QKeySequence("Ctrl+Shift+g"), + 110, + &addToGroupItem, + &selectionCanBeLayouted)); + + addDesignerAction(new ModelNodeContextMenuAction(removeGroupItemCommandId, + removeGroupItemDisplayName, + {}, + groupCategory, + QKeySequence(), + 110, + &removeGroup, + &isGroup)); + + addDesignerAction(new ModelNodeFormEditorAction(addItemToStackedContainerCommandId, + addItemToStackedContainerDisplayName, + addIcon.icon(), + addItemToStackedContainerToolTip, + stackedContainerCategory, + QKeySequence("Ctrl+Shift+a"), + 110, + &addItemToStackedContainer, + &isStackedContainer, + &isStackedContainer)); addDesignerAction(new ModelNodeContextMenuAction( addTabBarToStackedContainerCommandId, diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 98148b7bd3..7453807a83 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1482,6 +1482,42 @@ void mergeWithTemplate(const SelectionContext &selectionContext) styleMerge(selectionContext, templateFile); } -} // namespace Mode +void removeGroup(const SelectionContext &selectionContext) +{ + if (!selectionContext.view() || !selectionContext.hasSingleSelectedModelNode()) + return; + + ModelNode group = selectionContext.currentSingleSelectedNode(); + + if (!QmlItemNode::isValidQmlItemNode(group)) + return; + + QmlItemNode groupItem(group); + + QmlItemNode parent = groupItem.instanceParentItem(); + + if (!parent.isValid()) + return; + + selectionContext.view()->executeInTransaction( + "DesignerActionManager::removeGroup", [selectionContext, &groupItem, parent]() { + for (const ModelNode &modelNode : + selectionContext.currentSingleSelectedNode().directSubModelNodes()) { + if (modelNode.isValid()) { + QmlItemNode qmlItem(modelNode); + + QPointF pos = qmlItem.instancePosition(); + pos = groupItem.instanceTransform().map(pos); + modelNode.variantProperty("x").setValue(pos.x()); + modelNode.variantProperty("y").setValue(pos.y()); + + parent.modelNode().defaultNodeListProperty().reparentHere(modelNode); + } + } + groupItem.destroy(); + }); +} + +} // namespace ModelNodeOperations } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index afd8416bf9..96dedf352a 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -82,6 +82,7 @@ void setFlowStartItem(const SelectionContext &selectionContext); void addToGroupItem(const SelectionContext &selectionContext); void selectFlowEffect(const SelectionContext &selectionContext); void mergeWithTemplate(const SelectionContext &selectionContext); +void removeGroup(const SelectionContext &selectionContext); } // namespace ModelNodeOperationso } //QmlDesigner |