QmlDesigner: Add createQmlObjectNode()

The item library can also create pure QtObjects now.
This should be reflected in the API.

Change-Id: I58f8306232137c9feecf51d0abb938191c0a113a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2019-06-14 14:27:17 +02:00
parent 39e3294a8c
commit 3a7a1c5e81
3 changed files with 33 additions and 21 deletions

View File

@@ -503,17 +503,17 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
if (!NodeHints::fromItemLibraryEntry(itemLibraryEntry).canBeDroppedInNavigator()) if (!NodeHints::fromItemLibraryEntry(itemLibraryEntry).canBeDroppedInNavigator())
return; return;
const QmlItemNode newQmlItemNode = QmlItemNode::createQmlItemNode(m_view, itemLibraryEntry, QPointF(), targetProperty); const QmlObjectNode newQmlObjectNode = QmlItemNode::createQmlObjectNode(m_view, itemLibraryEntry, QPointF(), targetProperty);
if (newQmlItemNode.isValid() && targetProperty.isNodeListProperty()) { if (newQmlObjectNode.isValid() && targetProperty.isNodeListProperty()) {
QList<ModelNode> newModelNodeList; QList<ModelNode> newModelNodeList;
newModelNodeList.append(newQmlItemNode); newModelNodeList.append(newQmlObjectNode);
moveNodesInteractive(targetProperty, newModelNodeList, targetRowNumber); moveNodesInteractive(targetProperty, newModelNodeList, targetRowNumber);
} }
if (newQmlItemNode.isValid()) if (newQmlObjectNode.isValid())
m_view->selectModelNode(newQmlItemNode.modelNode()); m_view->selectModelNode(newQmlObjectNode.modelNode());
} }
} }

View File

@@ -53,10 +53,15 @@ public:
static bool isItemOrWindow(const ModelNode &modelNode); static bool isItemOrWindow(const ModelNode &modelNode);
static QmlItemNode createQmlItemNode(AbstractView *view, static QmlItemNode createQmlItemNode(AbstractView *view,
const ItemLibraryEntry &itemLibraryEntry,
const QPointF &position,
QmlItemNode parentQmlItemNode);
static QmlObjectNode createQmlObjectNode(AbstractView *view,
const ItemLibraryEntry &itemLibraryEntry, const ItemLibraryEntry &itemLibraryEntry,
const QPointF &position, const QPointF &position,
QmlItemNode parentQmlItemNode); QmlItemNode parentQmlItemNode);
static QmlItemNode createQmlItemNode(AbstractView *view, static QmlObjectNode createQmlObjectNode(AbstractView *view,
const ItemLibraryEntry &itemLibraryEntry, const ItemLibraryEntry &itemLibraryEntry,
const QPointF &position, const QPointF &position,
NodeAbstractProperty parentproperty); NodeAbstractProperty parentproperty);

View File

@@ -85,8 +85,15 @@ static QmlItemNode createQmlItemNodeFromSource(AbstractView *view, const QString
return QmlItemNode(); return QmlItemNode();
} }
QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view,
const ItemLibraryEntry &itemLibraryEntry,
const QPointF &position,
QmlItemNode parentQmlItemNode)
{
return QmlItemNode(createQmlObjectNode(view, itemLibraryEntry, position, parentQmlItemNode));
}
QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const QPointF &position, QmlItemNode parentQmlItemNode) QmlObjectNode QmlItemNode::createQmlObjectNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const QPointF &position, QmlItemNode parentQmlItemNode)
{ {
if (!parentQmlItemNode.isValid()) if (!parentQmlItemNode.isValid())
parentQmlItemNode = QmlItemNode(view->rootModelNode()); parentQmlItemNode = QmlItemNode(view->rootModelNode());
@@ -95,14 +102,14 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary
NodeAbstractProperty parentProperty = parentQmlItemNode.defaultNodeAbstractProperty(); NodeAbstractProperty parentProperty = parentQmlItemNode.defaultNodeAbstractProperty();
return QmlItemNode::createQmlItemNode(view, itemLibraryEntry, position, parentProperty); return QmlItemNode::createQmlObjectNode(view, itemLibraryEntry, position, parentProperty);
} }
QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const QPointF &position, NodeAbstractProperty parentproperty) QmlObjectNode QmlItemNode::createQmlObjectNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const QPointF &position, NodeAbstractProperty parentproperty)
{ {
QmlItemNode newQmlItemNode; QmlObjectNode newQmlObjectNode;
view->executeInTransaction("QmlItemNode::createQmlItemNode", [=, &newQmlItemNode, &parentproperty](){ view->executeInTransaction("QmlItemNode::createQmlItemNode", [=, &newQmlObjectNode, &parentproperty](){
NodeMetaInfo metaInfo = view->model()->metaInfo(itemLibraryEntry.typeName()); NodeMetaInfo metaInfo = view->model()->metaInfo(itemLibraryEntry.typeName());
int minorVersion = metaInfo.minorVersion(); int minorVersion = metaInfo.minorVersion();
@@ -128,31 +135,31 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary
} }
} }
newQmlItemNode = QmlItemNode(view->createModelNode(itemLibraryEntry.typeName(), majorVersion, minorVersion, propertyPairList)); newQmlObjectNode = QmlItemNode(view->createModelNode(itemLibraryEntry.typeName(), majorVersion, minorVersion, propertyPairList));
} else { } else {
newQmlItemNode = createQmlItemNodeFromSource(view, itemLibraryEntry.qmlSource(), position); newQmlObjectNode = createQmlItemNodeFromSource(view, itemLibraryEntry.qmlSource(), position);
} }
if (parentproperty.isValid()) if (parentproperty.isValid())
parentproperty.reparentHere(newQmlItemNode); parentproperty.reparentHere(newQmlObjectNode);
if (!newQmlItemNode.isValid()) if (!newQmlObjectNode.isValid())
return; return;
newQmlItemNode.setId(view->generateNewId(itemLibraryEntry.name())); newQmlObjectNode.setId(view->generateNewId(itemLibraryEntry.name()));
for (const auto &propertyBindingEntry : propertyBindingList) for (const auto &propertyBindingEntry : propertyBindingList)
newQmlItemNode.modelNode().bindingProperty(propertyBindingEntry.first).setExpression(propertyBindingEntry.second); newQmlObjectNode.modelNode().bindingProperty(propertyBindingEntry.first).setExpression(propertyBindingEntry.second);
for (const auto &propertyBindingEntry : propertyEnumList) for (const auto &propertyBindingEntry : propertyEnumList)
newQmlItemNode.modelNode().variantProperty(propertyBindingEntry.first).setEnumeration(propertyBindingEntry.second.toUtf8()); newQmlObjectNode.modelNode().variantProperty(propertyBindingEntry.first).setEnumeration(propertyBindingEntry.second.toUtf8());
Q_ASSERT(newQmlItemNode.isValid()); Q_ASSERT(newQmlObjectNode.isValid());
}); });
Q_ASSERT(newQmlItemNode.isValid()); Q_ASSERT(newQmlObjectNode.isValid());
return newQmlItemNode; return newQmlObjectNode;
} }
QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QString &imageName, const QPointF &position, QmlItemNode parentQmlItemNode) QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QString &imageName, const QPointF &position, QmlItemNode parentQmlItemNode)