dbus-cxx logo

object.h

Go to the documentation of this file.
00001 
00002 // -*- c++ -*-
00003 /* Do not edit! -- generated file */
00004 
00005 #ifndef DBUSCXXOBJECT_H
00006 #define DBUSCXXOBJECT_H
00007 
00008 #include <sigc++/sigc++.h>
00009 
00010 #include <string>
00011 #include <map>
00012 
00013 #include <dbus-cxx/objectpathhandler.h>
00014 #include <dbus-cxx/interface.h>
00015 
00016 namespace DBus
00017 {
00069   class Connection;
00070 
00079   class Object: public ObjectPathHandler
00080   {
00081     protected:
00082 
00083       Object( const std::string& path, PrimaryFallback pf=PRIMARY );
00084 
00085     public:
00086 
00087       typedef DBusCxxPointer<Object> pointer;
00088 
00089       typedef std::multimap<std::string, Interface::pointer> Interfaces;
00090 
00091       typedef std::map<std::string, Object::pointer> Children;
00092 
00093       static pointer create( const std::string& path = std::string(), PrimaryFallback pf=PRIMARY );
00094 
00095       virtual ~Object();
00096 
00098       virtual bool register_with_connection(DBusCxxPointer<Connection> conn);
00099 
00100       const Interfaces& interfaces() const;
00101 
00103       Interface::pointer interface( const std::string& name ) const;
00104 
00106       bool add_interface( Interface::pointer interface );
00107 
00113       Interface::pointer create_interface( const std::string& name );
00114 
00118       template <class T_return>
00119       DBusCxxPointer<Method<T_return> > create_method( const std::string& method_name, sigc::slot0<T_return> slot )
00120       {
00121         if ( not m_default_interface )
00122         {
00123           this->create_interface("");
00124           this->set_default_interface("");
00125         }
00126         // TODO throw an error if the default interface still doesn't exist
00127      
00128         DBusCxxPointer< Method<T_return> > method;
00129         method = m_default_interface->create_method<T_return>(method_name);
00130         method->set_method( slot );
00131         return method;
00132       }
00133       
00137       template <class T_return, class T_arg1>
00138       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& method_name, sigc::slot1<T_return, T_arg1> slot )
00139       {
00140         if ( not m_default_interface )
00141         {
00142           this->create_interface("");
00143           this->set_default_interface("");
00144         }
00145         // TODO throw an error if the default interface still doesn't exist
00146      
00147         DBusCxxPointer< Method<T_return, T_arg1> > method;
00148         method = m_default_interface->create_method<T_return, T_arg1>(method_name);
00149         method->set_method( slot );
00150         return method;
00151       }
00152       
00156       template <class T_return, class T_arg1,class T_arg2>
00157       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00158       {
00159         if ( not m_default_interface )
00160         {
00161           this->create_interface("");
00162           this->set_default_interface("");
00163         }
00164         // TODO throw an error if the default interface still doesn't exist
00165      
00166         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00167         method = m_default_interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00168         method->set_method( slot );
00169         return method;
00170       }
00171       
00175       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00176       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> > create_method( const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot )
00177       {
00178         if ( not m_default_interface )
00179         {
00180           this->create_interface("");
00181           this->set_default_interface("");
00182         }
00183         // TODO throw an error if the default interface still doesn't exist
00184      
00185         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00186         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00187         method->set_method( slot );
00188         return method;
00189       }
00190       
00194       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00195       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > create_method( const std::string& method_name, sigc::slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot )
00196       {
00197         if ( not m_default_interface )
00198         {
00199           this->create_interface("");
00200           this->set_default_interface("");
00201         }
00202         // TODO throw an error if the default interface still doesn't exist
00203      
00204         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00205         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00206         method->set_method( slot );
00207         return method;
00208       }
00209       
00213       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00214       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > create_method( const std::string& method_name, sigc::slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot )
00215       {
00216         if ( not m_default_interface )
00217         {
00218           this->create_interface("");
00219           this->set_default_interface("");
00220         }
00221         // TODO throw an error if the default interface still doesn't exist
00222      
00223         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00224         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00225         method->set_method( slot );
00226         return method;
00227       }
00228       
00232       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00233       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > create_method( const std::string& method_name, sigc::slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot )
00234       {
00235         if ( not m_default_interface )
00236         {
00237           this->create_interface("");
00238           this->set_default_interface("");
00239         }
00240         // TODO throw an error if the default interface still doesn't exist
00241      
00242         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00243         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00244         method->set_method( slot );
00245         return method;
00246       }
00247       
00251       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>
00252       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_method( const std::string& method_name, sigc::slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot )
00253       {
00254         if ( not m_default_interface )
00255         {
00256           this->create_interface("");
00257           this->set_default_interface("");
00258         }
00259         // TODO throw an error if the default interface still doesn't exist
00260      
00261         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00262         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00263         method->set_method( slot );
00264         return method;
00265       }
00266       
00267           
00268       template <class T_return>
00269       DBusCxxPointer<Method<T_return> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot0<T_return> slot )
00270       {
00271         Interface::pointer interface;
00272         interface = this->interface(interface_name);
00273         if ( not interface ) interface = this->create_interface(interface_name);
00274         // TODO throw an error if the interface still doesn't exist
00275      
00276         DBusCxxPointer< Method<T_return> > method;
00277         method = interface->create_method<T_return>(method_name);
00278         method->set_method( slot );
00279         return method;
00280       }
00281       
00282                 template <class T_return, class T_arg1>
00283       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot1<T_return, T_arg1> slot )
00284       {
00285         Interface::pointer interface;
00286         interface = this->interface(interface_name);
00287         if ( not interface ) interface = this->create_interface(interface_name);
00288         // TODO throw an error if the interface still doesn't exist
00289      
00290         DBusCxxPointer< Method<T_return, T_arg1> > method;
00291         method = interface->create_method<T_return, T_arg1>(method_name);
00292         method->set_method( slot );
00293         return method;
00294       }
00295       
00296                 template <class T_return, class T_arg1,class T_arg2>
00297       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00298       {
00299         Interface::pointer interface;
00300         interface = this->interface(interface_name);
00301         if ( not interface ) interface = this->create_interface(interface_name);
00302         // TODO throw an error if the interface still doesn't exist
00303      
00304         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00305         method = interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00306         method->set_method( slot );
00307         return method;
00308       }
00309       
00310                 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00311       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot )
00312       {
00313         Interface::pointer interface;
00314         interface = this->interface(interface_name);
00315         if ( not interface ) interface = this->create_interface(interface_name);
00316         // TODO throw an error if the interface still doesn't exist
00317      
00318         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00319         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00320         method->set_method( slot );
00321         return method;
00322       }
00323       
00324                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00325       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot )
00326       {
00327         Interface::pointer interface;
00328         interface = this->interface(interface_name);
00329         if ( not interface ) interface = this->create_interface(interface_name);
00330         // TODO throw an error if the interface still doesn't exist
00331      
00332         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00333         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00334         method->set_method( slot );
00335         return method;
00336       }
00337       
00338                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00339       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot )
00340       {
00341         Interface::pointer interface;
00342         interface = this->interface(interface_name);
00343         if ( not interface ) interface = this->create_interface(interface_name);
00344         // TODO throw an error if the interface still doesn't exist
00345      
00346         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00347         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00348         method->set_method( slot );
00349         return method;
00350       }
00351       
00352                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00353       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot )
00354       {
00355         Interface::pointer interface;
00356         interface = this->interface(interface_name);
00357         if ( not interface ) interface = this->create_interface(interface_name);
00358         // TODO throw an error if the interface still doesn't exist
00359      
00360         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00361         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00362         method->set_method( slot );
00363         return method;
00364       }
00365       
00366                 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>
00367       DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot )
00368       {
00369         Interface::pointer interface;
00370         interface = this->interface(interface_name);
00371         if ( not interface ) interface = this->create_interface(interface_name);
00372         // TODO throw an error if the interface still doesn't exist
00373      
00374         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00375         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00376         method->set_method( slot );
00377         return method;
00378       }
00379       
00380           
00382       void remove_interface( const std::string& name );
00383 
00384       bool has_interface( const std::string& name );
00385 
00386       Interface::pointer default_interface() const;
00387 
00388       bool set_default_interface( const std::string& new_default_name );
00389 
00390       void remove_default_interface();
00391 
00392       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>
00393           DBusCxxPointer<signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_signal( const std::string& name ) {
00394             DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00395             Interface::pointer iface = this->default_interface();
00396 
00397             if (not iface) iface = this->create_interface("");
00398 
00399             sig = iface->create_signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
00400 
00401             return sig;
00402           }
00403 
00404       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>
00405       DBusCxxPointer<signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_signal( const std::string& iface, const std::string& name ) {
00406         DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00407 
00408         if ( not has_interface(iface) ) this->create_interface(iface);
00409         
00410         sig = this->interface(iface)->create_signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
00411 
00412         return sig;
00413       }
00414 
00415       const Children& children() const;
00416 
00417       Object::pointer child(const std::string& name) const;
00418 
00419       bool add_child(const std::string& name, Object::pointer child);
00420 
00421       bool remove_child(const std::string& name);
00422 
00423       bool has_child(const std::string& name) const;
00424 
00426       std::string introspect(int space_depth=0) const;
00427 
00428       sigc::signal<void,Interface::pointer> signal_interface_added();
00429 
00430       sigc::signal<void,Interface::pointer> signal_interface_removed();
00431 
00432       sigc::signal<void,Interface::pointer/*old default*/,Interface::pointer/*new default*/> signal_default_interface_changed();
00433 
00434       virtual HandlerResult handle_message( DBusCxxPointer<Connection>, Message::const_pointer );
00435 
00436     protected:
00437 
00438       Children m_children;
00439       
00440       mutable pthread_rwlock_t m_interfaces_rwlock;
00441 
00442       pthread_mutex_t m_name_mutex;
00443 
00444       Interfaces m_interfaces;
00445 
00446       Interface::pointer m_default_interface;
00447 
00448       sigc::signal<void,Interface::pointer,Interface::pointer> m_signal_default_interface_changed;
00449 
00450       sigc::signal<void,Interface::pointer> m_signal_interface_added;
00451 
00452       sigc::signal<void,Interface::pointer> m_signal_interface_removed;
00453 
00454       typedef std::map<Interface::pointer,sigc::connection> InterfaceSignalNameConnections;
00455 
00456       InterfaceSignalNameConnections m_interface_signal_name_connections;
00457 
00458       void on_interface_name_changed(const std::string& oldname, const std::string& newname, Interface::pointer interface);
00459 
00460   };
00461 
00462 }
00463 
00464 #endif

Generated on Mon Sep 21 10:59:28 2009 for dbus-cxx by doxygen 1.6.1