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 <tim.jenssen@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
This commit is contained in:
Marco Bubke
2024-03-07 15:49:41 +01:00
parent 40821b4767
commit 6ebb7923b2
47 changed files with 729 additions and 271 deletions

View File

@@ -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)

View File

@@ -229,6 +229,7 @@ void ActionEditor::prepareConnections()
QList<ActionEditorDialog::SingletonOption> singletons;
QStringList states;
[[maybe_unused]] auto model = m_modelNode.model();
const QList<QmlDesigner::ModelNode> 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()) {

View File

@@ -176,12 +176,12 @@ bool isType(const TypeName &first, const TypeName &second, const Tuple &...types
bool compareTypes(const NodeMetaInfo &sourceType, const NodeMetaInfo &targetType)
{
if constexpr (useProjectStorage()) {
#ifdef QDS_USE_PROJECTSTORAGE
return targetType.isVariant() || sourceType.isVariant() || targetType == sourceType
|| (targetType.isNumber() && sourceType.isNumber())
|| (targetType.isColor() && sourceType.isColor())
|| (targetType.isString() && sourceType.isString());
} else {
#else
const TypeName source = sourceType.simplifiedTypeName();
const TypeName target = targetType.simplifiedTypeName();
@@ -191,7 +191,7 @@ bool compareTypes(const NodeMetaInfo &sourceType, const NodeMetaInfo &targetType
|| 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);

View File

@@ -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
}
}

View File

@@ -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");

View File

@@ -579,10 +579,14 @@ QList<SlotList> 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);

View File

@@ -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);

View File

