1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the QtDBus module 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//
43// W A R N I N G
44// -------------
45//
46// This file is not part of the public API. This header file may
47// change from version to version without notice, or even be
48// removed.
49//
50// We mean it.
51//
52//
53
54#ifndef QDBUSABSTRACTADAPTORPRIVATE_H
55#define QDBUSABSTRACTADAPTORPRIVATE_H
56
57#include <qdbusabstractadaptor.h>
58
59#include <QtCore/qobject.h>
60#include <QtCore/qmap.h>
61#include <QtCore/qhash.h>
62#include <QtCore/qreadwritelock.h>
63#include <QtCore/qvariant.h>
64#include <QtCore/qvector.h>
65#include "private/qobject_p.h"
66
67#define QCLASSINFO_DBUS_INTERFACE "D-Bus Interface"
68#define QCLASSINFO_DBUS_INTROSPECTION "D-Bus Introspection"
69
70#ifndef QT_NO_DBUS
71
72QT_BEGIN_NAMESPACE
73
74class QDBusAbstractAdaptor;
75class QDBusAdaptorConnector;
76class QDBusAdaptorManager;
77class QDBusConnectionPrivate;
78
79class QDBusAbstractAdaptorPrivate: public QObjectPrivate
80{
81 Q_DECLARE_PUBLIC(QDBusAbstractAdaptor)
82public:
83 QDBusAbstractAdaptorPrivate() : autoRelaySignals(false) {}
84 QString xml;
85 bool autoRelaySignals;
86
87 static QString retrieveIntrospectionXml(QDBusAbstractAdaptor *adaptor);
88 static void saveIntrospectionXml(QDBusAbstractAdaptor *adaptor, const QString &xml);
89};
90
91class QDBusAdaptorConnector: public QObject
92{
93 Q_OBJECT_FAKE
94
95public: // typedefs
96 struct AdaptorData
97 {
98 const char *interface;
99 QDBusAbstractAdaptor *adaptor;
100
101 inline bool operator<(const AdaptorData &other) const
102 { return QByteArray(interface) < other.interface; }
103 inline bool operator<(const QString &other) const
104 { return QLatin1String(interface) < other; }
105 inline bool operator<(const QByteArray &other) const
106 { return interface < other; }
107 };
108 typedef QVector<AdaptorData> AdaptorMap;
109
110public: // methods
111 explicit QDBusAdaptorConnector(QObject *parent);
112 ~QDBusAdaptorConnector();
113
114 void addAdaptor(QDBusAbstractAdaptor *adaptor);
115 void connectAllSignals(QObject *object);
116 void disconnectAllSignals(QObject *object);
117 void relay(QObject *sender, int id, void **);
118
119//public slots:
120 void relaySlot(void **);
121 void polish();
122
123protected:
124//signals:
125 void relaySignal(QObject *obj, const QMetaObject *metaObject, int sid, const QVariantList &args);
126
127public: // member variables
128 AdaptorMap adaptors;
129 bool waitingForPolish : 1;
130};
131
132extern QDBusAdaptorConnector *qDBusFindAdaptorConnector(QObject *object);
133extern QDBusAdaptorConnector *qDBusCreateAdaptorConnector(QObject *object);
134
135QT_END_NAMESPACE
136
137#endif // QT_NO_DBUS
138#endif // QDBUSABSTRACTADAPTORPRIVATE_H
139