QmlDesigner: Implement operations for FlowEditor

Change-Id: I9bb1ee00981085e26b6b0a17aad94e1b30dc2f71
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2020-01-29 14:09:37 +01:00
committed by Tim Jenssen
parent 9d216d89e5
commit f43a48aee8
2 changed files with 86 additions and 0 deletions

View File

@@ -44,6 +44,7 @@
#include <documentmanager.h>
#include <qmlanchors.h>
#include <nodelistproperty.h>
#include <nodeproperty.h>
#include <signalhandlerproperty.h>
#include <limits>
@@ -1014,6 +1015,88 @@ bool addImageToProject(const QStringList &fileNames, const QString &defaultDirec
return allSuccessful;
}
void createFlowActionArea(const SelectionContext &selectionContext)
{
AbstractView *view = selectionContext.view();
QTC_ASSERT(view && selectionContext.hasSingleSelectedModelNode(), return);
ModelNode container = selectionContext.currentSingleSelectedNode();
QTC_ASSERT(container.isValid(), return);
QTC_ASSERT(container.metaInfo().isValid(), return);
NodeMetaInfo actionAreaMetaInfo = view->model()->metaInfo("FlowView.FlowActionArea", -1, -1);
QTC_ASSERT(actionAreaMetaInfo.isValid(), return);
const QPointF pos = selectionContext.scenePosition().isNull() ? QPointF() : selectionContext.scenePosition() - QmlItemNode(container).flowPosition();
view->executeInTransaction("DesignerActionManager:createFlowActionArea",
[view, container, actionAreaMetaInfo, pos](){
ModelNode flowActionNode =
view->createModelNode("FlowView.FlowActionArea",
actionAreaMetaInfo.majorVersion(),
actionAreaMetaInfo.minorVersion());
if (!pos.isNull()) {
flowActionNode.variantProperty("x").setValue(pos.x());
flowActionNode.variantProperty("y").setValue(pos.y());
}
container.defaultNodeListProperty().reparentHere(flowActionNode);
view->setSelectedModelNode(flowActionNode);
});
}
void addTransition(const SelectionContext &selectionContext)
{
if (selectionContext.view()) {
AbstractView *view = selectionContext.view();
QmlFlowItemNode targetItem = selectionContext.targetNode();
QmlFlowActionAreaNode actionArea = selectionContext.currentSingleSelectedNode();
QTC_ASSERT(targetItem.isValid(), return);
QTC_ASSERT(actionArea.isValid(), return);
view->executeInTransaction("DesignerActionManager:addTransition",
[view, targetItem, &actionArea](){
actionArea.assignTargetFlowItem(targetItem);
});
}
}
void addFlowEffect(const SelectionContext &selectionContext, const TypeName &typeName)
{
AbstractView *view = selectionContext.view();
QTC_ASSERT(view && selectionContext.hasSingleSelectedModelNode(), return);
ModelNode container = selectionContext.currentSingleSelectedNode();
QTC_ASSERT(container.isValid(), return);
QTC_ASSERT(container.metaInfo().isValid(), return);
QTC_ASSERT(QmlItemNode::isFlowTransition(container), return);
NodeMetaInfo effectMetaInfo = view->model()->metaInfo("FlowView." + typeName, -1, -1);
QTC_ASSERT(typeName == "None" || effectMetaInfo.isValid(), return);
view->executeInTransaction("DesignerActionManager:addFlowEffect",
[view, container, effectMetaInfo](){
if (container.hasProperty("effect"))
container.removeProperty("effect");
if (effectMetaInfo.isValid()) {
ModelNode effectNode =
view->createModelNode(effectMetaInfo.typeName(),
effectMetaInfo.majorVersion(),
effectMetaInfo.minorVersion());
container.nodeProperty("effect").reparentHere(effectNode);
view->setSelectedModelNode(effectNode);
}
});
}
} // namespace Mode
} //QmlDesigner

View File

@@ -74,6 +74,9 @@ void decreaseIndexOfStackedContainer(const SelectionContext &selectionContext);
void addTabBarToStackedContainer(const SelectionContext &selectionContext);
bool addImageToProject(const QStringList &fileNames, const QString &directory);
bool addFontToProject(const QStringList &fileNames, const QString &directory);
void createFlowActionArea(const SelectionContext &selectionContext);
void addTransition(const SelectionContext &selectionState);
void addFlowEffect(const SelectionContext &selectionState, const TypeName &typeName);
} // namespace ModelNodeOperationso
} //QmlDesigner