From 4674e240d8072e7c80121e28d116614a53f54e48 Mon Sep 17 00:00:00 2001 From: nordsoft Date: Wed, 21 Dec 2022 04:28:56 +0400 Subject: [PATCH] Fix mxe map editor drag'n'drop --- mapeditor/mapview.cpp | 8 +++----- mapeditor/objectbrowser.cpp | 18 +++--------------- mapeditor/objectbrowser.h | 4 +--- 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/mapeditor/mapview.cpp b/mapeditor/mapview.cpp index c719b80f1..0cd4b9a5a 100644 --- a/mapeditor/mapview.cpp +++ b/mapeditor/mapview.cpp @@ -358,12 +358,10 @@ void MapView::dragEnterEvent(QDragEnterEvent * event) if(!sc) return; - if(event->mimeData()->hasFormat("application/vcmi.object")) + if(event->mimeData()->hasImage()) { - auto encodedData = event->mimeData()->data("application/vcmi.object"); - QDataStream stream(&encodedData, QIODevice::ReadOnly); - QVariant vdata; - stream >> vdata; + logGlobal->info("Drag'n'drop: dispatching object"); + QVariant vdata = event->mimeData()->imageData(); auto data = vdata.toJsonObject(); if(!data.empty()) { diff --git a/mapeditor/objectbrowser.cpp b/mapeditor/objectbrowser.cpp index b0cc1f707..70d629208 100644 --- a/mapeditor/objectbrowser.cpp +++ b/mapeditor/objectbrowser.cpp @@ -86,13 +86,6 @@ Qt::ItemFlags ObjectBrowserProxyModel::flags(const QModelIndex & index) const return defaultFlags; } -QStringList ObjectBrowserProxyModel::mimeTypes() const -{ - QStringList types; - types << "application/vcmi.object"; - return types; -} - QMimeData * ObjectBrowserProxyModel::mimeData(const QModelIndexList & indexes) const { assert(indexes.size() == 1); @@ -101,18 +94,12 @@ QMimeData * ObjectBrowserProxyModel::mimeData(const QModelIndexList & indexes) c assert(standardModel); QModelIndex index = indexes.front(); - QByteArray encodedData; - - QDataStream stream(&encodedData, QIODevice::WriteOnly); if(!index.isValid()) return nullptr; - - auto text = standardModel->itemFromIndex(mapToSource(index))->data(); - stream << text; QMimeData * mimeData = new QMimeData; - mimeData->setData("application/vcmi.object", encodedData); + mimeData->setImageData(standardModel->itemFromIndex(mapToSource(index))->data()); return mimeData; } @@ -124,6 +111,7 @@ ObjectBrowser::ObjectBrowser(QWidget * parent): void ObjectBrowser::startDrag(Qt::DropActions supportedActions) { + logGlobal->info("Drag'n'drop: Start dragging object from ObjectBrowser"); QDrag *drag = new QDrag(this); auto indexes = selectedIndexes(); if(indexes.isEmpty()) @@ -135,5 +123,5 @@ void ObjectBrowser::startDrag(Qt::DropActions supportedActions) drag->setMimeData(mimeData); - Qt::DropAction dropAction = drag->exec(); + Qt::DropAction dropAction = drag->exec(supportedActions); } diff --git a/mapeditor/objectbrowser.h b/mapeditor/objectbrowser.h index 2282cf695..2c5433ad2 100644 --- a/mapeditor/objectbrowser.h +++ b/mapeditor/objectbrowser.h @@ -19,9 +19,7 @@ public: explicit ObjectBrowserProxyModel(QObject *parent = nullptr); Qt::ItemFlags flags(const QModelIndex &index) const override; - - QStringList mimeTypes() const override; - + QMimeData * mimeData(const QModelIndexList & indexes) const override; TerrainId terrain;