forked from qt-creator/qt-creator
QmlDesigner: Insert a node dragged to 3d edit view into correct scene
Added scene instance id to the drop command. Change-Id: I42df07fec823083454ad5a70ccafa318d05ab224 Fixes: QDS-1594 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -29,14 +29,16 @@
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
Drop3DLibraryItemCommand::Drop3DLibraryItemCommand(const QByteArray &itemData)
|
||||
: m_itemData(itemData)
|
||||
Drop3DLibraryItemCommand::Drop3DLibraryItemCommand(const QByteArray &itemData, qint32 sceneRootId)
|
||||
: m_itemData(itemData),
|
||||
m_sceneRootId(sceneRootId)
|
||||
{
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command)
|
||||
{
|
||||
out << command.itemData();
|
||||
out << command.sceneRootId();
|
||||
|
||||
return out;
|
||||
}
|
||||
@@ -44,13 +46,14 @@ QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &comman
|
||||
QDataStream &operator>>(QDataStream &in, Drop3DLibraryItemCommand &command)
|
||||
{
|
||||
in >> command.m_itemData;
|
||||
in >> command.m_sceneRootId;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
bool operator==(const Drop3DLibraryItemCommand &first, const Drop3DLibraryItemCommand &second)
|
||||
{
|
||||
return first.m_itemData == second.m_itemData;
|
||||
return first.m_itemData == second.m_itemData && first.m_sceneRootId == second.m_sceneRootId;
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
@@ -41,13 +41,15 @@ class Drop3DLibraryItemCommand
|
||||
const Drop3DLibraryItemCommand &second);
|
||||
|
||||
public:
|
||||
explicit Drop3DLibraryItemCommand(const QByteArray &itemData);
|
||||
explicit Drop3DLibraryItemCommand(const QByteArray &itemData, qint32 sceneRootId);
|
||||
Drop3DLibraryItemCommand() = default;
|
||||
|
||||
QByteArray itemData() const { return m_itemData; }
|
||||
qint32 sceneRootId() const { return m_sceneRootId; }
|
||||
|
||||
private:
|
||||
QByteArray m_itemData;
|
||||
qint32 m_sceneRootId;
|
||||
};
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command);
|
||||
|
@@ -1180,9 +1180,10 @@ ChangeSelectionCommand NodeInstanceServer::createChangeSelectionCommand(const QL
|
||||
return ChangeSelectionCommand(idVector);
|
||||
}
|
||||
|
||||
Drop3DLibraryItemCommand NodeInstanceServer::createDrop3DLibraryItemCommand(const QByteArray &itemData)
|
||||
Drop3DLibraryItemCommand NodeInstanceServer::createDrop3DLibraryItemCommand(const QByteArray &itemData,
|
||||
qint32 sceneRootId)
|
||||
{
|
||||
return Drop3DLibraryItemCommand(itemData);
|
||||
return Drop3DLibraryItemCommand(itemData, sceneRootId);
|
||||
}
|
||||
|
||||
ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVector<InstancePropertyPair> &propertyList) const
|
||||
|
@@ -183,7 +183,7 @@ protected:
|
||||
ChildrenChangedCommand createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList<ServerNodeInstance> &instanceList) const;
|
||||
ComponentCompletedCommand createComponentCompletedCommand(const QList<ServerNodeInstance> &instanceList);
|
||||
ChangeSelectionCommand createChangeSelectionCommand(const QList<ServerNodeInstance> &instanceList);
|
||||
Drop3DLibraryItemCommand createDrop3DLibraryItemCommand(const QByteArray &itemData);
|
||||
Drop3DLibraryItemCommand createDrop3DLibraryItemCommand(const QByteArray &itemData, qint32 sceneRootId);
|
||||
|
||||
void addChangedProperty(const InstancePropertyPair &property);
|
||||
|
||||
|
@@ -109,8 +109,16 @@ bool Qt5InformationNodeInstanceServer::eventFilter(QObject *, QEvent *event)
|
||||
case QEvent::Drop: {
|
||||
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
||||
QByteArray data = dropEvent->mimeData()->data(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo"));
|
||||
if (!data.isEmpty())
|
||||
nodeInstanceClient()->library3DItemDropped(createDrop3DLibraryItemCommand(data));
|
||||
if (!data.isEmpty()) {
|
||||
ServerNodeInstance sceneInstance;
|
||||
if (hasInstanceForObject(m_active3DScene))
|
||||
sceneInstance = instanceForObject(m_active3DScene);
|
||||
else if (hasInstanceForObject(m_active3DView))
|
||||
sceneInstance = instanceForObject(m_active3DView);
|
||||
|
||||
nodeInstanceClient()->library3DItemDropped(createDrop3DLibraryItemCommand(
|
||||
data, sceneInstance.instanceId()));
|
||||
}
|
||||
|
||||
} break;
|
||||
|
||||
|
@@ -104,9 +104,9 @@ public:
|
||||
|
||||
static QmlVisualNode createQmlVisualNode(AbstractView *view,
|
||||
const ItemLibraryEntry &itemLibraryEntry,
|
||||
const QVector3D &position);
|
||||
qint32 sceneRootId, const QVector3D &position);
|
||||
|
||||
static NodeListProperty findSceneNodeProperty(AbstractView *view);
|
||||
static NodeListProperty findSceneNodeProperty(AbstractView *view, qint32 sceneRootId);
|
||||
|
||||
static bool isFlowTransition(const ModelNode &node);
|
||||
|
||||
|
@@ -1451,7 +1451,7 @@ void NodeInstanceView::library3DItemDropped(const Drop3DLibraryItemCommand &comm
|
||||
QDataStream stream(command.itemData());
|
||||
ItemLibraryEntry itemLibraryEntry;
|
||||
stream >> itemLibraryEntry;
|
||||
QmlVisualNode::createQmlVisualNode(this, itemLibraryEntry, {});
|
||||
QmlVisualNode::createQmlVisualNode(this, itemLibraryEntry, command.sceneRootId(), {});
|
||||
}
|
||||
|
||||
void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command)
|
||||
|
@@ -296,26 +296,22 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view,
|
||||
|
||||
QmlVisualNode QmlVisualNode::createQmlVisualNode(AbstractView *view,
|
||||
const ItemLibraryEntry &itemLibraryEntry,
|
||||
const QVector3D &position)
|
||||
qint32 sceneRootId, const QVector3D &position)
|
||||
{
|
||||
NodeAbstractProperty sceneNodeProperty = findSceneNodeProperty(view);
|
||||
NodeAbstractProperty sceneNodeProperty = findSceneNodeProperty(view, sceneRootId);
|
||||
QTC_ASSERT(sceneNodeProperty.isValid(), return {});
|
||||
ModelNode node = createQmlObjectNode(view, itemLibraryEntry, position, sceneNodeProperty).modelNode();
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view)
|
||||
NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view, qint32 sceneRootId)
|
||||
{
|
||||
QTC_ASSERT(view, return {});
|
||||
|
||||
QList<ModelNode> quickViews = view->allModelNodesOfType("QtQuick3D.View3D");
|
||||
QTC_ASSERT(!quickViews.isEmpty(), return {});
|
||||
const ModelNode quickView = quickViews.first();
|
||||
|
||||
QList<ModelNode> nodes = quickView.directSubModelNodesOfType("QtQuick3D.Node");
|
||||
QTC_ASSERT(!nodes.isEmpty(), return {});
|
||||
const ModelNode node = nodes.first();
|
||||
ModelNode node;
|
||||
if (view->hasModelNodeForInternalId(sceneRootId))
|
||||
node = view->modelNodeForInternalId(sceneRootId);
|
||||
|
||||
return node.defaultNodeListProperty();
|
||||
}
|
||||
|
Reference in New Issue
Block a user