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 <qohosmimedata.h>
7#include <qohosplugincore.h>
8#include <utility>
9
11
12namespace {
13
14template<typename T>
15QOhosSupplier<T> makeMemoizingSupplier(QOhosSupplier<T> baseSupplier)
16{
17 return [baseSupplier = std::move(baseSupplier), value = QOhosOptional<T>()]() mutable {
18 if (!value.hasValue()) {
19 value.emplace(baseSupplier());
20 baseSupplier = nullptr;
21 }
22 return value.value();
23 };
24}
25
27{
28public:
30
31protected:
32 bool hasFormat_sys(const QString &mimeType) const override;
33 QStringList formats_sys() const override;
34 QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const override;
35
36private:
38};
39
45
46bool SuppliersBasedMimeData::hasFormat_sys(const QString &mimeType) const
47{
48 return m_mimeValuesSuppliers->find(mimeType) != m_mimeValuesSuppliers->end();
49}
50
52{
53 QStringList formats;
54 for (const auto &entry : *m_mimeValuesSuppliers)
55 formats.append(entry.first);
56 return formats;
57}
58
60{
61 auto supplierIter = m_mimeValuesSuppliers->find(mimeType);
62 return supplierIter != m_mimeValuesSuppliers->end()
63 ? (supplierIter->second)()
64 : QVariant();
65}
66
67}
68
71{
72 auto memoizingSuppliers = std::make_shared<std::map<QString, QOhosSupplier<QVariant>>>();
73 for (auto &entry : mimeValuesSuppliers)
74 memoizingSuppliers->emplace(entry.first, makeMemoizingSupplier(std::move(entry.second)));
75
76 return [memoizingSuppliers]() {
77 return std::make_unique<SuppliersBasedMimeData>(memoizingSuppliers);
78 };
79}
80
81QOhosSupplier<std::unique_ptr<QMimeData>> makeQOhosMimeDataFactory(std::map<QString, QVariant> mimeValues)
82{
83 auto mimeValuesSuppliers = std::make_shared<std::map<QString, QOhosSupplier<QVariant>>>();
84 for (auto &entry : mimeValues) {
85 mimeValuesSuppliers->emplace(
86 entry.first,
87 [value = entry.second]() {
88 return value;
89 });
90 }
91
92 return [mimeValuesSuppliers]() {
93 return std::make_unique<SuppliersBasedMimeData>(mimeValuesSuppliers);
94 };
95}
96
97QT_END_NAMESPACE
std::enable_if_t< qohosplugincore_h_detail::isQOhosOptional< QOhosInvokeResult< Func, T > >, QOhosInvokeResult< Func, T > > andThen(Func &&func) const
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)