UniWidgets  1.0.0
TransProperty.h
00001 #ifndef _TRANSPROPERTY_H
00002 #define _TRANSPROPERTY_H
00003 // -------------------------------------------------------------------------
00004 #include <uniwidgets/SensorProperty.h>
00005 #include <iostream>
00006 // -------------------------------------------------------------------------
00033 template <class ValueType> class TransProperty
00034 {
00035 public:
00036     typedef Glib::Property<ValueType> PropertyType;
00037     typedef Glib::PropertyProxy<ValueType> PropertyProxyType;
00041     void set_value(const ValueType& data)
00042     { m_property = data; } 
00047     TransProperty( Gtk::Widget& owner, Glib::ustring name ) :
00048     m_owner(&owner),
00049     m_name(name),
00050     m_property(owner, name)
00051     {
00052     }
00058     TransProperty( Gtk::Widget& owner, Glib::ustring name, ValueType def_value) :
00059     m_owner(&owner),
00060     m_name(name),
00061     m_property(owner, name, def_value)
00062     {
00063     }
00064 
00065 /*  TransProperty( Gtk::Widget& owner, PropertyType &property, Glib::ustring name, ValueType def_value) :
00066     m_owner(&owner),
00067     m_name(name),
00068     m_property(owner, name, def_value)
00069     {
00070         connected_properties.push_back(&property.get_proxy());
00071         property.set_value (m_property);
00072     }
00073 
00074     TransProperty( Gtk::Widget& owner, PropertyType &property, Glib::ustring name ) :
00075     m_owner(&owner),
00076     m_name(name),
00077     m_property(owner, name)
00078     {
00079         connected_properties.push_back(&property.get_proxy());
00080         property.set_value (m_property);
00081     }*/
00088     TransProperty( Gtk::Widget& owner, PropertyProxyType property_proxy, Glib::ustring name, ValueType def_value) :
00089     m_owner(&owner),
00090     m_name(name),
00091     m_property(owner, name, def_value)
00092     {
00093         connected_properties.push_back
00094             (new PropertyProxyType(property_proxy));
00095     }
00101     TransProperty( Gtk::Widget& owner, PropertyProxyType property_proxy, Glib::ustring name ) :
00102     m_owner(&owner),
00103     m_name(name),
00104     m_property(owner, name)
00105     {
00106         connected_properties.push_back
00107             (new PropertyProxyType(property_proxy));
00108     }
00111     void connect_processing()
00112     {
00113         on_property_changed();
00114         m_owner->connect_property_changed( m_name, sigc::mem_fun(*this, &TransProperty::on_property_changed));
00115     }
00116 
00117     operator PropertyType& () { return m_property; }
00120     ValueType get_value() {return m_property.get_value();}
00124     void connect_property( const PropertyType& property )
00125     {
00126         connected_properties.push_back(&property);
00127         property.set_value (m_property);
00128     }
00131     void on_property_changed();
00132 
00133 
00134 protected:
00135     TransProperty();
00136     Gtk::Widget* m_owner;                   
00137     Glib::ustring m_name;                   
00138     PropertyType m_property;                
00139     std::list< PropertyProxyType* > connected_properties;   
00140 };
00141 // -------------------------------------------------------------------------
00142 template<> inline
00143 void TransProperty<USensorProperty>::on_property_changed()
00144 {
00145     for (std::list<PropertyProxyType*>::iterator it = connected_properties.begin(); it != connected_properties.end(); it++)
00146     {
00147         *(*it) = m_property;
00148     }
00149 }
00150 // -------------------------------------------------------------------------
00151 template<class T> inline
00152 void TransProperty<T>::on_property_changed()
00153 {
00154     for (typename std::list<PropertyProxyType*>::iterator it = connected_properties.begin(); it != connected_properties.end(); it++)
00155     {
00156         (*it)->set_value( m_property.get_value() );
00157     }
00158 
00159 }
00160 // -------------------------------------------------------------------------
00161 template<> inline
00162 void TransProperty<USensorProperty>::connect_processing()
00163 {
00164     m_owner->connect_property_changed( m_name + "-sensor-name", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00165     m_owner->connect_property_changed( m_name + "-sensor-id", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00166     m_owner->connect_property_changed( m_name + "-node-name", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00167     m_owner->connect_property_changed( m_name + "-node-id", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00168     m_owner->connect_property_changed( m_name + "-stype", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00169 }
00170 // -------------------------------------------------------------------------
00171 #endif