diff -r 000000000000 -r 1918ee327afb src/dbus/qdbusargument.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dbus/qdbusargument.h Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,383 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDBus module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDBUSARGUMENT_H +#define QDBUSARGUMENT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(DBus) + +class QDBusArgumentPrivate; +class QDBusDemarshaller; +class QDBusMarshaller; +class QDBUS_EXPORT QDBusArgument +{ +public: + enum ElementType { + BasicType, + VariantType, + ArrayType, + StructureType, + MapType, + MapEntryType, + UnknownType = -1 + }; + + QDBusArgument(); + QDBusArgument(const QDBusArgument &other); + QDBusArgument &operator=(const QDBusArgument &other); + ~QDBusArgument(); + + // used for marshalling (Qt -> D-BUS) + QDBusArgument &operator<<(uchar arg); + QDBusArgument &operator<<(bool arg); + QDBusArgument &operator<<(short arg); + QDBusArgument &operator<<(ushort arg); + QDBusArgument &operator<<(int arg); + QDBusArgument &operator<<(uint arg); + QDBusArgument &operator<<(qlonglong arg); + QDBusArgument &operator<<(qulonglong arg); + QDBusArgument &operator<<(double arg); + QDBusArgument &operator<<(const QString &arg); + QDBusArgument &operator<<(const QDBusVariant &arg); + QDBusArgument &operator<<(const QDBusObjectPath &arg); + QDBusArgument &operator<<(const QDBusSignature &arg); + QDBusArgument &operator<<(const QStringList &arg); + QDBusArgument &operator<<(const QByteArray &arg); + + void beginStructure(); + void endStructure(); + void beginArray(int elementMetaTypeId); + void endArray(); + void beginMap(int keyMetaTypeId, int valueMetaTypeId); + void endMap(); + void beginMapEntry(); + void endMapEntry(); + + void appendVariant(const QVariant &v); + + // used for de-marshalling (D-BUS -> Qt) + QString currentSignature() const; + ElementType currentType() const; + + const QDBusArgument &operator>>(uchar &arg) const; + const QDBusArgument &operator>>(bool &arg) const; + const QDBusArgument &operator>>(short &arg) const; + const QDBusArgument &operator>>(ushort &arg) const; + const QDBusArgument &operator>>(int &arg) const; + const QDBusArgument &operator>>(uint &arg) const; + const QDBusArgument &operator>>(qlonglong &arg) const; + const QDBusArgument &operator>>(qulonglong &arg) const; + const QDBusArgument &operator>>(double &arg) const; + const QDBusArgument &operator>>(QString &arg) const; + const QDBusArgument &operator>>(QDBusVariant &arg) const; + const QDBusArgument &operator>>(QDBusObjectPath &arg) const; + const QDBusArgument &operator>>(QDBusSignature &arg) const; + const QDBusArgument &operator>>(QStringList &arg) const; + const QDBusArgument &operator>>(QByteArray &arg) const; + + void beginStructure() const; + void endStructure() const; + void beginArray() const; + void endArray() const; + void beginMap() const; + void endMap() const; + void beginMapEntry() const; + void endMapEntry() const; + bool atEnd() const; + + QVariant asVariant() const; + +protected: + QDBusArgument(QDBusArgumentPrivate *d); + friend class QDBusArgumentPrivate; + mutable QDBusArgumentPrivate *d; +}; + +template inline T qdbus_cast(const QDBusArgument &arg +#ifndef Q_QDOC +, T * = 0 +#endif + ) +{ + T item; + arg >> item; + return item; +} + +template inline T qdbus_cast(const QVariant &v +#ifndef Q_QDOC +, T * = 0 +#endif + ) +{ + int id = v.userType(); + if (id == qMetaTypeId()) + return qdbus_cast(qvariant_cast(v)); + else + return qvariant_cast(v); +} + +// specialise for QVariant, allowing it to be used in place of QDBusVariant +template<> inline QVariant qdbus_cast(const QDBusArgument &arg, QVariant *) +{ + QDBusVariant item; + arg >> item; + return item.variant(); +} +template<> inline QVariant qdbus_cast(const QVariant &v, QVariant *) +{ + return qdbus_cast(v).variant(); +} + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QVariant &v); + +// QVariant types +#ifndef QDBUS_NO_SPECIALTYPES + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QDate &date); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QDate &date); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QTime &time); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QTime &time); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QDateTime &dt); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QDateTime &dt); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QRect &rect); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QRect &rect); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QRectF &rect); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QRectF &rect); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QSize &size); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QSize &size); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QSizeF &size); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QSizeF &size); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QPoint &pt); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QPoint &pt); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QPointF &pt); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QPointF &pt); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QLine &line); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QLine &line); + +QDBUS_EXPORT const QDBusArgument &operator>>(const QDBusArgument &a, QLineF &line); +QDBUS_EXPORT QDBusArgument &operator<<(QDBusArgument &a, const QLineF &line); +#endif + +template