X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1d7088b1ada3de716ff591c22d400198450208d4..5d9051bba36c8690a622591b1164158f526a9f12:/src/views/draganddrophelper.h diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index 8838648a0..73043febc 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -1,56 +1,94 @@ -/*************************************************************************** - * 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 * - * 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 "dolphin_export.h" +#include + +#include #include +#include -class KFileItem; -class KUrl; class QDropEvent; +class QMimeData; class QWidget; +namespace KIO +{ +class DropJob; +} -class LIBDOLPHINPRIVATE_EXPORT DragAndDropHelper +class DOLPHIN_EXPORT DragAndDropHelper { public: /** - * 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 0 (KFileItem::isNull()) if - * no file-item is available for the destination. In this case - * destUrl is used as fallback. For performance reasons it is - * recommended to pass a file-item if available. + * 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. - * @return Error message if dropping is not possible. If an empty string - * is returned, the dropping has been successful. + * @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); + + /** + * Checks if the destination supports dropping. + * + * @param destItem The item destination. + * @return True if the destination is a directory and is writable, or it's a desktop file. + * False otherwise. + */ + static bool supportsDropping(const KFileItem &destItem); + + /** + * Updates the drop action according to whether the destination supports dropping. + * If supportsDropping(destUrl), set dropAction = proposedAction. Otherwise, set + * dropAction = Qt::IgnoreAction. + * + * @param event Drop event. + * @param destUrl Destination URL. + */ + static void updateDropAction(QDropEvent *event, const QUrl &destUrl); + + /** + * @return True if destUrl is contained in the urls parameter. + */ + static bool urlListMatchesUrl(const QList &urls, const QUrl &destUrl); + + /** + * @return True if mimeData contains Ark's drag and drop mime types. + */ + 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"); + } + + /** + * clear the internal cache. + */ + static void clearUrlListMatchesUrlCache(); + +private: + /** + * Stores the results of the expensive checks made in urlListMatchesUrl. */ - static QString dropUrls(const KFileItem& destItem, - const KUrl& destUrl, - QDropEvent* event); + static QHash m_urlListMatchesUrlCache; }; #endif