digiKam
Loading...
Searching...
No Matches
dragdropimplementations.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2011-01-02
7 * Description : Sample implementations for drag and drop handling
8 *
9 * SPDX-FileCopyrightText: 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QAbstractItemView>
20
21// Local includes
22
23#include "digikam_export.h"
25
26namespace Digikam
27{
28
29class DIGIKAM_EXPORT DragDropModelImplementation
30{
31public:
32
40
46 Qt::DropActions supportedDropActions() const;
47 QStringList mimeTypes() const;
48 bool dropMimeData(const QMimeData*,
49 Qt::DropAction,
50 int,
51 int,
52 const QModelIndex&);
53 QMimeData* mimeData(const QModelIndexList& indexes) const;
54
61 virtual Qt::ItemFlags dragDropFlags(const QModelIndex& index) const;
62
70 Qt::ItemFlags dragDropFlagsV2(const QModelIndex& index) const;
71 virtual bool isDragEnabled(const QModelIndex& index) const;
72 virtual bool isDropEnabled(const QModelIndex& index) const;
73
77 void setDragDropHandler(AbstractItemDragDropHandler* handler);
78 AbstractItemDragDropHandler* dragDropHandler() const;
79
80#define DECLARE_MODEL_DRAG_DROP_METHODS \
81 virtual Qt::DropActions supportedDropActions() const override \
82 { return DragDropModelImplementation::supportedDropActions(); } \
83 virtual QStringList mimeTypes() const override \
84 { return DragDropModelImplementation::mimeTypes(); } \
85 virtual bool dropMimeData(const QMimeData* d, Qt::DropAction a, \
86 int r, int c, const QModelIndex& p) override \
87 { return DragDropModelImplementation::dropMimeData(d, a, r, c, p); } \
88 virtual QMimeData* mimeData(const QModelIndexList& indexes) const override \
89 { return DragDropModelImplementation::mimeData(indexes); }
90
91protected:
92
93 AbstractItemDragDropHandler* m_dragDropHandler = nullptr;
94
95private:
96
97 Q_DISABLE_COPY(DragDropModelImplementation)
98};
99
100// --------------------------------------------------------------------------------------------
101
102class DIGIKAM_EXPORT DragDropViewImplementation
103{
104public:
105
107 virtual ~DragDropViewImplementation() = default;
108
109 virtual void cut();
110 virtual void copy();
111 virtual void paste();
112
113protected:
114
118 virtual QAbstractItemView* asView() = 0;
119
125
130 virtual QModelIndex mapIndexForDragDrop(const QModelIndex& index) const = 0;
131
135 virtual QPixmap pixmapForDrag(const QList<QModelIndex>& indexes) const = 0;
136
140 void dragEnterEvent(QDragEnterEvent* event);
141 void dragMoveEvent(QDragMoveEvent* e);
142 void dropEvent(QDropEvent* e);
143 void startDrag(Qt::DropActions supportedActions);
144
145#define DECLARE_VIEW_DRAG_DROP_METHODS(ParentViewClass) \
146 virtual QAbstractItemView* asView() override \
147 { return this; } \
148 void dragEnterEvent(QDragEnterEvent* e) override \
149 { DragDropViewImplementation::dragEnterEvent(e); } \
150 void dragMoveEvent(QDragMoveEvent* e) override \
151 { ParentViewClass::dragMoveEvent(e); \
152 DragDropViewImplementation::dragMoveEvent(e); } \
153 void dropEvent(QDropEvent* e) override \
154 { ParentViewClass::dropEvent(e); \
155 DragDropViewImplementation::dropEvent(e); } \
156 void startDrag(Qt::DropActions supportedActions) override \
157 { DragDropViewImplementation::startDrag(supportedActions); }
158
159 void encodeIsCutSelection(QMimeData* mime, bool isCutSelection);
160 bool decodeIsCutSelection(const QMimeData* mimeData);
161
162private:
163
164 Q_DISABLE_COPY(DragDropViewImplementation)
165};
166
167} // namespace Digikam
Definition abstractitemdragdrophandler.h:32
Definition dragdropimplementations.h:30
Definition dragdropimplementations.h:103
virtual QAbstractItemView * asView()=0
virtual QPixmap pixmapForDrag(const QList< QModelIndex > &indexes) const =0
virtual QModelIndex mapIndexForDragDrop(const QModelIndex &index) const =0
virtual ~DragDropViewImplementation()=default
virtual AbstractItemDragDropHandler * dragDropHandler() const =0
Definition datefolderview.cpp:34