File indexing completed on 2024-04-21 05:32:00

0001 /*
0002  * SPDX-FileCopyrightText: 2017 Peifeng Yu <aetf@unlimitedcodeworks.xyz>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  *
0006  */
0007 
0008 #include "mousehelper.h"
0009 
0010 #include <QCursor>
0011 #include <QMimeData>
0012 #include <QUrl>
0013 
0014 using namespace Milou;
0015 
0016 MouseHelper::MouseHelper(QObject *parent)
0017     : QObject(parent)
0018 {
0019 }
0020 
0021 MouseHelper::~MouseHelper()
0022 {
0023 }
0024 
0025 QPointF MouseHelper::globalMousePosition() const
0026 {
0027     return QCursor::pos();
0028 }
0029 
0030 QVariantMap MouseHelper::generateMimeDataMap(QMimeData *data) const
0031 {
0032     QVariantMap dataMap;
0033 
0034     QStringList formats = data->formats();
0035     auto it = std::find(formats.cbegin(), formats.cend(), QLatin1String("text/plain"));
0036     if (it != formats.cend()) {
0037         dataMap.insert(*it, data->text());
0038         formats.erase(it);
0039     }
0040 
0041     it = std::find(formats.cbegin(), formats.cend(), QLatin1String("text/html"));
0042     if (it != formats.cend()) {
0043         dataMap.insert(*it, data->html());
0044         formats.erase(it);
0045     }
0046 
0047     it = std::find(formats.cbegin(), formats.cend(), QLatin1String("text/uri-list"));
0048     if (it != formats.cend()) {
0049         const QList<QUrl> urls = data->urls();
0050         dataMap.insert(*it, QVariantList(urls.cbegin(), urls.cend()));
0051     }
0052 
0053     it = std::find_if(formats.cbegin(), formats.cend(), [](const QString &format) {
0054         return format.startsWith(QLatin1String("image/"));
0055     });
0056     if (it != formats.cend()) {
0057         dataMap.insert(*it, data->imageData());
0058         formats.erase(it);
0059     }
0060 
0061     for (const QString &format : std::as_const(formats)) {
0062         dataMap.insert(format, data->data(format));
0063     }
0064 
0065     return dataMap;
0066 }