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; }