diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/formeditor/formeditorview.cpp')
-rw-r--r-- | src/plugins/qmldesigner/components/formeditor/formeditorview.cpp | 97 |
1 files changed, 82 insertions, 15 deletions
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 58b47351f9..f64b45f351 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -36,6 +36,7 @@ #include "abstractcustomtool.h" #include <bindingproperty.h> +#include <variantproperty.h> #include <designersettings.h> #include <designmodecontext.h> #include <modelnode.h> @@ -385,17 +386,37 @@ void FormEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNodeLi m_scene->update(); } -void FormEditorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList, AbstractView::PropertyChangeFlags propertyChange) +void FormEditorView::variantPropertiesChanged(const QList<VariantProperty> &propertyList, + AbstractView::PropertyChangeFlags propertyChange) +{ + Q_UNUSED(propertyChange) + for (const VariantProperty &property : propertyList) { + QmlVisualNode node(property.parentModelNode()); + if (node.isFlowTransition() || node.isFlowDecision()) { + if (FormEditorItem *item = m_scene->itemForQmlItemNode(node.toQmlItemNode())) { + if (property.name() == "question" || property.name() == "dialogTitle") + item->updateGeometry(); + } + } + } +} + +void FormEditorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList, + AbstractView::PropertyChangeFlags propertyChange) { Q_UNUSED(propertyChange) for (const BindingProperty &property : propertyList) { QmlVisualNode node(property.parentModelNode()); if (node.isFlowTransition()) { - FormEditorItem *item = m_scene->itemForQmlItemNode(node.toQmlItemNode()); - if (item && node.hasNodeParent()) { - m_scene->reparentItem(node.toQmlItemNode(), node.toQmlItemNode().modelParentItem()); - m_scene->synchronizeTransformation(item); - item->update(); + if (FormEditorItem *item = m_scene->itemForQmlItemNode(node.toQmlItemNode())) { + if (property.name() == "condition" || property.name() == "question") + item->updateGeometry(); + + if (node.hasNodeParent()) { + m_scene->reparentItem(node.toQmlItemNode(), node.toQmlItemNode().modelParentItem()); + m_scene->synchronizeTransformation(item); + item->update(); + } } } else if (QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(property.parentModelNode())) { const QmlVisualNode target = property.resolveToModelNode(); @@ -421,12 +442,49 @@ void FormEditorView::documentMessagesChanged(const QList<DocumentMessage> &error m_formEditorWidget->hideErrorMessageBox(); } -void FormEditorView::customNotification(const AbstractView * /*view*/, const QString &identifier, const QList<ModelNode> &/*nodeList*/, const QList<QVariant> &/*data*/) +void FormEditorView::customNotification(const AbstractView * /*view*/, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &/*data*/) { if (identifier == QLatin1String("puppet crashed")) m_dragTool->clearMoveDelay(); if (identifier == QLatin1String("reset QmlPuppet")) temporaryBlockView(); + if (identifier == QLatin1String("fit root to screen")) { + if (QmlItemNode(rootModelNode()).isFlowView()) { + QRectF boundingRect; + for (QGraphicsItem *item : scene()->items()) { + if (auto formEditorItem = FormEditorItem::fromQGraphicsItem(item)) { + if (!formEditorItem->qmlItemNode().modelNode().isRootNode() + && !formEditorItem->sceneBoundingRect().isNull()) + boundingRect = boundingRect.united(formEditorItem->sceneBoundingRect()); + } + } + m_formEditorWidget->graphicsView()->fitInView(boundingRect, + Qt::KeepAspectRatio); + } else { + m_formEditorWidget->graphicsView()->fitInView(m_formEditorWidget->rootItemRect(), + Qt::KeepAspectRatio); + } + + const qreal scaleFactor = m_formEditorWidget->graphicsView()->viewportTransform().m11(); + float zoomLevel = ZoomAction::getClosestZoomLevel(scaleFactor); + m_formEditorWidget->zoomAction()->forceZoomLevel(zoomLevel); + } + if (identifier == QLatin1String("fit selection to screen")) { + if (nodeList.isEmpty()) + return; + + QRectF boundingRect; + for (const ModelNode &node : nodeList) { + if (FormEditorItem *item = scene()->itemForQmlItemNode(node)) + boundingRect = boundingRect.united(item->sceneBoundingRect()); + } + + m_formEditorWidget->graphicsView()->fitInView(boundingRect, + Qt::KeepAspectRatio); + const qreal scaleFactor = m_formEditorWidget->graphicsView()->viewportTransform().m11(); + float zoomLevel = ZoomAction::getClosestZoomLevel(scaleFactor); + m_formEditorWidget->zoomAction()->forceZoomLevel(zoomLevel); + } } AbstractFormEditorTool *FormEditorView::currentTool() const @@ -502,7 +560,7 @@ void FormEditorView::changeToCustomTool() const ModelNode selectedModelNode = selectedModelNodes().constFirst(); - foreach (AbstractCustomTool *customTool, m_customToolList) { + for (AbstractCustomTool *customTool : m_customToolList) { if (customTool->wantHandleItem(selectedModelNode) > handlingRank) { handlingRank = customTool->wantHandleItem(selectedModelNode); selectedCustomTool = customTool; @@ -547,9 +605,18 @@ void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const PropertyN } } else if (item.isFlowTransition() || item.isFlowActionArea() || item.isFlowDecision() || item.isFlowWildcard()) { - FormEditorItem *editorItem = m_scene->itemForQmlItemNode(item); - if (editorItem) + if (FormEditorItem *editorItem = m_scene->itemForQmlItemNode(item)) { + // Update the geomtry if one of the following auxiliary properties has changed + static const QStringList updateGeometryPropertyNames = { + "breakPoint", "bezier", "transitionBezier", "type", "tranitionType", "radius", + "transitionRadius", "labelPosition", "labelFlipSide", "inOffset", "outOffset", + "blockSize", "blockRadius", "showDialogLabel", "dialogLabelPosition" + }; + if (updateGeometryPropertyNames.contains(QString::fromUtf8(name))) + editorItem->updateGeometry(); + editorItem->update(); + } } else if (item.isFlowView() || item.isFlowItem()) { scene()->update(); } else if (name == "annotation" || name == "customId") { @@ -562,7 +629,7 @@ void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const PropertyN void FormEditorView::instancesCompleted(const QVector<ModelNode> &completedNodeList) { QList<FormEditorItem*> itemNodeList; - foreach (const ModelNode &node, completedNodeList) { + for (const ModelNode &node : completedNodeList) { const QmlItemNode qmlItemNode(node); if (qmlItemNode.isValid()) { if (FormEditorItem *item = scene()->itemForQmlItemNode(qmlItemNode)) { @@ -584,7 +651,7 @@ void FormEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, Inf return QmlItemNode::isValidQmlItemNode(node); }); - foreach (const ModelNode &node, informationChangedNodes) { + for (const ModelNode &node : informationChangedNodes) { const QmlItemNode qmlItemNode(node); if (FormEditorItem *item = scene()->itemForQmlItemNode(qmlItemNode)) { scene()->synchronizeTransformation(item); @@ -621,7 +688,7 @@ void FormEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, Inf void FormEditorView::instancesRenderImageChanged(const QVector<ModelNode> &nodeList) { - foreach (const ModelNode &node, nodeList) { + for (const ModelNode &node : nodeList) { if (QmlItemNode::isValidQmlItemNode(node)) if (FormEditorItem *item = scene()->itemForQmlItemNode(QmlItemNode(node))) item->update(); @@ -632,7 +699,7 @@ void FormEditorView::instancesChildrenChanged(const QVector<ModelNode> &nodeList { QList<FormEditorItem*> changedItems; - foreach (const ModelNode &node, nodeList) { + for (const ModelNode &node : nodeList) { const QmlItemNode qmlItemNode(node); if (qmlItemNode.isValid()) { if (FormEditorItem *item = scene()->itemForQmlItemNode(qmlItemNode)) { @@ -702,7 +769,7 @@ QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode) void FormEditorView::instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &propertyList) { QList<FormEditorItem*> changedItems; - foreach (auto &nodePropertyPair, propertyList) { + for (auto &nodePropertyPair : propertyList) { const QmlItemNode qmlItemNode(nodePropertyPair.first); const PropertyName propertyName = nodePropertyPair.second; if (qmlItemNode.isValid()) { |