aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model')
-rw-r--r--src/plugins/qmldesigner/designercore/model/import.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp33
4 files changed, 36 insertions, 3 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/import.cpp b/src/plugins/qmldesigner/designercore/model/import.cpp
index d895b07764..1c217bf47b 100644
--- a/src/plugins/qmldesigner/designercore/model/import.cpp
+++ b/src/plugins/qmldesigner/designercore/model/import.cpp
@@ -109,7 +109,7 @@ int Import::majorFromVersion(const QString &version)
return version.split('.').first().toInt();
}
-uint qHash(const Import &import)
+Utils::QHashValueType qHash(const Import &import)
{
return ::qHash(import.url()) ^ ::qHash(import.file()) ^ ::qHash(import.version()) ^ ::qHash(import.alias());
}
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 55305c72d1..2445042fbb 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -332,7 +332,7 @@ static void removeStateOperationsForChildren(const QmlObjectNode &node)
stateOperation.modelNode().destroy(); //remove of belonging StatesOperations
}
- for (const QmlObjectNode &childNode : node.modelNode().directSubModelNodes()) {
+ for (const QmlObjectNode childNode : node.modelNode().directSubModelNodes()) {
removeStateOperationsForChildren(childNode);
}
}
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
index 85eb51de44..924a4e0ee6 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
@@ -310,7 +310,7 @@ QList<QmlTimelineKeyframeGroup> QmlTimelineKeyframeGroup::allInvalidTimelineKeyf
QTC_ASSERT(view->rootModelNode().isValid(), return ret);
const auto groups = view->rootModelNode().subModelNodesOfType("QtQuick.Timeline.KeyframeGroup");
- for (const QmlTimelineKeyframeGroup &group : groups) {
+ for (const QmlTimelineKeyframeGroup group : groups) {
if (group.isDangling())
ret.append(group);
}
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index af066b81c2..e33c82b124 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -39,6 +39,8 @@
#include <modelnodepositionstorage.h>
#include <modelnode.h>
#include <nodeproperty.h>
+#include <qmlobjectnode.h>
+#include <qmltimelinekeyframegroup.h>
#ifndef QMLDESIGNER_TEST
#include <qmldesignerplugin.h>
@@ -57,6 +59,7 @@
#include <utility>
#include <vector>
+#include <algorithm>
using namespace QmlDesigner::Internal;
@@ -658,6 +661,36 @@ ModelNode RewriterView::getNodeForCanonicalIndex(int index)
return m_canonicalIntModelNode.value(index);
}
+void RewriterView::sanitizeModel()
+{
+ if (inErrorState())
+ return;
+
+ QmlObjectNode root = rootModelNode();
+
+ QTC_ASSERT(root.isValid(), return);
+
+ QList<ModelNode> danglingNodes;
+
+ const auto danglingStates = root.allInvalidStateOperations();
+ const auto danglingKeyframeGroups = QmlTimelineKeyframeGroup::allInvalidTimelineKeyframeGroups(this);
+
+ std::transform(danglingStates.begin(),
+ danglingStates.end(),
+ std::back_inserter(danglingNodes),
+ [](const auto &node) { return node.modelNode(); });
+
+ std::transform(danglingKeyframeGroups.begin(),
+ danglingKeyframeGroups.end(),
+ std::back_inserter(danglingNodes),
+ [](const auto &node) { return node.modelNode(); });
+
+ executeInTransaction("RewriterView::sanitizeModel", [&]() {
+ for (auto node : std::as_const(danglingNodes))
+ node.destroy();
+ });
+}
+
Internal::ModelNodePositionStorage *RewriterView::positionStorage() const
{
return m_positionStorage.data();