|
UniWidgets
1.2.0
|
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 /* TransProperty( Gtk::Widget& owner, PropertyType &property, Glib::ustring name, ValueType def_value) : 00074 m_owner(&owner), 00075 m_name(name), 00076 m_property(owner, name, def_value) 00077 { 00078 connected_properties.push_back(&property.get_proxy()); 00079 property.set_value (m_property); 00080 } 00081 00082 TransProperty( Gtk::Widget& owner, PropertyType &property, Glib::ustring name ) : 00083 m_owner(&owner), 00084 m_name(name), 00085 m_property(owner, name) 00086 { 00087 connected_properties.push_back(&property.get_proxy()); 00088 property.set_value (m_property); 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
1.7.6.1