X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e46003aca365ca66ce7c7cccd47fb52d1da2fb91..b1c9b5126d:/src/draganddrophelper.h diff --git a/src/draganddrophelper.h b/src/draganddrophelper.h index 9e174959b..4859740cd 100644 --- a/src/draganddrophelper.h +++ b/src/draganddrophelper.h @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (C) 2007 by Peter Penz * + * Copyright (C) 2007 by David Faure * * * * 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 * @@ -20,33 +21,76 @@ #ifndef DRAGANDDROPHELPER_H #define DRAGANDDROPHELPER_H -#include +#include "libdolphin_export.h" +#include +class DolphinController; +class KFileItem; +class KUrl; +class QDropEvent; +class QMimeData; class QAbstractItemView; class QBrush; class QRect; class QWidget; /** - * @brief Helper class to bypass some drag & drop limitations in Qt. + * @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; - // TODO: remove this method when the issue #160611 is solved in Qt 4.4 - static void drawHoverIndication(QWidget* widget, - const QRect& bounds, - const QBrush& brush); + friend class DragAndDropHelperSingleton; }; #endif