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 "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
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user