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, class T_arg1=nil, class T_arg2=nil, class T_arg3=nil, class T_arg4=nil, class T_arg5=nil, class T_arg6=nil, class T_arg7=nil>
00075       DBusCxxPointer<Method<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_method( const std::string& name )
00076       {
00077         DBusCxxPointer< Method<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00078         method = Method<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(name);
00079         this->add_method( method );
00080         return method;
00081       }
00082 
00083       template <class T_return>
00084       DBusCxxPointer<Method<T_return> > create_method( const std::string& name, sigc::slot0<T_return> slot )
00085       {
00086         DBusCxxPointer< Method<T_return> > method;
00087         method = Method<T_return>::create(name);
00088         method->set_method( slot );
00089         this->add_method( method );
00090         return method;
00091       }
00092       
00093       template <class T_return, class T_arg1>
00094       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& name, sigc::slot1<T_return, T_arg1> slot )
00095       {
00096         DBusCxxPointer< Method<T_return, T_arg1> > method;
00097         method = Method<T_return, T_arg1>::create(name);
00098         method->set_method( slot );
00099         this->add_method( method );
00100         return method;
00101       }
00102       
00103       template <class T_return, class T_arg1,class T_arg2>
00104       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00105       {
00106         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00107         method = Method<T_return, T_arg1,T_arg2>::create(name);
00108         method->set_method( slot );
00109         this->add_method( method );
00110         return method;
00111       }
00112       
00113       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00114       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 )
00115       {
00116         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00117         method = Method<T_return, T_arg1,T_arg2,T_arg3>::create(name);
00118         method->set_method( slot );
00119         this->add_method( method );
00120         return method;
00121       }
00122       
00123       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00124       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 )
00125       {
00126         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00127         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>::create(name);
00128         method->set_method( slot );
00129         this->add_method( method );
00130         return method;
00131       }
00132       
00133       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00134       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 )
00135       {
00136         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00137         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::create(name);
00138         method->set_method( slot );
00139         this->add_method( method );
00140         return method;
00141       }
00142       
00143       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00144       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 )
00145       {
00146         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00147         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::create(name);
00148         method->set_method( slot );
00149         this->add_method( method );
00150         return method;
00151       }
00152       
00153       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>
00154       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 )
00155       {
00156         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00157         method = Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(name);
00158         method->set_method( slot );
00159         this->add_method( method );
00160         return method;
00161       }
00162       
00163 
00165       bool add_method( MethodBase::pointer method );
00166 
00168       void remove_method( const std::string& name );
00169 
00171       bool has_method( const std::string& name ) const;
00172 
00177       bool add_signal( signal_base::pointer signal );
00178 
00185       bool remove_signal( signal_base::pointer signal );
00186 
00190       bool remove_signal( const std::string& name );
00191 
00195       bool has_signal( signal_base::pointer signal ) const;
00196 
00198       bool has_signal( const std::string& name ) const;
00199 
00200       template <class T_return, class T_arg1=nil, class T_arg2=nil, class T_arg3=nil, class T_arg4=nil, class T_arg5=nil, class T_arg6=nil, class T_arg7=nil>
00201       DBusCxxPointer<signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_signal( const std::string& name ) {
00202         DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00203         sig = DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::create(m_name, name);
00204 
00205         if ( this->add_signal(sig) ) return sig;
00206 
00207         return DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >();
00208       }
00209 
00211       const Signals& signals();
00212 
00218       signal_base::pointer signal(const std::string& signal_name);
00219 
00221       sigc::signal<void,const std::string&/*old name*/,const std::string&/*new name*/> signal_name_changed();
00222 
00224       sigc::signal<void,MethodBase::pointer> signal_method_added();
00225 
00227       sigc::signal<void,MethodBase::pointer> signal_method_removed();
00228 
00230       std::string introspect(int space_depth=0) const;
00231 
00232     private:
00233 
00234       Object* m_object;
00235       
00236     protected:
00237 
00238       friend class Object;
00239 
00240       void set_object( Object* object );
00241 
00242       std::string m_name;
00243       
00244       Methods m_methods;
00245 
00246       Signals m_signals;
00247 
00248       mutable pthread_rwlock_t m_methods_rwlock;
00249 
00250       mutable pthread_rwlock_t m_signals_rwlock;
00251 
00253       pthread_mutex_t m_name_mutex;
00254 
00255       sigc::signal<void,const std::string&,const std::string&> m_signal_name_changed;
00256       
00257       sigc::signal<void,MethodBase::pointer> m_signal_method_added;
00258       
00259       sigc::signal<void,MethodBase::pointer> m_signal_method_removed;
00260 
00261       typedef std::map<MethodBase::pointer,sigc::connection> MethodSignalNameConnections;
00262 
00263       MethodSignalNameConnections m_method_signal_name_connections;
00264 
00265       void on_method_name_changed(const std::string& oldname, const std::string& newname, MethodBase::pointer method);
00266 
00267       void set_connection(DBusCxxPointer<Connection> conn);
00268 
00269       void set_path( const std::string& new_path );
00270 
00271   };
00272 
00273 } /* namespace DBus */
00274 
00275 #endif /* DBUS_CXX_INTERFACE_H */
00276 

Generated on Fri Jun 26 15:50:37 2009 for dbus-cxx by doxygen 1.5.8