Home · All Classes · All Namespaces · Modules · Functions · Files

channel-factory.h

00001 
00023 #ifndef _TelepathyQt4_channel_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt4_channel_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TELEPATHY_QT4_HEADER
00027 #error IN_TELEPATHY_QT4_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt4/DBusProxyFactory>
00031 #include <TelepathyQt4/SharedPtr>
00032 #include <TelepathyQt4/Types>
00033 
00034 // For Q_DISABLE_COPY
00035 #include <QtGlobal>
00036 #include <QString>
00037 #include <QVariantMap>
00038 
00039 class QDBusConnection;
00040 
00041 namespace Tp
00042 {
00043 
00044 class ChannelClassSpec;
00045 
00046 class TELEPATHY_QT4_EXPORT ChannelFactory : public DBusProxyFactory
00047 {
00048     Q_DISABLE_COPY(ChannelFactory)
00049 
00050 public:
00051 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00052     struct TELEPATHY_QT4_EXPORT Constructor : public RefCounted
00053     {
00054         virtual ~Constructor() {}
00055 
00056         virtual ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00057                 const QVariantMap &immutableProperties) const = 0;
00058     };
00059     typedef SharedPtr<Constructor> ConstructorPtr;
00060     typedef SharedPtr<const Constructor> ConstructorConstPtr;
00061 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00062 
00063     static ChannelFactoryPtr create(const QDBusConnection &bus);
00064 
00065     virtual ~ChannelFactory();
00066 
00067     Features featuresForTextChats(const QVariantMap &additionalProps = QVariantMap()) const;
00068     void addFeaturesForTextChats(const Features &features,
00069             const QVariantMap &additionalProps = QVariantMap());
00070 
00071     ConstructorConstPtr constructorForTextChats(
00072             const QVariantMap &additionalProps = QVariantMap()) const;
00073 
00074     template<typename Subclass>
00075     void setSubclassForTextChats(const QVariantMap &additionalProps = QVariantMap())
00076     {
00077         setConstructorForTextChats(SubclassCtor<Subclass>::create(), additionalProps);
00078     }
00079 
00080     void setConstructorForTextChats(const ConstructorConstPtr &ctor,
00081             const QVariantMap &additionalProps = QVariantMap());
00082 
00083     Features featuresForTextChatrooms(const QVariantMap &additionalProps = QVariantMap()) const;
00084     void addFeaturesForTextChatrooms(const Features &features,
00085             const QVariantMap &additionalProps = QVariantMap());
00086 
00087     ConstructorConstPtr constructorForTextChatrooms(
00088             const QVariantMap &additionalProps = QVariantMap()) const;
00089 
00090     template<typename Subclass>
00091     void setSubclassForTextChatrooms(const QVariantMap &additionalProps = QVariantMap())
00092     {
00093         setConstructorForTextChatrooms(SubclassCtor<Subclass>::create(), additionalProps);
00094     }
00095 
00096     void setConstructorForTextChatrooms(const ConstructorConstPtr &ctor,
00097             const QVariantMap &additionalProps = QVariantMap());
00098 
00099     Features featuresForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap()) const;
00100     void addFeaturesForStreamedMediaCalls(const Features &features,
00101             const QVariantMap &additionalProps = QVariantMap());
00102 
00103     ConstructorConstPtr constructorForStreamedMediaCalls(
00104             const QVariantMap &additionalProps = QVariantMap()) const;
00105 
00106     template<typename Subclass>
00107     void setSubclassForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap())
00108     {
00109         setConstructorForStreamedMediaCalls(SubclassCtor<Subclass>::create(), additionalProps);
00110     }
00111 
00112     void setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor,
00113             const QVariantMap &additionalProps = QVariantMap());
00114 
00115     Features featuresForRoomLists(const QVariantMap &additionalProps = QVariantMap()) const;
00116     void addFeaturesForRoomLists(const Features &features,
00117             const QVariantMap &additionalProps = QVariantMap());
00118 
00119     ConstructorConstPtr constructorForRoomLists(
00120             const QVariantMap &additionalProps = QVariantMap()) const;
00121 
00122     template<typename Subclass>
00123     void setSubclassForRoomLists(const QVariantMap &additionalProps = QVariantMap())
00124     {
00125         setConstructorForRoomLists(SubclassCtor<Subclass>::create(), additionalProps);
00126     }
00127 
00128     void setConstructorForRoomLists(const ConstructorConstPtr &ctor,
00129             const QVariantMap &additionalProps = QVariantMap());
00130 
00131     Features featuresForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00132     void addFeaturesForOutgoingFileTransfers(const Features &features,
00133             const QVariantMap &additionalProps = QVariantMap());
00134 
00135     ConstructorConstPtr constructorForOutgoingFileTransfers(
00136             const QVariantMap &additionalProps = QVariantMap()) const;
00137 
00138     template<typename Subclass>
00139     void setSubclassForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00140     {
00141         setConstructorForOutgoingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00142     }
00143 
00144     void setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor,
00145             const QVariantMap &additionalProps = QVariantMap());
00146 
00147     Features featuresForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00148     void addFeaturesForIncomingFileTransfers(const Features &features,
00149             const QVariantMap &additionalProps = QVariantMap());
00150 
00151     ConstructorConstPtr constructorForIncomingFileTransfers(
00152             const QVariantMap &additionalProps = QVariantMap()) const;
00153 
00154     template<typename Subclass>
00155     void setSubclassForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00156     {
00157         setConstructorForIncomingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00158     }
00159 
00160     void setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor,
00161             const QVariantMap &additionalProps = QVariantMap());
00162 
00163     Features featuresForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00164     void addFeaturesForOutgoingStreamTubes(const Features &features,
00165             const QVariantMap &additionalProps = QVariantMap());
00166 
00167     ConstructorConstPtr constructorForOutgoingStreamTubes(
00168             const QVariantMap &additionalProps = QVariantMap()) const;
00169 
00170     template<typename Subclass>
00171     void setSubclassForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00172     {
00173         setConstructorForOutgoingStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00174     }
00175 
00176     void setConstructorForOutgoingStreamTubes(const ConstructorConstPtr &ctor,
00177             const QVariantMap &additionalProps = QVariantMap());
00178 
00179     Features featuresForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00180     void addFeaturesForIncomingStreamTubes(const Features &features,
00181             const QVariantMap &additionalProps = QVariantMap());
00182 
00183     ConstructorConstPtr constructorForIncomingStreamTubes(
00184             const QVariantMap &additionalProps = QVariantMap()) const;
00185 
00186     template<typename Subclass>
00187     void setSubclassForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00188     {
00189         setConstructorForIncomingStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00190     }
00191 
00192     void setConstructorForIncomingStreamTubes(const ConstructorConstPtr &ctor,
00193             const QVariantMap &additionalProps = QVariantMap());
00194 
00195     Features featuresForContactSearches(const QVariantMap &additionalProps = QVariantMap()) const;
00196     void addFeaturesForContactSearches(const Features &features,
00197             const QVariantMap &additionalProps = QVariantMap());
00198 
00199     ConstructorConstPtr constructorForContactSearches(
00200             const QVariantMap &additionalProps = QVariantMap()) const;
00201 
00202     template<typename Subclass>
00203     void setSubclassForContactSearches(const QVariantMap &additionalProps = QVariantMap())
00204     {
00205         setConstructorForContactSearches(SubclassCtor<Subclass>::create(), additionalProps);
00206     }
00207 
00208     void setConstructorForContactSearches(const ConstructorConstPtr &ctor,
00209             const QVariantMap &additionalProps = QVariantMap());
00210 
00211     Features commonFeatures() const;
00212     void addCommonFeatures(const Features &features);
00213 
00214     ConstructorConstPtr fallbackConstructor() const;
00215 
00216     template <typename Subclass>
00217     void setFallbackSubclass()
00218     {
00219         setFallbackConstructor(SubclassCtor<Subclass>::create());
00220     }
00221 
00222     void setFallbackConstructor(const ConstructorConstPtr &ctor);
00223 
00224     Features featuresFor(const ChannelClassSpec &channelClass) const;
00225     void addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features);
00226 
00227     template <typename Subclass>
00228     void setSubclassFor(const ChannelClassSpec &channelClass)
00229     {
00230         setConstructorFor(channelClass, SubclassCtor<Subclass>::create());
00231     }
00232 
00233     ConstructorConstPtr constructorFor(const ChannelClassSpec &channelClass) const;
00234     void setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor);
00235 
00236     PendingReady *proxy(const ConnectionPtr &connection, const QString &channelPath,
00237             const QVariantMap &immutableProperties) const;
00238 
00239 protected:
00240     ChannelFactory(const QDBusConnection &bus);
00241 
00242 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00243     template <typename Subclass>
00244     struct SubclassCtor : public Constructor
00245     {
00246         static ConstructorPtr create()
00247         {
00248             return ConstructorPtr(new SubclassCtor<Subclass>());
00249         }
00250 
00251         virtual ~SubclassCtor() {}
00252 
00253         ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00254                 const QVariantMap &immutableProperties) const
00255         {
00256             return Subclass::create(conn, objectPath, immutableProperties);
00257         }
00258     };
00259 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00260 
00261     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const;
00262     // Nothing we'd like to prepare()
00263     virtual Features featuresFor(const DBusProxyPtr &proxy) const;
00264 
00265 private:
00266     struct Private;
00267     Private *mPriv;
00268 };
00269 
00270 } // Tp
00271 
00272 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt4 0.5.15