1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the plugins of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
40
****************************************************************************/
42
#include "qwindowsinternalmimedata.h"
43
#include "qwindowscontext.h"
44
#include "qplatformfunctions_wince.h"
45
#include "qwindowsmime.h"
48
\class QWindowsInternalMimeDataBase
49
\brief Base for implementations of QInternalMimeData using a IDataObject COM object.
51
In clipboard handling and Drag and drop, static instances
52
of QInternalMimeData implementations are kept and passed to the client.
54
QInternalMimeData provides virtuals that query the formats and retrieve
55
mime data on demand when the client invokes functions like QMimeData::hasHtml(),
56
QMimeData::html() on the instance returned. Otherwise, expensive
57
construction of a new QMimeData object containing all possible
58
formats would have to be done in each call to mimeData().
60
The base class introduces new virtuals to obtain and release
61
the instances IDataObject from the clipboard or Drag and Drop and
62
does conversion using QWindowsMime classes.
64
\sa QInternalMimeData, QWindowsMime, QWindowsMimeConverter
66
\ingroup qt-lighthouse-win
69
bool QWindowsInternalMimeData::hasFormat_sys(const QString &mime) const
71
IDataObject *pDataObj = retrieveDataObject();
75
const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter();
76
const bool has = mc.converterToMime(mime, pDataObj) != 0;
77
releaseDataObject(pDataObj);
78
if (QWindowsContext::verboseOLE)
79
qDebug() << __FUNCTION__ << mime << has;
83
QStringList QWindowsInternalMimeData::formats_sys() const
85
IDataObject *pDataObj = retrieveDataObject();
89
const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter();
90
const QStringList fmts = mc.allMimesForFormats(pDataObj);
91
releaseDataObject(pDataObj);
92
if (QWindowsContext::verboseOLE)
93
qDebug() << __FUNCTION__ << fmts;
97
QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType,
98
QVariant::Type type) const
100
IDataObject *pDataObj = retrieveDataObject();
105
const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter();
106
if (const QWindowsMime *converter = mc.converterToMime(mimeType, pDataObj))
107
result = converter->convertToMime(mimeType, pDataObj, type);
108
releaseDataObject(pDataObj);
109
if (QWindowsContext::verboseOLE) {
110
QDebug nospace = qDebug().nospace();
111
nospace << __FUNCTION__ << ' ' << mimeType << ' ' << type
112
<< " returns " << result.type();
113
if (result.type() != QVariant::ByteArray)
114
nospace << ' ' << result;