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
10DeclarativeMimeData::DeclarativeMimeData()
11 : QMimeData()
12 , m_source(nullptr)
13{
14}
15
16DeclarativeMimeData::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
33QUrl DeclarativeMimeData::url() const
34{
35 if (this->hasUrls() && !this->urls().isEmpty()) {
36 return QMimeData::urls().constFirst();
37 }
38 return QUrl();
39}
40void 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
52QJsonArray 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
62void 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
74QColor DeclarativeMimeData::color() const
75{
76 if (this->hasColor()) {
77 return qvariant_cast<QColor>(v: this->colorData());
78 }
79 return QColor();
80}
81
82bool DeclarativeMimeData::hasColor() const
83{
84 // qDebug() << " hasColor " << (QMimeData::hasColor() ? color().name() : "false");
85 return QMimeData::hasColor();
86}
87
88void DeclarativeMimeData::setColor(const QColor &color)
89{
90 if (this->color() != color) {
91 this->setColorData(color);
92 Q_EMIT colorChanged();
93 }
94}
95
96void 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
105QQuickItem *DeclarativeMimeData::source() const
106{
107 return m_source;
108}
109void DeclarativeMimeData::setSource(QQuickItem *source)
110{
111 if (m_source != source) {
112 m_source = source;
113 Q_EMIT sourceChanged();
114 }
115}
116
117QByteArray DeclarativeMimeData::getDataAsByteArray(const QString &format)
118{
119 return data(mimetype: format);
120}
121
122#include "moc_DeclarativeMimeData.cpp"
123

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