aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp')
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp133
1 files changed, 126 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 2c239a8aa9..00e2ac028a 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -311,8 +311,10 @@ void resetSize(const SelectionContext &selectionState)
selectionState.view()->executeInTransaction("DesignerActionManager|resetSize",[selectionState](){
foreach (ModelNode node, selectionState.selectedModelNodes()) {
QmlItemNode itemNode(node);
- itemNode.removeProperty("width");
- itemNode.removeProperty("height");
+ if (itemNode.isValid()) {
+ itemNode.removeProperty("width");
+ itemNode.removeProperty("height");
+ }
}
});
}
@@ -325,8 +327,10 @@ void resetPosition(const SelectionContext &selectionState)
selectionState.view()->executeInTransaction("DesignerActionManager|resetPosition",[selectionState](){
foreach (ModelNode node, selectionState.selectedModelNodes()) {
QmlItemNode itemNode(node);
- itemNode.removeProperty("x");
- itemNode.removeProperty("y");
+ if (itemNode.isValid()) {
+ itemNode.removeProperty("x");
+ itemNode.removeProperty("y");
+ }
}
});
}
@@ -348,7 +352,8 @@ void resetZ(const SelectionContext &selectionState)
selectionState.view()->executeInTransaction("DesignerActionManager|resetZ",[selectionState](){
foreach (ModelNode node, selectionState.selectedModelNodes()) {
QmlItemNode itemNode(node);
- itemNode.removeProperty("z");
+ if (itemNode.isValid())
+ itemNode.removeProperty("z");
}
});
}
@@ -452,7 +457,6 @@ static void layoutHelperFunction(const SelectionContext &selectionContext,
const LessThan &lessThan)
{
if (!selectionContext.view()
- || !selectionContext.hasSingleSelectedModelNode()
|| !selectionContext.view()->model()->hasNodeMetaInfo(layoutType))
return;
@@ -1095,7 +1099,122 @@ void addFlowEffect(const SelectionContext &selectionContext, const TypeName &typ
container.nodeProperty("effect").reparentHere(effectNode);
view->setSelectedModelNode(effectNode);
}
- });
+ });
+}
+
+void setFlowStartItem(const SelectionContext &selectionContext)
+{
+ AbstractView *view = selectionContext.view();
+
+ QTC_ASSERT(view && selectionContext.hasSingleSelectedModelNode(), return);
+ ModelNode node = selectionContext.currentSingleSelectedNode();
+ QTC_ASSERT(node.isValid(), return);
+ QTC_ASSERT(node.metaInfo().isValid(), return);
+ QmlFlowItemNode flowItem(node);
+ QTC_ASSERT(flowItem.isValid(), return);
+ QTC_ASSERT(flowItem.flowView().isValid(), return);
+ view->executeInTransaction("DesignerActionManager:setFlowStartItem",
+ [&flowItem](){
+ flowItem.flowView().setStartFlowItem(flowItem);
+ });
+}
+
+
+bool static hasStudioComponentsImport(const SelectionContext &context)
+{
+ if (context.view() && context.view()->model()) {
+ Import import = Import::createLibraryImport("QtQuick.Studio.Components", "1.0");
+ return context.view()->model()->hasImport(import, true, true);
+ }
+
+ return false;
+}
+
+static inline void setAdjustedPos(const QmlDesigner::ModelNode &modelNode)
+{
+ if (modelNode.hasParentProperty()) {
+ ModelNode parentNode = modelNode.parentProperty().parentModelNode();
+
+ const QPointF instancePos = QmlItemNode(modelNode).instancePosition();
+ const int x = instancePos.x() - parentNode.variantProperty("x").value().toInt();
+ const int y = instancePos.y() - parentNode.variantProperty("y").value().toInt();
+
+ modelNode.variantProperty("x").setValue(x);
+ modelNode.variantProperty("y").setValue(y);
+ }
+}
+
+void reparentToNodeAndAdjustPosition(const ModelNode &parentModelNode,
+ const QList<ModelNode> &modelNodeList)
+{
+ for (ModelNode modelNode : modelNodeList) {
+ reparentTo(modelNode, parentModelNode);
+ setAdjustedPos(modelNode);
+
+ for (const VariantProperty &variantProperty : modelNode.variantProperties()) {
+ if (variantProperty.name().contains("anchors."))
+ modelNode.removeProperty(variantProperty.name());
+ }
+ for (const BindingProperty &bindingProperty : modelNode.bindingProperties()) {
+ if (bindingProperty.name().contains("anchors."))
+ modelNode.removeProperty(bindingProperty.name());
+ }
+ }
+}
+
+void addToGroupItem(const SelectionContext &selectionContext)
+{
+ const TypeName typeName = "QtQuick.Studio.Components.GroupItem";
+
+ try {
+ if (!hasStudioComponentsImport(selectionContext)) {
+ Import studioImport = Import::createLibraryImport("QtQuick.Studio.Components", "1.0");
+ selectionContext.view()-> model()->changeImports({studioImport}, {});
+ }
+
+ if (!selectionContext.view())
+ return;
+
+ if (QmlItemNode::isValidQmlItemNode(selectionContext.firstSelectedModelNode())) {
+ const QmlItemNode qmlItemNode = QmlItemNode(selectionContext.firstSelectedModelNode());
+
+ if (qmlItemNode.hasInstanceParentItem()) {
+ ModelNode groupNode;
+ selectionContext.view()->executeInTransaction("DesignerActionManager|addToGroupItem1",[=, &groupNode](){
+
+ QmlItemNode parentNode = qmlItemNode.instanceParentItem();
+ NodeMetaInfo metaInfo = selectionContext.view()->model()->metaInfo(typeName);
+ groupNode = selectionContext.view()->createModelNode(typeName, metaInfo.majorVersion(), metaInfo.minorVersion());
+ reparentTo(groupNode, parentNode);
+ });
+ selectionContext.view()->executeInTransaction("DesignerActionManager|addToGroupItem2",[=](){
+
+ QList<ModelNode> selectedNodes = selectionContext.selectedModelNodes();
+ setUpperLeftPostionToNode(groupNode, selectedNodes);
+
+ reparentToNodeAndAdjustPosition(groupNode, selectedNodes);
+ });
+ }
+ }
+ } catch (RewritingException &e) {
+ e.showException();
+ }
+}
+
+void selectFlowEffect(const SelectionContext &selectionContext)
+{
+ if (!selectionContext.singleNodeIsSelected())
+ return;
+
+ ModelNode node = selectionContext.currentSingleSelectedNode();
+ QmlVisualNode transition(node);
+
+ QTC_ASSERT(transition.isValid(), return);
+ QTC_ASSERT(transition.isFlowTransition(), return);
+
+ if (node.hasNodeProperty("effect")) {
+ selectionContext.view()->setSelectedModelNode(node.nodeProperty("effect").modelNode());
+ }
}
} // namespace Mode