From 2f99a87a3f9c9125bb898a88b263c5251be5eb23 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Mon, 20 Apr 2020 15:37:36 +0300 Subject: [PATCH] QmlDesigner: Fix material texture not updating after image DnD Image path from project root is used instead of image name to make it work when the image is inside a folder. Task-number: QDS-1956 Change-Id: Ia5e10d7bf893902eaea6551e3ec6daafd7977a83 Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../components/navigator/navigatortreemodel.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index 2bb6b5aded8..c91ff78626f 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -25,6 +25,7 @@ #include "navigatortreemodel.h" #include "navigatorview.h" +#include "qmldesignerplugin.h" #include #include @@ -49,6 +50,7 @@ #include #include #include +#include #include @@ -555,7 +557,8 @@ void NavigatorTreeModel::handleItemLibraryImageDrop(const QMimeData *mimeData, i ModelNode targetNode(modelNodeForIndex(rowModelIndex)); const QString imageSource = QString::fromUtf8(mimeData->data("application/vnd.bauhaus.libraryresource")); // absolute path - const QString imageFileName = imageSource.mid(imageSource.lastIndexOf('/') + 1); + const QString imagePath = QmlDesignerPlugin::instance()->documentManager().currentFilePath().toFileInfo().dir().relativeFilePath(imageSource); // relative to .ui.qml file + ModelNode newModelNode; if (targetNode.isSubclassOf("QtQuick3D.DefaultMaterial")) { @@ -569,7 +572,7 @@ void NavigatorTreeModel::handleItemLibraryImageDrop(const QMimeData *mimeData, i // set texture source PropertyName prop = "source"; QString type = "QUrl"; - QVariant val = imageFileName; + QVariant val = imagePath; itemLibraryEntry.addProperty(prop, type, val); // create a texture @@ -581,8 +584,9 @@ void NavigatorTreeModel::handleItemLibraryImageDrop(const QMimeData *mimeData, i }); } else if (targetNode.isSubclassOf("QtQuick3D.Texture")) { // if dropping an image on a texture, set the texture source - targetNode.variantProperty("source").setValue(imageFileName); + targetNode.variantProperty("source").setValue(imagePath); } else { + // create an image newModelNode = QmlItemNode::createQmlItemNodeFromImage(m_view, imageSource , QPointF(), targetProperty); }