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 /*  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

Документация по UniWidgets. Последние изменения: Fri Oct 10 09:57:49 2014. Создано системой  doxygen 1.5.9