diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp index 560be7c4f6b..f4fa65e52de 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp @@ -259,16 +259,18 @@ void ConnectionModel::addConnection() ModelNode newNode = connectionView()->createModelNode("QtQuick.Connections", nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion()); - - newNode.signalHandlerProperty("onClicked").setSource(QLatin1String("print(\"clicked\")")); + QString source = "print(\"clicked\")"; if (connectionView()->selectedModelNodes().count() == 1) { - const ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); + ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); if (QmlItemNode::isValidQmlItemNode(selectedNode)) selectedNode.nodeAbstractProperty("data").reparentHere(newNode); else rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode); + if (QmlItemNode(selectedNode).isFlowActionArea()) + source = selectedNode.validId() + ".trigger()"; + if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty()) newNode.bindingProperty("target").setExpression(selectedNode.id()); else @@ -277,6 +279,8 @@ void ConnectionModel::addConnection() rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode); newNode.bindingProperty("target").setExpression(QLatin1String("parent")); } + + newNode.signalHandlerProperty("onClicked").setSource(source); }); } } @@ -378,6 +382,26 @@ QStringList ConnectionModel::getSignalsForRow(int row) const return stringList; } +QStringList ConnectionModel::getflowActionTriggerForRow(int row) const +{ + QStringList stringList; + SignalHandlerProperty signalHandlerProperty = signalHandlerPropertyForRow(row); + + if (signalHandlerProperty.isValid()) { + const ModelNode parentModelNode = signalHandlerProperty.parentModelNode(); + ModelNode targetNode = getTargetNodeForConnection(parentModelNode); + if (!targetNode.isValid() && !parentModelNode.isRootNode()) + targetNode = parentModelNode.parentProperty().parentModelNode(); + if (targetNode.isValid()) { + for (auto &node : targetNode.allSubModelNodesAndThisNode()) { + if (QmlItemNode(node).isFlowActionArea() && node.hasId()) + stringList.append(node.id() + ".trigger()"); + } + } + } + return stringList; +} + QStringList ConnectionModel::getPossibleSignalsForConnection(const ModelNode &connection) const { QStringList stringList; diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h index b60275f6da0..b7d24db7190 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h @@ -54,6 +54,7 @@ public: ConnectionView *connectionView() const; QStringList getSignalsForRow(int row) const; + QStringList getflowActionTriggerForRow(int row) const; ModelNode getTargetNodeForConnection(const ModelNode &connection) const; void addConnection(); diff --git a/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp b/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp index 555f4488582..7a308b08999 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp @@ -252,6 +252,12 @@ ConnectionDelegate::ConnectionDelegate(QWidget *parent) : ConnectionEditorDelega setItemEditorFactory(factory); } +static QString nameForAction(const QString &input) +{ + QStringList list = input.split('.'); + return list.first(); +} + QWidget *ConnectionDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { @@ -301,6 +307,11 @@ QWidget *ConnectionDelegate::createEditor(QWidget *parent, const QStyleOptionVie QString source = QString::fromLatin1("{ %1.state = \"%2\" }").arg(rootModelNode.id()).arg(state.name()); connectionComboBox->addItem(itemText, source); } + + QStringList trigger = connectionModel->getflowActionTriggerForRow(index.row()); + for (const QString action : trigger) { + connectionComboBox->addItem(tr("Activate FlowAction %1").arg(nameForAction(action)), action); + } } connectionComboBox->disableValidator(); } break;