00001
00023 #ifndef _TelepathyQt_presence_h_HEADER_GUARD_
00024 #define _TelepathyQt_presence_h_HEADER_GUARD_
00025
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032
00033 namespace Tp
00034 {
00035
00036 class TP_QT_EXPORT Presence
00037 {
00038 public:
00039 Presence();
00040 Presence(const SimplePresence &sp);
00041 Presence(ConnectionPresenceType type, const QString &status, const QString &statusMessage);
00042 Presence(const Presence &other);
00043 ~Presence();
00044
00045 static Presence available(const QString &statusMessage = QString());
00046 static Presence away(const QString &statusMessage = QString());
00047 static Presence brb(const QString &statusMessage = QString());
00048 static Presence busy(const QString &statusMessage = QString());
00049 static Presence xa(const QString &statusMessage = QString());
00050 static Presence hidden(const QString &statusMessage = QString());
00051 static Presence offline(const QString &statusMessage = QString());
00052
00053 bool isValid() const { return mPriv.constData() != 0; }
00054
00055 Presence &operator=(const Presence &other);
00056 bool operator==(const Presence &other) const;
00057 bool operator!=(const Presence &other) const;
00058
00059 ConnectionPresenceType type() const;
00060 QString status() const;
00061 QString statusMessage() const;
00062 void setStatus(const SimplePresence &value);
00063 void setStatus(ConnectionPresenceType type, const QString &status,
00064 const QString &statusMessage);
00065 void setStatusMessage(const QString &statusMessage);
00066
00067 SimplePresence barePresence() const;
00068
00069 private:
00070 struct Private;
00071 friend struct Private;
00072 QSharedDataPointer<Private> mPriv;
00073 };
00074
00075 class TP_QT_EXPORT PresenceSpec
00076 {
00077 public:
00078 PresenceSpec();
00079 PresenceSpec(const QString &status, const SimpleStatusSpec &spec);
00080 PresenceSpec(const PresenceSpec &other);
00081 ~PresenceSpec();
00082
00083 bool isValid() const { return mPriv.constData() != 0; }
00084
00085 PresenceSpec &operator=(const PresenceSpec &other);
00086 bool operator==(const PresenceSpec &other) const;
00087 bool operator!=(const PresenceSpec &other) const;
00088 bool operator<(const PresenceSpec &other) const;
00089
00090 Presence presence(const QString &statusMessage = QString()) const;
00091 bool maySetOnSelf() const;
00092 bool canHaveStatusMessage() const;
00093
00094 SimpleStatusSpec bareSpec() const;
00095
00096 private:
00097 struct Private;
00098 friend struct Private;
00099 QSharedDataPointer<Private> mPriv;
00100 };
00101
00102 class TP_QT_EXPORT PresenceSpecList : public QList<PresenceSpec>
00103 {
00104 public:
00105 PresenceSpecList() { }
00106 PresenceSpecList(const SimpleStatusSpecMap &specMap)
00107 {
00108 SimpleStatusSpecMap::const_iterator i = specMap.constBegin();
00109 SimpleStatusSpecMap::const_iterator end = specMap.end();
00110 for (; i != end; ++i) {
00111 QString status = i.key();
00112 SimpleStatusSpec spec = i.value();
00113 append(PresenceSpec(status, spec));
00114 }
00115 }
00116 PresenceSpecList(const QList<PresenceSpec> &other)
00117 : QList<PresenceSpec>(other)
00118 {
00119 }
00120
00121 QMap<QString, PresenceSpec> toMap() const
00122 {
00123 QMap<QString, PresenceSpec> ret;
00124 Q_FOREACH (const PresenceSpec &spec, *this) {
00125 ret.insert(spec.presence().status(), spec);
00126 }
00127 return ret;
00128 }
00129 };
00130
00131 }
00132
00133 Q_DECLARE_METATYPE(Tp::Presence);
00134 Q_DECLARE_METATYPE(Tp::PresenceSpec);
00135
00136 #endif