diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp')
-rw-r--r-- | src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp index f4fa65e52d..2a17c2ec6d 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp @@ -45,7 +45,7 @@ namespace { QStringList propertyNameListToStringList(const QmlDesigner::PropertyNameList &propertyNameList) { QStringList stringList; - foreach (QmlDesigner::PropertyName propertyName, propertyNameList) { + for (const QmlDesigner::PropertyName propertyName : propertyNameList) { stringList << QString::fromUtf8(propertyName); } stringList.removeDuplicates(); @@ -56,8 +56,8 @@ bool isConnection(const QmlDesigner::ModelNode &modelNode) { return (modelNode.type() == "Connections" || modelNode.type() == "QtQuick.Connections" - || modelNode.type() == "Qt.Connections"); - + || modelNode.type() == "Qt.Connections" + || modelNode.type() == "QtQml.Connections"); } } //namespace @@ -80,7 +80,7 @@ void ConnectionModel::resetModel() setHorizontalHeaderLabels(QStringList({ tr("Target"), tr("Signal Handler"), tr("Action") })); if (connectionView()->isAttached()) { - foreach (const ModelNode modelNode, connectionView()->allModelNodes()) + for (const ModelNode modelNode : connectionView()->allModelNodes()) addModelNode(modelNode); } @@ -95,8 +95,7 @@ SignalHandlerProperty ConnectionModel::signalHandlerPropertyForRow(int rowNumber const int internalId = data(index(rowNumber, TargetModelNodeRow), Qt::UserRole + 1).toInt(); const QString targetPropertyName = data(index(rowNumber, TargetModelNodeRow), Qt::UserRole + 2).toString(); - ModelNode modelNode = connectionView()->modelNodeForInternalId(internalId); - + ModelNode modelNode = connectionView()->modelNodeForInternalId(internalId); if (modelNode.isValid()) return modelNode.signalHandlerProperty(targetPropertyName.toUtf8()); @@ -111,7 +110,7 @@ void ConnectionModel::addModelNode(const ModelNode &modelNode) void ConnectionModel::addConnection(const ModelNode &modelNode) { - foreach (const AbstractProperty &property, modelNode.properties()) { + for (const AbstractProperty &property : modelNode.properties()) { if (property.isSignalHandlerProperty() && property.name() != "target") { addSignalHandler(property.toSignalHandlerProperty()); } @@ -178,7 +177,6 @@ void ConnectionModel::updateSource(int row) m_exceptionError = e.description(); QTimer::singleShot(200, this, &ConnectionModel::handleException); } - } void ConnectionModel::updateSignalName(int rowNumber) @@ -210,8 +208,14 @@ void ConnectionModel::updateTargetNode(int rowNumber) const QString newTarget = data(index(rowNumber, TargetModelNodeRow)).toString(); ModelNode connectionNode = signalHandlerProperty.parentModelNode(); + const bool isAlias = newTarget.contains("."); + if (!newTarget.isEmpty()) { - const ModelNode parent = connectionView()->modelNodeForId(newTarget); + //if it's an alias, then let's reparent connections to alias property owner: + const ModelNode parent = connectionView()->modelNodeForId(isAlias + ? newTarget.split(".").constFirst() + : newTarget); + if (parent.isValid() && QmlItemNode::isValidQmlItemNode(parent)) parent.nodeListProperty("data").reparentHere(connectionNode); @@ -219,9 +223,6 @@ void ConnectionModel::updateTargetNode(int rowNumber) connectionNode.bindingProperty("target").setExpression(newTarget); }); - QStandardItem* idItem = item(rowNumber, 0); - updateCustomData(idItem, signalHandlerProperty); - } else { qWarning() << "BindingModel::updatePropertyName invalid target id"; } @@ -238,8 +239,28 @@ ModelNode ConnectionModel::getTargetNodeForConnection(const ModelNode &connectio BindingProperty bindingProperty = connection.bindingProperty("target"); if (bindingProperty.isValid()) { + bool isAlias = bindingProperty.expression().contains("."); + if (bindingProperty.expression() == QLatin1String("parent")) return connection.parentProperty().parentModelNode(); + else if (isAlias) { + QStringList substr = bindingProperty.expression().split("."); + if (substr.size() > 1) { + ModelNode aliasParent = connectionView()->modelNodeForId(substr.constFirst()); + QString aliasBody = substr.at(1); + if (aliasParent.hasProperty(aliasBody.toUtf8())) { + AbstractProperty abstractProp = aliasParent.property(aliasBody.toUtf8()); + if (abstractProp.isBindingProperty()) { + BindingProperty binding = abstractProp.toBindingProperty(); + if (connectionView()->hasId(binding.expression())) { + ModelNode resolve = connectionView()->modelNodeForId(binding.expression()); + if (resolve.isValid()) + return resolve; + } + } + } + } + } return connectionView()->modelNodeForId(bindingProperty.expression()); } @@ -271,6 +292,9 @@ void ConnectionModel::addConnection() if (QmlItemNode(selectedNode).isFlowActionArea()) source = selectedNode.validId() + ".trigger()"; + if (QmlVisualNode(selectedNode).isFlowTransition()) + source = selectedNode.validId() + ".trigger()"; + if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty()) newNode.bindingProperty("target").setExpression(selectedNode.id()); else @@ -375,9 +399,8 @@ QStringList ConnectionModel::getSignalsForRow(int row) const QStringList stringList; SignalHandlerProperty signalHandlerProperty = signalHandlerPropertyForRow(row); - if (signalHandlerProperty.isValid()) { + if (signalHandlerProperty.isValid()) stringList.append(getPossibleSignalsForConnection(signalHandlerProperty.parentModelNode())); - } return stringList; } |