00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TelepathyQt4_cli_readiness_helper_h_HEADER_GUARD_
00023 #define _TelepathyQt4_cli_readiness_helper_h_HEADER_GUARD_
00024
00025 #ifndef IN_TELEPATHY_QT4_HEADER
00026 #error IN_TELEPATHY_QT4_HEADER
00027 #endif
00028
00029 #include <TelepathyQt4/Client/DBusProxy>
00030
00031 #include <QMap>
00032 #include <QSet>
00033 #include <QStringList>
00034
00035 namespace Telepathy
00036 {
00037 namespace Client
00038 {
00039
00040 class PendingReady;
00041
00042 class ReadinessHelper : public QObject
00043 {
00044 Q_OBJECT
00045
00046 public:
00047 typedef void (*IntrospectFunc)(void *data);
00048
00049 struct Introspectable {
00050 public:
00051 Introspectable()
00052 : introspectFunc(0),
00053 introspectFuncData(0)
00054 {
00055 }
00056
00057 Introspectable(const QSet<uint> &makesSenseForStatuses,
00058 const QSet<uint> &dependsOnFeatures,
00059 const QStringList &dependsOnInterfaces,
00060 IntrospectFunc introspectFunc,
00061 void *introspectFuncData)
00062 : makesSenseForStatuses(makesSenseForStatuses),
00063 dependsOnFeatures(dependsOnFeatures),
00064 dependsOnInterfaces(dependsOnInterfaces),
00065 introspectFunc(introspectFunc),
00066 introspectFuncData(introspectFuncData)
00067 {
00068 }
00069
00070 private:
00071 friend class ReadinessHelper;
00072
00073 QSet<uint> makesSenseForStatuses;
00074 QSet<uint> dependsOnFeatures;
00075 QStringList dependsOnInterfaces;
00076 IntrospectFunc introspectFunc;
00077 void *introspectFuncData;
00078 };
00079
00080 ReadinessHelper(DBusProxy *proxy,
00081 uint currentStatus,
00082 const QMap<uint, Introspectable> &introspectables,
00083 QObject *parent = 0);
00084 ~ReadinessHelper();
00085
00086 uint currentStatus() const;
00087 void setCurrentStatus(uint currentStatus);
00088
00089 QStringList interfaces() const;
00090 void setInterfaces(const QStringList &interfaces);
00091
00092 QSet<uint> requestedFeatures() const;
00093 QSet<uint> actualFeatures() const;
00094 QSet<uint> missingFeatures() const;
00095
00096 bool isReady(QSet<uint> features) const;
00097 PendingReady *becomeReady(QSet<uint> requestedFeatures);
00098
00099 void setIntrospectCompleted(uint feature, bool success);
00100
00101 Q_SIGNALS:
00102 void statusReady(uint status);
00103
00104 private Q_SLOTS:
00105 void iterateIntrospection();
00106
00107 void onProxyInvalidated(Telepathy::Client::DBusProxy *proxy,
00108 const QString &errorName, const QString &errorMessage);
00109
00110 private:
00111 struct Private;
00112 friend struct Private;
00113 Private *mPriv;
00114 };
00115
00116 }
00117 }
00118
00119 #endif