aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2020-08-06 10:45:02 +0200
committerMarco Bubke <marco.bubke@qt.io>2020-08-10 09:40:26 +0000
commitb4027b7943e52374141ec6b66e9ec0ceadfe81e9 (patch)
tree2afce2c687266f25682678d45afdf5e26f2d8ad8 /src/plugins/qmldesigner/components/componentcore
parent97cc02b78105f1f6f478764ee0c6a56cc806fb07 (diff)
QmlDesigner: Fix crash for list view model
There was a type, so it crashed. The code is now under tests so we cannot break it anymore. Task-number: QDS-2563 Change-Id: I81426a9f8a568b217b7bf9c8c261b24be14ff61a Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore')
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index fb7d4ce202..e0978df21c 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -363,32 +363,30 @@ public:
bool isEnabled(const SelectionContext &) const override { return true; }
- static ModelNode listModelNode(const ModelNode &listViewNode)
- {
- if (listViewNode.hasProperty("model")) {
- if (listViewNode.hasBindingProperty("model"))
- return listViewNode.bindingProperty("model").resolveToModelNode();
- else if (listViewNode.hasNodeProperty("model"))
- return listViewNode.nodeProperty("model").modelNode();
- }
-
- ModelNode newModel = listViewNode.view()->createModelNode("QtQml.Models.ListModel", 2, 15);
- listViewNode.nodeProperty("mode").reparentHere(newModel);
-
- return newModel;
- }
-
static void openDialog(const SelectionContext &selectionState)
{
- ListModelEditorModel model;
-
ModelNode targetNode = selectionState.targetNode();
if (!targetNode.isValid())
targetNode = selectionState.currentSingleSelectedNode();
if (!targetNode.isValid())
return;
- model.setListModel(listModelNode(targetNode));
+ AbstractView *view = targetNode.view();
+ NodeMetaInfo modelMetaInfo = view->model()->metaInfo("ListModel");
+ NodeMetaInfo elementMetaInfo = view->model()->metaInfo("ListElement");
+
+ ListModelEditorModel model{[&] {
+ return view->createModelNode(modelMetaInfo.typeName(),
+ modelMetaInfo.majorVersion(),
+ modelMetaInfo.minorVersion());
+ },
+ [&] {
+ return view->createModelNode(elementMetaInfo.typeName(),
+ elementMetaInfo.majorVersion(),
+ elementMetaInfo.minorVersion());
+ }};
+
+ model.setListView(targetNode);
ListModelEditorDialog dialog{Core::ICore::mainWindow()};
dialog.setModel(&model);