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 | #include "DeclarativeMimeData.h" |
9 | |
10 | DeclarativeMimeData::DeclarativeMimeData() |
11 | : QMimeData() |
12 | , m_source(nullptr) |
13 | { |
14 | } |
15 | |
16 | DeclarativeMimeData::DeclarativeMimeData(const QMimeData *copy) |
17 | : QMimeData() |
18 | , m_source(nullptr) |
19 | { |
20 | // Copy the standard MIME data |
21 | const auto formats = copy->formats(); |
22 | for (const QString &format : formats) { |
23 | QMimeData::setData(mimetype: format, data: copy->data(mimetype: format)); |
24 | } |
25 | |
26 | // If the object we are copying actually is a DeclarativeMimeData, copy our extended properties as well |
27 | const DeclarativeMimeData *declarativeMimeData = qobject_cast<const DeclarativeMimeData *>(object: copy); |
28 | if (declarativeMimeData) { |
29 | this->setSource(declarativeMimeData->source()); |
30 | } |
31 | } |
32 | |
33 | QUrl DeclarativeMimeData::url() const |
34 | { |
35 | if (this->hasUrls() && !this->urls().isEmpty()) { |
36 | return QMimeData::urls().constFirst(); |
37 | } |
38 | return QUrl(); |
39 | } |
40 | void DeclarativeMimeData::setUrl(const QUrl &url) |
41 | { |
42 | if (this->url() == url) { |
43 | return; |
44 | } |
45 | |
46 | QList<QUrl> urlList; |
47 | urlList.append(t: url); |
48 | QMimeData::setUrls(urlList); |
49 | Q_EMIT urlChanged(); |
50 | } |
51 | |
52 | QJsonArray DeclarativeMimeData::urls() const |
53 | { |
54 | QJsonArray varUrls; |
55 | const auto lstUrls = QMimeData::urls(); |
56 | for (const QUrl &url : lstUrls) { |
57 | varUrls.append(value: url.toString()); |
58 | } |
59 | return varUrls; |
60 | } |
61 | |
62 | void DeclarativeMimeData::setUrls(const QJsonArray &urls) |
63 | { |
64 | QList<QUrl> urlList; |
65 | urlList.reserve(asize: urls.size()); |
66 | for (const auto &varUrl : urls) { |
67 | urlList << QUrl(varUrl.toString()); |
68 | } |
69 | QMimeData::setUrls(urlList); |
70 | Q_EMIT urlsChanged(); |
71 | } |
72 | |
73 | // color |
74 | QColor DeclarativeMimeData::color() const |
75 | { |
76 | if (this->hasColor()) { |
77 | return qvariant_cast<QColor>(v: this->colorData()); |
78 | } |
79 | return QColor(); |
80 | } |
81 | |
82 | bool DeclarativeMimeData::hasColor() const |
83 | { |
84 | // qDebug() << " hasColor " << (QMimeData::hasColor() ? color().name() : "false"); |
85 | return QMimeData::hasColor(); |
86 | } |
87 | |
88 | void DeclarativeMimeData::setColor(const QColor &color) |
89 | { |
90 | if (this->color() != color) { |
91 | this->setColorData(color); |
92 | Q_EMIT colorChanged(); |
93 | } |
94 | } |
95 | |
96 | void DeclarativeMimeData::setData(const QString &mimeType, const QVariant &data) |
97 | { |
98 | if (data.userType() == QMetaType::QByteArray) { |
99 | QMimeData::setData(mimetype: mimeType, data: data.toByteArray()); |
100 | } else if (data.canConvert<QString>()) { |
101 | QMimeData::setData(mimetype: mimeType, data: data.toString().toLatin1()); |
102 | } |
103 | } |
104 | |
105 | QQuickItem *DeclarativeMimeData::source() const |
106 | { |
107 | return m_source; |
108 | } |
109 | void DeclarativeMimeData::setSource(QQuickItem *source) |
110 | { |
111 | if (m_source != source) { |
112 | m_source = source; |
113 | Q_EMIT sourceChanged(); |
114 | } |
115 | } |
116 | |
117 | QByteArray DeclarativeMimeData::getDataAsByteArray(const QString &format) |
118 | { |
119 | return data(mimetype: format); |
120 | } |
121 | |
122 | #include "moc_DeclarativeMimeData.cpp" |
123 |