1/*
2 SPDX-FileCopyrightText: 2010 BetterInbox <contact@betterinbox.com>
3 SPDX-FileContributor: Gregory Schlomoff <greg@betterinbox.com>
4
5 SPDX-License-Identifier: MIT
6*/
7
8#ifndef DECLARATIVEMIMEDATA_H
9#define DECLARATIVEMIMEDATA_H
10
11#include <QColor>
12#include <QJsonArray>
13#include <QMimeData>
14#include <QQuickItem>
15#include <QUrl>
16
17struct MimeDataForign {
18 Q_GADGET
19 QML_ANONYMOUS
20 QML_FOREIGN(QMimeData)
21};
22
23/*!
24 * \qmltype MimeData
25 * \inqmlmodule org.kde.draganddrop
26 *
27 * \brief This is a wrapper class around QMimeData with a few extensions
28 * to provide better support for in-qml drag & drops.
29 */
30class DeclarativeMimeData : public QMimeData
31{
32 Q_OBJECT
33 QML_NAMED_ELEMENT(MimeData)
34 QML_UNCREATABLE("MimeData cannot be created from QML.")
35
36 /*!
37 * \qmlproperty string MimeData::text
38 * A plain text (MIME type text/plain) representation of the data.
39 */
40 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
41
42 /*!
43 * \qmlproperty string MimeData::html
44 * A string if the data stored in the object is HTML (MIME type text/html); otherwise returns an empty string.
45 */
46 Q_PROPERTY(QString html READ html WRITE setHtml NOTIFY htmlChanged)
47
48 /// TODO: We should use QDeclarativeListProperty<QUrls> to return the whole list instead of only the first element.
49 /*!
50 * \qmlproperty url MimeData::url
51 * The first URL from the urls property of QMimeData.
52 */
53 Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
54
55 /*!
56 * \qmlproperty QJsonArray MimeData::urls
57 * A list of URLs contained within the MIME data object.
58 * URLs correspond to the MIME type text/uri-list.
59 */
60 Q_PROPERTY(QJsonArray urls READ urls WRITE setUrls NOTIFY urlsChanged)
61
62 /*!
63 * \qmlproperty color MimeData::color
64 * A color if the data stored in the object represents a color (MIME type application/x-color); otherwise QColor().
65 */
66 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
67
68 /*!
69 * \qmlproperty Item MimeData::source
70 * The graphical item on the scene that started the drag event. It may be null.
71 *
72 * Setting source to any existing qml item will enable the receiver of the drag and drop operation to know in which item
73 * the operation originated.
74 *
75 * In the case of inter-application drag and drop operations, the source will not be available, and will be 0.
76 * Be sure to test it in your QML code, before using it, or it will generate errors in the console.
77 *
78 */
79 Q_PROPERTY(QQuickItem *source READ source WRITE setSource NOTIFY sourceChanged)
80
81 /*!
82 * \qmlproperty bool MimeData::hasUrls
83 * \sa QMimeData::hasUrls
84 */
85 Q_PROPERTY(bool hasUrls READ hasUrls NOTIFY urlsChanged)
86 // TODO: Image property
87
88 /*!
89 * \qmlproperty list<string> MimeData::formats
90 * \sa QMimeData::formats
91 */
92 Q_PROPERTY(QStringList formats READ formats)
93public:
94 DeclarativeMimeData();
95 /*!
96 * \brief Creates a new MimeData by cloning the QMimeData
97 * passed as parameter.
98 *
99 * This is useful for two reasons:
100 * \list
101 * \li In DragArea, we want to clone our "working copy" of the MimeData instance, as Qt will automatically delete it after the drag and drop operation.
102 * \li In the drop events, the QMimeData is const, and we have troubles passing const to QML. So we clone it to remove the "constness"
103 * \endlist
104 *
105 * This method will try to cast the QMimeData to MimeData, and will clone our extensions to QMimeData as well
106 */
107 DeclarativeMimeData(const QMimeData *copy);
108
109 QUrl url() const;
110 void setUrl(const QUrl &url);
111
112 QJsonArray urls() const;
113 void setUrls(const QJsonArray &urls);
114
115 QColor color() const;
116 void setColor(const QColor &color);
117
118 /*!
119 * \qmlmethod MimeData::hasColor()
120 */
121 Q_INVOKABLE bool hasColor() const;
122
123 /*!
124 * \qmlmethod MimeData::setData(string mimeType, variant data)
125 */
126 Q_INVOKABLE void setData(const QString &mimeType, const QVariant &data);
127
128 QQuickItem *source() const;
129 void setSource(QQuickItem *source);
130
131 /*!
132 * \qmlmethod MimeData::getDataAsByteArray(string format)
133 */
134 Q_INVOKABLE QByteArray getDataAsByteArray(const QString &format);
135
136 /*
137 QString text() const; //TODO: Reimplement this to issue the onChanged signals
138 void setText(const QString &text);
139 QString html() const;
140 void setHtml(const QString &html);
141 */
142
143Q_SIGNALS:
144 void textChanged(); // FIXME not being used
145 void htmlChanged(); // FIXME not being used
146 void urlChanged();
147 void urlsChanged();
148 void colorChanged();
149 void sourceChanged();
150
151private:
152 QQuickItem *m_source;
153};
154
155#endif // DECLARATIVEMIMEDATA_H
156

source code of kdeclarative/src/qmlcontrols/draganddrop/DeclarativeMimeData.h