1 #ifndef __CPPLUGINS__INTERFACE__PARAMETERS__H__
2 #define __CPPLUGINS__INTERFACE__PARAMETERS__H__
4 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
12 #include <itkObject.h>
13 #include <itkObjectFactory.h>
15 // Some forward declarations
18 // -------------------------------------------------------------------------
19 #define cpPlugins_Parameters_Configure( Y ) \
20 void ConfigureAs##Y( const std::string& name ) \
22 this->m_Parameters[ name ] = TParameter( Self::Y, "" ); \
25 bool Has##Y( const std::string& name ) const \
27 auto i = this->m_Parameters.find( name ); \
28 if( i != this->m_Parameters.end( ) ) \
29 return( i->second.first == Self::Y ); \
34 // -------------------------------------------------------------------------
35 #define cpPlugins_Parameters_GetSet( Y ) \
36 T##Y Get##Y( const std::string& name ) const \
38 auto i = this->m_Parameters.find( name ); \
39 if( i != this->m_Parameters.end( ) ) \
41 if( i->second.first == Self::Y ) \
43 if( typeid( T##Y ) != typeid( std::string ) ) \
45 std::istringstream tok_str( i->second.second ); \
53 reinterpret_cast< const T##Y* >( \
54 &( i->second.second ) \
60 return( T##Y( 0 ) ); \
62 void Set##Y( const std::string& name, const T##Y& v ) \
64 auto i = this->m_Parameters.find( name ); \
65 if( i != this->m_Parameters.end( ) ) \
67 if( i->second.first == Self::Y ) \
69 if( typeid( T##Y ) != typeid( std::string ) ) \
71 std::stringstream str; \
73 i->second.second = str.str( ); \
77 *( reinterpret_cast< const std::string* >( &v ) ); \
83 // -------------------------------------------------------------------------
84 #define cpPlugins_Parameters_GetSetList( Y ) \
85 std::vector< T##Y > Get##Y##List( const std::string& name ) const \
87 std::vector< T##Y > lst; \
88 std::vector< std::string >* slst = \
89 reinterpret_cast< std::vector< std::string >* >( &lst ); \
90 auto i = this->m_Parameters.find( name ); \
91 if( i != this->m_Parameters.end( ) ) \
93 if( i->second.first == Self::Y##List ) \
95 std::istringstream str( i->second.second ); \
97 while( std::getline( str, token, '#' ) ) \
99 if( typeid( T##Y ) != typeid( std::string ) ) \
101 std::istringstream tok_str( token ); \
104 lst.push_back( v ); \
107 slst->push_back( token ); \
113 void AddTo##Y##List( const std::string& name, const T##Y& v ) \
115 auto i = this->m_Parameters.find( name ); \
116 if( i != this->m_Parameters.end( ) ) \
118 if( i->second.first == Self::Y##List ) \
120 std::stringstream str; \
121 if( i->second.second != "" ) \
122 str << i->second.second << "#"; \
124 i->second.second = str.str( ); \
128 void Clear##Y##List( const std::string& name ) \
130 auto i = this->m_Parameters.find( name ); \
131 if( i != this->m_Parameters.end( ) ) \
133 if( i->second.first == Self::Y##List ) \
134 i->second.second = ""; \
142 // Some forward declarations
144 class ParametersQtDialog;
148 class cpPlugins_Interface_EXPORT Parameters
151 friend class ParametersQtDialog;
154 typedef Parameters Self;
155 typedef itk::Object Superclass;
156 typedef itk::SmartPointer< Self > Pointer;
157 typedef itk::SmartPointer< const Self > ConstPointer;
161 String , Bool , Int ,
162 Uint , Real , Index ,
163 Point , Vector , OpenFileName ,
164 SaveFileName , PathName , StringList ,
165 BoolList , IntList , UintList ,
166 RealList , IndexList , PointList ,
167 VectorList , OpenFileNameList , SaveFileNameList ,
168 PathNameList , Choices , NoType
173 typedef unsigned long TUint;
174 typedef double TReal;
175 typedef std::string TString;
176 typedef std::string TOpenFileName;
177 typedef std::string TSaveFileName;
178 typedef std::string TPathName;
180 typedef std::pair< Self::Type, std::string > TParameter;
181 typedef std::map< std::string, TParameter > TParameters;
185 itkTypeMacro( cpPlugins::Interface::Parameters, itk::Object );
187 cpPlugins_Parameters_Configure( String );
188 cpPlugins_Parameters_Configure( Bool );
189 cpPlugins_Parameters_Configure( Int );
190 cpPlugins_Parameters_Configure( Uint );
191 cpPlugins_Parameters_Configure( Real );
192 cpPlugins_Parameters_Configure( Index );
193 cpPlugins_Parameters_Configure( Point );
194 cpPlugins_Parameters_Configure( Vector );
195 cpPlugins_Parameters_Configure( OpenFileName );
196 cpPlugins_Parameters_Configure( SaveFileName );
197 cpPlugins_Parameters_Configure( PathName );
198 cpPlugins_Parameters_Configure( StringList );
199 cpPlugins_Parameters_Configure( BoolList );
200 cpPlugins_Parameters_Configure( IntList );
201 cpPlugins_Parameters_Configure( UintList );
202 cpPlugins_Parameters_Configure( RealList );
203 cpPlugins_Parameters_Configure( IndexList );
204 cpPlugins_Parameters_Configure( PointList );
205 cpPlugins_Parameters_Configure( VectorList );
206 cpPlugins_Parameters_Configure( OpenFileNameList );
207 cpPlugins_Parameters_Configure( SaveFileNameList );
208 cpPlugins_Parameters_Configure( PathNameList );
209 cpPlugins_Parameters_Configure( Choices );
211 cpPlugins_Parameters_GetSet( Bool );
212 cpPlugins_Parameters_GetSet( Int );
213 cpPlugins_Parameters_GetSet( Uint );
214 cpPlugins_Parameters_GetSet( Real );
215 cpPlugins_Parameters_GetSet( OpenFileName );
216 cpPlugins_Parameters_GetSet( SaveFileName );
217 cpPlugins_Parameters_GetSet( PathName );
219 cpPlugins_Parameters_GetSetList( String );
220 cpPlugins_Parameters_GetSetList( Bool );
221 cpPlugins_Parameters_GetSetList( Int );
222 cpPlugins_Parameters_GetSetList( Uint );
223 cpPlugins_Parameters_GetSetList( Real );
224 cpPlugins_Parameters_GetSetList( OpenFileName );
225 cpPlugins_Parameters_GetSetList( SaveFileName );
226 cpPlugins_Parameters_GetSetList( PathName );
229 // To impact pipeline
230 virtual ProcessObject* GetProcessObject( );
231 virtual const ProcessObject* GetProcessObject( ) const;
232 virtual void SetProcessObject( ProcessObject* v );
233 virtual void Modified( ) const;
235 // Parameters container configuration
239 void GetNames( std::vector< std::string >& container ) const;
240 Type GetType( const std::string& name ) const;
241 std::string GetTypeAsString( const std::string& name ) const;
242 static Type GetTypeFromString( const std::string& t );
244 // Base string methods
245 std::string GetString(
246 const std::string& name, bool force = true
249 const std::string& name, const std::string& v, bool force = true
252 void ConfigureAsChoices(
253 const std::string& name, const std::vector< std::string >& choices
255 std::vector< std::string > GetChoices( const std::string& name ) const;
256 std::string GetSelectedChoice( const std::string& name ) const;
257 bool SetSelectedChoice(
258 const std::string& name, const std::string& choice
261 // Some templated methods
264 const std::string& name, const unsigned int& dim
268 const std::string& name, const unsigned int& dim
272 const std::string& name, const unsigned int& dim
277 const std::string& name, const unsigned int& dim, const I& v
281 const std::string& name, const unsigned int& dim, const P& v
285 const std::string& name, const unsigned int& dim, const V& v
289 std::vector< I > GetIndexList(
290 const std::string& name, const unsigned int& dim
293 std::vector< P > GetPointList(
294 const std::string& name, const unsigned int& dim
297 std::vector< V > GetVectorList(
298 const std::string& name, const unsigned int& dim
303 const std::string& name, const unsigned int& dim, const I& v
307 const std::string& name, const unsigned int& dim, const P& v
310 void AddToVectorList(
311 const std::string& name, const unsigned int& dim, const P& v
314 void ClearIndexList( const std::string& name );
315 void ClearPointList( const std::string& name );
316 void ClearVectorList( const std::string& name );
319 bool ToXML( TiXmlElement* parent_elem ) const;
320 bool FromXML( const TiXmlElement* filter_elem );
324 virtual ~Parameters( );
325 void PrintSelf( std::ostream& os, itk::Indent indent ) const;
327 TParameters& GetRawParameters( );
328 const TParameters& GetRawParameters( ) const;
331 // Purposely not implemented
332 Parameters( const Self& other );
333 Self& operator=( const Self& other );
336 TParameters m_Parameters;
337 ProcessObject* m_Process;
344 #include <cpPlugins/Interface/Parameters.hxx>
346 #endif // __CPPLUGINS__INTERFACE__PARAMETERS__H__