Go to the documentation of this file.00001 #ifndef Fireworks_Core_FWGenericParameter_h
00002 #define Fireworks_Core_FWGenericParameter_h
00003
00004
00005
00006
00007
00015
00016
00017
00018
00019
00020
00021
00022 #include <sigc++/signal.h>
00023 #include <sstream>
00024
00025
00026 #include "Fireworks/Core/interface/FWParameterBase.h"
00027 #include "Fireworks/Core/interface/FWConfiguration.h"
00028
00029
00030
00031 template <class T>
00032 class FWGenericParameter : public FWParameterBase
00033 {
00034 public:
00035 typedef T value_type;
00036
00037 FWGenericParameter()
00038 : FWParameterBase(0, "invalid")
00039 {}
00040
00041 FWGenericParameter(FWParameterizable* iParent,
00042 const std::string& iName,
00043 const T &iDefault=T())
00044 : FWParameterBase(iParent,iName),
00045 m_value(iDefault)
00046 {}
00047
00048 template <class K>
00049 FWGenericParameter(FWParameterizable* iParent,
00050 const std::string& iName,
00051 K iCallback,
00052 const T &iDefault=T())
00053 : FWParameterBase(iParent,iName),
00054 m_value(iDefault)
00055 {
00056 changed_.connect(iCallback);
00057 }
00058
00059 T value() const {
00060 return m_value;
00061 }
00062
00063 virtual void addTo(FWConfiguration& iTo) const
00064 {
00065 std::ostringstream s;
00066 s<<m_value;
00067 iTo.addKeyValue(name(),FWConfiguration(s.str()));
00068 }
00069
00070
00071
00072
00073 virtual void setFrom(const FWConfiguration&iFrom) {
00074 if (const FWConfiguration* config = iFrom.valueForKey(name()) ) {
00075 std::istringstream s(config->value());
00076 s>>m_value;
00077 }
00078 changed_(m_value);
00079 }
00080
00081 void set(T iValue)
00082 {
00083 m_value = iValue;
00084 changed_(iValue);
00085 }
00086
00087 sigc::signal<void,T> changed_;
00088
00089 private:
00090 FWGenericParameter(const FWGenericParameter&);
00091
00092 const FWGenericParameter& operator=(const FWGenericParameter&);
00093
00094
00095 T m_value;
00096 };
00097
00098
00099 #endif