]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/draganddrophelper.h
Restore the "Edit->Selection" menu from Konqueror 3 for file
[dolphin.git] / src / draganddrophelper.h
index 93f9ddd127065904030da1e4128cbd8502f808ab..d8823d68d4231b39a3e3455397c235679f799c9a 100644 (file)
@@ -1,5 +1,6 @@
 /***************************************************************************
  *   Copyright (C) 2007 by Peter Penz <peter.penz@gmx.at>                  *
+ *   Copyright (C) 2007 by David Faure <faure@kde.org>                     *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
 #ifndef DRAGANDDROPHELPER_H
 #define DRAGANDDROPHELPER_H
 
-#include <QtCore/Qt>
+#include "libdolphin_export.h"
+#include <QObject>
 
+class DolphinController;
+class KFileItem;
+class KUrl;
+class QDropEvent;
+class QMimeData;
 class QAbstractItemView;
-class QBrush;
-class QRect;
 class QWidget;
 
 /**
  * @brief Helper class for having a common drag and drop behavior.
  *
  * The class is used by DolphinIconsView, DolphinDetailsView,
- * DolphinColumnView and SidebarTreeView to have a consistent
+ * DolphinColumnView and PanelTreeView to have a consistent
  * drag and drop behavior between all views.
  */
-class DragAndDropHelper
+class LIBDOLPHINPRIVATE_EXPORT DragAndDropHelper : public QObject
 {
+    Q_OBJECT
 
 public:
+    static DragAndDropHelper& instance();
+
+    /**
+     * Returns true, if Dolphin supports the dragging of
+     * the given mime data.
+     */
+    bool isMimeDataSupported(const QMimeData* mimeData) const;
+
     /**
      * Creates a drag object for the view \a itemView for all selected items.
      */
-    static void startDrag(QAbstractItemView* itemView, Qt::DropActions supportedActions);
+    void startDrag(QAbstractItemView* itemView,
+                   Qt::DropActions supportedActions,
+                   DolphinController* controller = 0);
+
+    /**
+     * Returns true if and only if the view \a itemView was the last view to 
+     * be passed to startDrag(...), and that drag is still in progress.
+     */
+    bool isDragSource(QAbstractItemView* itemView);
+
+    /**
+     * Handles the dropping of URLs to the given
+     * destination. A context menu with the options
+     * 'Move Here', 'Copy Here', 'Link Here' and
+     * 'Cancel' is offered to the user.
+     * @param destItem  Item of the destination (can be null, see KFileItem::isNull()).
+     * @param destPath  Path of the destination.
+     * @param event     Drop event.
+     * @param widget    Source widget where the dragging has been started.
+     */
+    void dropUrls(const KFileItem& destItem,
+                  const KUrl& destPath,
+                  QDropEvent* event,
+                  QWidget* widget);
+signals:
+    void errorMessage(const QString& msg);
+
+private:
+    DragAndDropHelper();
+    // The last view passed in startDrag(...), or 0 if
+    // no startDrag(...) initiated drag is in progress.
+    QAbstractItemView *m_dragSource;
+
+    friend class DragAndDropHelperSingleton;
 };
 
 #endif