/****************************************************************************+ −
**+ −
** 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 ActiveQt framework of the Qt Toolkit.+ −
**+ −
** $QT_BEGIN_LICENSE:BSD$+ −
** You may use this file under the terms of the BSD license as follows:+ −
**+ −
** "Redistribution and use in source and binary forms, with or without+ −
** modification, are permitted provided that the following conditions are+ −
** met:+ −
** * Redistributions of source code must retain the above copyright+ −
** notice, this list of conditions and the following disclaimer.+ −
** * Redistributions in binary form must reproduce the above copyright+ −
** notice, this list of conditions and the following disclaimer in+ −
** the documentation and/or other materials provided with the+ −
** distribution.+ −
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor+ −
** the names of its contributors may be used to endorse or promote+ −
** products derived from this software without specific prior written+ −
** permission.+ −
**+ −
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+ −
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+ −
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+ −
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+ −
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+ −
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+ −
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+ −
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+ −
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+ −
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+ −
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."+ −
** $QT_END_LICENSE$+ −
**+ −
****************************************************************************/+ −
+ −
#ifndef QAXBASE_H+ −
#define QAXBASE_H+ −
+ −
#include <QtCore/qdatastream.h>+ −
#include <QtCore/qmap.h>+ −
#include <QtCore/qobject.h>+ −
#include <QtCore/qvariant.h>+ −
+ −
struct IUnknown;+ −
struct IDispatch;+ −
+ −
QT_BEGIN_HEADER+ −
+ −
QT_BEGIN_NAMESPACE+ −
+ −
QT_MODULE(ActiveQt)+ −
+ −
#ifndef QT_NO_WIN_ACTIVEQT+ −
+ −
struct QUuid;+ −
class QAxEventSink;+ −
class QAxObject;+ −
class QAxBasePrivate;+ −
struct QAxMetaObject;+ −
+ −
class QAxBase+ −
{+ −
QDOC_PROPERTY(QString control READ control WRITE setControl)+ −
+ −
public:+ −
typedef QMap<QString, QVariant> PropertyBag;+ −
+ −
QAxBase(IUnknown *iface = 0);+ −
virtual ~QAxBase();+ −
+ −
QString control() const;+ −
+ −
long queryInterface(const QUuid &, void**) const;+ −
+ −
QVariant dynamicCall(const char *name, const QVariant &v1 = QVariant(), + −
const QVariant &v2 = QVariant(),+ −
const QVariant &v3 = QVariant(),+ −
const QVariant &v4 = QVariant(),+ −
const QVariant &v5 = QVariant(),+ −
const QVariant &v6 = QVariant(),+ −
const QVariant &v7 = QVariant(),+ −
const QVariant &v8 = QVariant());+ −
QVariant dynamicCall(const char *name, QList<QVariant> &vars);+ −
QAxObject *querySubObject(const char *name, const QVariant &v1 = QVariant(),+ −
const QVariant &v2 = QVariant(),+ −
const QVariant &v3 = QVariant(),+ −
const QVariant &v4 = QVariant(),+ −
const QVariant &v5 = QVariant(),+ −
const QVariant &v6 = QVariant(),+ −
const QVariant &v7 = QVariant(),+ −
const QVariant &v8 = QVariant());+ −
QAxObject* querySubObject(const char *name, QList<QVariant> &vars);+ −
+ −
virtual const QMetaObject *metaObject() const;+ −
virtual int qt_metacall(QMetaObject::Call, int, void **);+ −
+ −
virtual QObject *qObject() const = 0;+ −
virtual const char *className() const = 0;+ −
+ −
PropertyBag propertyBag() const;+ −
void setPropertyBag(const PropertyBag&);+ −
+ −
QString generateDocumentation();+ −
+ −
virtual bool propertyWritable(const char*) const;+ −
virtual void setPropertyWritable(const char*, bool);+ −
+ −
bool isNull() const;+ −
+ −
QStringList verbs() const;+ −
+ −
QVariant asVariant() const;+ −
+ −
#ifdef qdoc+ −
Q_SIGNALS:+ −
void signal(const QString&,int,void*);+ −
void propertyChanged(const QString&);+ −
void exception(int,const QString&,const QString&,const QString&);+ −
#endif+ −
+ −
public:+ −
virtual void clear();+ −
bool setControl(const QString&);+ −
+ −
void disableMetaObject();+ −
void disableClassInfo();+ −
void disableEventSink();+ −
+ −
protected:+ −
virtual bool initialize(IUnknown** ptr);+ −
bool initializeRemote(IUnknown** ptr);+ −
bool initializeLicensed(IUnknown** ptr);+ −
bool initializeActive(IUnknown** ptr);+ −
bool initializeFromFile(IUnknown** ptr);+ −
+ −
void internalRelease();+ −
void initializeFrom(QAxBase *that);+ −
void connectNotify();+ −
long indexOfVerb(const QString &verb) const;+ −
+ −
private:+ −
friend class QAxEventSink;+ −
friend void *qax_createObjectWrapper(int, IUnknown*);+ −
bool initializeLicensedHelper(void *factory, const QString &key, IUnknown **ptr);+ −
QAxBasePrivate *d;+ −
QAxMetaObject *internalMetaObject() const;+ −
+ −
virtual const QMetaObject *parentMetaObject() const = 0;+ −
int internalProperty(QMetaObject::Call, int index, void **v);+ −
int internalInvoke(QMetaObject::Call, int index, void **v);+ −
bool dynamicCallHelper(const char *name, void *out, QList<QVariant> &var, QByteArray &type);+ −
+ −
static QMetaObject staticMetaObject;+ −
};+ −
+ −
#if defined Q_CC_MSVC && _MSC_VER < 1300+ −
template <> inline QAxBase *qobject_cast_helper<QAxBase*>(const QObject *o, QAxBase *)+ −
#else+ −
template <> inline QAxBase *qobject_cast<QAxBase*>(const QObject *o)+ −
#endif+ −
{+ −
void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxBase") : 0;+ −
return (QAxBase*)(result);+ −
}+ −
+ −
#if defined Q_CC_MSVC && _MSC_VER < 1300+ −
template <> inline QAxBase *qobject_cast_helper<QAxBase*>(QObject *o, QAxBase *)+ −
#else+ −
template <> inline QAxBase *qobject_cast<QAxBase*>(QObject *o)+ −
#endif+ −
{+ −
void *result = o ? o->qt_metacast("QAxBase") : 0;+ −
return (QAxBase*)(result);+ −
}+ −
+ −
extern QString qax_generateDocumentation(QAxBase *);+ −
+ −
inline QString QAxBase::generateDocumentation()+ −
{+ −
return qax_generateDocumentation(this);+ −
}+ −
+ −
#ifndef QT_NO_DATASTREAM+ −
inline QDataStream &operator >>(QDataStream &s, QAxBase &c)+ −
{+ −
QAxBase::PropertyBag bag;+ −
c.qObject()->blockSignals(true);+ −
QString control;+ −
s >> control;+ −
c.setControl(control);+ −
s >> bag;+ −
c.setPropertyBag(bag);+ −
c.qObject()->blockSignals(false);+ −
+ −
return s;+ −
}+ −
+ −
inline QDataStream &operator <<(QDataStream &s, const QAxBase &c)+ −
{+ −
QAxBase::PropertyBag bag = c.propertyBag();+ −
s << c.control();+ −
s << bag;+ −
+ −
return s;+ −
}+ −
#endif // QT_NO_DATASTREAM+ −
+ −
QT_END_NAMESPACE+ −
+ −
#ifndef Q_COM_METATYPE_DECLARED+ −
#define Q_COM_METATYPE_DECLARED+ −
+ −
Q_DECLARE_METATYPE(IUnknown*)+ −
Q_DECLARE_METATYPE(IDispatch*)+ −
+ −
#endif+ −
+ −
#endif // QT_NO_WIN_ACTIVEQT+ −
+ −
QT_END_HEADER+ −
+ −
#endif // QAXBASE_H+ −