Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qohosmimedata.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <QtCore/qstringlist.h>
5#include <QtGui/private/qinternalmimedata_p.h>
6#include <optional>
7#include <qohosmimedata.h>
8
10
11namespace {
12
13template<typename T>
14QOhosSupplier<T> makeMemoizingSupplier(QOhosSupplier<T> baseSupplier)
15{
16 return [baseSupplier = std::move(baseSupplier), value = std::optional<T>()]() mutable {
17 if (!value.has_value()) {
18 value.emplace(baseSupplier());
19 baseSupplier = nullptr;
20 }
21 return value.value();
22 };
23}
24
26{
27public:
29
30protected:
31 bool hasFormat_sys(const QString &mimeType) const override;
32 QStringList formats_sys() const override;
33 QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const override;
34
35private:
37};
38
44
45bool SuppliersBasedMimeData::hasFormat_sys(const QString &mimeType) const
46{
47 return m_mimeValuesSuppliers->find(mimeType) != m_mimeValuesSuppliers->end();
48}
49
51{
52 QStringList formats;
53 for (const auto &entry : *m_mimeValuesSuppliers)
54 formats.append(entry.first);
55 return formats;
56}
57
59{
60 auto supplierIter = m_mimeValuesSuppliers->find(mimeType);
61 return supplierIter != m_mimeValuesSuppliers->end()
62 ? (supplierIter->second)()
63 : QVariant();
64}
65
66}
67
70{
71 auto memoizingSuppliers = std::make_shared<std::map<QString, QOhosSupplier<QVariant>>>();
72 for (auto &entry : mimeValuesSuppliers)
73 memoizingSuppliers->emplace(entry.first, makeMemoizingSupplier(std::move(entry.second)));
74
75 return [memoizingSuppliers]() {
76 return std::make_unique<SuppliersBasedMimeData>(memoizingSuppliers);
77 };
78}
79
80QOhosSupplier<std::unique_ptr<QMimeData>> makeQOhosMimeDataFactory(std::map<QString, QVariant> mimeValues)
81{
82 auto mimeValuesSuppliers = std::make_shared<std::map<QString, QOhosSupplier<QVariant>>>();
83 for (auto &entry : mimeValues) {
84 mimeValuesSuppliers->emplace(
85 entry.first,
86 [value = entry.second]() {
87 return value;
88 });
89 }
90
91 return [mimeValuesSuppliers]() {
92 return std::make_unique<SuppliersBasedMimeData>(mimeValuesSuppliers);
93 };
94}
95
96QT_END_NAMESPACE
QStringList formats_sys() const override
SuppliersBasedMimeData(std::shared_ptr< const std::map< QString, QOhosSupplier< QVariant > > > mimeValuesSuppliers)
QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const override
bool hasFormat_sys(const QString &mimeType) const override
Combined button and popup list for selecting options.
QOhosSupplier< T > makeMemoizingSupplier(QOhosSupplier< T > baseSupplier)
QOhosSupplier< std::unique_ptr< QMimeData > > makeQOhosMimeDataFactory(std::map< QString, QVariant > mimeValues)
QOhosSupplier< std::unique_ptr< QMimeData > > makeQOhosLazyFetchMimeDataFactory(std::map< QString, QOhosSupplier< QVariant > > mimeValuesSuppliers)