QmlDesigner: Choose proper default signal

Change-Id: I2a9493d0cc2a49afd624d58b53df54686d827422
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
Thomas Hartmann
2023-09-15 19:02:17 +02:00
parent c693bd06b3
commit 6dc4243995

View File

@@ -303,6 +303,46 @@ ModelNode ConnectionModel::getTargetNodeForConnection(const ModelNode &connectio
return result; return result;
} }
static QString addOnToSignalName(const QString &signal)
{
QString ret = signal;
ret[0] = ret.at(0).toUpper();
ret.prepend("on");
return ret;
}
static PropertyName getFirstSignalForTarget(const NodeMetaInfo &target)
{
PropertyName ret = "clicked";
if (!target.isValid())
return ret;
const auto signalNames = target.signalNames();
if (signalNames.isEmpty())
return ret;
const PropertyNameList priorityList = {"clicked",
"toggled",
"started",
"stopped",
"moved",
"valueChanged",
"visualPostionChanged",
"accepted",
"currentIndexChanged",
"activeFocusChanged"};
for (const auto &signal : priorityList) {
if (signalNames.contains(signal))
return signal;
}
ret = target.signalNames().first();
return ret;
}
void ConnectionModel::addConnection() void ConnectionModel::addConnection()
{ {
QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_CONNECTION_ADDED); QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_CONNECTION_ADDED);
@@ -314,33 +354,46 @@ void ConnectionModel::addConnection()
NodeMetaInfo nodeMetaInfo = connectionView()->model()->qtQuickConnectionsMetaInfo(); NodeMetaInfo nodeMetaInfo = connectionView()->model()->qtQuickConnectionsMetaInfo();
if (nodeMetaInfo.isValid()) { if (nodeMetaInfo.isValid()) {
connectionView()->executeInTransaction("ConnectionModel::addConnection", [=, &rootModelNode](){ ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst();
ModelNode newNode = connectionView()->createModelNode("QtQuick.Connections", const PropertyName signalHandlerName = addOnToSignalName(
nodeMetaInfo.majorVersion(), QString::fromUtf8(getFirstSignalForTarget(
nodeMetaInfo.minorVersion()); selectedNode.metaInfo())))
QString source = "console.log(\"clicked\")"; .toUtf8();
if (connectionView()->selectedModelNodes().size() == 1) { connectionView()
ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); ->executeInTransaction("ConnectionModel::addConnection", [=, &rootModelNode]() {
if (QmlItemNode::isValidQmlItemNode(selectedNode)) ModelNode newNode = connectionView()
selectedNode.nodeAbstractProperty("data").reparentHere(newNode); ->createModelNode("QtQuick.Connections",
else nodeMetaInfo.majorVersion(),
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode); nodeMetaInfo.minorVersion());
QString source = "console.log(\"clicked\")";
if (QmlItemNode(selectedNode).isFlowActionArea() || QmlVisualNode(selectedNode).isFlowTransition()) if (connectionView()->selectedModelNodes().size() == 1) {
source = selectedNode.validId() + ".trigger()"; ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst();
if (QmlItemNode::isValidQmlItemNode(selectedNode))
selectedNode.nodeAbstractProperty("data").reparentHere(newNode);
else
rootModelNode
.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName())
.reparentHere(newNode);
if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty()) if (QmlItemNode(selectedNode).isFlowActionArea()
newNode.bindingProperty("target").setExpression(selectedNode.validId()); || QmlVisualNode(selectedNode).isFlowTransition())
} else { source = selectedNode.validId() + ".trigger()";
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
newNode.bindingProperty("target").setExpression(rootModelNode.validId());
}
newNode.signalHandlerProperty("onClicked").setSource(source); if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty())
newNode.bindingProperty("target").setExpression(selectedNode.validId());
} else {
rootModelNode
.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName())
.reparentHere(newNode);
newNode.bindingProperty("target").setExpression(rootModelNode.validId());
}
selectProperty(newNode.signalHandlerProperty("onClicked")); newNode.signalHandlerProperty(signalHandlerName).setSource(source);
});
selectProperty(newNode.signalHandlerProperty(signalHandlerName));
});
} }
} }
} }
@@ -790,14 +843,6 @@ QString removeOnFromSignalName(const QString &signal)
return ret; return ret;
} }
QString addOnToSignalName(const QString &signal)
{
QString ret = signal;
ret[0] = ret.at(0).toUpper();
ret.prepend("on");
return ret;
}
void ConnectionModelBackendDelegate::setCurrentRow(int i) void ConnectionModelBackendDelegate::setCurrentRow(int i)
{ {
if (m_currentRow == i) if (m_currentRow == i)