4#include <ImageIO/ImageIO.h>
5#include <CoreFoundation/CoreFoundation.h>
6#include <UniformTypeIdentifiers/UTCoreTypes.h>
8#include <QtCore/qsystemdetection.h>
9#include <QtCore/qurl.h>
10#include <QtGui/qimage.h>
11#include <QtCore/qmimedata.h>
12#include <QtCore/qstringconverter.h>
14#if defined(Q_OS_MACOS)
17#include <MobileCoreServices/MobileCoreServices.h>
20#if defined(QT_PLATFORM_UIKIT)
21#import <UIKit/UIKit.h>
27#include "private/qcore_mac_p.h"
195 const QString &uti)
const override;
197 const QString &uti)
const override;
203 if (
mime ==
"application/x-qt-mime-type-name"_L1)
206 return ret.replace(u
'/',
"--"_L1);
211 const QString any_prefix =
"com.trolltech.anymime."_L1;
212 if (uti.size() > any_prefix.length() && uti.startsWith(any_prefix))
213 return uti.
mid(any_prefix.length()).
replace(
"--"_L1,
"/"_L1);
220 if (
data.count() > 1)
221 qWarning(
"QMacMimeAny: Cannot handle multiple member data");
223 if (
mime ==
"text/plain"_L1)
233 QList<QByteArray>
ret;
234 if (
mime ==
"text/plain"_L1)
237 ret.append(
data.toByteArray());
255 if (
mime ==
"application/x-qt-mime-type-name"_L1)
256 return u
"com.trolltech.qt.MimeTypeName"_s;
273 QList<QByteArray>
ret;
284 const QString &uti)
const override;
286 const QString &uti)
const override;
291 if (
mime ==
"text/plain"_L1)
292 return "public.text"_L1;
298 if (uti ==
"public.text"_L1)
299 return "text/plain"_L1;
305 const QList<QByteArray> &
data,
const QString &uti)
const
307 if (
data.count() > 1)
308 qWarning(
"QMacMimePlainTextFallback: Cannot handle multiple member data");
310 if (uti ==
"public.text"_L1) {
315 reinterpret_cast<const UInt8 *
>(firstData.constData()),
316 firstData.size(), kCFStringEncodingUTF8,
false)));
327 QList<QByteArray>
ret;
329 if (uti ==
"public.text"_L1)
340 const QString &uti)
const override;
342 const QString &uti)
const override;
347 if (
mime ==
"text/plain"_L1)
348 return "public.utf16-plain-text"_L1;
354 if (cs ==
"system"_L1)
355 return "public.utf8-plain-text"_L1;
356 else if (cs ==
"iso-10646-ucs-2"_L1 || cs ==
"utf16"_L1)
357 return "public.utf16-plain-text"_L1;
364 if (uti ==
"public.utf16-plain-text"_L1 || uti ==
"public.utf8-plain-text"_L1)
365 return "text/plain"_L1;
371 const QList<QByteArray> &
data,
const QString &uti)
const
373 if (
data.count() > 1)
374 qWarning(
"QMacMimeUnicodeText: Cannot handle multiple member data");
378 if (uti ==
"public.utf8-plain-text"_L1) {
380 }
else if (uti ==
"public.utf16-plain-text"_L1) {
393 QList<QByteArray>
ret;
395 if (uti ==
"public.utf8-plain-text"_L1)
397 else if (uti ==
"public.utf16-plain-text"_L1) {
398 QStringEncoder::Flags
f;
399#if defined(Q_OS_MACOS)
412 ret.append(encoder(
string));
423 const QString &uti)
const override;
425 const QString &uti)
const override;
430 if (
mime ==
"text/html"_L1)
431 return "public.html"_L1;
437 if (uti ==
"public.html"_L1)
438 return "text/html"_L1;
444 const QList<QByteArray> &
data,
const QString &uti)
const
448 if (
data.count() > 1)
449 qWarning(
"QMacMimeHTMLText: Cannot handle multiple member data");
457 QList<QByteArray>
ret;
470 const QString &uti)
const override;
472 const QString &uti)
const override;
477 if (
mime ==
"text/html"_L1)
478 return "public.rtf"_L1;
484 if (uti ==
"public.rtf"_L1)
485 return "text/html"_L1;
491 const QList<QByteArray> &
data,
const QString &uti)
const
495 if (
data.count() > 1)
496 qWarning(
"QMacMimeHTMLText: Cannot handle multiple member data");
499 NSAttributedString *
string = [[NSAttributedString alloc] initWithData:
data.at(0).toNSData()
500 options:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}
501 documentAttributes:nil
506 NSDictionary *dict = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
507 NSData *htmlData = [
string dataFromRange:
range documentAttributes:dict
error:&
error];
508 return QByteArray::fromNSData(htmlData);
515 QList<QByteArray>
ret;
519 NSAttributedString *
string = [[NSAttributedString alloc] initWithData:
data.toByteArray().toNSData()
520 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}
521 documentAttributes:nil
526 NSDictionary *dict = @{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType};
527 NSData *rtfData = [
string dataFromRange:
range documentAttributes:dict
error:&
error];
528 ret << QByteArray::fromNSData(rtfData);
538 const QString &uti)
const override;
540 const QString &uti)
const override;
546 if (
mime ==
"text/uri-list"_L1)
547 return "public.file-url"_L1;
553 if (uti ==
"public.file-url"_L1)
554 return "text/uri-list"_L1;
560 const QList<QByteArray> &
data,
const QString &uti)
const
565 for (
int i = 0;
i <
data.size(); ++
i) {
567 NSString *urlString = [[[NSString alloc] initWithBytesNoCopy:(
void *)
a.data()
length:
a.size()
568 encoding:NSUTF8StringEncoding freeWhenDone:NO] autorelease];
569 NSURL *nsurl = [NSURL URLWithString:urlString];
572 if ([nsurl isFileReferenceURL]) {
573 url = QUrl::fromNSURL([nsurl filePathURL]);
575 url = QUrl::fromNSURL(nsurl);
591 QList<QByteArray>
ret;
595 for (
int i = 0;
i < urls.size(); ++
i) {
621 const QString &uti)
const override;
623 const QString &uti)
const override;
628 if (
mime.startsWith(
"text/uri-list"_L1))
629 return "public.url"_L1;
635 if (uti ==
"public.url"_L1)
636 return "text/uri-list"_L1;
641 const QList<QByteArray> &
data,
const QString &uti)
const
647 for (
int i=0;
i<
data.size(); ++
i) {
660 QList<QByteArray>
ret;
665 for (
int i=0;
i<urls.size(); ++
i) {
685 const QString &uti)
const override;
687 const QString &uti)
const override;
692 if (
mime.startsWith(
"text/vcard"_L1))
693 return "public.vcard"_L1;
699 if (uti ==
"public.vcard"_L1)
700 return "text/vcard"_L1;
705 const QList<QByteArray> &
data,
const QString &uti)
const
710 if (uti ==
"public.vcard"_L1) {
711 for (
int i=0;
i<
data.size(); ++
i)
720 QList<QByteArray>
ret;
724 if (
mime ==
"text/vcard"_L1)
738 const QString &uti)
const override;
740 const QString &uti)
const override;
745 if (
mime.startsWith(
"application/x-qt-image"_L1))
746 return "public.tiff"_L1;
752 if (uti ==
"public.tiff"_L1)
753 return "application/x-qt-image"_L1;
758 const QList<QByteArray> &
data,
const QString &uti)
const
760 if (
data.count() > 1)
761 qWarning(
"QMacMimeTiff: Cannot handle multiple member data");
766 QCFType<CFDataRef> tiffData =
data.first().toRawCFData();
767 QCFType<CGImageSourceRef> imageSource = CGImageSourceCreateWithData(tiffData, 0);
769 if (QCFType<CGImageRef>
image = CGImageSourceCreateImageAtIndex(imageSource, 0, 0))
779 return QList<QByteArray>();
781 QCFType<CFMutableDataRef>
data = CFDataCreateMutable(0, 0);
782 QCFType<CGImageDestinationRef> imageDestination = CGImageDestinationCreateWithData(
data,
783 (CFStringRef)UTTypeTIFF.identifier, 1, 0);
785 if (!imageDestination)
786 return QList<QByteArray>();
789 NSDictionary *
props = @{
790 static_cast<NSString *
>(kCGImagePropertyPixelWidth): @(
img.width()),
791 static_cast<NSString *
>(kCGImagePropertyPixelHeight): @(
img.height())
795 static_cast<CFDictionaryRef
>(
props));
796 CGImageDestinationFinalize(imageDestination);
798 return QList<QByteArray>() << QByteArray::fromCFData(
data);
char at(qsizetype i) const
Returns the byte at index position i in the byte array.
QByteArray first(qsizetype n) const &
QList< T > toList() const noexcept
qsizetype count() const noexcept
void append(parameter_type t)
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
int count(const QMimeData *mimeData) const override
Returns the item count for the given mimeData.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QList< QUrl > urls() const
Returns a list of URLs contained within the MIME data object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString left(qsizetype n) const &
qsizetype indexOf(QLatin1StringView s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
QString & replace(qsizetype i, qsizetype len, QChar after)
QString mid(qsizetype position, qsizetype n=-1) const &
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString toLower() const &
QString & append(QChar c)
QString normalized(NormalizationForm mode, QChar::UnicodeVersion version=QChar::Unicode_Unassigned) const
Returns the string in the given Unicode normalization mode, according to the given version of the Uni...
QString host(ComponentFormattingOptions=FullyDecoded) const
Returns the host of the URL if it is defined; otherwise an empty string is returned.
QByteArray toEncoded(FormattingOptions options=FullyEncoded) const
Returns the encoded representation of the URL if it's valid; otherwise an empty QByteArray is returne...
QString scheme() const
Returns the scheme of the URL.
void setScheme(const QString &scheme)
Sets the scheme of the URL to scheme.
void setHost(const QString &host, ParsingMode mode=DecodedMode)
Sets the host of the URL to host.
void setPath(const QString &path, ParsingMode mode=DecodedMode)
Sets the path of the URL to path.
static QUrl fromEncoded(QByteArrayView input, ParsingMode mode=TolerantMode)
Parses input and returns the corresponding QUrl.
QString path(ComponentFormattingOptions options=FullyDecoded) const
Returns the path of the URL.
The QUtiMimeConverter class converts between a MIME type and a \l{https://developer....
bool canConvert(const QString &mime, const QString &uti) const
Returns true if the converter can convert (both ways) between mime and uti; otherwise returns false.
virtual ~QUtiMimeConverter()
Destroys a conversion object, removing it from the global list of available converters.
QUtiMimeConverter()
Constructs a new conversion object and adds it to the globally accessed list of available converters.
virtual int count(const QMimeData *mimeData) const
Returns the item count for the given mimeData.
void unregisterMimeConverter(QUtiMimeConverter *macMime)
void registerBuiltInTypes()
void registerMimeConverter(QUtiMimeConverter *macMime)
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLenum GLsizei length
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLsizei const GLenum * props
#define qPrintable(string)
QImage qt_mac_toQImage(CGImageRef image)
CGImageRef qt_mac_toCGImage(const QImage &qImage)
QUrl url("example.com")
[constructor-url-reference]
application x qt windows mime
[2]