Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <iostream>
00018 #include <stdexcept>
00019 #include <boost/bind.hpp>
00020
00021 #include "TGFrame.h"
00022
00023 #include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h"
00024 #include "Fireworks/Core/interface/FWEventItem.h"
00025 #include "Fireworks/Core/interface/fwLog.h"
00026 #include "Fireworks/Core/interface/FWModelChangeManager.h"
00027 #include "Fireworks/Core/interface/FWItemChangeSignal.h"
00028 #include "Fireworks/Core/interface/FWConfiguration.h"
00029 #include "Fireworks/Core/interface/FWParameterBase.h"
00030 #include "Fireworks/Core/interface/FWGenericParameter.h"
00031 #include "Fireworks/Core/interface/FWEnumParameter.h"
00032
00033
00034 FWProxyBuilderConfiguration::FWProxyBuilderConfiguration(const FWConfiguration* c, const FWEventItem* item):
00035 m_txtConfig(c),
00036 m_item(item)
00037 {
00038 }
00039
00040 FWProxyBuilderConfiguration::~FWProxyBuilderConfiguration()
00041 {
00042 delete m_txtConfig;
00043 }
00044
00045
00046
00047
00048 void
00049 FWProxyBuilderConfiguration::addTo( FWConfiguration& iTo) const
00050 {
00051 if (begin() != end()) {
00052 FWConfiguration vTmp;
00053 FWConfigurableParameterizable::addTo(vTmp);
00054 iTo.addKeyValue("Var",vTmp, true);
00055 }
00056 }
00057
00058
00059 void
00060 FWProxyBuilderConfiguration::setFrom(const FWConfiguration& iFrom)
00061 {
00062
00063
00064
00065
00066 }
00067
00068
00069
00070
00071 void
00072 FWProxyBuilderConfiguration::makeSetter(TGCompositeFrame* frame, FWParameterBase* pb )
00073 {
00074
00075
00076 boost::shared_ptr<FWParameterSetterBase> ptr( FWParameterSetterBase::makeSetterFor(pb) );
00077 ptr->attach(pb, this);
00078 TGFrame* tmpFrame = ptr->build(frame, false);
00079 frame->AddFrame(tmpFrame, new TGLayoutHints(kLHintsExpandX));
00080 m_setters.push_back(ptr);
00081 }
00082
00083 void
00084 FWProxyBuilderConfiguration::populateFrame(TGCompositeFrame* settersFrame)
00085 {
00086
00087
00088 TGCompositeFrame* frame = new TGVerticalFrame(settersFrame);
00089 settersFrame->AddFrame(frame, new TGLayoutHints(kLHintsExpandX) );
00090
00091 for(const_iterator it =begin(); it != end(); ++it)
00092 makeSetter(frame, *it);
00093
00094 settersFrame->MapSubwindows();
00095 }
00096
00097
00098
00099 template <class T> FWGenericParameter<T>* FWProxyBuilderConfiguration::assertParam(const std::string& name, T def )
00100 {
00101 FWGenericParameter<T>* mode = new FWGenericParameter<T>(this, name, def);
00102
00103
00104 if ( m_txtConfig) {
00105 const FWConfiguration* varConfig = m_txtConfig->keyValues() ? m_txtConfig->valueForKey("Var") : 0;
00106 if (varConfig) mode->setFrom(*varConfig);
00107 }
00108 mode->changed_.connect(boost::bind(&FWEventItem::proxyConfigChanged, (FWEventItem*)m_item));
00109 return mode;
00110 }
00111
00112
00113
00114 template <class T> FWGenericParameterWithRange<T>* FWProxyBuilderConfiguration::assertParam(const std::string& name, T def, T min, T max )
00115 {
00116 FWGenericParameterWithRange<T>* mode = new FWGenericParameterWithRange<T>(this, name, def, min, max);
00117
00118
00119 const FWConfiguration* varConfig = m_txtConfig && m_txtConfig->keyValues() ? m_txtConfig->valueForKey("Var") : 0;
00120 if (varConfig) mode->setFrom(*varConfig);
00121
00122 mode->changed_.connect(boost::bind(&FWEventItem::proxyConfigChanged, (FWEventItem*)m_item));
00123 return mode;
00124 }
00125
00126 template <class T> T FWProxyBuilderConfiguration::value(const std::string& pname)
00127 {
00128 FWGenericParameter<T>* param = 0;
00129
00130 for (FWConfigurableParameterizable::const_iterator i = begin(); i != end(); ++i)
00131 {
00132 if ((*i)->name() == pname)
00133 {
00134 param = (FWGenericParameter<T>* )(*i);
00135 break;
00136 }
00137 }
00138
00139 if (param)
00140 return param->value();
00141 else
00142 throw std::runtime_error("Invalid parameter request.");
00143 }
00144
00145
00146
00147 template bool FWProxyBuilderConfiguration::value<bool>(const std::string& name);
00148 template long FWProxyBuilderConfiguration::value<long>(const std::string& name);
00149 template double FWProxyBuilderConfiguration::value<double>(const std::string& name);
00150
00151 template FWGenericParameter<bool>* FWProxyBuilderConfiguration::assertParam(const std::string& name, bool def);
00152 template FWGenericParameterWithRange<long>* FWProxyBuilderConfiguration::assertParam(const std::string& name, long def,long min, long max);
00153 template FWGenericParameterWithRange<double>* FWProxyBuilderConfiguration::assertParam(const std::string& name, double def,double min, double max);