@@ -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<ModelNode> 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,14 +1189,14 @@ 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());
@@ -1186,7 +1205,6 @@ void createFlowActionArea(const SelectionContext &selectionContext)
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,15 +1333,23 @@ 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";
NodeMetaInfo metaInfo = selectionContext.view()->model()->metaInfo(typeName);
groupNode = selectionContext.view()->createModelNode(typeName, metaInfo.majorVersion(), metaInfo.minorVersion());
groupNode = selectionContext.view()->createModelNode(typeName,
metaInfo.majorVersion(),
metaInfo.minorVersion());
#endif
reparentTo(groupNode, parentNode);
});
selectionContext.view()->executeInTransaction("DesignerActionManager|addToGroupItem2",[=](){
selectionContext.view()
->executeInTransaction("DesignerActionManager|addToGroupItem2", [&]() {
QList<ModelNode> selectedNodes = selectionContext.selectedModelNodes();
setUpperLeftPostionToNode(groupNode, selectedNodes);
@@ -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,14 +1626,21 @@ void addMouseAreaFill(const SelectionContext &selectionContext)
return;
}
selectionContext.view()->executeInTransaction("DesignerActionManager|addMouseAreaFill", [selectionContext]() {
selectionContext.view()
->executeInTransaction("DesignerActionManager|addMouseAreaFill", [selectionContext]() {
ModelNode modelNode = selectionContext.currentSingleSelectedNode();
if (modelNode.isValid()) {
NodeMetaInfo itemMetaInfo = selectionContext.view()->model()->metaInfo("QtQuick.MouseArea", -1, -1);
#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());
QmlDesigner::ModelNode mouseAreaNode = selectionContext.view()->createModelNode(
"QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion());
#endif
mouseAreaNode.validId();
modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode);

View File

@@ -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 {

View File

@@ -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",
->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
}
}

View File

@@ -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");

View File

@@ -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<ModelNode> &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<ModelNode> &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<ModelNode> &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);

View File

@@ -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;

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -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));
}

View File

@@ -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

View File

@@ -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");

View File

@@ -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);

View File

@@ -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)

View File

@@ -10,11 +10,12 @@
#include <auxiliarydataproperties.h>
#include <bindingproperty.h>
#include <nodemetainfo.h>
#include <variantproperty.h>
#include <projectstorage/sourcepathcache.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlobjectnode.h>
#include <qmltimeline.h>
#include <variantproperty.h>
#include <theme.h>
@@ -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<QUrl, NodeMetaInfo> 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

View File

@@ -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<QUrl, NodeMetaInfo> 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:

View File

@@ -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");

View File

@@ -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<NodeMetaInfo, QUrl> diffType(const NodeMetaInfo &commonAncestor,
const NodeMetaInfo &specificsClassMetaInfo)
{
@@ -483,6 +486,7 @@ namespace {
return {};
}
#endif // QDS_USE_PROJECTSTORAGE
PropertyEditorQmlBackend *getQmlBackend(QHash<QString, PropertyEditorQmlBackend *> &qmlBackendHash,
const QUrl &qmlFileUrl,
@@ -572,17 +576,15 @@ void setupWidget(PropertyEditorQmlBackend *currentQmlBackend,
void PropertyEditorView::setupQmlBackend()
{
if constexpr (useProjectStorage()) {
#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());
auto [panePath, specificsPath] = findPaneAndSpecificsPath(selfAndPrototypes, model()->pathCache());
PropertyEditorQmlBackend *currentQmlBackend = getQmlBackend(m_qmlBackendHash,
QUrl::fromLocalFile(
QString{panePath}),
QUrl::fromLocalFile(QString{panePath}),
m_imageCache,
m_stackedWidget,
this);
@@ -599,9 +601,8 @@ void PropertyEditorView::setupQmlBackend()
m_qmlBackEndForCurrentType = currentQmlBackend;
setupInsight(rootModelNode(), currentQmlBackend);
} else {
const NodeMetaInfo commonAncestor = PropertyEditorQmlBackend::findCommonAncestor(
m_selectedNode);
#else
const NodeMetaInfo commonAncestor = PropertyEditorQmlBackend::findCommonAncestor(m_selectedNode);
const auto [qmlFileUrl, specificsClassMetaInfo] = PropertyEditorQmlBackend::getQmlUrlForMetaInfo(
commonAncestor);
@@ -616,19 +617,15 @@ void PropertyEditorView::setupQmlBackend()
m_stackedWidget,
this);
setupCurrentQmlBackend(currentQmlBackend,
m_selectedNode,
qmlSpecificsFile,
currentState(),
this,
specificQmlData);
setupCurrentQmlBackend(
currentQmlBackend, m_selectedNode, qmlSpecificsFile, currentState(), this, specificQmlData);
setupWidget(currentQmlBackend, this, m_stackedWidget);
m_qmlBackEndForCurrentType = currentQmlBackend;
setupInsight(rootModelNode(), currentQmlBackend);
}
#endif // QDS_USE_PROJECTSTORAGE
}
void PropertyEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value)

View File

@@ -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 {};

View File

@@ -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(

View File

@@ -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));
}

View File

@@ -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(),
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();

View File

@@ -278,6 +278,7 @@ TimelineWidget *TimelineView::widget() const
return m_timelineWidget;
}
namespace {
QList<QmlModelState> 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());

View File

@@ -227,6 +227,17 @@ ModelNode TransitionEditorView::addNewTransition()
executeInTransaction(
" 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,6 +250,7 @@ ModelNode TransitionEditorView::addNewTransition()
"to",
"*",
}});
#endif
transition.setAuxiliaryData(transitionDurationProperty, 2000);
transition.validId();
root.nodeListProperty("transitions").reparentHere(transition);
@@ -247,20 +259,29 @@ ModelNode TransitionEditorView::addNewTransition()
ModelNode parallelAnimation = createModelNode("QtQuick.ParallelAnimation");
transition.defaultNodeAbstractProperty().reparentHere(parallelAnimation);
for (const QString &property : it.value()) {
ModelNode sequentialAnimation
= createModelNode("QtQuick.SequentialAnimation");
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,6 +289,7 @@ ModelNode TransitionEditorView::addNewTransition()
propertyMetaInfo.minorVersion(),
{{"property", property},
{"duration", 150}});
#endif
propertyAnimation.bindingProperty("target").setExpression(it.key());
sequentialAnimation.defaultNodeAbstractProperty().reparentHere(
propertyAnimation);

