QmlDesigner: Implement drag-n-drop materials to the 3D Editor

Fixes: QDS-7011
Change-Id: Id6e4aea2c19561ea861507480636ae2358ece067
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2022-07-01 11:35:09 +03:00
parent b5a34902d0
commit 5a9a6804ee
11 changed files with 85 additions and 4 deletions

View File

@@ -242,12 +242,28 @@ void Edit3DWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent)
{
const DesignerActionManager &actionManager = QmlDesignerPlugin::instance()
->viewManager().designerActionManager();
if (actionManager.externalDragHasSupportedAssets(dragEnterEvent->mimeData()))
if (actionManager.externalDragHasSupportedAssets(dragEnterEvent->mimeData())
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_MATERIAL)) {
dragEnterEvent->acceptProposedAction();
}
}
void Edit3DWidget::dropEvent(QDropEvent *dropEvent)
{
// handle dropping materials
if (dropEvent->mimeData()->hasFormat(Constants::MIME_TYPE_MATERIAL)) {
QByteArray data = dropEvent->mimeData()->data(Constants::MIME_TYPE_MATERIAL);
QDataStream stream(data);
qint32 internalId;
stream >> internalId;
ModelNode matNode = m_view->modelNodeForInternalId(internalId);
if (matNode.isValid())
m_view->dropMaterial(matNode, dropEvent->position());
return;
}
// handle dropping external assets
const DesignerActionManager &actionManager = QmlDesignerPlugin::instance()
->viewManager().designerActionManager();
QHash<QString, QStringList> addedAssets = actionManager.handleExternalAssetsDrop(dropEvent->mimeData());