QmlDesigner: Add FlowActionArea support to connection view

Change-Id: I5b7d53ccab299960aed736f6a292e158ec60ce99
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2020-04-03 21:14:54 +02:00
parent 86b0a47deb
commit be66d1250c
3 changed files with 39 additions and 3 deletions

View File

@@ -259,16 +259,18 @@ void ConnectionModel::addConnection()
ModelNode newNode = connectionView()->createModelNode("QtQuick.Connections", ModelNode newNode = connectionView()->createModelNode("QtQuick.Connections",
nodeMetaInfo.majorVersion(), nodeMetaInfo.majorVersion(),
nodeMetaInfo.minorVersion()); nodeMetaInfo.minorVersion());
QString source = "print(\"clicked\")";
newNode.signalHandlerProperty("onClicked").setSource(QLatin1String("print(\"clicked\")"));
if (connectionView()->selectedModelNodes().count() == 1) { if (connectionView()->selectedModelNodes().count() == 1) {
const ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst();
if (QmlItemNode::isValidQmlItemNode(selectedNode)) if (QmlItemNode::isValidQmlItemNode(selectedNode))
selectedNode.nodeAbstractProperty("data").reparentHere(newNode); selectedNode.nodeAbstractProperty("data").reparentHere(newNode);
else else
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode); rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
if (QmlItemNode(selectedNode).isFlowActionArea())
source = selectedNode.validId() + ".trigger()";
if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty()) if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty())
newNode.bindingProperty("target").setExpression(selectedNode.id()); newNode.bindingProperty("target").setExpression(selectedNode.id());
else else
@@ -277,6 +279,8 @@ void ConnectionModel::addConnection()
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode); rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
newNode.bindingProperty("target").setExpression(QLatin1String("parent")); newNode.bindingProperty("target").setExpression(QLatin1String("parent"));
} }
newNode.signalHandlerProperty("onClicked").setSource(source);
}); });
} }
} }
@@ -378,6 +382,26 @@ QStringList ConnectionModel::getSignalsForRow(int row) const
return stringList; 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 ConnectionModel::getPossibleSignalsForConnection(const ModelNode &connection) const
{ {
QStringList stringList; QStringList stringList;

View File

@@ -54,6 +54,7 @@ public:
ConnectionView *connectionView() const; ConnectionView *connectionView() const;
QStringList getSignalsForRow(int row) const; QStringList getSignalsForRow(int row) const;
QStringList getflowActionTriggerForRow(int row) const;
ModelNode getTargetNodeForConnection(const ModelNode &connection) const; ModelNode getTargetNodeForConnection(const ModelNode &connection) const;
void addConnection(); void addConnection();

View File

@@ -252,6 +252,12 @@ ConnectionDelegate::ConnectionDelegate(QWidget *parent) : ConnectionEditorDelega
setItemEditorFactory(factory); 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 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()); QString source = QString::fromLatin1("{ %1.state = \"%2\" }").arg(rootModelNode.id()).arg(state.name());
connectionComboBox->addItem(itemText, source); 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(); connectionComboBox->disableValidator();
} break; } break;