~ubuntu-branches/ubuntu/wily/qtbase-opensource-src/wily

« back to all changes in this revision

Viewing changes to src/plugins/platforms/windows/qwindowsinternalmimedata.cpp

  • Committer: Package Import Robot
  • Author(s): Timo Jyrinki
  • Date: 2013-02-05 12:46:17 UTC
  • Revision ID: package-import@ubuntu.com-20130205124617-c8jouts182j002fx
Tags: upstream-5.0.1+dfsg
ImportĀ upstreamĀ versionĀ 5.0.1+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/legal
 
5
**
 
6
** This file is part of the plugins of the Qt Toolkit.
 
7
**
 
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.
 
16
**
 
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.
 
24
**
 
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.
 
28
**
 
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.
 
36
**
 
37
**
 
38
** $QT_END_LICENSE$
 
39
**
 
40
****************************************************************************/
 
41
 
 
42
#include "qwindowsinternalmimedata.h"
 
43
#include "qwindowscontext.h"
 
44
#include "qplatformfunctions_wince.h"
 
45
#include "qwindowsmime.h"
 
46
#include <QDebug>
 
47
/*!
 
48
    \class QWindowsInternalMimeDataBase
 
49
    \brief Base for implementations of QInternalMimeData using a IDataObject COM object.
 
50
 
 
51
    In clipboard handling and Drag and drop, static instances
 
52
    of QInternalMimeData implementations are kept and passed to the client.
 
53
 
 
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().
 
59
 
 
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.
 
63
 
 
64
    \sa QInternalMimeData, QWindowsMime, QWindowsMimeConverter
 
65
    \internal
 
66
    \ingroup qt-lighthouse-win
 
67
*/
 
68
 
 
69
bool QWindowsInternalMimeData::hasFormat_sys(const QString &mime) const
 
70
{
 
71
    IDataObject *pDataObj = retrieveDataObject();
 
72
    if (!pDataObj)
 
73
        return false;
 
74
 
 
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;
 
80
    return has;
 
81
}
 
82
 
 
83
QStringList QWindowsInternalMimeData::formats_sys() const
 
84
{
 
85
    IDataObject *pDataObj = retrieveDataObject();
 
86
    if (!pDataObj)
 
87
        return QStringList();
 
88
 
 
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;
 
94
    return fmts;
 
95
}
 
96
 
 
97
QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType,
 
98
                                                        QVariant::Type type) const
 
99
{
 
100
    IDataObject *pDataObj = retrieveDataObject();
 
101
    if (!pDataObj)
 
102
        return QVariant();
 
103
 
 
104
    QVariant result;
 
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;
 
115
    }
 
116
    return result;
 
117
}