2
0
Эх сурвалжийг харах

Fix mxe map editor drag'n'drop

nordsoft 2 жил өмнө
parent
commit
4674e240d8

+ 3 - 5
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())
 		{

+ 3 - 15
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);
 }

+ 1 - 3
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;