From 86ed12e7299c1e6be61f6c42c486acb6fcd4c0de Mon Sep 17 00:00:00 2001 From: Aleksei German Date: Fri, 25 Nov 2022 19:52:05 +0100 Subject: [PATCH] QmlDesigner: Add StateGroups to Connections Task-number: QDS-8027 Change-Id: I72ce5bfd2505269ad750ee5fbd5b13669891290f Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Thomas Hartmann --- .../componentcore/designeractionmanager.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index e99d94014f3..3439d02e44d 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -492,6 +492,22 @@ struct SlotEntry std::function action; }; +QList stateGroups(const ModelNode &node) +{ + if (!node.view()->isAttached()) + return {}; + + const auto groupMetaInfo = node.view()->model()->qtQuickStateGroupMetaInfo(); + + return node.view()->allModelNodesOfType(groupMetaInfo); +} + +QStringList stateGroupsNames(const ModelNode &node) +{ + return Utils::transform(stateGroups(node), + [](const ModelNode &node) { return node.displayName(); }); +} + QList getSlotsLists(const ModelNode &node) { if (!node.isValid()) @@ -528,6 +544,32 @@ QList getSlotsLists(const ModelNode &node) resultList.push_back(entry); } + const auto sg = stateGroups(node); + + for (const auto &stateGroup : sg) { + QmlObjectNode stateGroupObjectNode(stateGroup); + const QString stateGroupCategory = QString("Change State Group") + " " + + stateGroup.displayName(); + + const SlotEntry defaultGroupState = {stateGroupCategory, + (stateGroupCategory + " to " + "Default State"), + [stateGroup](SignalHandlerProperty signalHandler) { + signalHandler.setSource( + QString("%1.state = \"\"").arg(stateGroup.id())); + }}; + resultList.push_back(defaultGroupState); + + for (const auto &stateName : stateGroupObjectNode.states().names()) { + SlotEntry entry = {stateGroupCategory, + (stateGroupCategory + " to " + stateName), + [stateGroup, stateName](SignalHandlerProperty signalHandler) { + signalHandler.setSource( + QString("%1.state = \"%2\"").arg(stateGroup.id(), stateName)); + }}; + resultList.push_back(entry); + } + } + return resultList; }