forked from qt-creator/qt-creator
QmlDesigner: Add FlowActionArea support to connection view
Change-Id: I5b7d53ccab299960aed736f6a292e158ec60ce99 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user