]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/places/placesitemmodel.cpp
Further preperations for drag & drop support in the places panel
[dolphin.git] / src / panels / places / placesitemmodel.cpp
index 14ec54be81f495ab80ba4974fbd2b4bc1c014215..6723391db4efff3d2765bf17bb6389fe00e74e57 100644 (file)
@@ -37,6 +37,7 @@
 #include "placesitem.h"
 #include <QAction>
 #include <QDate>
+#include <QMimeData>
 #include <QTimer>
 
 #include <Solid/Device>
@@ -291,7 +292,9 @@ void PlacesItemModel::requestEject(int index)
                     this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant)));
             drive->eject();
         } else {
-
+            const QString label = item->text();
+            const QString message = i18nc("@info", "The device '%1' is not a disk and cannot be ejected.", label);
+            emit errorMessage(message);
         }
     }
 }
@@ -305,14 +308,44 @@ void PlacesItemModel::requestTeardown(int index)
             connect(access, SIGNAL(teardownDone(Solid::ErrorType,QVariant,QString)),
                     this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant)));
             access->teardown();
-        } else {
-            const QString label = item->text();
-            const QString message = i18nc("@info", "The device '%1' is not a disk and cannot be ejected.", label);
-            emit errorMessage(message);
         }
     }
 }
 
+QMimeData* PlacesItemModel::createMimeData(const QSet<int>& indexes) const
+{
+    KUrl::List urls;
+    QByteArray itemData;
+
+    QDataStream stream(&itemData, QIODevice::WriteOnly);
+
+    foreach (int index, indexes) {
+        const KUrl itemUrl = placesItem(index)->url();
+        if (itemUrl.isValid()) {
+            urls << itemUrl;
+        }
+        stream << index;
+    }
+
+    QMimeData* mimeData = new QMimeData();
+    if (!urls.isEmpty()) {
+        urls.populateMimeData(mimeData);
+    }
+    mimeData->setData(internalMimeType(), itemData);
+
+    return mimeData;
+}
+
+void PlacesItemModel::dropMimeData(int index, const QMimeData* mimeData)
+{
+    Q_UNUSED(index); // TODO
+    if (mimeData->hasFormat(internalMimeType())) {
+        // TODO
+    } else if (mimeData->hasFormat("text/uri-list")) {
+        // TODO
+    }
+}
+
 KUrl PlacesItemModel::convertedUrl(const KUrl& url)
 {
     KUrl newUrl = url;
@@ -853,6 +886,12 @@ void PlacesItemModel::triggerBookmarksSaving()
     }
 }
 
+QString PlacesItemModel::internalMimeType() const
+{
+    return "application/x-dolphinplacesmodel-" +
+            QString::number((qptrdiff)this);
+}
+
 bool PlacesItemModel::equalBookmarkIdentifiers(const KBookmark& b1, const KBookmark& b2)
 {
     const QString udi1 = b1.metaDataItem("UDI");