X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/55a9aa18d2ddd2688eeb59d962ed60067bbd9f6c..b6700f77dd8e07fdab0d40ea4bc91f8d0c03ae70:/src/views/draganddrophelper.h diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index f26f769e9..1a6b5900e 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Peter Penz * + * Copyright (C) 2007-2011 by Peter Penz * * Copyright (C) 2007 by David Faure * * * * This program is free software; you can redistribute it and/or modify * @@ -21,76 +21,49 @@ #ifndef DRAGANDDROPHELPER_H #define DRAGANDDROPHELPER_H -#include "libdolphin_export.h" -#include -#include +#include "dolphin_export.h" + +#include +#include -class DolphinViewController; -class KFileItem; -class KUrl; class QDropEvent; -class QAbstractItemView; -class QMimeData; class QWidget; +namespace KIO { class DropJob; } -/** - * @brief Helper class for having a common drag and drop behavior. - * - * The class is used by DolphinIconsView, DolphinDetailsView, - * DolphinColumnView and PanelTreeView to have a consistent - * drag and drop behavior between all views. - */ -class LIBDOLPHINPRIVATE_EXPORT DragAndDropHelper : public QObject +class DOLPHIN_EXPORT DragAndDropHelper { - Q_OBJECT - public: - static DragAndDropHelper& instance(); - /** - * Creates a drag object for the view \a itemView for all selected items. + * 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. The drag destination must represent a directory or + * a desktop-file, otherwise the dropping gets ignored. + * + * @param destUrl URL of the item destination. Is used only if destItem::isNull() + * is true. + * @param event Drop event. + * @param window Widget where the drop happened, will be used as parent of the drop menu. + * @return KIO::DropJob pointer or null in case the destUrl is contained + * in the mimeData url list. */ - void startDrag(QAbstractItemView* itemView, - Qt::DropActions supportedActions, - DolphinViewController* dolphinViewController = 0); + static KIO::DropJob* dropUrls(const QUrl& destUrl, + QDropEvent* event, + QWidget *window); /** - * 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. + * @return True if destUrl is contained in the urls parameter. */ - bool isDragSource(QAbstractItemView* itemView) const; + static bool urlListMatchesUrl(const QList& urls, const QUrl& destUrl); /** - * 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. + * clear the internal cache. */ - void dropUrls(const KFileItem& destItem, - const KUrl& destPath, - QDropEvent* event, - QWidget* widget); -signals: - void errorMessage(const QString& msg); - + static void clearUrlListMatchesUrlCache(); private: - DragAndDropHelper(); - /** - * Creates a pixmap the contains the all icons of the items - * that are dragged. + * Stores the results of the expensive checks made in urlListMatchesUrl. */ - QPixmap createDragPixmap(QAbstractItemView* itemView) const; - - // The last view passed in startDrag(...), or 0 if - // no startDrag(...) initiated drag is in progress. - QAbstractItemView *m_dragSource; - - friend class DragAndDropHelperSingleton; + static QHash m_urlListMatchesUrlCache; }; #endif