dbus-cxx logo

interface.h

Go to the documentation of this file.
00001 
00002 // -*- c++ -*-
00003 /* Do not edit! -- generated file */
00004 
00005 #ifndef DBUSCXXINTERFACE_H
00006 #define DBUSCXXINTERFACE_H
00007 
00008 #include <sigc++/sigc++.h>
00009 
00010 #include <string>
00011 #include <map>
00012 #include <set>
00013 
00014 #include <dbus-cxx/methodbase.h>
00015 #include <dbus-cxx/method.h>
00016 #include <dbus-cxx/dbus_signal.h>
00017 
00018 
00019 namespace DBus {
00020 
00021   class Object;
00022 
00031   class Interface
00032   {
00033     protected:
00034       Interface(const std::string& name);
00035 
00036     public:
00037       typedef DBusCxxPointer<Interface> pointer;
00038 
00039       typedef DBusCxxWeakPointer<Interface> weak_pointer;
00040       
00041       typedef std::multimap<std::string, MethodBase::pointer> Methods;
00042 
00043       typedef std::set<signal_base::pointer> Signals;
00044 
00045       static pointer create( const std::string& name = std::string() );
00046 
00047       virtual ~Interface();
00048 
00055       Object* object() const;
00056 
00058       Path path() const;
00059 
00061       DBusCxxPointer<Connection> connection() const;
00062 
00063       HandlerResult handle_call_message( DBusCxxPointer<Connection> connection, CallMessage::const_pointer message );
00064 
00065       const std::string& name() const;
00066 
00067       void set_name( const std::string& new_name );
00068 
00069       const Methods& methods() const;
00070 
00072       MethodBase::pointer method( const std::string& name ) const;
00073 
00074       template <class T_return>
00075       DBusCxxPointer<Method<T_return> > create_method( const std::string& name )
00076       {
00077         DBusCxxPointer< Method<T_return> > method;
00078         method = Method<T_return>::create(name);
00079         this->add_method( method );
00080         return method;
00081       }
00082       
00083       template <class T_return, class T_arg1>
00084       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& name )
00085       {
00086         DBusCxxPointer< Method<T_return, T_arg1> > method;
00087         method = Method<T_return, T_arg1>::create(name);
00088         this->add_method( method );
00089         return method;
00090       }
00091       
00092       template <class T_return, class T_arg1,class T_arg2>
00093       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& name )
00094       {
00095         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00096         method = Method<T_return, T_arg1,T_arg2>::create(name);
00097         this->add_method( method );
00098         return method;
00099       }
00100       
00101       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00102       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> > create_method( const std::string& name )
00103       {
00104         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00105         method = Method<T_return, T_arg1,T_arg2,T_arg3>::create(name);
00106         this->add_method( method );
00107         return method;
00108       }
00109       
00110       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00111       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > create_method( const std::string& name )
00112       {
00113         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00114         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>::create(name);
00115         this->add_method( method );
00116         return method;
00117       }
00118       
00119       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00120       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > create_method( const std::string& name )
00121       {
00122         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00123         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::create(name);
00124         this->add_method( method );
00125         return method;
00126       }
00127       
00128       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00129       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > create_method( const std::string& name )
00130       {
00131         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00132         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::create(name);
00133         this->add_method( method );
00134         return method;
00135       }
00136       
00137       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
00138       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_method( const std::string& name )
00139       {
00140         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00141         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(name);
00142         this->add_method( method );
00143         return method;
00144       }
00145       
00146 
00147 
00148       template <class T_return>
00149       DBusCxxPointer<Method<T_return> > create_method( const std::string& name, sigc::slot0<T_return> slot )
00150       {
00151         DBusCxxPointer< Method<T_return> > method;
00152         method = Method<T_return>::create(name);
00153         method->set_method( slot );
00154         this->add_method( method );
00155         return method;
00156       }
00157       
00158       template <class T_return, class T_arg1>
00159       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& name, sigc::slot1<T_return, T_arg1> slot )
00160       {
00161         DBusCxxPointer< Method<T_return, T_arg1> > method;
00162         method = Method<T_return, T_arg1>::create(name);
00163         method->set_method( slot );
00164         this->add_method( method );
00165         return method;
00166       }
00167       
00168       template <class T_return, class T_arg1,class T_arg2>
00169       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00170       {
00171         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00172         method = Method<T_return, T_arg1,T_arg2>::create(name);
00173         method->set_method( slot );
00174         this->add_method( method );
00175         return method;
00176       }
00177       
00178       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00179       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> > create_method( const std::string& name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot )
00180       {
00181         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00182         method = Method<T_return, T_arg1,T_arg2,T_arg3>::create(name);
00183         method->set_method( slot );
00184         this->add_method( method );
00185         return method;
00186       }
00187       
00188       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00189       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > create_method( const std::string& name, sigc::slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot )
00190       {
00191         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00192         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>::create(name);
00193         method->set_method( slot );
00194         this->add_method( method );
00195         return method;
00196       }
00197       
00198       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00199       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > create_method( const std::string& name, sigc::slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot )
00200       {
00201         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00202         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::create(name);
00203         method->set_method( slot );
00204         this->add_method( method );
00205         return method;
00206       }
00207       
00208       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00209       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > create_method( const std::string& name, sigc::slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot )
00210       {
00211         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00212         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::create(name);
00213         method->set_method( slot );
00214         this->add_method( method );
00215         return method;
00216       }
00217       
00218       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
00219       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_method( const std::string& name, sigc::slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot )
00220       {
00221         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00222         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(name);
00223         method->set_method( slot );
00224         this->add_method( method );
00225         return method;
00226       }
00227       
00228 
00230       bool add_method( MethodBase::pointer method );
00231 
00233       void remove_method( const std::string& name );
00234 
00236       bool has_method( const std::string& name ) const;
00237 
00242       bool add_signal( signal_base::pointer signal );
00243 
00250       bool remove_signal( signal_base::pointer signal );
00251 
00255       bool remove_signal( const std::string& name );
00256 
00260       bool has_signal( signal_base::pointer signal ) const;
00261 
00263       bool has_signal( const std::string& name ) const;
00264 
00265       template <class T_return>
00266       DBusCxxPointer<signal<T_return> > create_signal( const std::string& name )
00267       {
00268         DBusCxxPointer<DBus::signal<T_return> > sig;
00269         sig = DBus::signal<T_return>::create(m_name, name);
00270         if ( this->add_signal(sig) ) return sig;
00271         return DBusCxxPointer<DBus::signal<T_return> >();
00272       }
00273       
00274       template <class T_return, class T_arg1>
00275       DBusCxxPointer<signal<T_return, T_arg1> > create_signal( const std::string& name )
00276       {
00277         DBusCxxPointer<DBus::signal<T_return, T_arg1> > sig;
00278         sig = DBus::signal<T_return, T_arg1>::create(m_name, name);
00279         if ( this->add_signal(sig) ) return sig;
00280         return DBusCxxPointer<DBus::signal<T_return, T_arg1> >();
00281       }
00282       
00283       template <class T_return, class T_arg1,class T_arg2>
00284       DBusCxxPointer<signal<T_return, T_arg1,T_arg2> > create_signal( const std::string& name )
00285       {
00286         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2> > sig;
00287         sig = DBus::signal<T_return, T_arg1,T_arg2>::create(m_name, name);
00288         if ( this->add_signal(sig) ) return sig;
00289         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2> >();
00290       }
00291       
00292       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00293       DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3> > create_signal( const std::string& name )
00294       {
00295         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3> > sig;
00296         sig = DBus::signal<T_return, T_arg1,T_arg2,T_arg3>::create(m_name, name);
00297         if ( this->add_signal(sig) ) return sig;
00298         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3> >();
00299       }
00300       
00301       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00302       DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > create_signal( const std::string& name )
00303       {
00304         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > sig;
00305         sig = DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4>::create(m_name, name);
00306         if ( this->add_signal(sig) ) return sig;
00307         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >();
00308       }
00309       
00310       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00311       DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > create_signal( const std::string& name )
00312       {
00313         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > sig;
00314         sig = DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::create(m_name, name);
00315         if ( this->add_signal(sig) ) return sig;
00316         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >();
00317       }
00318       
00319       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00320       DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > create_signal( const std::string& name )
00321       {
00322         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > sig;
00323         sig = DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::create(m_name, name);
00324         if ( this->add_signal(sig) ) return sig;
00325         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >();
00326       }
00327       
00328       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
00329       DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_signal( const std::string& name )
00330       {
00331         DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00332         sig = DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(m_name, name);
00333         if ( this->add_signal(sig) ) return sig;
00334         return DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >();
00335       }
00336       
00337 
00338 
00340       const Signals& signals();
00341 
00347       signal_base::pointer signal(const std::string& signal_name);
00348 
00350       sigc::signal<void,const std::string&/*old name*/,const std::string&/*new name*/> signal_name_changed();
00351 
00353       sigc::signal<void,MethodBase::pointer> signal_method_added();
00354 
00356       sigc::signal<void,MethodBase::pointer> signal_method_removed();
00357 
00359       std::string introspect(int space_depth=0) const;
00360 
00361     private:
00362 
00363       Object* m_object;
00364       
00365     protected:
00366 
00367       friend class Object;
00368 
00369       void set_object( Object* object );
00370 
00371       std::string m_name;
00372       
00373       Methods m_methods;
00374 
00375       Signals m_signals;
00376 
00377       mutable pthread_rwlock_t m_methods_rwlock;
00378 
00379       mutable pthread_rwlock_t m_signals_rwlock;
00380 
00382       pthread_mutex_t m_name_mutex;
00383 
00384       sigc::signal<void,const std::string&,const std::string&> m_signal_name_changed;
00385       
00386       sigc::signal<void,MethodBase::pointer> m_signal_method_added;
00387       
00388       sigc::signal<void,MethodBase::pointer> m_signal_method_removed;
00389 
00390       typedef std::map<MethodBase::pointer,sigc::connection> MethodSignalNameConnections;
00391 
00392       MethodSignalNameConnections m_method_signal_name_connections;
00393 
00394       void on_method_name_changed(const std::string& oldname, const std::string& newname, MethodBase::pointer method);
00395 
00396       void set_connection(DBusCxxPointer<Connection> conn);
00397 
00398       void set_path( const std::string& new_path );
00399 
00400   };
00401 
00402 } /* namespace DBus */
00403 
00404 #endif /* DBUS_CXX_INTERFACE_H */
00405 

Generated on Wed Sep 30 11:14:35 2009 for dbus-cxx by doxygen 1.6.1