diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 6ad7ed994b7..6e4b1a1efd5 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -11,6 +11,7 @@ #include "formatoperation.h" #include "groupitemaction.h" #include "modelnodecontextmenu_helper.h" +#include "propertytreemodel.h" #include "qmldesignerconstants.h" #include "qmleditormenu.h" #include "rewritingexception.h" @@ -475,35 +476,20 @@ QStringList getSignalsList(const ModelNode &node) if (!node.hasMetaInfo()) return {}; - QStringList signalsList; - NodeMetaInfo nodeMetaInfo = node.metaInfo(); + QStringList signalList; - for (const auto &signalName : nodeMetaInfo.signalNames()) { - signalsList << QString::fromUtf8(signalName); - } + std::vector signalVector = PropertyTreeModel::sortedAndFilteredSignalNames( + node.metaInfo()); - //on...Changed are the most regular signals, we assign them the lowest priority, - //we don't need them right now -// QStringList signalsWithChanged = signalsList.filter("Changed"); + std::vector signalVectorString = Utils::transform(signalVector, + [](const PropertyName &name) { + return QString::fromUtf8(name); + }); - //these are item specific, like MouseArea.clicked, they have higher priority - QStringList signalsWithoutChanged = signalsList; - signalsWithoutChanged.removeIf([](QString str) { - if (str.endsWith("Changed")) - return true; - return false; - }); + signalList.reserve(Utils::ssize(signalVectorString)); + std::copy(signalVectorString.begin(), signalVectorString.end(), std::back_inserter(signalList)); - QStringList finalResult; - finalResult.append(signalsWithoutChanged); - - - if (finalResult.isEmpty()) - finalResult = signalsList; - - finalResult.removeDuplicates(); - - return finalResult; + return signalList; } struct SlotEntry diff --git a/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.cpp index 3ae89a3185f..e0d2464121e 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.cpp @@ -72,9 +72,7 @@ const std::vector blockListSlots = {"childAt", "inputMethodQuery", "positionAt", "positionToRectangle", - "isRightToLeft" - -}; + "isRightToLeft"}; const std::vector priorityListSignals = {"clicked", "doubleClicked", @@ -99,7 +97,8 @@ const std::vector priorityListSignals = {"clicked", "enabledChanged", "visibleChanged", "opacityChanged", - "rotationChanged"}; + "rotationChanged", + "positionChanged"}; const std::vector priorityListProperties = {"opacity", "checked", @@ -572,8 +571,7 @@ const std::vector PropertyTreeModel::sortedAndFilteredPropertyName const PropertyName name = metaInfo.name(); - if (!m_includeDotPropertiesOnFirstLevel - && name.contains(".")) + if (!m_includeDotPropertiesOnFirstLevel && name.contains(".")) return false; return filterProperty(name, metaInfo, recursive); @@ -606,8 +604,8 @@ const std::vector PropertyTreeModel::sortedAndFilteredPropertyName return checkedPriorityList; } -const std::vector PropertyTreeModel::sortedAndFilteredSignalNames( - const NodeMetaInfo &metaInfo, bool recursive) const +std::vector PropertyTreeModel::sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo, + bool recursive) { Q_UNUSED(recursive); @@ -627,15 +625,14 @@ const std::vector PropertyTreeModel::sortedAndFilteredSignalNames( std::set set(std::make_move_iterator(sorted.begin()), std::make_move_iterator(sorted.end())); - auto checkedPriorityList = Utils::filtered(priorityListSignals, - [&set](const PropertyName &name) { - auto it = set.find(name); - const bool b = it != set.end(); - if (b) - set.erase(it); + auto checkedPriorityList = Utils::filtered(priorityListSignals, [&set](const PropertyName &name) { + auto it = set.find(name); + const bool b = it != set.end(); + if (b) + set.erase(it); - return b; - }); + return b; + }); //const int priorityLength = checkedPriorityList.size(); We eventually require this to get the prioproperties @@ -648,8 +645,8 @@ const std::vector PropertyTreeModel::sortedAndFilteredSignalNames( return checkedPriorityList; } -const std::vector PropertyTreeModel::sortedAndFilteredSlotNames( - const NodeMetaInfo &metaInfo, bool recursive) const +std::vector PropertyTreeModel::sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo, + bool recursive) { Q_UNUSED(recursive); diff --git a/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.h b/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.h index df17c112da9..07e1401c4af 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/propertytreemodel.h @@ -84,6 +84,12 @@ public: QHash roleNames() const override; + static std::vector sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo, + bool recursive = false); + + static std::vector sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo, + bool recursive = false); + private: QModelIndex ensureModelIndex(const ModelNode &node, int row) const; QModelIndex ensureModelIndex(const ModelNode &node, const PropertyName &name, int row) const; @@ -94,15 +100,10 @@ private: const std::vector getDynamicProperties(const ModelNode &modelNode) const; const std::vector getDynamicSignals(const ModelNode &modelNode) const; + const std::vector sortedAndFilteredPropertyNames(const NodeMetaInfo &metaInfo, bool recursive = false) const; - const std::vector sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo, - bool recursive = false) const; - - const std::vector sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo, - bool recursive = false) const; - const std::vector sortedDotPropertyNames(const NodeMetaInfo &metaInfo, const PropertyName &propertyName) const;