QmlDesigner: Fix all changed signals get skipped

Fix "positionChanged" signal getting skipped when creating the list of
potential signal connections.

Task-number: QDS-11625
Change-Id: Ic0e3e7170044c635e83bc22ac1fc82c92102f584
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Henning Gruendl
2024-01-15 14:41:05 +01:00
committed by Henning Gründl
parent afdf82a6c1
commit ae28fb67b5
3 changed files with 33 additions and 49 deletions

View File

@@ -11,6 +11,7 @@
#include "formatoperation.h" #include "formatoperation.h"
#include "groupitemaction.h" #include "groupitemaction.h"
#include "modelnodecontextmenu_helper.h" #include "modelnodecontextmenu_helper.h"
#include "propertytreemodel.h"
#include "qmldesignerconstants.h" #include "qmldesignerconstants.h"
#include "qmleditormenu.h" #include "qmleditormenu.h"
#include "rewritingexception.h" #include "rewritingexception.h"
@@ -475,35 +476,20 @@ QStringList getSignalsList(const ModelNode &node)
if (!node.hasMetaInfo()) if (!node.hasMetaInfo())
return {}; return {};
QStringList signalsList; QStringList signalList;
NodeMetaInfo nodeMetaInfo = node.metaInfo();
for (const auto &signalName : nodeMetaInfo.signalNames()) { std::vector<PropertyName> signalVector = PropertyTreeModel::sortedAndFilteredSignalNames(
signalsList << QString::fromUtf8(signalName); node.metaInfo());
}
//on...Changed are the most regular signals, we assign them the lowest priority, std::vector<QString> signalVectorString = Utils::transform(signalVector,
//we don't need them right now [](const PropertyName &name) {
// QStringList signalsWithChanged = signalsList.filter("Changed"); return QString::fromUtf8(name);
});
//these are item specific, like MouseArea.clicked, they have higher priority signalList.reserve(Utils::ssize(signalVectorString));
QStringList signalsWithoutChanged = signalsList; std::copy(signalVectorString.begin(), signalVectorString.end(), std::back_inserter(signalList));
signalsWithoutChanged.removeIf([](QString str) {
if (str.endsWith("Changed"))
return true;
return false;
});
QStringList finalResult; return signalList;
finalResult.append(signalsWithoutChanged);
if (finalResult.isEmpty())
finalResult = signalsList;
finalResult.removeDuplicates();
return finalResult;
} }
struct SlotEntry struct SlotEntry

View File

@@ -72,9 +72,7 @@ const std::vector<PropertyName> blockListSlots = {"childAt",
"inputMethodQuery", "inputMethodQuery",
"positionAt", "positionAt",
"positionToRectangle", "positionToRectangle",
"isRightToLeft" "isRightToLeft"};
};
const std::vector<PropertyName> priorityListSignals = {"clicked", const std::vector<PropertyName> priorityListSignals = {"clicked",
"doubleClicked", "doubleClicked",
@@ -99,7 +97,8 @@ const std::vector<PropertyName> priorityListSignals = {"clicked",
"enabledChanged", "enabledChanged",
"visibleChanged", "visibleChanged",
"opacityChanged", "opacityChanged",
"rotationChanged"}; "rotationChanged",
"positionChanged"};
const std::vector<PropertyName> priorityListProperties = {"opacity", const std::vector<PropertyName> priorityListProperties = {"opacity",
"checked", "checked",
@@ -572,8 +571,7 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredPropertyName
const PropertyName name = metaInfo.name(); const PropertyName name = metaInfo.name();
if (!m_includeDotPropertiesOnFirstLevel if (!m_includeDotPropertiesOnFirstLevel && name.contains("."))
&& name.contains("."))
return false; return false;
return filterProperty(name, metaInfo, recursive); return filterProperty(name, metaInfo, recursive);
@@ -606,8 +604,8 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredPropertyName
return checkedPriorityList; return checkedPriorityList;
} }
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames( std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
const NodeMetaInfo &metaInfo, bool recursive) const bool recursive)
{ {
Q_UNUSED(recursive); Q_UNUSED(recursive);
@@ -627,15 +625,14 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
std::set<PropertyName> set(std::make_move_iterator(sorted.begin()), std::set<PropertyName> set(std::make_move_iterator(sorted.begin()),
std::make_move_iterator(sorted.end())); std::make_move_iterator(sorted.end()));
auto checkedPriorityList = Utils::filtered(priorityListSignals, auto checkedPriorityList = Utils::filtered(priorityListSignals, [&set](const PropertyName &name) {
[&set](const PropertyName &name) { auto it = set.find(name);
auto it = set.find(name); const bool b = it != set.end();
const bool b = it != set.end(); if (b)
if (b) set.erase(it);
set.erase(it);
return b; return b;
}); });
//const int priorityLength = checkedPriorityList.size(); We eventually require this to get the prioproperties //const int priorityLength = checkedPriorityList.size(); We eventually require this to get the prioproperties
@@ -648,8 +645,8 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
return checkedPriorityList; return checkedPriorityList;
} }
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames( std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
const NodeMetaInfo &metaInfo, bool recursive) const bool recursive)
{ {
Q_UNUSED(recursive); Q_UNUSED(recursive);

View File

@@ -84,6 +84,12 @@ public:
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;
static std::vector<PropertyName> sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
bool recursive = false);
static std::vector<PropertyName> sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
bool recursive = false);
private: private:
QModelIndex ensureModelIndex(const ModelNode &node, int row) const; QModelIndex ensureModelIndex(const ModelNode &node, int row) const;
QModelIndex ensureModelIndex(const ModelNode &node, const PropertyName &name, int row) const; QModelIndex ensureModelIndex(const ModelNode &node, const PropertyName &name, int row) const;
@@ -94,15 +100,10 @@ private:
const std::vector<PropertyName> getDynamicProperties(const ModelNode &modelNode) const; const std::vector<PropertyName> getDynamicProperties(const ModelNode &modelNode) const;
const std::vector<PropertyName> getDynamicSignals(const ModelNode &modelNode) const; const std::vector<PropertyName> getDynamicSignals(const ModelNode &modelNode) const;
const std::vector<PropertyName> sortedAndFilteredPropertyNames(const NodeMetaInfo &metaInfo, const std::vector<PropertyName> sortedAndFilteredPropertyNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const; bool recursive = false) const;
const std::vector<PropertyName> sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const;
const std::vector<PropertyName> sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const;
const std::vector<PropertyName> sortedDotPropertyNames(const NodeMetaInfo &metaInfo, const std::vector<PropertyName> sortedDotPropertyNames(const NodeMetaInfo &metaInfo,
const PropertyName &propertyName) const; const PropertyName &propertyName) const;