From 6ebb7923b22a79c65ab3e07e7f2da7558e1fdf87 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 7 Mar 2024 15:49:41 +0100 Subject: [PATCH] QmlDesigner: Deprecate optionally old node meta info API If the project storage is activated the old API will be deprecated. Hepefully people now stop to use the old API. You can still use it but you have to write an implementation for the new one too. Task-number: QDS-12102 Change-Id: Iac23da1648ff44e27a2ee7840e0d3eeb1fb8caf9 Reviewed-by: Tim Jenssen Reviewed-by: Reviewed-by: Qt CI Patch Build Bot --- .../assetslibrary/assetslibrarywidget.cpp | 6 +- .../components/bindingeditor/actioneditor.cpp | 23 ++- .../bindingeditor/bindingeditor.cpp | 33 ++-- .../components/bindingeditor/signallist.cpp | 14 +- .../collectioneditor/collectionview.cpp | 10 +- .../componentcore/designeractionmanager.cpp | 50 ++++-- .../componentcore/layoutingridlayout.cpp | 10 +- .../componentcore/modelnodeoperations.cpp | 167 +++++++++++------- .../connectioneditor/backendmodel.cpp | 13 +- .../connectioneditor/connectionmodel.cpp | 29 +-- .../qmldesigner/components/createtexture.cpp | 5 +- .../components/debugview/debugview.cpp | 7 +- .../components/edit3d/bakelightsdatamodel.cpp | 4 + .../itemlibrary/itemlibrarymodel.cpp | 5 +- .../materialbrowser/materialutils.cpp | 4 + .../materialeditorqmlbackend.cpp | 2 + .../materialeditor/materialeditorview.cpp | 15 +- .../choosefrompropertylistdialog.cpp | 4 + .../components/navigator/navigatorview.cpp | 10 +- .../propertyeditor/gradientmodel.cpp | 10 +- .../propertyeditorqmlbackend.cpp | 18 +- .../propertyeditor/propertyeditorqmlbackend.h | 11 +- .../propertyeditor/propertyeditorvalue.cpp | 10 ++ .../propertyeditor/propertyeditorview.cpp | 89 +++++----- .../components/stateseditor/propertymodel.cpp | 9 +- .../stateseditor/stateseditormodel.cpp | 4 + .../textureeditor/textureeditorqmlbackend.cpp | 2 + .../textureeditor/textureeditorview.cpp | 19 +- .../timelineeditor/timelineview.cpp | 23 ++- .../transitioneditor/transitioneditorview.cpp | 58 ++++-- .../designercore/include/abstractview.h | 7 + .../qmldesigner/designercore/include/model.h | 14 +- .../designercore/include/nodemetainfo.h | 21 ++- .../designercore/metainfo/nodemetainfo.cpp | 34 ++++ .../designercore/model/abstractview.cpp | 40 ++++- .../qmldesigner/designercore/model/model.cpp | 39 ++-- .../designercore/model/modelmerger.cpp | 8 + .../designercore/model/qmlconnections.cpp | 7 +- .../designercore/model/qmlitemnode.cpp | 22 ++- .../designercore/model/qmlobjectnode.cpp | 2 +- .../designercore/model/qmlstate.cpp | 8 + .../designercore/model/qmlvisualnode.cpp | 20 ++- .../designercore/model/stylesheetmerger.cpp | 10 ++ .../designercore/model/texttomodelmerger.cpp | 31 ++-- .../projectstorage/commontypecache.h | 4 +- .../qmldesigner/qmldesignerprojectmanager.cpp | 26 ++- .../qmldesigner/coretests/tst_testcore.cpp | 43 ++++- 47 files changed, 729 insertions(+), 271 deletions(-) diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp index 067cff57a49..3b98eb6baf9 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp @@ -273,8 +273,11 @@ void AssetsLibraryWidget::setHasSceneEnv(bool b) emit hasSceneEnvChanged(); } -void AssetsLibraryWidget::handleDeleteEffects(const QStringList &effectNames) +void AssetsLibraryWidget::handleDeleteEffects([[maybe_unused]] const QStringList &effectNames) { +#ifdef QDS_USE_PROJECTSTORAGE +// That code has to rewritten with modules. Seem try to find all effects nodes. +#else DesignDocument *document = QmlDesignerPlugin::instance()->currentDesignDocument(); if (!document) return; @@ -340,6 +343,7 @@ void AssetsLibraryWidget::handleDeleteEffects(const QStringList &effectNames) document->clearUndoRedoStacks(); m_assetsView->emitCustomNotification("effectcomposer_effects_deleted", {}, {effectNames}); +#endif } void AssetsLibraryWidget::invalidateThumbnail(const QString &id) diff --git a/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp b/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp index 5336f6b4dd4..bd63742d5e7 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp @@ -229,6 +229,7 @@ void ActionEditor::prepareConnections() QList singletons; QStringList states; + [[maybe_unused]] auto model = m_modelNode.model(); const QList allNodes = m_modelNode.view()->allModelNodes(); for (const auto &modelNode : allNodes) { // Skip nodes without specified id @@ -240,11 +241,19 @@ void ActionEditor::prepareConnections() for (const auto &property : modelNode.metaInfo().properties()) { if (isSkippedType(property.propertyType())) continue; - +#ifdef QDS_USE_PROJECTSTORAGE + auto exportedTypeName = model->exportedTypeNameForMetaInfo(property.propertyType()) + .name.toQByteArray(); + connection.properties.append( + ActionEditorDialog::PropertyOption(QString::fromUtf8(property.name()), + exportedTypeName, + property.isWritable())); +#else connection.properties.append( ActionEditorDialog::PropertyOption(QString::fromUtf8(property.name()), skipCpp(property.propertyType().typeName()), property.isWritable())); +#endif } for (const VariantProperty &variantProperty : modelNode.variantProperties()) { @@ -305,11 +314,21 @@ void ActionEditor::prepareConnections() for (const auto &property : metaInfo.properties()) { if (isSkippedType(property.propertyType())) continue; - +#ifdef QDS_USE_PROJECTSTORAGE + auto exportedTypeName = model + ->exportedTypeNameForMetaInfo( + property.propertyType()) + .name.toQByteArray(); + singelton.properties.append( + ActionEditorDialog::PropertyOption(QString::fromUtf8(property.name()), + exportedTypeName, + property.isWritable())); +#else singelton.properties.append(ActionEditorDialog::PropertyOption( QString::fromUtf8(property.name()), skipCpp(property.propertyType().typeName()), property.isWritable())); +#endif } if (!singelton.properties.isEmpty()) { diff --git a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp index c03c31208fc..6a77b6235eb 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp @@ -176,22 +176,22 @@ bool isType(const TypeName &first, const TypeName &second, const Tuple &...types bool compareTypes(const NodeMetaInfo &sourceType, const NodeMetaInfo &targetType) { - if constexpr (useProjectStorage()) { - return targetType.isVariant() || sourceType.isVariant() || targetType == sourceType - || (targetType.isNumber() && sourceType.isNumber()) - || (targetType.isColor() && sourceType.isColor()) - || (targetType.isString() && sourceType.isString()); - } else { - const TypeName source = sourceType.simplifiedTypeName(); - const TypeName target = targetType.simplifiedTypeName(); +#ifdef QDS_USE_PROJECTSTORAGE + return targetType.isVariant() || sourceType.isVariant() || targetType == sourceType + || (targetType.isNumber() && sourceType.isNumber()) + || (targetType.isColor() && sourceType.isColor()) + || (targetType.isString() && sourceType.isString()); +#else + const TypeName source = sourceType.simplifiedTypeName(); + const TypeName target = targetType.simplifiedTypeName(); - static constexpr auto variantTypes = std::make_tuple("alias", "unknown", "variant", "var"); + static constexpr auto variantTypes = std::make_tuple("alias", "unknown", "variant", "var"); - return isType(variantTypes, target) || isType(variantTypes, source) || target == source - || targetType == sourceType || isType(target, source, "double", "real", "int") - || isType(target, source, "QColor", "color") - || isType(target, source, "QString", "string"); - } + return isType(variantTypes, target) || isType(variantTypes, source) || target == source + || targetType == sourceType || isType(target, source, "double", "real", "int") + || isType(target, source, "QColor", "color") + || isType(target, source, "QString", "string"); +#endif } } // namespace @@ -287,8 +287,13 @@ void BindingEditor::updateWindowName() + exportedTypeNames.front().name.toQString() + "]"; } } else { +#ifdef QDS_USE_PROJECTSTORAGE + targetString = " [" + (m_targetName.isEmpty() ? QString() : (m_targetName + ": ")) + + QString::fromUtf8(m_backendValueType.displayName()) + "]"; +#else targetString = " [" + (m_targetName.isEmpty() ? QString() : (m_targetName + ": ")) + QString::fromUtf8(m_backendValueType.simplifiedTypeName()) + "]"; +#endif } m_dialog->setWindowTitle(m_dialog->defaultTitle() + targetString); diff --git a/src/plugins/qmldesigner/components/bindingeditor/signallist.cpp b/src/plugins/qmldesigner/components/bindingeditor/signallist.cpp index 46470682519..12a605e58a0 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/signallist.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/signallist.cpp @@ -218,14 +218,18 @@ void SignalList::addConnection(const QModelIndex &modelIndex) const ModelNode rootModelNode = view->rootModelNode(); if (rootModelNode.isValid() && rootModelNode.metaInfo().isValid()) { - NodeMetaInfo nodeMetaInfo = view->model()->qtQuickConnectionsMetaInfo(); +#ifndef QDS_USE_PROJECTSTORAGE + NodeMetaInfo nodeMetaInfo = view->model()->qtQmlConnectionsMetaInfo(); if (nodeMetaInfo.isValid()) { - view->executeInTransaction("ConnectionModel::addConnection", - [this, view, nodeMetaInfo, targetModelIndex, modelIndex, - buttonModelIndex, signalName, &rootModelNode] { +#endif + view->executeInTransaction("ConnectionModel::addConnection", [&] { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode = view->createModelNode("Connections"); +#else ModelNode newNode = view->createModelNode("QtQuick.Connections", nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion()); +#endif const QString source = m_modelNode.validId() + ".trigger()"; if (QmlItemNode::isValidQmlItemNode(m_modelNode)) @@ -240,7 +244,9 @@ void SignalList::addConnection(const QModelIndex &modelIndex) m_model->setConnected(modelIndex.row(), true); m_model->setData(buttonModelIndex, newNode.internalId(), SignalListModel::ConnectionsInternalIdRole); }); +#ifndef QDS_USE_PROJECTSTORAGE } +#endif } } diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp index 723d0beca88..93efc36a4fc 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp @@ -29,10 +29,9 @@ namespace { -inline bool isStudioCollectionModel(const QmlDesigner::ModelNode &node) +bool isStudioCollectionModel(const QmlDesigner::ModelNode &node) { - using namespace QmlDesigner::CollectionEditorConstants; - return node.metaInfo().typeName() == JSONCOLLECTIONMODEL_TYPENAME; + return node.metaInfo().isQtQuickStudioUtilsJsonListModel(); } inline void setVariantPropertyValue(const QmlDesigner::ModelNode &node, @@ -201,11 +200,14 @@ void CollectionView::addResource(const QUrl &url, const QString &name) } else { sourceAddress = url.toString(); } - +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode resourceNode = createModelNode("JsonListModel"); +#else const NodeMetaInfo resourceMetaInfo = jsonCollectionMetaInfo(); ModelNode resourceNode = createModelNode(resourceMetaInfo.typeName(), resourceMetaInfo.majorVersion(), resourceMetaInfo.minorVersion()); +#endif VariantProperty sourceProperty = resourceNode.variantProperty( CollectionEditorConstants::SOURCEFILE_PROPERTY); VariantProperty nameProperty = resourceNode.variantProperty("objectName"); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index eabe612fda3..27afaa08f2b 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -579,10 +579,14 @@ QList getSlotsLists(const ModelNode &node) //creates connection without signalHandlerProperty ModelNode createNewConnection(ModelNode targetNode) { - NodeMetaInfo connectionsMetaInfo = targetNode.view()->model()->qtQuickConnectionsMetaInfo(); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newConnectionNode = targetNode.view()->createModelNode("Connections"); +#else + NodeMetaInfo connectionsMetaInfo = targetNode.view()->model()->qtQmlConnectionsMetaInfo(); const auto typeName = useProjectStorage() ? "Connections" : "QtQuick.Connections"; ModelNode newConnectionNode = targetNode.view()->createModelNode( typeName, connectionsMetaInfo.majorVersion(), connectionsMetaInfo.minorVersion()); +#endif if (QmlItemNode::isValidQmlItemNode(targetNode)) { targetNode.nodeAbstractProperty("data").reparentHere(newConnectionNode); } else { @@ -874,20 +878,9 @@ public: NodeMetaInfo modelMetaInfo = view->model()->metaInfo("ListModel"); NodeMetaInfo elementMetaInfo = view->model()->metaInfo("ListElement"); - ListModelEditorModel model{[&] { - return view->createModelNode(useProjectStorage() - ? "ListModel" - : "QtQml.Models.ListModel", - modelMetaInfo.majorVersion(), - modelMetaInfo.minorVersion()); - }, - [&] { - return view->createModelNode( - useProjectStorage() ? "ListElement" - : "QtQml.Models.ListElement", - elementMetaInfo.majorVersion(), - elementMetaInfo.minorVersion()); - }, +#ifdef QDS_USE_PROJECTSTORAGE + ListModelEditorModel model{[&] { return view->createModelNode("ListModel"); }, + [&] { return view->createModelNode("ListElement"); }, [&](const ModelNode &node) { bool isNowInComponent = ModelNodeOperations::goIntoComponent( node); @@ -906,6 +899,33 @@ public: return node; }}; +#else + ListModelEditorModel model{ + [&] { + return view->createModelNode("QtQml.Models.ListModel", + modelMetaInfo.majorVersion(), + modelMetaInfo.minorVersion()); + }, + [&] { + return view->createModelNode("QtQml.Models.ListElement", + elementMetaInfo.majorVersion(), + elementMetaInfo.minorVersion()); + }, + [&](const ModelNode &node) { + bool isNowInComponent = ModelNodeOperations::goIntoComponent(node); + + Model *currentModel = QmlDesignerPlugin::instance()->currentDesignDocument()->currentModel(); + + if (currentModel->rewriterView() && !currentModel->rewriterView()->errors().isEmpty()) { + throw DocumentError{}; + } + + if (isNowInComponent) + return view->rootModelNode(); + + return node; + }}; +#endif model.setListView(targetNode); diff --git a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp index a323654b6b5..8d3412e0e85 100644 --- a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp +++ b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp @@ -169,9 +169,12 @@ void LayoutInGridLayout::doIt() m_selectionContext.view()->executeInTransaction("LayoutInGridLayout1",[this, &layoutNode, layoutType](){ QTC_ASSERT(m_selectionContext.view()->model()->hasNodeMetaInfo(layoutType), return); - +#ifdef QDS_USE_PROJECTSTORAGE + layoutNode = m_selectionContext.view()->createModelNode(layoutType); +#else NodeMetaInfo metaInfo = m_selectionContext.view()->model()->metaInfo(layoutType); layoutNode = m_selectionContext.view()->createModelNode(layoutType, metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif reparentTo(layoutNode, m_parentNode); }); @@ -387,10 +390,13 @@ void LayoutInGridLayout::fillEmptyCells() if (y > 0) yPos = m_yTopOffsets.at(y-1); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode = m_selectionContext.view()->createModelNode("Item"); +#else NodeMetaInfo metaInfo = m_selectionContext.view()->model()->metaInfo("QtQuick.Item"); ModelNode newNode = m_selectionContext.view()->createModelNode("QtQuick.Item", metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif reparentTo(newNode, m_parentNode); m_spacerNodes.append(newNode); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index ca7bd21689d..6ed1480d85c 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -484,11 +484,13 @@ static void layoutHelperFunction(const SelectionContext &selectionContext, selectionContext.view()->executeInTransaction("DesignerActionManager|layoutHelperFunction",[=](){ QmlItemNode parentNode = qmlItemNode.instanceParentItem(); - +#ifdef QDS_USE_PROJECTSTORAGE + const ModelNode layoutNode = selectionContext.view()->createModelNode(layoutType); +#else NodeMetaInfo metaInfo = selectionContext.view()->model()->metaInfo(layoutType); const ModelNode layoutNode = selectionContext.view()->createModelNode(layoutType, metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif reparentTo(layoutNode, parentNode); QList sortedSelectedNodes = selectionContext.selectedModelNodes(); @@ -886,15 +888,26 @@ void addItemToStackedContainer(const SelectionContext &selectionContext) NodeMetaInfo itemMetaInfo = view->model()->metaInfo("QtQuick.Item", -1, -1); QTC_ASSERT(itemMetaInfo.isValid(), return); - QTC_ASSERT(itemMetaInfo.majorVersion() == 2, return); - +#ifdef QDS_USE_PROJECTSTORAGE + QmlDesigner::ModelNode itemNode = view->createModelNode("Item"); +#else QmlDesigner::ModelNode itemNode = view->createModelNode("QtQuick.Item", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion()); - +#endif container.defaultNodeListProperty().reparentHere(itemNode); if (potentialTabBar.isValid()) {// The stacked container is hooked up to a TabBar - NodeMetaInfo tabButtonMetaInfo = view->model()->metaInfo("QtQuick.Controls.TabButton", -1, -1); +#ifdef QDS_USE_PROJECTSTORAGE + const int buttonIndex = potentialTabBar.directSubModelNodes().size(); + ModelNode tabButtonNode = view->createModelNode("TabButton"); + + tabButtonNode.variantProperty("text").setValue( + QString::fromLatin1("Tab %1").arg(buttonIndex)); + potentialTabBar.defaultNodeListProperty().reparentHere(tabButtonNode); +#else + NodeMetaInfo tabButtonMetaInfo = view->model()->metaInfo("QtQuick.Controls.TabButton", + -1, + -1); if (tabButtonMetaInfo.isValid()) { const int buttonIndex = potentialTabBar.directSubModelNodes().size(); ModelNode tabButtonNode = @@ -906,6 +919,7 @@ void addItemToStackedContainer(const SelectionContext &selectionContext) potentialTabBar.defaultNodeListProperty().reparentHere(tabButtonNode); } +#endif } }); } @@ -1005,6 +1019,7 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) QTC_ASSERT(container.isValid(), return); QTC_ASSERT(container.metaInfo().isValid(), return); +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo tabBarMetaInfo = view->model()->metaInfo("QtQuick.Controls.TabBar", -1, -1); QTC_ASSERT(tabBarMetaInfo.isValid(), return); QTC_ASSERT(tabBarMetaInfo.majorVersion() == 2, return); @@ -1012,6 +1027,7 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) NodeMetaInfo tabButtonMetaInfo = view->model()->metaInfo("QtQuick.Controls.TabButton", -1, -1); QTC_ASSERT(tabButtonMetaInfo.isValid(), return); QTC_ASSERT(tabButtonMetaInfo.majorVersion() == 2, return); +#endif QmlItemNode containerItemNode(container); QTC_ASSERT(containerItemNode.isValid(), return); @@ -1019,14 +1035,15 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) const PropertyName indexPropertyName = getIndexPropertyName(container); QTC_ASSERT(container.metaInfo().hasProperty(indexPropertyName), return); - view->executeInTransaction("DesignerActionManager:addItemToStackedContainer", - [view, container, containerItemNode, tabBarMetaInfo, tabButtonMetaInfo, indexPropertyName](){ - + view->executeInTransaction("DesignerActionManager:addItemToStackedContainer", [&]() { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode tabBarNode = view->createModelNode("TabBar"); +#else ModelNode tabBarNode = view->createModelNode("QtQuick.Controls.TabBar", tabBarMetaInfo.majorVersion(), tabBarMetaInfo.minorVersion()); - +#endif container.parentProperty().reparentHere(tabBarNode); const int maxValue = container.directSubModelNodes().size(); @@ -1038,11 +1055,14 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) tabBarItem.anchors().setAnchor(AnchorLineBottom, containerItemNode, AnchorLineTop); for (int i = 0; i < maxValue; ++i) { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode tabButtonNode = view->createModelNode("TabButton"); +#else ModelNode tabButtonNode = view->createModelNode("QtQuick.Controls.TabButton", tabButtonMetaInfo.majorVersion(), tabButtonMetaInfo.minorVersion()); - +#endif tabButtonNode.variantProperty("text").setValue(QString::fromLatin1("Tab %1").arg(i)); tabBarNode.defaultNodeListProperty().reparentHere(tabButtonNode); } @@ -1053,7 +1073,6 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) const QString expression = id + "." + QString::fromLatin1(indexPropertyName); container.bindingProperty(indexPropertyName).setExpression(expression); }); - } AddFilesResult addFilesToProject(const QStringList &fileNames, const QString &defaultDir, bool showDialog) @@ -1170,23 +1189,22 @@ void createFlowActionArea(const SelectionContext &selectionContext) const QPointF pos = selectionContext.scenePosition().isNull() ? QPointF() : selectionContext.scenePosition() - QmlItemNode(container).flowPosition(); - view->executeInTransaction("DesignerActionManager:createFlowActionArea", - [view, container, actionAreaMetaInfo, pos](){ - - ModelNode flowActionNode = - view->createModelNode("FlowView.FlowActionArea", + view->executeInTransaction("DesignerActionManager:createFlowActionArea", [&]() { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode flowActionNode = view->createModelNode("FlowActionArea"); +#else + ModelNode flowActionNode = view->createModelNode("FlowView.FlowActionArea", actionAreaMetaInfo.majorVersion(), actionAreaMetaInfo.minorVersion()); +#endif + if (!pos.isNull()) { + flowActionNode.variantProperty("x").setValue(pos.x()); + flowActionNode.variantProperty("y").setValue(pos.y()); + } - if (!pos.isNull()) { - flowActionNode.variantProperty("x").setValue(pos.x()); - flowActionNode.variantProperty("y").setValue(pos.y()); - } - - container.defaultNodeListProperty().reparentHere(flowActionNode); - view->setSelectedModelNode(flowActionNode); - }); - + container.defaultNodeListProperty().reparentHere(flowActionNode); + view->setSelectedModelNode(flowActionNode); + }); } void addTransition(const SelectionContext &selectionContext) @@ -1221,17 +1239,18 @@ void addFlowEffect(const SelectionContext &selectionContext, const TypeName &typ NodeMetaInfo effectMetaInfo = view->model()->metaInfo("FlowView." + typeName, -1, -1); QTC_ASSERT(typeName == "None" || effectMetaInfo.isValid(), return); - view->executeInTransaction("DesignerActionManager:addFlowEffect", [=]() { + view->executeInTransaction("DesignerActionManager:addFlowEffect", [&]() { if (container.hasProperty("effect")) container.removeProperty("effect"); if (effectMetaInfo.isQtObject()) { - ModelNode effectNode = view->createModelNode(useProjectStorage() - ? typeName - : effectMetaInfo.typeName(), +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode effectNode = view->createModelNode(typeName); +#else + ModelNode effectNode = view->createModelNode(effectMetaInfo.typeName(), effectMetaInfo.majorVersion(), effectMetaInfo.minorVersion()); - +#endif container.nodeProperty("effect").reparentHere(effectNode); view->setSelectedModelNode(effectNode); } @@ -1299,7 +1318,6 @@ void reparentToNodeAndAdjustPosition(const ModelNode &parentModelNode, void addToGroupItem(const SelectionContext &selectionContext) { - const TypeName typeName = "QtQuick.Studio.Components.GroupItem"; try { if (!hasStudioComponentsImport(selectionContext)) { @@ -1315,20 +1333,28 @@ void addToGroupItem(const SelectionContext &selectionContext) if (qmlItemNode.hasInstanceParentItem()) { ModelNode groupNode; - selectionContext.view()->executeInTransaction("DesignerActionManager|addToGroupItem1",[=, &groupNode](){ + selectionContext.view() + ->executeInTransaction("DesignerActionManager|addToGroupItem1", [&]() { + QmlItemNode parentNode = qmlItemNode.instanceParentItem(); +#ifdef QDS_USE_PROJECTSTORAGE + groupNode = selectionContext.view()->createModelNode("GroupItem"); +#else + const TypeName typeName = "QtQuick.Studio.Components.GroupItem"; - QmlItemNode parentNode = qmlItemNode.instanceParentItem(); - NodeMetaInfo metaInfo = selectionContext.view()->model()->metaInfo(typeName); - groupNode = selectionContext.view()->createModelNode(typeName, metaInfo.majorVersion(), metaInfo.minorVersion()); - reparentTo(groupNode, parentNode); - }); - selectionContext.view()->executeInTransaction("DesignerActionManager|addToGroupItem2",[=](){ + NodeMetaInfo metaInfo = selectionContext.view()->model()->metaInfo(typeName); + groupNode = selectionContext.view()->createModelNode(typeName, + metaInfo.majorVersion(), + metaInfo.minorVersion()); +#endif + reparentTo(groupNode, parentNode); + }); + selectionContext.view() + ->executeInTransaction("DesignerActionManager|addToGroupItem2", [&]() { + QList selectedNodes = selectionContext.selectedModelNodes(); + setUpperLeftPostionToNode(groupNode, selectedNodes); - QList selectedNodes = selectionContext.selectedModelNodes(); - setUpperLeftPostionToNode(groupNode, selectedNodes); - - reparentToNodeAndAdjustPosition(groupNode, selectedNodes); - }); + reparentToNodeAndAdjustPosition(groupNode, selectedNodes); + }); } } } catch (RewritingException &e) { @@ -1387,7 +1413,6 @@ static void getTypeAndImport(const SelectionContext &selectionContext, void addCustomFlowEffect(const SelectionContext &selectionContext) { - TypeName typeName; QString typeString; @@ -1416,23 +1441,27 @@ void addCustomFlowEffect(const SelectionContext &selectionContext) QTC_ASSERT(container.metaInfo().isValid(), return); QTC_ASSERT(QmlItemNode::isFlowTransition(container), return); +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo effectMetaInfo = view->model()->metaInfo(typeName, -1, -1); QTC_ASSERT(typeName == "None" || effectMetaInfo.isValid(), return); - - view->executeInTransaction("DesignerActionManager:addFlowEffect", [=]() { +#endif + view->executeInTransaction("DesignerActionManager:addFlowEffect", [&]() { if (container.hasProperty("effect")) container.removeProperty("effect"); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode effectNode = view->createModelNode(typeName); + container.nodeProperty("effect").reparentHere(effectNode); + view->setSelectedModelNode(effectNode); +#else if (effectMetaInfo.isValid()) { - ModelNode effectNode = view->createModelNode(useProjectStorage() - ? typeName - : effectMetaInfo.typeName(), + ModelNode effectNode = view->createModelNode(effectMetaInfo.typeName(), effectMetaInfo.majorVersion(), effectMetaInfo.minorVersion()); - container.nodeProperty("effect").reparentHere(effectNode); view->setSelectedModelNode(effectNode); } +#endif }); } @@ -1450,7 +1479,6 @@ static QString fromCamelCase(const QString &s) QString getTemplateDialog(const Utils::FilePath &projectPath) { - const Utils::FilePath templatesPath = projectPath.pathAppended("templates"); const QStringList templateFiles = QDir(templatesPath.toString()).entryList({"*.qml"}); @@ -1598,23 +1626,30 @@ void addMouseAreaFill(const SelectionContext &selectionContext) return; } - selectionContext.view()->executeInTransaction("DesignerActionManager|addMouseAreaFill", [selectionContext]() { - ModelNode modelNode = selectionContext.currentSingleSelectedNode(); - if (modelNode.isValid()) { - NodeMetaInfo itemMetaInfo = selectionContext.view()->model()->metaInfo("QtQuick.MouseArea", -1, -1); - QTC_ASSERT(itemMetaInfo.isValid(), return); + selectionContext.view() + ->executeInTransaction("DesignerActionManager|addMouseAreaFill", [selectionContext]() { + ModelNode modelNode = selectionContext.currentSingleSelectedNode(); + if (modelNode.isValid()) { +#ifdef QDS_USE_PROJECTSTORAGE + QmlDesigner::ModelNode mouseAreaNode = selectionContext.view()->createModelNode( + "MouseArea"); +#else + NodeMetaInfo itemMetaInfo = selectionContext.view()->model()->metaInfo( + "QtQuick.MouseArea", -1, -1); + QTC_ASSERT(itemMetaInfo.isValid(), return); - QmlDesigner::ModelNode mouseAreaNode = - selectionContext.view()->createModelNode("QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion()); - mouseAreaNode.validId(); + QmlDesigner::ModelNode mouseAreaNode = selectionContext.view()->createModelNode( + "QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion()); +#endif + mouseAreaNode.validId(); - modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode); - QmlItemNode mouseAreaItemNode(mouseAreaNode); - if (mouseAreaItemNode.isValid()) { - mouseAreaItemNode.anchors().fill(); + modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode); + QmlItemNode mouseAreaItemNode(mouseAreaNode); + if (mouseAreaItemNode.isValid()) { + mouseAreaItemNode.anchors().fill(); + } } - } - }); + }); } QVariant previewImageDataForGenericNode(const ModelNode &modelNode) diff --git a/src/plugins/qmldesigner/components/connectioneditor/backendmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/backendmodel.cpp index 5d9e9fe99c6..97c73205b29 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/backendmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/backendmodel.cpp @@ -228,16 +228,17 @@ void BackendModel::addNewBackend() if (!dialog.isSingleton()) { m_connectionView->executeInTransaction("BackendModel::addNewBackend", [this, metaInfo, typeName, propertyName, &dialog] { - int minorVersion = metaInfo.minorVersion(); - int majorVersion = metaInfo.majorVersion(); if (dialog.localDefinition()) { - ModelNode newNode = m_connectionView->createModelNode(useProjectStorage() - ? typeName.toUtf8() - : metaInfo.typeName(), +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode = m_connectionView->createModelNode(typeName.toUtf8()); +#else + int minorVersion = metaInfo.minorVersion(); + int majorVersion = metaInfo.majorVersion(); + ModelNode newNode = m_connectionView->createModelNode(metaInfo.typeName(), majorVersion, minorVersion); - +#endif m_connectionView->rootModelNode().nodeProperty(propertyName.toUtf8()).setDynamicTypeNameAndsetModelNode( typeName.toUtf8(), newNode); } else { diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp index d3fcd019fbd..2047f7625c1 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp @@ -48,7 +48,7 @@ QStringList propertyNameListToStringList(const QmlDesigner::PropertyNameList &pr bool isConnection(const QmlDesigner::ModelNode &modelNode) { - return (modelNode.metaInfo().simplifiedTypeName() == "Connections"); + return modelNode.metaInfo().isQtQmlConnections(); } } //namespace @@ -361,15 +361,14 @@ void ConnectionModel::addConnection(const PropertyName &signalName) ModelNode rootModelNode = connectionView()->rootModelNode(); if (rootModelNode.isValid() && rootModelNode.metaInfo().isValid()) { - - NodeMetaInfo nodeMetaInfo = connectionView()->model()->qtQuickConnectionsMetaInfo(); +#ifndef QDS_USE_PROJECTSTORAGE + NodeMetaInfo nodeMetaInfo = connectionView()->model()->qtQmlConnectionsMetaInfo(); if (nodeMetaInfo.isValid()) { - ModelNode selectedNode; - if (connectionView()->selectedModelNodes().isEmpty()) +#endif + ModelNode selectedNode = connectionView()->firstSelectedModelNode(); + if (!selectedNode) selectedNode = connectionView()->rootModelNode(); - else - selectedNode = connectionView()->selectedModelNodes().constFirst(); PropertyName signalHandlerName = signalName; if (signalHandlerName.isEmpty()) @@ -378,12 +377,14 @@ void ConnectionModel::addConnection(const PropertyName &signalName) signalHandlerName = addOnToSignalName(QString::fromUtf8(signalHandlerName)).toUtf8(); connectionView() - ->executeInTransaction("ConnectionModel::addConnection", - [this, nodeMetaInfo, signalHandlerName, &rootModelNode] { - ModelNode newNode = connectionView() - ->createModelNode("QtQuick.Connections", - nodeMetaInfo.majorVersion(), - nodeMetaInfo.minorVersion()); + ->executeInTransaction("ConnectionModel::addConnection", [&] { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode = connectionView()->createModelNode("Connections"); +#else + ModelNode newNode = connectionView()->createModelNode("QtQuick.Connections", + nodeMetaInfo.majorVersion(), + nodeMetaInfo.minorVersion()); +#endif QString source = "console.log(\"clicked\")"; if (connectionView()->selectedModelNodes().size() == 1) { @@ -411,7 +412,9 @@ void ConnectionModel::addConnection(const PropertyName &signalName) selectProperty(newNode.signalHandlerProperty(signalHandlerName)); }); +#ifndef QDS_USE_PROJECTSTORAGE } +#endif } } diff --git a/src/plugins/qmldesigner/components/createtexture.cpp b/src/plugins/qmldesigner/components/createtexture.cpp index 1363868f37f..b6e99ae972c 100644 --- a/src/plugins/qmldesigner/components/createtexture.cpp +++ b/src/plugins/qmldesigner/components/createtexture.cpp @@ -84,10 +84,13 @@ ModelNode CreateTexture::createTextureFromImage(const Utils::FilePath &assetPat ModelNode newTexNode = Utils3D::getTextureDefaultInstance(textureSource, m_view); if (!newTexNode.isValid()) { +#ifdef QDS_USE_PROJECTSTORAGE + newTexNode = m_view->createModelNode("Texture"); +#else newTexNode = m_view->createModelNode("QtQuick3D.Texture", metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif newTexNode.setIdWithoutRefactoring(m_view->model()->generateNewId(assetPath.baseName())); VariantProperty sourceProp = newTexNode.variantProperty("source"); diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp index 64f85915f16..e05001e4774 100644 --- a/src/plugins/qmldesigner/components/debugview/debugview.cpp +++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp @@ -95,7 +95,9 @@ void DebugView::nodeCreated(const ModelNode &createdNode) message << createdNode.nodeSource(); message << "MetaInfo " << createdNode.metaInfo().isValid() << " "; if (auto metaInfo = createdNode.metaInfo()) { +#ifndef QDS_USE_PROJECTSTORAGE message << metaInfo.majorVersion() << "." << metaInfo.minorVersion(); +#endif message << ModelUtils::componentFilePath(createdNode); } log("::nodeCreated:", message.readAll()); @@ -283,6 +285,7 @@ void DebugView::selectedNodesChanged(const QList &selectedNodes /*sel message << lineBreak; if (selectedNode.metaInfo().isValid()) { +#ifndef QDS_USE_PROJECTSTORAGE for (const NodeMetaInfo &metaInfo : selectedNode.metaInfo().selfAndPrototypes()) { message << metaInfo.typeName() << " " << metaInfo.majorVersion() << "." << metaInfo.minorVersion() << lineBreak; @@ -290,6 +293,7 @@ void DebugView::selectedNodesChanged(const QList &selectedNodes /*sel message << lineBreak; message << selectedNode.metaInfo().typeName(); +#endif message << lineBreak; message << "Node Source" << selectedNode.nodeSource(); @@ -323,10 +327,11 @@ void DebugView::selectedNodesChanged(const QList &selectedNodes /*sel message << "Is valid object node: " << QmlItemNode::isValidQmlObjectNode(selectedNode); message << lineBreak; +#ifndef QDS_USE_PROJECTSTORAGE message << "version: " << QString::number(selectedNode.metaInfo().majorVersion()) + "." + QString::number(selectedNode.metaInfo().minorVersion()); - +#endif message << lineBreak; QmlItemNode itemNode(selectedNode); diff --git a/src/plugins/qmldesigner/components/edit3d/bakelightsdatamodel.cpp b/src/plugins/qmldesigner/components/edit3d/bakelightsdatamodel.cpp index e812bb6d00e..9657d564fb2 100644 --- a/src/plugins/qmldesigner/components/edit3d/bakelightsdatamodel.cpp +++ b/src/plugins/qmldesigner/components/edit3d/bakelightsdatamodel.cpp @@ -353,10 +353,14 @@ void BakeLightsDataModel::apply() if (node.hasBindingProperty(propName)) blmNode = node.bindingProperty(propName).resolveToModelNode(); if (!blmNode.isValid() && data.enabled) { +#ifdef QDS_USE_PROJECTSTORAGE + blmNode = m_view->createModelNode("BakedLightmap"); +#else NodeMetaInfo metaInfo = m_view->model()->qtQuick3DBakedLightmapMetaInfo(); blmNode = m_view->createModelNode("QtQuick3D.BakedLightmap", metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif QString idPart; if (data.aliasProp.isEmpty()) idPart = data.id; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index eaf6f89b14a..a0fec7e507a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -371,10 +371,13 @@ void ItemLibraryModel::update([[maybe_unused]] ItemLibraryInfo *itemLibraryInfo, else metaInfo = model->metaInfo(entry.typeName()); +#ifdef QDS_USE_PROJECTSTORAGE + bool valid = metaInfo.isValid(); +#else bool valid = metaInfo.isValid() && (metaInfo.majorVersion() >= entry.majorVersion() || metaInfo.majorVersion() < 0); - +#endif bool isItem = valid && metaInfo.isQtQuickItem(); bool forceVisibility = valid && NodeHints::fromItemLibraryEntry(entry).visibleInLibrary(); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp index f22fdc030e4..1ee2e409f38 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp @@ -47,10 +47,14 @@ void MaterialUtils::assignMaterialTo3dModel(AbstractView *view, const ModelNode // if no valid material, create a new default material if (!newMaterialNode.isValid()) { +#ifdef QDS_USE_PROJECTSTORAGE + newMaterialNode = view->createModelNode("PrincipledMaterial"); +#else NodeMetaInfo metaInfo = view->model()->qtQuick3DPrincipledMaterialMetaInfo(); newMaterialNode = view->createModelNode("QtQuick3D.PrincipledMaterial", metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif newMaterialNode.validId(); } } diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorqmlbackend.cpp index 661f1ad3788..ecc460ae510 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorqmlbackend.cpp @@ -287,8 +287,10 @@ void MaterialEditorQmlBackend::setup(const QmlObjectNode &selectedMaterialNode, contextObject()->setSelectionChanged(false); +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = selectedMaterialNode.modelNode().metaInfo(); contextObject()->setMajorVersion(metaInfo.isValid() ? metaInfo.majorVersion() : -1); +#endif } else { context()->setContextProperty("hasMaterial", QVariant(false)); } diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp index ab43e992f7a..e083310cdbb 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp @@ -419,11 +419,14 @@ void MaterialEditorView::handleToolBarAction(int action) ModelNode matLib = Utils3D::materialLibraryNode(this); if (!matLib.isValid()) return; - +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newMatNode = createModelNode("PrincipledMaterial"); +#else NodeMetaInfo metaInfo = model()->qtQuick3DPrincipledMaterialMetaInfo(); ModelNode newMatNode = createModelNode("QtQuick3D.PrincipledMaterial", metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif renameMaterial(newMatNode, "New Material"); matLib.defaultNodeListProperty().reparentHere(newMatNode); }); @@ -526,6 +529,10 @@ void MaterialEditorView::handlePreviewModelChanged(const QString &modelStr) void MaterialEditorView::setupQmlBackend() { +#ifdef QDS_USE_PROJECTSTORAGE +// TODO unify implementation with property editor view +#else + QUrl qmlPaneUrl; QUrl qmlSpecificsUrl; QString specificQmlData; @@ -603,6 +610,7 @@ void MaterialEditorView::setupQmlBackend() m_stackedWidget->setCurrentWidget(m_qmlBackEnd->widget()); m_stackedWidget->setMinimumSize({400, 300}); +#endif } void MaterialEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value) @@ -1037,9 +1045,12 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material) return; // create the duplicate material +#ifdef QDS_USE_PROJECTSTORAGE + QmlObjectNode duplicateMat = createModelNode(matType); +#else NodeMetaInfo metaInfo = model()->metaInfo(matType); QmlObjectNode duplicateMat = createModelNode(matType, metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif duplicateMatNode = duplicateMat.modelNode(); // set name and id diff --git a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp index 04c2ebd9e65..58b4c427499 100644 --- a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp +++ b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp @@ -97,9 +97,13 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i } else if (insertInfo.isQtQuick3DMaterial()) { if (parentInfo.isQtQuick3DModel()) propertyList.append("materials"); +#ifdef QDS_USE_PROJECTSTORAGE +// TODO add the types here or use the module +#else } else if (insertInfo.typeName().startsWith("ComponentBundles.MaterialBundle")) { if (parentInfo.isQtQuick3DModel()) propertyList.append("materials"); +#endif } else if (insertInfo.isQtQuick3DBakedLightmap()) { if (parentInfo.isQtQuick3DModel()) propertyList.append("bakedLightmap"); diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index a3ad444e243..090beb64717 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -271,14 +271,20 @@ void NavigatorView::dragStarted(QMimeData *mimeData) } else if (mimeData->hasFormat(Constants::MIME_TYPE_TEXTURE)) { qint32 internalId = mimeData->data(Constants::MIME_TYPE_TEXTURE).toInt(); ModelNode texNode = modelNodeForInternalId(internalId); - +#ifdef QDS_USE_PROJECTSTORAGE + m_widget->setDragType(texNode.type()); +#else m_widget->setDragType(texNode.metaInfo().typeName()); +#endif m_widget->update(); } else if (mimeData->hasFormat(Constants::MIME_TYPE_MATERIAL)) { qint32 internalId = mimeData->data(Constants::MIME_TYPE_MATERIAL).toInt(); ModelNode matNode = modelNodeForInternalId(internalId); - +#ifdef QDS_USE_PROJECTSTORAGE + m_widget->setDragType(matNode.type()); +#else m_widget->setDragType(matNode.metaInfo().typeName()); +#endif m_widget->update(); } else if (mimeData->hasFormat(Constants::MIME_TYPE_BUNDLE_TEXTURE)) { m_widget->setDragType(Constants::MIME_TYPE_BUNDLE_TEXTURE); diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp index 53af36c7ae1..8bedabd83a7 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp @@ -695,6 +695,10 @@ void GradientModel::resetPuppet() QmlDesigner::ModelNode GradientModel::createGradientNode() { +#ifdef QDS_USE_PROJECTSTORAGE + QmlDesigner::TypeName typeName = m_gradientTypeName.toUtf8(); + auto gradientNode = view()->createModelNode(typeName); +#else QmlDesigner::TypeName fullTypeName = m_gradientTypeName.toUtf8(); if (m_gradientTypeName == "Gradient") { @@ -709,7 +713,7 @@ QmlDesigner::ModelNode GradientModel::createGradientNode() int majorVersion = metaInfo.majorVersion(); auto gradientNode = view()->createModelNode(fullTypeName, majorVersion, minorVersion); - +#endif setupGradientProperties(gradientNode); return gradientNode; @@ -717,6 +721,9 @@ QmlDesigner::ModelNode GradientModel::createGradientNode() QmlDesigner::ModelNode GradientModel::createGradientStopNode() { +#ifdef QDS_USE_PROJECTSTORAGE + return view()->createModelNode("GradientStop"); +#else QByteArray fullTypeName = "QtQuick.GradientStop"; auto metaInfo = model()->metaInfo(fullTypeName); @@ -724,6 +731,7 @@ QmlDesigner::ModelNode GradientModel::createGradientStopNode() int majorVersion = metaInfo.majorVersion(); return view()->createModelNode(fullTypeName, majorVersion, minorVersion); +#endif } void GradientModel::deleteGradientNode(bool saveTransaction) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp index 757777d656c..7f1ab00bb94 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp @@ -10,11 +10,12 @@ #include #include #include -#include +#include #include #include #include #include +#include #include @@ -514,6 +515,12 @@ void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const Q NodeMetaInfo metaInfo = qmlObjectNode.modelNode().metaInfo(); +#ifdef QDS_USE_PROJECTSTORAGE + contextObject()->setMajorVersion(-1); + contextObject()->setMinorVersion(-1); + contextObject()->setMajorQtQuickVersion(-1); + contextObject()->setMinorQtQuickVersion(-1); +#else if (metaInfo.isValid()) { contextObject()->setMajorVersion(metaInfo.majorVersion()); contextObject()->setMinorVersion(metaInfo.minorVersion()); @@ -523,7 +530,7 @@ void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const Q contextObject()->setMajorQtQuickVersion(-1); contextObject()->setMinorQtQuickVersion(-1); } - +#endif contextObject()->setMajorQtQuickVersion(qmlObjectNode.view()->majorQtQuickVersion()); contextObject()->setMinorQtQuickVersion(qmlObjectNode.view()->minorQtQuickVersion()); @@ -619,6 +626,7 @@ inline bool dotPropertyHeuristic(const QmlObjectNode &node, const NodeMetaInfo & return true; } +#ifndef QDS_USE_PROJECTSTORAGE QString PropertyEditorQmlBackend::templateGeneration(const NodeMetaInfo &metaType, const NodeMetaInfo &superType, const QmlObjectNode &node) @@ -849,6 +857,7 @@ QUrl PropertyEditorQmlBackend::getQmlFileUrl(const TypeName &relativeTypeName, c { return fileToUrl(locateQmlFile(info, QString::fromUtf8(fixTypeNameForPanes(relativeTypeName) + ".qml"))); } +#endif // QDS_USE_PROJECTSTORAGE TypeName PropertyEditorQmlBackend::fixTypeNameForPanes(const TypeName &typeName) { @@ -883,11 +892,13 @@ NodeMetaInfo PropertyEditorQmlBackend::findCommonAncestor(const ModelNode &node) return node.metaInfo(); } +#ifndef QDS_USE_PROJECTSTORAGE TypeName PropertyEditorQmlBackend::qmlFileName(const NodeMetaInfo &nodeInfo) { const TypeName fixedTypeName = fixTypeNameForPanes(nodeInfo.typeName()); return fixedTypeName + "Pane.qml"; } +#endif QUrl PropertyEditorQmlBackend::fileToUrl(const QString &filePath) { QUrl fileUrl; @@ -963,6 +974,7 @@ void PropertyEditorQmlBackend::setValueforAuxiliaryProperties(const QmlObjectNod setValue(qmlObjectNode, propertyName, qmlObjectNode.modelNode().auxiliaryDataWithDefault(key)); } +#ifndef QDS_USE_PROJECTSTORAGE std::tuple PropertyEditorQmlBackend::getQmlUrlForMetaInfo(const NodeMetaInfo &metaInfo) { QString className; @@ -1026,7 +1038,7 @@ QString PropertyEditorQmlBackend::locateQmlFile(const NodeMetaInfo &info, const return QFileInfo::exists(possibleFilePath); }); } - +#endif // QDS_USE_PROJECTSTORAGE } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h index 64cca972071..b677258488b 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h @@ -48,10 +48,13 @@ public: PropertyEditorValue *propertyValueForName(const QString &propertyName); static QString propertyEditorResourcesPath(); - static QString templateGeneration(const NodeMetaInfo &type, const NodeMetaInfo &superType, const QmlObjectNode &node); - +#ifndef QDS_USE_PROJECTSTORAGE + static QString templateGeneration(const NodeMetaInfo &type, + const NodeMetaInfo &superType, + const QmlObjectNode &node); static QUrl getQmlFileUrl(const TypeName &relativeTypeName, const NodeMetaInfo &info); static std::tuple getQmlUrlForMetaInfo(const NodeMetaInfo &modelNode); +#endif static bool checkIfUrlExists(const QUrl &url); @@ -80,10 +83,12 @@ private: PropertyEditorView *propertyEditor, const NodeMetaInfo &type); - static TypeName qmlFileName(const NodeMetaInfo &nodeInfo); static QUrl fileToUrl(const QString &filePath); static QString fileFromUrl(const QUrl &url); +#ifndef QDS_USE_PROJECTSTORAGE + static TypeName qmlFileName(const NodeMetaInfo &nodeInfo); static QString locateQmlFile(const NodeMetaInfo &info, const QString &relativePath); +#endif static TypeName fixTypeNameForPanes(const TypeName &typeName); private: diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp index f042df5241b..663ebafb659 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp @@ -579,6 +579,15 @@ void PropertyEditorNodeWrapper::add(const QString &type) TypeName propertyType = type.toUtf8(); if ((m_editorValue && m_editorValue->modelNode().isValid())) { +#ifdef QDS_USE_PROJECTSTORAGE + if (propertyType.isEmpty()) { + auto node = m_editorValue->modelNode(); + auto metaInfo = node.metaInfo().property(m_editorValue->name()).propertyType(); + auto exportedTypeName = node.model()->exportedTypeNameForMetaInfo(metaInfo); + propertyType = exportedTypeName.name.toQByteArray(); + } + m_modelNode = m_editorValue->modelNode().view()->createModelNode(propertyType); +#else if (propertyType.isEmpty()) { propertyType = m_editorValue->modelNode() .metaInfo() @@ -589,6 +598,7 @@ void PropertyEditorNodeWrapper::add(const QString &type) while (propertyType.contains('*')) // strip star propertyType.chop(1); m_modelNode = m_editorValue->modelNode().view()->createModelNode(propertyType, 4, 7); +#endif m_editorValue->modelNode().nodeAbstractProperty(m_editorValue->name()).reparentHere(m_modelNode); if (!m_modelNode.isValid()) qWarning("PropertyEditorNodeWrapper::add failed"); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp index 98901682a5e..1ff098f4eac 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp @@ -96,8 +96,9 @@ PropertyEditorView::~PropertyEditorView() qDeleteAll(m_qmlBackendHash); } -void PropertyEditorView::setupPane(const TypeName &typeName) +void PropertyEditorView::setupPane([[maybe_unused]] const TypeName &typeName) { +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = model()->metaInfo(typeName); QUrl qmlFile = PropertyEditorQmlBackend::getQmlFileUrl("Qt/ItemPane", metaInfo); @@ -118,6 +119,7 @@ void PropertyEditorView::setupPane(const TypeName &typeName) } else { qmlBackend->initialSetup(typeName, qmlSpecificsFile, this); } +#endif // QDS_USE_PROJECTSTORAGE } void PropertyEditorView::changeValue(const QString &name) @@ -448,6 +450,7 @@ void PropertyEditorView::resetView() namespace { +#ifndef QDS_USE_PROJECTSTORAGE [[maybe_unused]] std::tuple diffType(const NodeMetaInfo &commonAncestor, const NodeMetaInfo &specificsClassMetaInfo) { @@ -483,6 +486,7 @@ namespace { return {}; } +#endif // QDS_USE_PROJECTSTORAGE PropertyEditorQmlBackend *getQmlBackend(QHash &qmlBackendHash, const QUrl &qmlFileUrl, @@ -572,63 +576,56 @@ void setupWidget(PropertyEditorQmlBackend *currentQmlBackend, void PropertyEditorView::setupQmlBackend() { - if constexpr (useProjectStorage()) { - auto selfAndPrototypes = m_selectedNode.metaInfo().selfAndPrototypes(); - bool isEditableComponent = m_selectedNode.isComponent() - && !QmlItemNode(m_selectedNode).isEffectItem(); - auto specificQmlData = m_propertyEditorComponentGenerator.create(selfAndPrototypes, - isEditableComponent); - auto [panePath, specificsPath] = findPaneAndSpecificsPath(selfAndPrototypes, - model()->pathCache()); - PropertyEditorQmlBackend *currentQmlBackend = getQmlBackend(m_qmlBackendHash, - QUrl::fromLocalFile( - QString{panePath}), - m_imageCache, - m_stackedWidget, - this); +#ifdef QDS_USE_PROJECTSTORAGE + auto selfAndPrototypes = m_selectedNode.metaInfo().selfAndPrototypes(); + bool isEditableComponent = m_selectedNode.isComponent() + && !QmlItemNode(m_selectedNode).isEffectItem(); + auto specificQmlData = m_propertyEditorComponentGenerator.create(selfAndPrototypes, + isEditableComponent); + auto [panePath, specificsPath] = findPaneAndSpecificsPath(selfAndPrototypes, model()->pathCache()); + PropertyEditorQmlBackend *currentQmlBackend = getQmlBackend(m_qmlBackendHash, + QUrl::fromLocalFile(QString{panePath}), + m_imageCache, + m_stackedWidget, + this); - setupCurrentQmlBackend(currentQmlBackend, - m_selectedNode, - QUrl::fromLocalFile(QString{specificsPath}), - currentState(), - this, - specificQmlData); + setupCurrentQmlBackend(currentQmlBackend, + m_selectedNode, + QUrl::fromLocalFile(QString{specificsPath}), + currentState(), + this, + specificQmlData); - setupWidget(currentQmlBackend, this, m_stackedWidget); + setupWidget(currentQmlBackend, this, m_stackedWidget); - m_qmlBackEndForCurrentType = currentQmlBackend; + m_qmlBackEndForCurrentType = currentQmlBackend; - setupInsight(rootModelNode(), currentQmlBackend); - } else { - const NodeMetaInfo commonAncestor = PropertyEditorQmlBackend::findCommonAncestor( - m_selectedNode); + setupInsight(rootModelNode(), currentQmlBackend); +#else + const NodeMetaInfo commonAncestor = PropertyEditorQmlBackend::findCommonAncestor(m_selectedNode); - const auto [qmlFileUrl, specificsClassMetaInfo] = PropertyEditorQmlBackend::getQmlUrlForMetaInfo( - commonAncestor); + const auto [qmlFileUrl, specificsClassMetaInfo] = PropertyEditorQmlBackend::getQmlUrlForMetaInfo( + commonAncestor); - auto [diffClassMetaInfo, qmlSpecificsFile] = diffType(commonAncestor, specificsClassMetaInfo); + auto [diffClassMetaInfo, qmlSpecificsFile] = diffType(commonAncestor, specificsClassMetaInfo); - QString specificQmlData = getSpecificQmlData(commonAncestor, m_selectedNode, diffClassMetaInfo); + QString specificQmlData = getSpecificQmlData(commonAncestor, m_selectedNode, diffClassMetaInfo); - PropertyEditorQmlBackend *currentQmlBackend = getQmlBackend(m_qmlBackendHash, - qmlFileUrl, - m_imageCache, - m_stackedWidget, - this); + PropertyEditorQmlBackend *currentQmlBackend = getQmlBackend(m_qmlBackendHash, + qmlFileUrl, + m_imageCache, + m_stackedWidget, + this); - setupCurrentQmlBackend(currentQmlBackend, - m_selectedNode, - qmlSpecificsFile, - currentState(), - this, - specificQmlData); + setupCurrentQmlBackend( + currentQmlBackend, m_selectedNode, qmlSpecificsFile, currentState(), this, specificQmlData); - setupWidget(currentQmlBackend, this, m_stackedWidget); + setupWidget(currentQmlBackend, this, m_stackedWidget); - m_qmlBackEndForCurrentType = currentQmlBackend; + m_qmlBackEndForCurrentType = currentQmlBackend; - setupInsight(rootModelNode(), currentQmlBackend); - } + setupInsight(rootModelNode(), currentQmlBackend); +#endif // QDS_USE_PROJECTSTORAGE } void PropertyEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value) diff --git a/src/plugins/qmldesigner/components/stateseditor/propertymodel.cpp b/src/plugins/qmldesigner/components/stateseditor/propertymodel.cpp index 0a72d60ef7a..db07dd22080 100644 --- a/src/plugins/qmldesigner/components/stateseditor/propertymodel.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/propertymodel.cpp @@ -64,12 +64,19 @@ QVariant PropertyModel::data(const QModelIndex &index, int role) const if (!propertyChanges.target().isValid()) return {}; - +#ifdef QDS_USE_PROJECTSTORAGE + return propertyChanges.target() + .metaInfo() + .property(m_properties.at(index.row()).name()) + .propertyType() + .displayName(); +#else return propertyChanges.target() .metaInfo() .property(m_properties.at(index.row()).name()) .propertyType() .typeName(); +#endif } } return {}; diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp index 2ff5adedbe7..33351baf5ea 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp @@ -343,6 +343,9 @@ bool StatesEditorModel::renameActiveStateGroup(const QString &name) void StatesEditorModel::addStateGroup(const QString &name) { m_statesEditorView->executeInTransaction("createStateGroup", [this, name]() { +#ifdef QDS_USE_PROJECTSTORAGE + auto stateGroupNode = m_statesEditorView->createModelNode("StateGroup"); +#else const TypeName typeName = "QtQuick.StateGroup"; auto metaInfo = m_statesEditorView->model()->metaInfo(typeName); int minorVersion = metaInfo.minorVersion(); @@ -350,6 +353,7 @@ void StatesEditorModel::addStateGroup(const QString &name) auto stateGroupNode = m_statesEditorView->createModelNode(typeName, majorVersion, minorVersion); +#endif stateGroupNode.setIdWithoutRefactoring(m_statesEditorView->model()->generateNewId(name)); m_statesEditorView->rootModelNode().defaultNodeAbstractProperty().reparentHere( diff --git a/src/plugins/qmldesigner/components/textureeditor/textureeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/textureeditor/textureeditorqmlbackend.cpp index 0cf01cf6209..80cf5693d28 100644 --- a/src/plugins/qmldesigner/components/textureeditor/textureeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/textureeditor/textureeditorqmlbackend.cpp @@ -247,8 +247,10 @@ void TextureEditorQmlBackend::setup(const QmlObjectNode &selectedTextureNode, co contextObject()->setSelectionChanged(false); +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = selectedTextureNode.modelNode().metaInfo(); contextObject()->setMajorVersion(metaInfo.isValid() ? metaInfo.majorVersion() : -1); +#endif } else { context()->setContextProperty("hasTexture", QVariant(false)); } diff --git a/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp b/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp index 5cdd788ab7b..5de3730c97b 100644 --- a/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp +++ b/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp @@ -380,10 +380,14 @@ void TextureEditorView::handleToolBarAction(int action) ModelNode matLib = Utils3D::materialLibraryNode(this); if (!matLib.isValid()) return; - +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newTextureNode = createModelNode("Texture"); +#else NodeMetaInfo metaInfo = model()->metaInfo("QtQuick3D.Texture"); - ModelNode newTextureNode = createModelNode("QtQuick3D.Texture", metaInfo.majorVersion(), - metaInfo.minorVersion()); + ModelNode newTextureNode = createModelNode("QtQuick3D.Texture", + metaInfo.majorVersion(), + metaInfo.minorVersion()); +#endif newTextureNode.validId(); matLib.defaultNodeListProperty().reparentHere(newTextureNode); }); @@ -408,6 +412,9 @@ void TextureEditorView::handleToolBarAction(int action) void TextureEditorView::setupQmlBackend() { +#ifdef QDS_USE_PROJECTSTORAGE +// This is an copy of the property editor code which is already rewritten. Please reuse that code. +#else QUrl qmlPaneUrl; QUrl qmlSpecificsUrl; QString specificQmlData; @@ -475,6 +482,7 @@ void TextureEditorView::setupQmlBackend() m_dynamicPropertiesModel->reset(); m_stackedWidget->setCurrentWidget(m_qmlBackEnd->widget()); +#endif } void TextureEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value) @@ -754,9 +762,12 @@ void TextureEditorView::duplicateTexture(const ModelNode &texture) return; // create the duplicate texture +#ifdef QDS_USE_PROJECTSTORAGE + QmlObjectNode duplicateTex = createModelNode(matType); +#else NodeMetaInfo metaInfo = model()->metaInfo(matType); QmlObjectNode duplicateTex = createModelNode(matType, metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif duplicateTextureNode = duplicateTex .modelNode(); duplicateTextureNode.validId(); diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp index c363f944099..7905df68e91 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp @@ -278,6 +278,7 @@ TimelineWidget *TimelineView::widget() const return m_timelineWidget; } +namespace { QList getAllStates(TimelineView* view) { QmlVisualNode visNode(view->rootModelNode()); @@ -315,6 +316,7 @@ void enableInCurrentState( } } } +} // namespace const QmlTimeline TimelineView::addNewTimeline() { @@ -329,21 +331,24 @@ const QmlTimeline TimelineView::addNewTimeline() } catch (const Exception &e) { e.showException(); } - +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = model()->metaInfo(timelineType); QTC_ASSERT(metaInfo.isValid(), return QmlTimeline()); - +#endif ModelNode timelineNode; - executeInTransaction("TimelineView::addNewTimeline", - [this, timelineType, metaInfo, &timelineNode] { + executeInTransaction("TimelineView::addNewTimeline", [&] { bool hasTimelines = getTimelines().isEmpty(); QString currentStateName = getStateName(this, hasTimelines); +#ifdef QDS_USE_PROJECTSTORAGE + timelineNode = createModelNode("Timeline"); +#else timelineNode = createModelNode(timelineType, metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif timelineNode.validId(); timelineNode.variantProperty("startFrame").setValue(0); @@ -366,21 +371,25 @@ ModelNode TimelineView::addAnimation(QmlTimeline timeline) QTC_ASSERT(isAttached(), return ModelNode()); +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = model()->metaInfo(animationType); QTC_ASSERT(metaInfo.isValid(), return ModelNode()); - +#endif ModelNode animationNode; - executeInTransaction("TimelineView::addAnimation", - [this, timeline, animationType, metaInfo, &animationNode] { + executeInTransaction("TimelineView::addAnimation", [&] { bool hasAnimations = getAnimations(timeline).isEmpty(); QString currentStateName = getStateName(this, hasAnimations); +#ifdef QDS_USE_PROJECTSTORAGE + animationNode = createModelNode("TimelineAnimation"); +#else animationNode = createModelNode(animationType, metaInfo.majorVersion(), metaInfo.minorVersion()); animationNode.variantProperty("duration").setValue(timeline.duration()); +#endif animationNode.validId(); animationNode.variantProperty("from").setValue(timeline.startKeyframe()); diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp index c24ebc1ce32..104127bd49d 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp @@ -225,8 +225,19 @@ ModelNode TransitionEditorView::addNewTransition() if (!idPropertyList.isEmpty()) { executeInTransaction( - " TransitionEditorView::addNewTransition", [&transition, idPropertyList, root, this]() { + " TransitionEditorView::addNewTransition", [&transition, idPropertyList, root, this]() { +#ifdef QDS_USE_PROJECTSTORAGE + transition = createModelNode("Transition", + {{ + "from", + "*", + }, + { + "to", + "*", + }}); +#else const NodeMetaInfo transitionMetaInfo = model()->metaInfo("QtQuick.Transition"); transition = createModelNode("QtQuick.Transition", transitionMetaInfo.majorVersion(), @@ -239,28 +250,38 @@ ModelNode TransitionEditorView::addNewTransition() "to", "*", }}); - transition.setAuxiliaryData(transitionDurationProperty, 2000); - transition.validId(); - root.nodeListProperty("transitions").reparentHere(transition); +#endif + transition.setAuxiliaryData(transitionDurationProperty, 2000); + transition.validId(); + root.nodeListProperty("transitions").reparentHere(transition); - for (auto it = idPropertyList.cbegin(); it != idPropertyList.cend(); ++it) { - ModelNode parallelAnimation = createModelNode("QtQuick.ParallelAnimation"); - transition.defaultNodeAbstractProperty().reparentHere(parallelAnimation); - for (const QString &property : it.value()) { - ModelNode sequentialAnimation - = createModelNode("QtQuick.SequentialAnimation"); - parallelAnimation.defaultNodeAbstractProperty().reparentHere( - sequentialAnimation); + for (auto it = idPropertyList.cbegin(); it != idPropertyList.cend(); ++it) { + ModelNode parallelAnimation = createModelNode("QtQuick.ParallelAnimation"); + transition.defaultNodeAbstractProperty().reparentHere(parallelAnimation); + for (const QString &property : it.value()) { + ModelNode sequentialAnimation = createModelNode( + "QtQuick.SequentialAnimation"); + parallelAnimation.defaultNodeAbstractProperty().reparentHere( + sequentialAnimation); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode pauseAnimation = createModelNode("PauseAnimation", + {{"duration", 50}}); +#else const NodeMetaInfo pauseMetaInfo = model()->metaInfo("QtQuick.PauseAnimation"); ModelNode pauseAnimation = createModelNode("QtQuick.PauseAnimation", pauseMetaInfo.majorVersion(), pauseMetaInfo.minorVersion(), {{"duration", 50}}); - sequentialAnimation.defaultNodeAbstractProperty().reparentHere( - pauseAnimation); +#endif + sequentialAnimation.defaultNodeAbstractProperty().reparentHere(pauseAnimation); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode propertyAnimation = createModelNode("PropertyAnimation", + {{"property", property}, + {"duration", 150}}); +#else const NodeMetaInfo propertyMetaInfo = model()->metaInfo("QtQuick.PauseAnimation"); ModelNode propertyAnimation = createModelNode("QtQuick.PropertyAnimation", @@ -268,11 +289,12 @@ ModelNode TransitionEditorView::addNewTransition() propertyMetaInfo.minorVersion(), {{"property", property}, {"duration", 150}}); - propertyAnimation.bindingProperty("target").setExpression(it.key()); - sequentialAnimation.defaultNodeAbstractProperty().reparentHere( - propertyAnimation); +#endif + propertyAnimation.bindingProperty("target").setExpression(it.key()); + sequentialAnimation.defaultNodeAbstractProperty().reparentHere( + propertyAnimation); + } } - } }); } else { QString properties; diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 385739aa829..f4565633482 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -95,6 +95,13 @@ public: ModelNode::NodeSourceType nodeSourceType = ModelNode::NodeWithoutSource, const QString &behaviorPropertyName = {}); + ModelNode createModelNode(const TypeName &typeName, + const PropertyListType &propertyList, + const AuxiliaryDatas &auxPropertyList = {}, + const QString &nodeSource = {}, + ModelNode::NodeSourceType nodeSourceType = ModelNode::NodeWithoutSource, + const QString &behaviorPropertyName = {}); + ModelNode rootModelNode() const; ModelNode rootModelNode(); diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index 67179efede3..1f6f6dbcad8 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -110,13 +110,14 @@ public: fileUrl, std::move(resourceManagement))); } - static ModelPointer create(ProjectStorageDependencies m_projectStorageDependencies, + + static ModelPointer create(ProjectStorageDependencies projectStorageDependencies, const TypeName &typeName, int major = 1, int minor = 1, std::unique_ptr resourceManagement = {}) { - return ModelPointer(new Model(m_projectStorageDependencies, + return ModelPointer(new Model(projectStorageDependencies, typeName, major, minor, @@ -124,6 +125,9 @@ public: std::move(resourceManagement))); } + ModelPointer createModel(const TypeName &typeName, + std::unique_ptr resourceManagement = {}); + QUrl fileUrl() const; SourceId fileUrlSourceId() const; void setFileUrl(const QUrl &url); @@ -150,6 +154,7 @@ public: NodeMetaInfo flowViewFlowWildcardMetaInfo() const; NodeMetaInfo fontMetaInfo() const; NodeMetaInfo qmlQtObjectMetaInfo() const; + NodeMetaInfo qtQmlConnectionsMetaInfo() const; NodeMetaInfo qtQmlModelsListModelMetaInfo() const; NodeMetaInfo qtQmlModelsListElementMetaInfo() const; NodeMetaInfo qtQuick3DBakedLightmapMetaInfo() const; @@ -164,7 +169,6 @@ public: NodeMetaInfo qtQuick3DPrincipledMaterialMetaInfo() const; NodeMetaInfo qtQuick3DSpotLightMetaInfo() const; NodeMetaInfo qtQuick3DTextureMetaInfo() const; - NodeMetaInfo qtQuickConnectionsMetaInfo() const; NodeMetaInfo qtQuickControlsTextAreaMetaInfo() const; NodeMetaInfo qtQuickImageMetaInfo() const; NodeMetaInfo qtQuickItemMetaInfo() const; @@ -216,6 +220,10 @@ public: QStringList importPaths() const; Import highestPossibleImport(const QString &importPath); + ModuleIds moduleIds() const; + + Storage::Info::ExportedTypeName exportedTypeNameForMetaInfo(const NodeMetaInfo &metaInfo) const; + RewriterView *rewriterView() const; void setRewriterView(RewriterView *rewriterView); diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h index 7e171c54450..53c755ddc88 100644 --- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h +++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h @@ -22,6 +22,16 @@ QT_BEGIN_NAMESPACE class QDeclarativeContext; QT_END_NAMESPACE +#ifdef QDS_USE_PROJECTSTORAGE +# define DEPRECATED_TYPENAME [[deprecated("Don't use string based types anymore!")]] +# define DEPRECATED_VERSION_NUMBER \ + [[deprecated( \ + "In most cases you don't need them anymore because the import is setting them!")]] +#else +# define DEPRECATED_TYPENAME +# define DEPRECATED_VERSION_NUMBER +#endif + namespace QmlDesigner { class MetaInfo; @@ -92,10 +102,11 @@ public: bool defaultPropertyIsComponent() const; - TypeName typeName() const; - TypeName simplifiedTypeName() const; - int majorVersion() const; - int minorVersion() const; + TypeName displayName() const; + DEPRECATED_TYPENAME TypeName typeName() const; + DEPRECATED_TYPENAME TypeName simplifiedTypeName() const; + DEPRECATED_VERSION_NUMBER int majorVersion() const; + DEPRECATED_VERSION_NUMBER int minorVersion() const; Storage::Info::ExportedTypeNames allExportedTypeNames() const; Storage::Info::ExportedTypeNames exportedTypeNamesForSourceId(SourceId sourceId) const; @@ -155,6 +166,7 @@ public: bool isQmlComponent() const; bool isQtMultimediaSoundEffect() const; bool isQtObject() const; + bool isQtQmlConnections() const; bool isQtQuick3DBakedLightmap() const; bool isQtQuick3DBuffer() const; bool isQtQuick3DCamera() const; @@ -202,6 +214,7 @@ public: bool isQtQuickState() const; bool isQtQuickStateOperation() const; bool isQtQuickStudioComponentsGroupItem() const; + bool isQtQuickStudioUtilsJsonListModel() const; bool isQtQuickText() const; bool isQtQuickTimelineKeyframe() const; bool isQtQuickTimelineKeyframeGroup() const; diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index bc405057340..3002f4d8de8 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -26,6 +26,12 @@ #include #include +// remove that if the old code model is removed +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations") +QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations") +QT_WARNING_DISABLE_MSVC(4996) + namespace QmlDesigner { /*! @@ -1924,6 +1930,11 @@ bool NodeMetaInfo::defaultPropertyIsComponent() const return false; } +TypeName NodeMetaInfo::displayName() const +{ + return {}; +} + TypeName NodeMetaInfo::typeName() const { if (isValid()) @@ -2365,6 +2376,16 @@ bool NodeMetaInfo::isQtObject() const } } +bool NodeMetaInfo::isQtQmlConnections() const +{ + if constexpr (useProjectStorage()) { + using namespace Storage::Info; + return isBasedOnCommonType(m_projectStorage, m_typeId); + } else { + return isValid() && simplifiedTypeName() == "Connections"; + } +} + bool NodeMetaInfo::isLayoutable() const { if constexpr (useProjectStorage()) { @@ -3014,6 +3035,17 @@ bool NodeMetaInfo::isQtQuickStudioComponentsGroupItem() const } } +bool NodeMetaInfo::isQtQuickStudioUtilsJsonListModel() const +{ + if constexpr (useProjectStorage()) { + using namespace Storage::Info; + return isBasedOnCommonType(m_projectStorage, + m_typeId); + } else { + return isValid() && isSubclassOf("QtQuick.Studio.Utils.JsonListModel"); + } +} + bool NodeMetaInfo::isQmlComponent() const { if constexpr (useProjectStorage()) { @@ -3689,3 +3721,5 @@ CompoundPropertyMetaInfos MetaInfoUtils::inflateValueAndReadOnlyProperties(Prope } } // namespace QmlDesigner + +QT_WARNING_POP diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index aa9422d5c49..061ab8ae2b0 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -68,12 +68,12 @@ RewriterTransaction AbstractView::beginRewriterTransaction(const QByteArray &ide ModelNode AbstractView::createModelNode(const TypeName &typeName) { - if constexpr (useProjectStorage()) { - return createModelNode(typeName, -1, -1); - } else { - const NodeMetaInfo metaInfo = model()->metaInfo(typeName); - return createModelNode(typeName, metaInfo.majorVersion(), metaInfo.minorVersion()); - } +#ifdef QDS_USE_PROJECTSTORAGE + return createModelNode(typeName, -1, -1); +#else + const NodeMetaInfo metaInfo = model()->metaInfo(typeName); + return createModelNode(typeName, metaInfo.majorVersion(), metaInfo.minorVersion()); +#endif } ModelNode AbstractView::createModelNode(const TypeName &typeName, @@ -90,6 +90,24 @@ ModelNode AbstractView::createModelNode(const TypeName &typeName, behaviorPropertyName), model(), this); } +ModelNode AbstractView::createModelNode(const TypeName &typeName, + const QList> &propertyList, + const AuxiliaryDatas &auxPropertyList, + const QString &nodeSource, + ModelNode::NodeSourceType nodeSourceType, + const QString &behaviorPropertyName) +{ + return ModelNode(model()->d->createNode(typeName, + -1, + -1, + propertyList, + auxPropertyList, + nodeSource, + nodeSourceType, + behaviorPropertyName), + model(), + this); +} // Returns the constant root model node. ModelNode AbstractView::rootModelNode() const @@ -824,6 +842,7 @@ static int getMajorVersionFromImport(const Model *model) return -1; } +#ifndef QDS_USE_PROJECTSTORAGE static int getMajorVersionFromNode(const ModelNode &modelNode) { if (modelNode.metaInfo().isValid()) { @@ -848,6 +867,7 @@ static int getMinorVersionFromNode(const ModelNode &modelNode) return 1; // default } +#endif int AbstractView::majorQtQuickVersion() const { @@ -855,7 +875,11 @@ int AbstractView::majorQtQuickVersion() const if (majorVersionFromImport >= 0) return majorVersionFromImport; +#ifdef QDS_USE_PROJECTSTORAGE + return -1; +#else return getMajorVersionFromNode(rootModelNode()); +#endif } int AbstractView::minorQtQuickVersion() const @@ -864,7 +888,11 @@ int AbstractView::minorQtQuickVersion() const if (minorVersionFromImport >= 0) return minorVersionFromImport; +#ifdef QDS_USE_PROJECTSTORAGE + return -1; +#else return getMinorVersionFromNode(rootModelNode()); +#endif } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 9f38819dee8..a4cd31b2a89 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -1731,6 +1731,16 @@ Model::Model(const TypeName &typeName, this, typeName, major, minor, metaInfoProxyModel, std::move(resourceManagement))) {} +ModelPointer Model::createModel(const TypeName &typeName, + std::unique_ptr resourceManagement) +{ + return Model::create({*d->projectStorage, *d->pathCache}, + typeName, + imports(), + fileUrl(), + std::move(resourceManagement)); +} + Model::~Model() = default; const Imports &Model::imports() const @@ -1738,6 +1748,16 @@ const Imports &Model::imports() const return d->imports(); } +ModuleIds Model::moduleIds() const +{ + return {}; +} + +Storage::Info::ExportedTypeName Model::exportedTypeNameForMetaInfo(const NodeMetaInfo &) const +{ + return {}; +} + const Imports &Model::possibleImports() const { return d->m_possibleImportList; @@ -1938,7 +1958,6 @@ void Model::setCurrentStateNode(const ModelNode &node) d->notifyCurrentStateChanged(node); } -// QTC_TEMP ModelNode Model::currentStateNode(AbstractView *view) { return ModelNode(d->currentStateNode(), this, view); @@ -2455,13 +2474,13 @@ NodeMetaInfo Model::qtQuickTransistionMetaInfo() const } } -NodeMetaInfo Model::qtQuickConnectionsMetaInfo() const +NodeMetaInfo Model::qtQmlConnectionsMetaInfo() const { if constexpr (useProjectStorage()) { using namespace Storage::Info; - return createNodeMetaInfo(); + return createNodeMetaInfo(); } else { - return metaInfo("QtQuick.Connections"); + return metaInfo("QtQml.Connections"); } } @@ -2714,12 +2733,12 @@ ModelNode createNode(Model *model, ModelNode Model::createModelNode(const TypeName &typeName) { - if constexpr (useProjectStorage()) { - return createNode(this, d.get(), typeName, -1, -1); - } else { - const NodeMetaInfo m = metaInfo(typeName); - return createNode(this, d.get(), typeName, m.majorVersion(), m.minorVersion()); - } +#ifdef QDS_USE_PROJECTSTORAGE + return createNode(this, d.get(), typeName, -1, -1); +#else + const NodeMetaInfo m = metaInfo(typeName); + return createNode(this, d.get(), typeName, m.majorVersion(), m.minorVersion()); +#endif } void Model::changeRootNodeType(const TypeName &type) diff --git a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp index a9fa1ebd19b..24873bb141f 100644 --- a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp @@ -152,9 +152,17 @@ static ModelNode createNodeFromNode(const ModelNode &modelNode, const QHash &idRenamingHash, AbstractView *view, const MergePredicate &mergePredicate) { +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode = view->createModelNode(modelNode.type(), + {}, + {}, + modelNode.nodeSource(), + modelNode.nodeSourceType()); +#else NodeMetaInfo nodeMetaInfo = view->model()->metaInfo(modelNode.type()); ModelNode newNode(view->createModelNode(modelNode.type(), nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion(), {}, {}, modelNode.nodeSource(), modelNode.nodeSourceType())); +#endif syncVariantProperties(newNode, modelNode); syncAuxiliaryProperties(newNode, modelNode); syncBindingProperties(newNode, modelNode, idRenamingHash); diff --git a/src/plugins/qmldesigner/designercore/model/qmlconnections.cpp b/src/plugins/qmldesigner/designercore/model/qmlconnections.cpp index 7a63e73d629..b7d04f3f387 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlconnections.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlconnections.cpp @@ -98,10 +98,15 @@ QList QmlConnections::signalProperties() const ModelNode QmlConnections::createQmlConnections(AbstractView *view) { - NodeMetaInfo nodeMetaInfo = view->model()->qtQuickConnectionsMetaInfo(); +#ifdef QDS_USE_PROJECTSTORAGE + return view->createModelNode("Connections"); +#else + NodeMetaInfo nodeMetaInfo = view->model()->qtQmlConnectionsMetaInfo(); + return view->createModelNode("QtQuick.Connections", nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion()); +#endif } } // QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 59295e6ae76..826856428bf 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -81,12 +81,25 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QS propertyPairList.append({PropertyName("source"), QVariant(relativeImageName)}); } +#ifdef QDS_USE_PROJECTSTORAGE + TypeName type("Image"); + QImageReader reader(imageName); + if (reader.supportsAnimation()) + type = "AnimatedImage"; + + newQmlItemNode = QmlItemNode(view->createModelNode(type, propertyPairList)); +#else + TypeName type("QtQuick.Image"); QImageReader reader(imageName); if (reader.supportsAnimation()) type = "QtQuick.AnimatedImage"; - newQmlItemNode = QmlItemNode(view->createModelNode(type, metaInfo.majorVersion(), metaInfo.minorVersion(), propertyPairList)); + newQmlItemNode = QmlItemNode(view->createModelNode(type, + metaInfo.majorVersion(), + metaInfo.minorVersion(), + propertyPairList)); +#endif parentproperty.reparentHere(newQmlItemNode); QFileInfo fi(relativeImageName); @@ -129,7 +142,6 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromFont(AbstractView *view, QmlItemNode newQmlItemNode; auto doCreateQmlItemNodeFromFont = [=, &newQmlItemNode, &parentproperty]() { - NodeMetaInfo metaInfo = view->model()->metaInfo("QtQuick.Text"); QList> propertyPairList; if (const int intX = qRound(position.x())) propertyPairList.append({PropertyName("x"), QVariant(intX)}); @@ -138,9 +150,13 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromFont(AbstractView *view, propertyPairList.append({PropertyName("font.family"), QVariant(fontFamily)}); propertyPairList.append({PropertyName("font.pointSize"), 20}); propertyPairList.append({PropertyName("text"), QVariant(fontFamily)}); - +#ifdef QDS_USE_PROJECTSTORAGE + newQmlItemNode = QmlItemNode(view->createModelNode("Text", propertyPairList)); +#else + NodeMetaInfo metaInfo = view->model()->metaInfo("QtQuick.Text"); newQmlItemNode = QmlItemNode(view->createModelNode("QtQuick.Text", metaInfo.majorVersion(), metaInfo.minorVersion(), propertyPairList)); +#endif parentproperty.reparentHere(newQmlItemNode); newQmlItemNode.setId(view->model()->generateNewId("text", "text")); diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 55e56512e63..8e1d130295d 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -475,7 +475,7 @@ QList QmlObjectNode::getAllConnections() const if (!isValid()) return {}; - auto list = view()->allModelNodesOfType(model()->qtQuickConnectionsMetaInfo()); + auto list = view()->allModelNodesOfType(model()->qtQmlConnectionsMetaInfo()); return Utils::filtered(list, [this](const ModelNode &connection) { return connection.hasBindingProperty("target") && connection.bindingProperty("target").resolveToModelNode() == modelNode(); diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp index 55864745a96..60ac06f2881 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp @@ -141,6 +141,9 @@ void QmlModelState::addChangeSetIfNotExists(const ModelNode &node) if (!hasPropertyChanges(node)) { ModelNode newChangeSet; +#ifdef QDS_USE_PROJECTSTORAGE + newChangeSet = modelNode().view()->createModelNode("PropertyChanges"); +#else const QByteArray typeName = "QtQuick.PropertyChanges"; NodeMetaInfo metaInfo = modelNode().model()->metaInfo(typeName); @@ -148,6 +151,7 @@ void QmlModelState::addChangeSetIfNotExists(const ModelNode &node) int minor = metaInfo.minorVersion(); newChangeSet = modelNode().view()->createModelNode(typeName, major, minor); +#endif modelNode().nodeListProperty("changes").reparentHere(newChangeSet); @@ -296,6 +300,9 @@ ModelNode QmlModelState::createQmlState(AbstractView *view, const PropertyListTy { QTC_ASSERT(view, return {}); +#ifdef QDS_USE_PROJECTSTORAGE + return view->createModelNode("State", propertyList); +#else const QByteArray typeName = "QtQuick.State"; NodeMetaInfo metaInfo = view->model()->metaInfo(typeName); @@ -303,6 +310,7 @@ ModelNode QmlModelState::createQmlState(AbstractView *view, const PropertyListTy int minor = metaInfo.minorVersion(); return view->createModelNode(typeName, major, minor, propertyList); +#endif } void QmlModelState::setAsDefault() diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 75db18b5a22..c84f2342576 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -278,7 +278,11 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view, const QString &source, const QmlVisualNode::Position &position) { +#ifdef QDS_USE_PROJECTSTORAGE + auto inputModel = view->model()->createModel("Item"); +#else auto inputModel = Model::create("QtQuick.Item", 1, 0, view->model()); +#endif inputModel->setFileUrl(view->model()->fileUrl()); QPlainTextEdit textEdit; @@ -328,11 +332,12 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry); auto createNodeFunc = [=, &newQmlObjectNode, &parentProperty]() { +#ifndef QDS_USE_PROJECTSTORAGE NodeMetaInfo metaInfo = view->model()->metaInfo(itemLibraryEntry.typeName()); int minorVersion = metaInfo.minorVersion(); int majorVersion = metaInfo.majorVersion(); - +#endif using PropertyBindingEntry = QPair; QList propertyBindingList; QList propertyEnumList; @@ -359,7 +364,18 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, if (itemLibraryEntry.typeName() == "QtQml.Component") nodeSourceType = ModelNode::NodeWithComponentSource; - newQmlObjectNode = QmlObjectNode(view->createModelNode(itemLibraryEntry.typeName(), majorVersion, minorVersion, propertyPairList, {}, {}, nodeSourceType)); +#ifdef QDS_USE_PROJECTSTORAGE + newQmlObjectNode = QmlObjectNode(view->createModelNode( + itemLibraryEntry.typeName(), propertyPairList, {}, {}, nodeSourceType)); +#else + newQmlObjectNode = QmlObjectNode(view->createModelNode(itemLibraryEntry.typeName(), + majorVersion, + minorVersion, + propertyPairList, + {}, + {}, + nodeSourceType)); +#endif } else { newQmlObjectNode = createQmlObjectNodeFromSource(view, itemLibraryEntry.qmlSource(), position); } diff --git a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp index c4b4eb8c09c..8e0416b68aa 100644 --- a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp @@ -169,6 +169,11 @@ ModelNode StylesheetMerger::createReplacementNode(const ModelNode& styleNode, Mo continue; propertyList.append(QPair(variantProperty.name(), variantProperty.value())); } + +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newNode(m_templateView->createModelNode( + styleNode.type(), propertyList, {}, styleNode.nodeSource(), styleNode.nodeSourceType())); +#else ModelNode newNode(m_templateView->createModelNode(styleNode.type(), nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion(), @@ -176,6 +181,7 @@ ModelNode StylesheetMerger::createReplacementNode(const ModelNode& styleNode, Mo {}, styleNode.nodeSource(), styleNode.nodeSourceType())); +#endif syncAuxiliaryProperties(newNode, modelNode); syncBindingProperties(newNode, modelNode); @@ -436,10 +442,14 @@ void StylesheetMerger::syncStateNode(ModelNode &outputState, const ModelNode &in changeSet = itr->second; } else { const QByteArray typeName = inputChangeset.type(); +#ifdef QDS_USE_PROJECTSTORAGE + changeSet = m_templateView->createModelNode(typeName); +#else NodeMetaInfo metaInfo = m_templateView->model()->metaInfo(typeName); int major = metaInfo.majorVersion(); int minor = metaInfo.minorVersion(); changeSet = m_templateView->createModelNode(typeName, major, minor); +#endif outputState.nodeListProperty("changes").reparentHere(changeSet); outputChangeSets.insert({key, changeSet}); } diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 942289f865e..f7be6cf5e46 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -1192,11 +1192,11 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, int majorVersion = -1; int minorVersion = -1; - if constexpr (!useProjectStorage()) { - typeName = info.typeName(); - majorVersion = info.majorVersion(); - minorVersion = info.minorVersion(); - } +#ifndef QDS_USE_PROJECTSTORAGE + typeName = info.typeName(); + majorVersion = info.majorVersion(); + minorVersion = info.minorVersion(); +#endif if (modelNode.isRootNode() && !m_rewriterView->allowComponentRoot() && info.isQmlComponent()) { for (AST::UiObjectMemberList *iter = astInitializer->members; iter; iter = iter->next) { @@ -1563,11 +1563,12 @@ void TextToModelMerger::syncNodeProperty(AbstractProperty &modelProperty, int majorVersion = -1; int minorVersion = -1; - if constexpr (!useProjectStorage()) { - typeName = info.typeName(); - majorVersion = info.majorVersion(); - minorVersion = info.minorVersion(); - } + +#ifndef QDS_USE_PROJECTSTORAGE + typeName = info.typeName(); + majorVersion = info.majorVersion(); + minorVersion = info.minorVersion(); +#endif if (modelProperty.isNodeProperty() && dynamicPropertyType == modelProperty.dynamicTypeName()) { ModelNode nodePropertyNode = modelProperty.toNodeProperty().modelNode(); @@ -2104,11 +2105,11 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp int majorVersion = -1; int minorVersion = -1; - if constexpr (!useProjectStorage()) { - typeName = info.typeName(); - majorVersion = info.majorVersion(); - minorVersion = info.minorVersion(); - } +#ifndef QDS_USE_PROJECTSTORAGE + typeName = info.typeName(); + majorVersion = info.majorVersion(); + minorVersion = info.minorVersion(); +#endif const bool propertyTakesComponent = propertyHasImplicitComponentType(modelProperty, info); diff --git a/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h b/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h index 41f894356ab..03c25dfac79 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h @@ -55,6 +55,7 @@ inline constexpr char InstanceListEntry[] = "InstanceListEntry"; inline constexpr char InstanceList[] = "InstanceList"; inline constexpr char IntType[] = "int"; inline constexpr char Item[] = "Item"; +inline constexpr char JsonListModel[] = "JsonListModel"; inline constexpr char KeyframeGroup[] = "KeyframeGroup"; inline constexpr char Keyframe[] = "Keyframe"; inline constexpr char Layout[] = "Layout"; @@ -171,11 +172,11 @@ class CommonTypeCache CacheType, CacheType, CacheType, + CacheType, CacheType, CacheType, CacheType, CacheType, - CacheType, CacheType, CacheType, CacheType, @@ -243,6 +244,7 @@ class CommonTypeCache CacheType, CacheType, CacheType, + CacheType, CacheType, CacheType, CacheType, diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index 2f229985960..7e28849fbb3 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -281,12 +281,12 @@ AsynchronousImageCache &QmlDesignerProjectManager::asynchronousImageCache() } namespace { -ProjectStorage *dummyProjectStorage() +[[maybe_unused]] ProjectStorage *dummyProjectStorage() { return nullptr; } -ProjectStorageUpdater::PathCache *dummyPathCache() +[[maybe_unused]] ProjectStorageUpdater::PathCache *dummyPathCache() { return nullptr; } @@ -383,7 +383,7 @@ void collectQmldirPaths(const QString &path, QStringList &qmldirPaths) } } -void projectQmldirPaths(::ProjectExplorer::Target *target, QStringList &qmldirPaths) +[[maybe_unused]] void projectQmldirPaths(::ProjectExplorer::Target *target, QStringList &qmldirPaths) { ::QmlProjectManager::QmlBuildSystem *buildSystem = getQmlBuildSystem(target); @@ -395,12 +395,22 @@ void projectQmldirPaths(::ProjectExplorer::Target *target, QStringList &qmldirPa collectQmldirPaths(importPath, qmldirPaths); } -void qtQmldirPaths(::ProjectExplorer::Target *target, QStringList &qmldirPaths) +[[maybe_unused]] void qtQmldirPaths(::ProjectExplorer::Target *target, QStringList &qmldirPaths) { if constexpr (useProjectStorage()) collectQmldirPaths(qmlPath(target).toString(), qmldirPaths); } +[[maybe_unused]] void qtQmldirPathsForLiteDesigner(::ProjectExplorer::Target *target, + QStringList &qmldirPaths) +{ + if constexpr (useProjectStorage()) { + auto qmlRootPath = qmlPath(target).toString(); + collectQmldirPaths(qmlRootPath + "/QtQml", qmldirPaths); + collectQmldirPaths(qmlRootPath + "/QtQuick", qmldirPaths); + } +} + QStringList directories(::ProjectExplorer::Target *target) { if (!target) @@ -409,8 +419,12 @@ QStringList directories(::ProjectExplorer::Target *target) QStringList qmldirPaths; qmldirPaths.reserve(100); - qtQmldirPaths(target, qmldirPaths); - projectQmldirPaths(target, qmldirPaths); + if constexpr (isUsingQmlDesignerLite()) { + qtQmldirPathsForLiteDesigner(target, qmldirPaths); + } else { + qtQmldirPaths(target, qmldirPaths); + projectQmldirPaths(target, qmldirPaths); + } std::sort(qmldirPaths.begin(), qmldirPaths.end()); qmldirPaths.erase(std::unique(qmldirPaths.begin(), qmldirPaths.end()), qmldirPaths.end()); diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index 9be03d22612..ca82e95b8c1 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -1365,6 +1365,14 @@ void tst_TestCore::testRewriterBehaivours() QVERIFY(metaInfo.isValid()); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newBehavior = testRewriterView->createModelNode("Behavior", + {}, + {}, + {}, + ModelNode::NodeWithoutSource, + "height"); +#else ModelNode newBehavior = testRewriterView->createModelNode("QtQuick.Behavior", metaInfo.majorVersion(), metaInfo.minorVersion(), @@ -1373,17 +1381,20 @@ void tst_TestCore::testRewriterBehaivours() {}, ModelNode::NodeWithoutSource, "height"); - +#endif rootModelNode.defaultNodeListProperty().reparentHere(newBehavior); QCOMPARE(newBehavior.behaviorPropertyName(), "height"); metaInfo = animation.metaInfo(); QVERIFY(metaInfo.isValid()); +#ifdef QDS_USE_PROJECTSTORAGE + ModelNode newAnimation = testRewriterView->createModelNode(model->exportedTypeNameForMetaInfo(metaInfo).name.toQByteArray()); +#else ModelNode newAnimation = testRewriterView->createModelNode(metaInfo.typeName(), metaInfo.majorVersion(), metaInfo.minorVersion()); - +#endif newBehavior.defaultNodeListProperty().reparentHere(newAnimation); newAnimation.variantProperty("duration").setValue(500); @@ -1666,8 +1677,10 @@ void tst_TestCore::testStatesVersionFailing() QCOMPARE(QmlItemNode(rootModelNode).states().state("state2"), newState); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(stateInfo.majorVersion(), newState.modelNode().majorVersion()); QCOMPARE(stateInfo.minorVersion(), newState.modelNode().minorVersion()); +#endif ModelNode rect1Node = view->modelNodeForId("rect1"); QVERIFY(rect1Node.isValid()); @@ -1708,8 +1721,10 @@ void tst_TestCore::testStatesVersionFailing() QVERIFY(changes2.modelNode().hasProperty("x")); QVERIFY(oldText != textEdit.toPlainText()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(changeInfo.majorVersion(), changes2.modelNode().majorVersion()); QCOMPARE(changeInfo.minorVersion(), changes2.modelNode().minorVersion()); +#endif } void tst_TestCore::loadSubItems() @@ -1987,8 +2002,10 @@ void tst_TestCore::testBasicStatesQtQuick20() QCOMPARE(rootModelNode.majorVersion(), 2); //QCOMPARE(rootModelNode.majorQtQuickVersion(), 2); +#ifndef QDS_USE_PROJECTSTORAGE qDebug() << rootModelNode.nodeListProperty("states").toModelNodeList().first().metaInfo().majorVersion(); qDebug() << rootModelNode.nodeListProperty("states").toModelNodeList().first().metaInfo().typeName(); +#endif QSKIP("No qml2puppet"); @@ -4833,9 +4850,11 @@ void tst_TestCore::testMetaInfoSimpleType() NodeMetaInfo itemMetaInfo = model->metaInfo("QtQuick.Item", 2, 1); QVERIFY(itemMetaInfo.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(itemMetaInfo.typeName(), QmlDesigner::TypeName("QtQuick.Item")); QCOMPARE(itemMetaInfo.majorVersion(), 2); QCOMPARE(itemMetaInfo.minorVersion(), 1); +#endif // super classes NodeMetaInfo qobject = itemMetaInfo.prototypes()[1]; @@ -4857,13 +4876,17 @@ void tst_TestCore::testMetaInfoUncreatableType() QVERIFY(animationTypeInfo.isValid()); QVERIFY(animationTypeInfo.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(animationTypeInfo.typeName(), QmlDesigner::TypeName("QtQuick.Animation")); QCOMPARE(animationTypeInfo.majorVersion(), 2); QCOMPARE(animationTypeInfo.minorVersion(), 1); +#endif NodeMetaInfo qObjectTypeInfo = animationTypeInfo.prototypes()[1]; QVERIFY(qObjectTypeInfo.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(qObjectTypeInfo.simplifiedTypeName(), QmlDesigner::TypeName("QtObject")); +#endif QCOMPARE(animationTypeInfo.prototypes().size(), 2); } @@ -4903,9 +4926,11 @@ void tst_TestCore::testMetaInfoCustomType() NodeMetaInfo stateOperationInfo = propertyChangesInfo.prototypes()[1]; QVERIFY(stateOperationInfo.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(stateOperationInfo.typeName(), QmlDesigner::TypeName("QtQuick.QQuickStateOperation")); QCOMPARE(stateOperationInfo.majorVersion(), -1); QCOMPARE(stateOperationInfo.minorVersion(), -1); +#endif QCOMPARE(propertyChangesInfo.prototypes().size(), 3); // DeclarativePropertyChanges just has 3 properties @@ -4923,25 +4948,31 @@ void tst_TestCore::testMetaInfoEnums() QVERIFY(view.data()); model->attachView(view.data()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(view->rootModelNode().metaInfo().typeName(), QmlDesigner::TypeName("QtQuick.Text")); +#endif QVERIFY(view->rootModelNode().metaInfo().hasProperty("transformOrigin")); QVERIFY(view->rootModelNode().metaInfo().property("transformOrigin").isEnumType()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(view->rootModelNode() .metaInfo() .property("transformOrigin") .propertyType() .simplifiedTypeName(), QmlDesigner::TypeName("TransformOrigin")); +#endif QVERIFY(view->rootModelNode().metaInfo().property("horizontalAlignment").isEnumType()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(view->rootModelNode() .metaInfo() .property("horizontalAlignment") .propertyType() .simplifiedTypeName(), QmlDesigner::TypeName("HAlignment")); +#endif QApplication::processEvents(); } @@ -5038,10 +5069,12 @@ void tst_TestCore::testMetaInfoDotProperties() QVERIFY(model->hasNodeMetaInfo("QtQuick.Text")); QVERIFY(model->metaInfo("QtQuick.Rectangle").hasProperty("border")); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(model->metaInfo("QtQuick.Rectangle").property("border").propertyType().typeName(), QmlDesigner::TypeName(".QQuickPen")); QCOMPARE(view->rootModelNode().metaInfo().typeName(), QmlDesigner::TypeName("QtQuick.Text")); +#endif QVERIFY(view->rootModelNode().metaInfo().hasProperty("font")); QVERIFY(view->rootModelNode().metaInfo().hasProperty("font.bold")); @@ -5071,7 +5104,9 @@ void tst_TestCore::testMetaInfoListProperties() model->attachView(view.data()); QVERIFY(model->hasNodeMetaInfo("QtQuick.Item")); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(view->rootModelNode().metaInfo().typeName(), QmlDesigner::TypeName("QtQuick.Item")); +#endif QVERIFY(view->rootModelNode().metaInfo().hasProperty("states")); QVERIFY(view->rootModelNode().metaInfo().property("states").isListProperty()); @@ -5108,10 +5143,12 @@ void tst_TestCore::testQtQuick20Basic() QVERIFY(testRewriterView->errors().isEmpty()); ModelNode rootModelNode(testRewriterView->rootModelNode()); QVERIFY(rootModelNode.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(rootModelNode.metaInfo().majorVersion(), 2); QCOMPARE(rootModelNode.metaInfo().minorVersion(), 0); //QCOMPARE(rootModelNode.majorQtQuickVersion(), 2); QCOMPARE(rootModelNode.majorVersion(), 2); +#endif } void tst_TestCore::testQtQuick20BasicRectangle() @@ -5133,11 +5170,13 @@ void tst_TestCore::testQtQuick20BasicRectangle() QVERIFY(testRewriterView->errors().isEmpty()); ModelNode rootModelNode(testRewriterView->rootModelNode()); QVERIFY(rootModelNode.isValid()); +#ifndef QDS_USE_PROJECTSTORAGE QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Rectangle")); QCOMPARE(rootModelNode.metaInfo().majorVersion(), 2); QCOMPARE(rootModelNode.metaInfo().minorVersion(), 0); //QCOMPARE(rootModelNode.majorQtQuickVersion(), 2); QCOMPARE(rootModelNode.majorVersion(), 2); +#endif } void tst_TestCore::testQtQuickControls2()