X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/55a9aa18d2ddd2688eeb59d962ed60067bbd9f6c..d27ee07d:/src/views/draganddrophelper.h diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index f26f769e9..656cefe1b 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -1,96 +1,73 @@ -/*************************************************************************** - * 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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2007-2011 Peter Penz + * SPDX-FileCopyrightText: 2007 David Faure + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #ifndef DRAGANDDROPHELPER_H #define DRAGANDDROPHELPER_H -#include "libdolphin_export.h" -#include -#include +#include "dolphin_export.h" + +#include +#include +#include -class DolphinViewController; -class KFileItem; -class KUrl; class QDropEvent; -class QAbstractItemView; class QMimeData; class QWidget; - -/** - * @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 +namespace KIO { - Q_OBJECT +class DropJob; +} +class DOLPHIN_EXPORT DragAndDropHelper +{ public: - static DragAndDropHelper& instance(); + /** + * 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. + */ + static KIO::DropJob *dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window); /** - * Creates a drag object for the view \a itemView for all selected items. + * @return True if destUrl is contained in the urls parameter. */ - void startDrag(QAbstractItemView* itemView, - Qt::DropActions supportedActions, - DolphinViewController* dolphinViewController = 0); + static bool urlListMatchesUrl(const QList &urls, const QUrl &destUrl); /** - * 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 mimeData contains Ark's drag and drop mime types. */ - bool isDragSource(QAbstractItemView* itemView) const; + static bool isArkDndMimeType(const QMimeData *mimeData); + static QString arkDndServiceMimeType() + { + return QStringLiteral("application/x-kde-ark-dndextract-service"); + } + static QString arkDndPathMimeType() + { + return QStringLiteral("application/x-kde-ark-dndextract-path"); + } /** - * 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