]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphindropcontroller.cpp
Provide a UI option for the "auto expand folders during drag operations" feature...
[dolphin.git] / src / dolphindropcontroller.cpp
index 6e7ec37ba2ff8dbe81721767e282d93ffade0634..40fccf0d2011cd2c4b9f1aca7a5abb3ad72e7cf6 100644 (file)
  ***************************************************************************/
 
 #include "dolphindropcontroller.h"
-#include <klocale.h>
-#include <kicon.h>
-#include <QApplication>
-#include <kdebug.h>
-#include <kmenu.h>
+#include <kfileitem.h>
 #include <konq_operations.h>
 
-// TODO replace with KonqOperations::doDrop [or move doDrop code into this class]
-// Note that this means changing the DolphinDropController controller usage
-// to "create with new and let it autodelete" instead of on stack, since doDrop is async.
-
-DolphinDropController::DolphinDropController(QWidget* parentWidget)
-    : QObject(parentWidget), m_parentWidget(parentWidget)
-{
-}
-
-DolphinDropController::~DolphinDropController()
-{
-}
-
-void DolphinDropController::dropUrls(const KUrl::List& urls,
-                                     const KUrl& destination)
+void DolphinDropController::dropUrls(const KFileItem& destItem,
+                                     const KUrl& destPath,
+                                     QDropEvent* event,
+                                     QWidget* widget)
 {
-    kDebug() << "Source" << urls;
-    kDebug() << "Destination:" << destination;
-
-    Qt::DropAction action = Qt::CopyAction;
-
-    Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
-    const bool shiftPressed   = modifier & Qt::ShiftModifier;
-    const bool controlPressed = modifier & Qt::ControlModifier;
-    if (shiftPressed && controlPressed) {
-        // shortcut for 'Link Here' is used
-        action = Qt::LinkAction;
-    } else if (shiftPressed) {
-        // shortcut for 'Move Here' is used
-        action = Qt::MoveAction;
-    } else if (controlPressed) {
-        // shortcut for 'Copy Here' is used
-        action = Qt::CopyAction;
-    } else {
-        // open a context menu which offers the following actions:
-        // - Move Here
-        // - Copy Here
-        // - Link Here
-        // - Cancel
-
-        KMenu popup(m_parentWidget);
-
-        QString seq = QKeySequence(Qt::ShiftModifier).toString();
-        seq.chop(1); // chop superfluous '+'
-        QAction* moveAction = popup.addAction(KIcon("go-jump"),
-                                              i18nc("@action:inmenu",
-                                                    "&Move Here\t<shortcut>%1</shortcut>", seq));
-
-        seq = QKeySequence(Qt::ControlModifier).toString();
-        seq.chop(1);
-        QAction* copyAction = popup.addAction(KIcon("edit-copy"),
-                                              i18nc("@action:inmenu",
-                                                    "&Copy Here\t<shortcut>%1</shortcut>", seq));
-
-        seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();
-        seq.chop(1);
-        QAction* linkAction = popup.addAction(KIcon("insert-link"),
-                                              i18nc("@action:inmenu",
-                                                    "&Link Here\t<shortcut>%1</shortcut>", seq));
-
-        popup.addSeparator();
-        popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel"));
-
-        QAction* activatedAction = popup.exec(QCursor::pos());
-        if (activatedAction == moveAction) {
-            action = Qt::MoveAction;
-        } else if (activatedAction == copyAction) {
-            action = Qt::CopyAction;
-        } else if (activatedAction == linkAction) {
-            action = Qt::LinkAction;
+    const bool dropToItem = !destItem.isNull() && (destItem.isDir() || destItem.isDesktopFile());
+    const KUrl destination = dropToItem ? destItem.url() : destPath;
+                             
+    const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
+    const KUrl sourceDir = KUrl(urls.first().directory());
+    if (sourceDir != destination) {
+        if (dropToItem) {
+            KonqOperations::doDrop(destItem, destination, event, widget);
         } else {
-            return;
+            KonqOperations::doDrop(KFileItem(), destination, event, widget);
         }
     }
-
-    switch (action) {
-    case Qt::MoveAction:
-        KonqOperations::copy(m_parentWidget, KonqOperations::MOVE, urls, destination);
-        emit doingOperation(KonqFileUndoManager::MOVE);
-        break;
-
-    case Qt::CopyAction:
-        KonqOperations::copy(m_parentWidget, KonqOperations::COPY, urls, destination);
-        emit doingOperation(KonqFileUndoManager::COPY);
-        break;
-
-    case Qt::LinkAction:
-        KonqOperations::copy(m_parentWidget, KonqOperations::LINK, urls, destination);
-        emit doingOperation(KonqFileUndoManager::LINK);
-        break;
-
-    default:
-        break;
-    }
-}
-
-#include "dolphindropcontroller.moc"
+}
\ No newline at end of file