forked from qt-creator/qt-creator
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:
committed by
Henning Gründl
parent
afdf82a6c1
commit
ae28fb67b5
@@ -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<PropertyName> 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<QString> 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
|
||||
|
@@ -72,9 +72,7 @@ const std::vector<PropertyName> blockListSlots = {"childAt",
|
||||
"inputMethodQuery",
|
||||
"positionAt",
|
||||
"positionToRectangle",
|
||||
"isRightToLeft"
|
||||
|
||||
};
|
||||
"isRightToLeft"};
|
||||
|
||||
const std::vector<PropertyName> priorityListSignals = {"clicked",
|
||||
"doubleClicked",
|
||||
@@ -99,7 +97,8 @@ const std::vector<PropertyName> priorityListSignals = {"clicked",
|
||||
"enabledChanged",
|
||||
"visibleChanged",
|
||||
"opacityChanged",
|
||||
"rotationChanged"};
|
||||
"rotationChanged",
|
||||
"positionChanged"};
|
||||
|
||||
const std::vector<PropertyName> priorityListProperties = {"opacity",
|
||||
"checked",
|
||||
@@ -572,8 +571,7 @@ const std::vector<PropertyName> 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<PropertyName> PropertyTreeModel::sortedAndFilteredPropertyName
|
||||
return checkedPriorityList;
|
||||
}
|
||||
|
||||
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
|
||||
const NodeMetaInfo &metaInfo, bool recursive) const
|
||||
std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
|
||||
bool 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::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<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
|
||||
return checkedPriorityList;
|
||||
}
|
||||
|
||||
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames(
|
||||
const NodeMetaInfo &metaInfo, bool recursive) const
|
||||
std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
|
||||
bool recursive)
|
||||
{
|
||||
Q_UNUSED(recursive);
|
||||
|
||||
|
@@ -84,6 +84,12 @@ public:
|
||||
|
||||
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:
|
||||
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<PropertyName> getDynamicProperties(const ModelNode &modelNode) const;
|
||||
const std::vector<PropertyName> getDynamicSignals(const ModelNode &modelNode) const;
|
||||
|
||||
const std::vector<PropertyName> sortedAndFilteredPropertyNames(const NodeMetaInfo &metaInfo,
|
||||
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 PropertyName &propertyName) const;
|
||||
|
||||
|
Reference in New Issue
Block a user