diff options
author | Marco Bubke <marco.bubke@qt.io> | 2020-08-06 10:45:02 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2020-08-10 09:40:26 +0000 |
commit | b4027b7943e52374141ec6b66e9ec0ceadfe81e9 (patch) | |
tree | 2afce2c687266f25682678d45afdf5e26f2d8ad8 /src/plugins/qmldesigner/components/componentcore | |
parent | 97cc02b78105f1f6f478764ee0c6a56cc806fb07 (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.cpp | 34 |
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); |