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 {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
Drop3DLibraryItemCommand::Drop3DLibraryItemCommand(const QByteArray &itemData)
|
Drop3DLibraryItemCommand::Drop3DLibraryItemCommand(const QByteArray &itemData, qint32 sceneRootId)
|
||||||
: m_itemData(itemData)
|
: m_itemData(itemData),
|
||||||
|
m_sceneRootId(sceneRootId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command)
|
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command)
|
||||||
{
|
{
|
||||||
out << command.itemData();
|
out << command.itemData();
|
||||||
|
out << command.sceneRootId();
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
@@ -44,13 +46,14 @@ QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &comman
|
|||||||
QDataStream &operator>>(QDataStream &in, Drop3DLibraryItemCommand &command)
|
QDataStream &operator>>(QDataStream &in, Drop3DLibraryItemCommand &command)
|
||||||
{
|
{
|
||||||
in >> command.m_itemData;
|
in >> command.m_itemData;
|
||||||
|
in >> command.m_sceneRootId;
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const Drop3DLibraryItemCommand &first, const Drop3DLibraryItemCommand &second)
|
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
|
} // namespace QmlDesigner
|
||||||
|
@@ -41,13 +41,15 @@ class Drop3DLibraryItemCommand
|
|||||||
const Drop3DLibraryItemCommand &second);
|
const Drop3DLibraryItemCommand &second);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Drop3DLibraryItemCommand(const QByteArray &itemData);
|
explicit Drop3DLibraryItemCommand(const QByteArray &itemData, qint32 sceneRootId);
|
||||||
Drop3DLibraryItemCommand() = default;
|
Drop3DLibraryItemCommand() = default;
|
||||||
|
|
||||||
QByteArray itemData() const { return m_itemData; }
|
QByteArray itemData() const { return m_itemData; }
|
||||||
|
qint32 sceneRootId() const { return m_sceneRootId; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QByteArray m_itemData;
|
QByteArray m_itemData;
|
||||||
|
qint32 m_sceneRootId;
|
||||||
};
|
};
|
||||||
|
|
||||||
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command);
|
QDataStream &operator<<(QDataStream &out, const Drop3DLibraryItemCommand &command);
|
||||||
|
@@ -1180,9 +1180,10 @@ ChangeSelectionCommand NodeInstanceServer::createChangeSelectionCommand(const QL
|
|||||||
return ChangeSelectionCommand(idVector);
|
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
|
ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVector<InstancePropertyPair> &propertyList) const
|
||||||
|
@@ -183,7 +183,7 @@ protected:
|
|||||||
ChildrenChangedCommand createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList<ServerNodeInstance> &instanceList) const;
|
ChildrenChangedCommand createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList<ServerNodeInstance> &instanceList) const;
|
||||||
ComponentCompletedCommand createComponentCompletedCommand(const QList<ServerNodeInstance> &instanceList);
|
ComponentCompletedCommand createComponentCompletedCommand(const QList<ServerNodeInstance> &instanceList);
|
||||||
ChangeSelectionCommand createChangeSelectionCommand(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);
|
void addChangedProperty(const InstancePropertyPair &property);
|
||||||
|
|
||||||
|
@@ -109,8 +109,16 @@ bool Qt5InformationNodeInstanceServer::eventFilter(QObject *, QEvent *event)
|
|||||||
case QEvent::Drop: {
|
case QEvent::Drop: {
|
||||||
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
||||||
QByteArray data = dropEvent->mimeData()->data(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo"));
|
QByteArray data = dropEvent->mimeData()->data(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo"));
|
||||||
if (!data.isEmpty())
|
if (!data.isEmpty()) {
|
||||||
nodeInstanceClient()->library3DItemDropped(createDrop3DLibraryItemCommand(data));
|
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;
|
} break;
|
||||||
|
|
||||||
|
@@ -104,9 +104,9 @@ public:
|
|||||||
|
|
||||||
static QmlVisualNode createQmlVisualNode(AbstractView *view,
|
static QmlVisualNode createQmlVisualNode(AbstractView *view,
|
||||||
const ItemLibraryEntry &itemLibraryEntry,
|
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);
|
static bool isFlowTransition(const ModelNode &node);
|
||||||
|
|
||||||
|
@@ -1451,7 +1451,7 @@ void NodeInstanceView::library3DItemDropped(const Drop3DLibraryItemCommand &comm
|
|||||||
QDataStream stream(command.itemData());
|
QDataStream stream(command.itemData());
|
||||||
ItemLibraryEntry itemLibraryEntry;
|
ItemLibraryEntry itemLibraryEntry;
|
||||||
stream >> itemLibraryEntry;
|
stream >> itemLibraryEntry;
|
||||||
QmlVisualNode::createQmlVisualNode(this, itemLibraryEntry, {});
|
QmlVisualNode::createQmlVisualNode(this, itemLibraryEntry, command.sceneRootId(), {});
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command)
|
void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command)
|
||||||
|
@@ -296,26 +296,22 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view,
|
|||||||
|
|
||||||
QmlVisualNode QmlVisualNode::createQmlVisualNode(AbstractView *view,
|
QmlVisualNode QmlVisualNode::createQmlVisualNode(AbstractView *view,
|
||||||
const ItemLibraryEntry &itemLibraryEntry,
|
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 {});
|
QTC_ASSERT(sceneNodeProperty.isValid(), return {});
|
||||||
ModelNode node = createQmlObjectNode(view, itemLibraryEntry, position, sceneNodeProperty).modelNode();
|
ModelNode node = createQmlObjectNode(view, itemLibraryEntry, position, sceneNodeProperty).modelNode();
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view)
|
NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view, qint32 sceneRootId)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(view, return {});
|
QTC_ASSERT(view, return {});
|
||||||
|
|
||||||
QList<ModelNode> quickViews = view->allModelNodesOfType("QtQuick3D.View3D");
|
ModelNode node;
|
||||||
QTC_ASSERT(!quickViews.isEmpty(), return {});
|
if (view->hasModelNodeForInternalId(sceneRootId))
|
||||||
const ModelNode quickView = quickViews.first();
|
node = view->modelNodeForInternalId(sceneRootId);
|
||||||
|
|
||||||
QList<ModelNode> nodes = quickView.directSubModelNodesOfType("QtQuick3D.Node");
|
|
||||||
QTC_ASSERT(!nodes.isEmpty(), return {});
|
|
||||||
const ModelNode node = nodes.first();
|
|
||||||
|
|
||||||
return node.defaultNodeListProperty();
|
return node.defaultNodeListProperty();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user