aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2020-07-09 20:18:55 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2020-07-10 16:30:02 +0000
commitc0d4127d7023fe3597727ea2225ef5e527ab6766 (patch)
treedcc2957650f034dd838db86eb1c8eb69a5e61973 /src/plugins/qmldesigner/components/componentcore
parent5bb462e070c4f66ea0e250ae02b1948a4859a852 (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')
-rw-r--r--src/plugins/qmldesigner/components/componentcore/componentcore_constants.h5
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp82
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp38
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h1
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