View File

@@ -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();

View File

@@ -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<ModelResourceManagementInterface> 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<ModelResourceManagementInterface> 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);

View File

@@ -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;

View File

@@ -26,6 +26,12 @@
#include <utils/qtcassert.h>
#include <utils/algorithm.h>
// 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<QtQml, Connections>(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<QtQuick_Studio_Components, JsonListModel>(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

View File

@@ -68,12 +68,12 @@ RewriterTransaction AbstractView::beginRewriterTransaction(const QByteArray &ide
ModelNode AbstractView::createModelNode(const TypeName &typeName)
{
if constexpr (useProjectStorage()) {
#ifdef QDS_USE_PROJECTSTORAGE
return createModelNode(typeName, -1, -1);
} else {
#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<QPair<PropertyName, QVariant>> &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

View File

@@ -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<ModelResourceManagementInterface> 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<QtQuick, Connections>();
return createNodeMetaInfo<QtQml, Connections>();
} 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()) {
#ifdef QDS_USE_PROJECTSTORAGE
return createNode(this, d.get(), typeName, -1, -1);
} else {
#else
const NodeMetaInfo m = metaInfo(typeName);
return createNode(this, d.get(), typeName, m.majorVersion(), m.minorVersion());
}
#endif
}
void Model::changeRootNodeType(const TypeName &type)

View File

@@ -152,9 +152,17 @@ static ModelNode createNodeFromNode(const ModelNode &modelNode,
const QHash<QString, QString> &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);

View File

@@ -98,10 +98,15 @@ QList<SignalHandlerProperty> 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

View File

@@ -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<QPair<PropertyName, QVariant>> 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"));

View File

@@ -475,7 +475,7 @@ QList<ModelNode> 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();

View File

@@ -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()

View File

@@ -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<PropertyName, QString>;
QList<PropertyBindingEntry> propertyBindingList;
QList<PropertyBindingEntry> 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);
}

View File

@@ -169,6 +169,11 @@ ModelNode StylesheetMerger::createReplacementNode(const ModelNode& styleNode, Mo
continue;
propertyList.append(QPair<PropertyName, QVariant>(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});
}

View File

@@ -1192,11 +1192,11 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
int majorVersion = -1;
int minorVersion = -1;
if constexpr (!useProjectStorage()) {
#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()) {
#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()) {
#ifndef QDS_USE_PROJECTSTORAGE
typeName = info.typeName();
majorVersion = info.majorVersion();
minorVersion = info.minorVersion();
}
#endif
const bool propertyTakesComponent = propertyHasImplicitComponentType(modelProperty, info);

View File

@@ -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<QML, var>,
CacheType<QML_cppnative, FloatType>,
CacheType<QML_cppnative, UIntType>,
CacheType<QtQml, Connections>,
CacheType<QtMultimedia, SoundEffect>,
CacheType<QtQml_Models, ListElement>,
CacheType<QtQml_Models, ListModel>,
CacheType<QtQuick, BorderImage>,
CacheType<QtQuick, Connections>,
CacheType<QtQuick, GridView>,
CacheType<QtQuick, Image>,
CacheType<QtQuick, Item>,
@@ -243,6 +244,7 @@ class CommonTypeCache
CacheType<QtQuick_Extras, Picture>,
CacheType<QtQuick_Layouts, Layout>,
CacheType<QtQuick_Studio_Components, GroupItem>,
CacheType<QtQuick_Studio_Components, JsonListModel>,
CacheType<QtQuick_Templates, Control>,
CacheType<QtQuick_Timeline, Keyframe>,
CacheType<QtQuick_Timeline, KeyframeGroup>,

View File

@@ -281,12 +281,12 @@ AsynchronousImageCache &QmlDesignerProjectManager::asynchronousImageCache()
}
namespace {
ProjectStorage<Sqlite::Database> *dummyProjectStorage()
[[maybe_unused]] ProjectStorage<Sqlite::Database> *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);
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());

View File

@@ -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("<cpp>.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()