00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <sigc++/sigc++.h>
00024
00025 #include <string>
00026 #include <map>
00027
00028 #include <dbus-cxx/forward_decls.h>
00029 #include <dbus-cxx/objectpathhandler.h>
00030 #include <dbus-cxx/dbus_signal.h>
00031
00032 #ifndef DBUSCXXOBJECT_H
00033 #define DBUSCXXOBJECT_H
00034
00035 namespace DBus
00036 {
00096 class Object: public ObjectPathHandler
00097 {
00098 protected:
00099
00104 Object( const std::string& path, PrimaryFallback pf=PRIMARY );
00105
00106 public:
00107
00113 typedef DBusCxxPointer<Object> pointer;
00114
00125 typedef std::multimap<std::string, DBusCxxPointer<Interface> > Interfaces;
00126
00137 typedef std::map<std::string, Object::pointer> Children;
00138
00144 static pointer create( const std::string& path = std::string(), PrimaryFallback pf=PRIMARY );
00145
00146 virtual ~Object();
00147
00149 virtual bool register_with_connection(DBusCxxPointer<Connection> conn);
00150
00152 const Interfaces& interfaces() const;
00153
00155 DBusCxxPointer<Interface> interface( const std::string& name ) const;
00156
00158 bool add_interface( DBusCxxPointer<Interface> interface );
00159
00165 DBusCxxPointer<Interface> create_interface( const std::string& name );
00166
00175 template <class T_return>
00176 DBusCxxPointer<Method<T_return> >
00177 create_method( const std::string& method_name, sigc::slot0<T_return> slot );
00178
00187 template <class T_return, class T_arg1>
00188 DBusCxxPointer<Method<T_return, T_arg1> >
00189 create_method( const std::string& method_name, sigc::slot1<T_return, T_arg1> slot );
00190
00199 template <class T_return, class T_arg1,class T_arg2>
00200 DBusCxxPointer<Method<T_return, T_arg1,T_arg2> >
00201 create_method( const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot );
00202
00211 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00212 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> >
00213 create_method( const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot );
00214
00223 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00224 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00225 create_method( const std::string& method_name, sigc::slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot );
00226
00235 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00236 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00237 create_method( const std::string& method_name, sigc::slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot );
00238
00247 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00248 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00249 create_method( const std::string& method_name, sigc::slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot );
00250
00259 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>
00260 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00261 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 );
00262
00263
00272 template <class T_return>
00273 DBusCxxPointer<Method<T_return> >
00274 create_method( const std::string& interface_name, const std::string& method_name, sigc::slot0<T_return> slot );
00275
00284 template <class T_return, class T_arg1>
00285 DBusCxxPointer<Method<T_return, T_arg1> >
00286 create_method( const std::string& interface_name, const std::string& method_name, sigc::slot1<T_return, T_arg1> slot );
00287
00296 template <class T_return, class T_arg1,class T_arg2>
00297 DBusCxxPointer<Method<T_return, T_arg1,T_arg2> >
00298 create_method( const std::string& interface_name, const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot );
00299
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> >
00310 create_method( const std::string& interface_name, const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot );
00311
00320 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00321 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00322 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 );
00323
00332 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00333 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00334 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 );
00335
00344 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00345 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00346 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 );
00347
00356 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>
00357 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00358 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 );
00359
00360
00362 void remove_interface( const std::string& name );
00363
00369 bool has_interface( const std::string& name );
00370
00375 DBusCxxPointer<Interface> default_interface() const;
00376
00386 bool set_default_interface( const std::string& new_default_name );
00387
00392 void remove_default_interface();
00393
00401 template <class T_return>
00402 DBusCxxPointer<signal<T_return> >
00403 create_signal( const std::string& name );
00404
00412 template <class T_return, class T_arg1>
00413 DBusCxxPointer<signal<T_return, T_arg1> >
00414 create_signal( const std::string& name );
00415
00423 template <class T_return, class T_arg1,class T_arg2>
00424 DBusCxxPointer<signal<T_return, T_arg1,T_arg2> >
00425 create_signal( const std::string& name );
00426
00434 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00435 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3> >
00436 create_signal( const std::string& name );
00437
00445 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00446 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00447 create_signal( const std::string& name );
00448
00456 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00457 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00458 create_signal( const std::string& name );
00459
00467 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00468 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00469 create_signal( const std::string& name );
00470
00478 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>
00479 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00480 create_signal( const std::string& name );
00481
00482
00490 template <class T_return>
00491 DBusCxxPointer<signal<T_return> >
00492 create_signal( const std::string& iface, const std::string& name );
00493
00501 template <class T_return, class T_arg1>
00502 DBusCxxPointer<signal<T_return, T_arg1> >
00503 create_signal( const std::string& iface, const std::string& name );
00504
00512 template <class T_return, class T_arg1,class T_arg2>
00513 DBusCxxPointer<signal<T_return, T_arg1,T_arg2> >
00514 create_signal( const std::string& iface, const std::string& name );
00515
00523 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00524 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3> >
00525 create_signal( const std::string& iface, const std::string& name );
00526
00534 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00535 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00536 create_signal( const std::string& iface, const std::string& name );
00537
00545 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00546 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00547 create_signal( const std::string& iface, const std::string& name );
00548
00556 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00557 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00558 create_signal( const std::string& iface, const std::string& name );
00559
00567 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>
00568 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00569 create_signal( const std::string& iface, const std::string& name );
00570
00571
00572
00574 const Children& children() const;
00575
00581 Object::pointer child(const std::string& name) const;
00582
00592 bool add_child(const std::string& name, Object::pointer child, bool force=false);
00593
00599 bool remove_child(const std::string& name);
00600
00606 bool has_child(const std::string& name) const;
00607
00609 std::string introspect(int space_depth=0) const;
00610
00616 sigc::signal<void,DBusCxxPointer<Interface> > signal_interface_added();
00617
00623 sigc::signal<void,DBusCxxPointer<Interface> > signal_interface_removed();
00624
00632 sigc::signal<void,DBusCxxPointer<Interface> ,DBusCxxPointer<Interface> > signal_default_interface_changed();
00633
00655 virtual HandlerResult handle_message( DBusCxxPointer<Connection> conn, Message::const_pointer msg);
00656
00657 protected:
00658
00659 Children m_children;
00660
00661 mutable pthread_rwlock_t m_interfaces_rwlock;
00662
00663 pthread_mutex_t m_name_mutex;
00664
00665 Interfaces m_interfaces;
00666
00667 DBusCxxPointer<Interface> m_default_interface;
00668
00669 sigc::signal<void,DBusCxxPointer<Interface> ,DBusCxxPointer<Interface> > m_signal_default_interface_changed;
00670
00671 sigc::signal<void,DBusCxxPointer<Interface> > m_signal_interface_added;
00672
00673 sigc::signal<void,DBusCxxPointer<Interface> > m_signal_interface_removed;
00674
00675 typedef std::map<DBusCxxPointer<Interface> ,sigc::connection> InterfaceSignalNameConnections;
00676
00677 InterfaceSignalNameConnections m_interface_signal_name_connections;
00678
00683 void on_interface_name_changed(const std::string& oldname, const std::string& newname, DBusCxxPointer<Interface> interface);
00684
00685 };
00686
00687 }
00688
00689 #include <dbus-cxx/interface.h>
00690
00691
00692
00693
00694
00695 namespace DBus {
00696
00697 template <class T_return>
00698 DBusCxxPointer<Method<T_return> >
00699 Object::create_method( const std::string& method_name, sigc::slot0<T_return> slot )
00700 {
00701 if ( not m_default_interface )
00702 {
00703 this->create_interface("");
00704 this->set_default_interface("");
00705 }
00706
00707
00708 DBusCxxPointer< Method<T_return> > method;
00709 method = m_default_interface->create_method<T_return>(method_name);
00710 method->set_method( slot );
00711 return method;
00712 }
00713
00714 template <class T_return, class T_arg1>
00715 DBusCxxPointer<Method<T_return, T_arg1> >
00716 Object::create_method( const std::string& method_name, sigc::slot1<T_return, T_arg1> slot )
00717 {
00718 if ( not m_default_interface )
00719 {
00720 this->create_interface("");
00721 this->set_default_interface("");
00722 }
00723
00724
00725 DBusCxxPointer< Method<T_return, T_arg1> > method;
00726 method = m_default_interface->create_method<T_return, T_arg1>(method_name);
00727 method->set_method( slot );
00728 return method;
00729 }
00730
00731 template <class T_return, class T_arg1,class T_arg2>
00732 DBusCxxPointer<Method<T_return, T_arg1,T_arg2> >
00733 Object::create_method( const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00734 {
00735 if ( not m_default_interface )
00736 {
00737 this->create_interface("");
00738 this->set_default_interface("");
00739 }
00740
00741
00742 DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00743 method = m_default_interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00744 method->set_method( slot );
00745 return method;
00746 }
00747
00748 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00749 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> >
00750 Object::create_method( const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot )
00751 {
00752 if ( not m_default_interface )
00753 {
00754 this->create_interface("");
00755 this->set_default_interface("");
00756 }
00757
00758
00759 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00760 method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00761 method->set_method( slot );
00762 return method;
00763 }
00764
00765 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00766 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00767 Object::create_method( const std::string& method_name, sigc::slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot )
00768 {
00769 if ( not m_default_interface )
00770 {
00771 this->create_interface("");
00772 this->set_default_interface("");
00773 }
00774
00775
00776 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00777 method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00778 method->set_method( slot );
00779 return method;
00780 }
00781
00782 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00783 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00784 Object::create_method( const std::string& method_name, sigc::slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot )
00785 {
00786 if ( not m_default_interface )
00787 {
00788 this->create_interface("");
00789 this->set_default_interface("");
00790 }
00791
00792
00793 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00794 method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00795 method->set_method( slot );
00796 return method;
00797 }
00798
00799 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00800 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00801 Object::create_method( const std::string& method_name, sigc::slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot )
00802 {
00803 if ( not m_default_interface )
00804 {
00805 this->create_interface("");
00806 this->set_default_interface("");
00807 }
00808
00809
00810 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00811 method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00812 method->set_method( slot );
00813 return method;
00814 }
00815
00816 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>
00817 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00818 Object::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 )
00819 {
00820 if ( not m_default_interface )
00821 {
00822 this->create_interface("");
00823 this->set_default_interface("");
00824 }
00825
00826
00827 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00828 method = m_default_interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00829 method->set_method( slot );
00830 return method;
00831 }
00832
00833
00834 template <class T_return>
00835 DBusCxxPointer<Method<T_return> >
00836 Object::create_method( const std::string& interface_name, const std::string& method_name, sigc::slot0<T_return> slot )
00837 {
00838 Interface::pointer interface;
00839 interface = this->interface(interface_name);
00840 if ( not interface ) interface = this->create_interface(interface_name);
00841
00842
00843 DBusCxxPointer< Method<T_return> > method;
00844 method = interface->create_method<T_return>(method_name);
00845 method->set_method( slot );
00846 return method;
00847 }
00848
00849 template <class T_return, class T_arg1>
00850 DBusCxxPointer<Method<T_return, T_arg1> >
00851 Object::create_method( const std::string& interface_name, const std::string& method_name, sigc::slot1<T_return, T_arg1> slot )
00852 {
00853 Interface::pointer interface;
00854 interface = this->interface(interface_name);
00855 if ( not interface ) interface = this->create_interface(interface_name);
00856
00857
00858 DBusCxxPointer< Method<T_return, T_arg1> > method;
00859 method = interface->create_method<T_return, T_arg1>(method_name);
00860 method->set_method( slot );
00861 return method;
00862 }
00863
00864 template <class T_return, class T_arg1,class T_arg2>
00865 DBusCxxPointer<Method<T_return, T_arg1,T_arg2> >
00866 Object::create_method( const std::string& interface_name, const std::string& method_name, sigc::slot2<T_return, T_arg1,T_arg2> slot )
00867 {
00868 Interface::pointer interface;
00869 interface = this->interface(interface_name);
00870 if ( not interface ) interface = this->create_interface(interface_name);
00871
00872
00873 DBusCxxPointer< Method<T_return, T_arg1,T_arg2> > method;
00874 method = interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00875 method->set_method( slot );
00876 return method;
00877 }
00878
00879 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00880 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3> >
00881 Object::create_method( const std::string& interface_name, const std::string& method_name, sigc::slot3<T_return, T_arg1,T_arg2,T_arg3> slot )
00882 {
00883 Interface::pointer interface;
00884 interface = this->interface(interface_name);
00885 if ( not interface ) interface = this->create_interface(interface_name);
00886
00887
00888 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3> > method;
00889 method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00890 method->set_method( slot );
00891 return method;
00892 }
00893
00894 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00895 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00896 Object::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 )
00897 {
00898 Interface::pointer interface;
00899 interface = this->interface(interface_name);
00900 if ( not interface ) interface = this->create_interface(interface_name);
00901
00902
00903 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > method;
00904 method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00905 method->set_method( slot );
00906 return method;
00907 }
00908
00909 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00910 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00911 Object::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 )
00912 {
00913 Interface::pointer interface;
00914 interface = this->interface(interface_name);
00915 if ( not interface ) interface = this->create_interface(interface_name);
00916
00917
00918 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > method;
00919 method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00920 method->set_method( slot );
00921 return method;
00922 }
00923
00924 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00925 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00926 Object::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 )
00927 {
00928 Interface::pointer interface;
00929 interface = this->interface(interface_name);
00930 if ( not interface ) interface = this->create_interface(interface_name);
00931
00932
00933 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > method;
00934 method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00935 method->set_method( slot );
00936 return method;
00937 }
00938
00939 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>
00940 DBusCxxPointer<Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00941 Object::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 )
00942 {
00943 Interface::pointer interface;
00944 interface = this->interface(interface_name);
00945 if ( not interface ) interface = this->create_interface(interface_name);
00946
00947
00948 DBusCxxPointer< Method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > method;
00949 method = interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00950 method->set_method( slot );
00951 return method;
00952 }
00953
00954
00955 template <class T_return>
00956 DBusCxxPointer<signal<T_return> >
00957 Object::create_signal( const std::string& name )
00958 {
00959 DBusCxxPointer<DBus::signal<T_return> > sig;
00960 Interface::pointer iface = this->default_interface();
00961 if ( not iface ) iface = this->create_interface("");
00962 sig = iface->create_signal<T_return>(name);
00963 return sig;
00964 }
00965
00966 template <class T_return, class T_arg1>
00967 DBusCxxPointer<signal<T_return, T_arg1> >
00968 Object::create_signal( const std::string& name )
00969 {
00970 DBusCxxPointer<DBus::signal<T_return, T_arg1> > sig;
00971 Interface::pointer iface = this->default_interface();
00972 if ( not iface ) iface = this->create_interface("");
00973 sig = iface->create_signal<T_return, T_arg1>(name);
00974 return sig;
00975 }
00976
00977 template <class T_return, class T_arg1,class T_arg2>
00978 DBusCxxPointer<signal<T_return, T_arg1,T_arg2> >
00979 Object::create_signal( const std::string& name )
00980 {
00981 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2> > sig;
00982 Interface::pointer iface = this->default_interface();
00983 if ( not iface ) iface = this->create_interface("");
00984 sig = iface->create_signal<T_return, T_arg1,T_arg2>(name);
00985 return sig;
00986 }
00987
00988 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00989 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3> >
00990 Object::create_signal( const std::string& name )
00991 {
00992 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3> > sig;
00993 Interface::pointer iface = this->default_interface();
00994 if ( not iface ) iface = this->create_interface("");
00995 sig = iface->create_signal<T_return, T_arg1,T_arg2,T_arg3>(name);
00996 return sig;
00997 }
00998
00999 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
01000 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
01001 Object::create_signal( const std::string& name )
01002 {
01003 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > sig;
01004 Interface::pointer iface = this->default_interface();
01005 if ( not iface ) iface = this->create_interface("");
01006 sig = iface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(name);
01007 return sig;
01008 }
01009
01010 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
01011 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
01012 Object::create_signal( const std::string& name )
01013 {
01014 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > sig;
01015 Interface::pointer iface = this->default_interface();
01016 if ( not iface ) iface = this->create_interface("");
01017 sig = iface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(name);
01018 return sig;
01019 }
01020
01021 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
01022 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
01023 Object::create_signal( const std::string& name )
01024 {
01025 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > sig;
01026 Interface::pointer iface = this->default_interface();
01027 if ( not iface ) iface = this->create_interface("");
01028 sig = iface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(name);
01029 return sig;
01030 }
01031
01032 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>
01033 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
01034 Object::create_signal( const std::string& name )
01035 {
01036 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
01037 Interface::pointer iface = this->default_interface();
01038 if ( not iface ) iface = this->create_interface("");
01039 sig = iface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
01040 return sig;
01041 }
01042
01043
01044 template <class T_return>
01045 DBusCxxPointer<signal<T_return> >
01046 Object::create_signal( const std::string& iface, const std::string& name )
01047 {
01048 DBusCxxPointer<DBus::signal<T_return> > sig;
01049 if ( not has_interface(iface) ) this->create_interface(iface);
01050 sig = this->interface(iface)->create_signal<T_return>(name);
01051 return sig;
01052 }
01053
01054 template <class T_return, class T_arg1>
01055 DBusCxxPointer<signal<T_return, T_arg1> >
01056 Object::create_signal( const std::string& iface, const std::string& name )
01057 {
01058 DBusCxxPointer<DBus::signal<T_return, T_arg1> > sig;
01059 if ( not has_interface(iface) ) this->create_interface(iface);
01060 sig = this->interface(iface)->create_signal<T_return, T_arg1>(name);
01061 return sig;
01062 }
01063
01064 template <class T_return, class T_arg1,class T_arg2>
01065 DBusCxxPointer<signal<T_return, T_arg1,T_arg2> >
01066 Object::create_signal( const std::string& iface, const std::string& name )
01067 {
01068 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2> > sig;
01069 if ( not has_interface(iface) ) this->create_interface(iface);
01070 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2>(name);
01071 return sig;
01072 }
01073
01074 template <class T_return, class T_arg1,class T_arg2,class T_arg3>
01075 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3> >
01076 Object::create_signal( const std::string& iface, const std::string& name )
01077 {
01078 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3> > sig;
01079 if ( not has_interface(iface) ) this->create_interface(iface);
01080 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2,T_arg3>(name);
01081 return sig;
01082 }
01083
01084 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
01085 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
01086 Object::create_signal( const std::string& iface, const std::string& name )
01087 {
01088 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > sig;
01089 if ( not has_interface(iface) ) this->create_interface(iface);
01090 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(name);
01091 return sig;
01092 }
01093
01094 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
01095 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
01096 Object::create_signal( const std::string& iface, const std::string& name )
01097 {
01098 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > sig;
01099 if ( not has_interface(iface) ) this->create_interface(iface);
01100 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(name);
01101 return sig;
01102 }
01103
01104 template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
01105 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
01106 Object::create_signal( const std::string& iface, const std::string& name )
01107 {
01108 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > sig;
01109 if ( not has_interface(iface) ) this->create_interface(iface);
01110 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(name);
01111 return sig;
01112 }
01113
01114 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>
01115 DBusCxxPointer<signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
01116 Object::create_signal( const std::string& iface, const std::string& name )
01117 {
01118 DBusCxxPointer<DBus::signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> > sig;
01119 if ( not has_interface(iface) ) this->create_interface(iface);
01120 sig = this->interface(iface)->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(name);
01121 return sig;
01122 }
01123
01124
01125
01126 }
01127
01128
01129 #endif