TransProperty.h
00001 #ifndef _TRANSPROPERTY_H
00002 #define _TRANSPROPERTY_H
00003
00004 #include <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 ~TransProperty()
00065 {
00066 for (typename std::list<PropertyProxyType*>::iterator it = connected_properties.begin(); it != connected_properties.end(); it++)
00067 {
00068 if(*it != NULL)
00069 delete *it;
00070 }
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00096 TransProperty( Gtk::Widget& owner, PropertyProxyType property_proxy, Glib::ustring name, ValueType def_value) :
00097 m_owner(&owner),
00098 m_name(name),
00099 m_property(owner, name, def_value)
00100 {
00101 connected_properties.push_back
00102 (new PropertyProxyType(property_proxy));
00103 }
00109 TransProperty( Gtk::Widget& owner, PropertyProxyType property_proxy, Glib::ustring name ) :
00110 m_owner(&owner),
00111 m_name(name),
00112 m_property(owner, name)
00113 {
00114 connected_properties.push_back
00115 (new PropertyProxyType(property_proxy));
00116 }
00119 void connect_processing()
00120 {
00121 on_property_changed();
00122 m_owner->connect_property_changed( m_name, sigc::mem_fun(*this, &TransProperty::on_property_changed));
00123 }
00124
00125 operator PropertyType& () { return m_property; }
00128 ValueType get_value() {return m_property.get_value();}
00132 void connect_property( const PropertyType& property )
00133 {
00134 connected_properties.push_back(&property);
00135 property.set_value (m_property);
00136 }
00137
00138 void connect_property( const PropertyProxyType& property )
00139 {
00140 connected_properties.push_back(new PropertyProxyType(property));
00141 typename std::list<PropertyProxyType*>::reverse_iterator it = connected_properties.rbegin();
00142 (*it)->set_value( m_property.get_value() );
00143 }
00146 void on_property_changed();
00147
00148
00149 protected:
00150 TransProperty();
00151 Gtk::Widget* m_owner;
00152 Glib::ustring m_name;
00153 PropertyType m_property;
00154 std::list< PropertyProxyType* > connected_properties;
00155 };
00156
00157 template<> inline
00158 void TransProperty<USensorProperty>::on_property_changed()
00159 {
00160 for (std::list<PropertyProxyType*>::iterator it = connected_properties.begin(); it != connected_properties.end(); it++)
00161 {
00162 *(*it) = m_property;
00163 }
00164 }
00165
00166 template<class T> inline
00167 void TransProperty<T>::on_property_changed()
00168 {
00169 for (typename std::list<PropertyProxyType*>::iterator it = connected_properties.begin(); it != connected_properties.end(); it++)
00170 {
00171 (*it)->set_value( m_property.get_value() );
00172 }
00173
00174 }
00175
00176 template<> inline
00177 void TransProperty<USensorProperty>::connect_processing()
00178 {
00179 m_owner->connect_property_changed( m_name + "-sensor-name", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00180 m_owner->connect_property_changed( m_name + "-sensor-id", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00181 m_owner->connect_property_changed( m_name + "-node-name", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00182 m_owner->connect_property_changed( m_name + "-node-id", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00183 m_owner->connect_property_changed( m_name + "-stype", sigc::mem_fun(*this, &TransProperty::on_property_changed));
00184 }
00185
00186 #endif