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       static pointer create( const std::string& path = std::string(), PrimaryFallback pf=PRIMARY );
00092 
00093       virtual ~Object();
00094 
00096       virtual bool register_with_connection(DBusCxxPointer<Connection> conn);
00097 
00098       const Interfaces& interfaces() const;
00099 
00101       Interface::pointer interface( const std::string& name ) const;
00102 
00104       bool add_interface( Interface::pointer interface );
00105 
00111       Interface::pointer create_interface( const std::string& name );
00112 
00116       template <class T_return>
00117       DBusCxxPointer<Method<T_return> > create_method( const std::string& method_name, sigc::slot0<T_return> slot )
00118       {
00119         if ( not m_default_interface )
00120         {
00121           this->create_interface("");
00122           this->set_default_interface("");
00123         }
00124         // TODO throw an error if the default interface still doesn't exist
00125      
00126         DBusCxxPointer< Method<T_return> > method;
00127         method = m_default_interface->create_method<T_return>(method_name);
00128         method->set_method( slot );
00129         return method;
00130       }
00131       
00135       template <class T_return, class T_arg1>
00136       DBusCxxPointer<Method<T_return, T_arg1> > create_method( const std::string& method_name, sigc::slot1<T_return, T_arg1> slot )
00137       {
00138         if ( not m_default_interface )
00139         {
00140           this->create_interface("");
00141           this->set_default_interface("");
00142         }
00143         // TODO throw an error if the default interface still doesn't exist
00144      
00145         DBusCxxPointer< Method<T_return, T_arg1> > method;
00146         method = m_default_interface->create_method<T_return, T_arg1>(method_name);
00147         method->set_method( slot );
00148         return method;
00149       }
00150       
00154       template <class T_return, class T_arg1,class T_arg2>
00155       DBusCxxPointer<Method<T_return, T_arg1,T_arg2> > create_method( const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00156       {
00157         if ( not m_default_interface )
00158         {
00159           this->create_interface("");
00160           this->set_default_interface("");
00161         }
00162         // TODO throw an error if the default interface still doesn't exist
00163      
00164         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00165         method = m_default_interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00166         method->set_method( slot );
00167         return method;
00168       }
00169       
00173       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00174       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 )
00175       {
00176         if ( not m_default_interface )
00177         {
00178           this->create_interface("");
00179           this->set_default_interface("");
00180         }
00181         // TODO throw an error if the default interface still doesn't exist
00182      
00183         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00184         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00185         method->set_method( slot );
00186         return method;
00187       }
00188       
00192       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00193       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 )
00194       {
00195         if ( not m_default_interface )
00196         {
00197           this->create_interface("");
00198           this->set_default_interface("");
00199         }
00200         // TODO throw an error if the default interface still doesn't exist
00201      
00202         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00203         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00204         method->set_method( slot );
00205         return method;
00206       }
00207       
00211       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00212       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 )
00213       {
00214         if ( not m_default_interface )
00215         {
00216           this->create_interface("");
00217           this->set_default_interface("");
00218         }
00219         // TODO throw an error if the default interface still doesn't exist
00220      
00221         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00222         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00223         method->set_method( slot );
00224         return method;
00225       }
00226       
00230       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00231       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 )
00232       {
00233         if ( not m_default_interface )
00234         {
00235           this->create_interface("");
00236           this->set_default_interface("");
00237         }
00238         // TODO throw an error if the default interface still doesn't exist
00239      
00240         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00241         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00242         method->set_method( slot );
00243         return method;
00244       }
00245       
00249       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>
00250       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 )
00251       {
00252         if ( not m_default_interface )
00253         {
00254           this->create_interface("");
00255           this->set_default_interface("");
00256         }
00257         // TODO throw an error if the default interface still doesn't exist
00258      
00259         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00260         method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00261         method->set_method( slot );
00262         return method;
00263       }
00264       
00265           
00266       template <class T_return>
00267       DBusCxxPointer<Method<T_return> > create_method( const std::string& interface_name, const std::string& method_name, sigc::slot0<T_return> slot )
00268       {
00269         Interface::pointer interface;
00270         interface = this->interface(interface_name);
00271         if ( not interface ) interface = this->create_interface(interface_name);
00272         // TODO throw an error if the interface still doesn't exist
00273      
00274         DBusCxxPointer< Method<T_return> > method;
00275         method = interface->create_method<T_return>(method_name);
00276         method->set_method( slot );
00277         return method;
00278       }
00279       
00280                 template <class T_return, class T_arg1>
00281       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 )
00282       {
00283         Interface::pointer interface;
00284         interface = this->interface(interface_name);
00285         if ( not interface ) interface = this->create_interface(interface_name);
00286         // TODO throw an error if the interface still doesn't exist
00287      
00288         DBusCxxPointer< Method<T_return, T_arg1> > method;
00289         method = interface->create_method<T_return, T_arg1>(method_name);
00290         method->set_method( slot );
00291         return method;
00292       }
00293       
00294                 template <class T_return, class T_arg1,class T_arg2>
00295       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 )
00296       {
00297         Interface::pointer interface;
00298         interface = this->interface(interface_name);
00299         if ( not interface ) interface = this->create_interface(interface_name);
00300         // TODO throw an error if the interface still doesn't exist
00301      
00302         DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00303         method = interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00304         method->set_method( slot );
00305         return method;
00306       }
00307       
00308                 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00309       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 )
00310       {
00311         Interface::pointer interface;
00312         interface = this->interface(interface_name);
00313         if ( not interface ) interface = this->create_interface(interface_name);
00314         // TODO throw an error if the interface still doesn't exist
00315      
00316         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00317         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00318         method->set_method( slot );
00319         return method;
00320       }
00321       
00322                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00323       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 )
00324       {
00325         Interface::pointer interface;
00326         interface = this->interface(interface_name);
00327         if ( not interface ) interface = this->create_interface(interface_name);
00328         // TODO throw an error if the interface still doesn't exist
00329      
00330         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00331         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00332         method->set_method( slot );
00333         return method;
00334       }
00335       
00336                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00337       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 )
00338       {
00339         Interface::pointer interface;
00340         interface = this->interface(interface_name);
00341         if ( not interface ) interface = this->create_interface(interface_name);
00342         // TODO throw an error if the interface still doesn't exist
00343      
00344         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00345         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00346         method->set_method( slot );
00347         return method;
00348       }
00349       
00350                 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00351       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 )
00352       {
00353         Interface::pointer interface;
00354         interface = this->interface(interface_name);
00355         if ( not interface ) interface = this->create_interface(interface_name);
00356         // TODO throw an error if the interface still doesn't exist
00357      
00358         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00359         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00360         method->set_method( slot );
00361         return method;
00362       }
00363       
00364                 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>
00365       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 )
00366       {
00367         Interface::pointer interface;
00368         interface = this->interface(interface_name);
00369         if ( not interface ) interface = this->create_interface(interface_name);
00370         // TODO throw an error if the interface still doesn't exist
00371      
00372         DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00373         method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00374         method->set_method( slot );
00375         return method;
00376       }
00377       
00378           
00380       void remove_interface( const std::string& name );
00381 
00382       bool has_interface( const std::string& name );
00383 
00384       Interface::pointer default_interface() const;
00385 
00386       bool set_default_interface( const std::string& new_default_name );
00387 
00388       void remove_default_interface();
00389 
00390       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>
00391           DBusCxxPointer<signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > create_signal( const std::string& name ) {
00392             DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00393             Interface::pointer iface = this->default_interface();
00394 
00395             if (not iface) iface = this->create_interface("");
00396 
00397             sig = iface->create_signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
00398 
00399             return sig;
00400           }
00401 
00402       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>
00403       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 ) {
00404         DBusCxxPointer<DBus::signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
00405 
00406         if ( not has_interface(iface) ) this->create_interface(iface);
00407         
00408         sig = this->interface(iface)->create_signal<T_return,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
00409 
00410         return sig;
00411       }
00412 
00413 
00414 
00415       sigc::signal<void,Interface::pointer> signal_interface_added();
00416 
00417       sigc::signal<void,Interface::pointer> signal_interface_removed();
00418 
00419       sigc::signal<void,Interface::pointer/*old default*/,Interface::pointer/*new default*/> signal_default_interface_changed();
00420 
00421       virtual HandlerResult handle_message( DBusCxxPointer<Connection>, Message::const_pointer );
00422 
00423     protected:
00424       mutable pthread_rwlock_t m_interfaces_rwlock;
00425 
00426       pthread_mutex_t m_name_mutex;
00427 
00428       Interfaces m_interfaces;
00429 
00430       Interface::pointer m_default_interface;
00431 
00432       sigc::signal<void,Interface::pointer,Interface::pointer> m_signal_default_interface_changed;
00433 
00434       sigc::signal<void,Interface::pointer> m_signal_interface_added;
00435 
00436       sigc::signal<void,Interface::pointer> m_signal_interface_removed;
00437 
00438       typedef std::map<Interface::pointer,sigc::connection> InterfaceSignalNameConnections;
00439 
00440       InterfaceSignalNameConnections m_interface_signal_name_connections;
00441 
00442       void on_interface_name_changed(const std::string& oldname, const std::string& newname, Interface::pointer interface);
00443 
00444   };
00445 
00446 }
00447 
00448 #endif

Generated on Thu May 28 16:50:50 2009 for dbus-cxx by doxygen 1.5.7.1