#include <cpPlugins/Interface/Parameters.h>
-#include <cstdarg>
-#include <cstdlib>
-#include <sstream>
-
-// -------------------------------------------------------------------------
-#define cpPlugins_Interface_Parameters_SetMacro( TYPE ) \
- void cpPlugins::Interface::Parameters:: \
- SetValueAs##TYPE( const TString& name, const T##TYPE& v ) \
- { \
- TParameters::iterator pIt = this->m_Parameters.find( name ); \
- if( pIt == this->m_Parameters.end( ) ) \
- return; \
- if( pIt->second.first != Self::TYPE ) \
- return; \
- std::stringstream ss; \
- ss << v; \
- pIt->second.second = ss.str( ); \
- }
-
-cpPlugins_Interface_Parameters_SetMacro( String );
-cpPlugins_Interface_Parameters_SetMacro( Bool );
-cpPlugins_Interface_Parameters_SetMacro( Int );
-cpPlugins_Interface_Parameters_SetMacro( Uint );
-cpPlugins_Interface_Parameters_SetMacro( Real );
-
-// -------------------------------------------------------------------------
-#define cpPlugins_Interface_Parameters_SetArrayMacro( TYPE, ATYPE ) \
- void cpPlugins::Interface::Parameters:: \
- SetValueAs##TYPE( const TString& name, const TUint& n, ... ) \
- { \
- TParameters::iterator pIt = this->m_Parameters.find( name ); \
- if( pIt == this->m_Parameters.end( ) ) \
- return; \
- if( pIt->second.first != Self::TYPE ) \
- return; \
- va_list v_lst; \
- va_start( v_lst, n ); \
- std::stringstream ss; \
- for( TUint i = 0; i < n; ++i ) \
- ss << va_arg( v_lst, ATYPE ) << ","; \
- va_end( v_lst ); \
- pIt->second.second = ss.str( ); \
- }
-
-cpPlugins_Interface_Parameters_SetArrayMacro( Index, long );
-cpPlugins_Interface_Parameters_SetArrayMacro( Point, double );
+#include <cpPlugins/Interface/ProcessObject.h>
+#include <third_party/tinyxml/tinyxml.h>
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-Parameters( )
+cpPlugins::Interface::
+ProcessObject* cpPlugins::Interface::Parameters::
+GetProcessObject( )
{
- this->Clear( );
+ return( this->m_Process );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-Parameters( const Self& other )
+const cpPlugins::Interface::
+ProcessObject* cpPlugins::Interface::Parameters::
+GetProcessObject( ) const
{
- this->m_Parameters = other.m_Parameters;
+ return( this->m_Process );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-~Parameters( )
+void cpPlugins::Interface::Parameters::
+SetProcessObject( ProcessObject* v )
{
- this->Clear( );
+ this->m_Process = v;
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-Self& cpPlugins::Interface::Parameters::
-operator=( const Self& other )
+void cpPlugins::Interface::Parameters::
+Modified( ) const
{
- this->m_Parameters = other.m_Parameters;
- return( *this );
+ this->Superclass::Modified( );
+ if( this->m_Process != NULL )
+ this->m_Process->Modified( );
}
// -------------------------------------------------------------------------
Clear( )
{
this->m_Parameters.clear( );
+ this->Modified( );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Parameters::
-Configure( const Self::Type& type, const TString& name )
+GetNames( std::vector< std::string >& container ) const
{
- this->m_Parameters[ name ] = TParameter( type, "" );
+ container.clear( );
+ TParameters::const_iterator i = this->m_Parameters.begin( );
+ for( ; i != this->m_Parameters.end( ); ++i )
+ container.push_back( i->first );
}
// -------------------------------------------------------------------------
-std::vector< cpPlugins::Interface::Parameters::TString >
cpPlugins::Interface::Parameters::
-GetParameters( ) const
+Type cpPlugins::Interface::Parameters::
+GetType( const std::string& name ) const
{
- std::vector< TString > parameters;
- TParameters::const_iterator pIt = this->m_Parameters.begin( );
- for( ; pIt != this->m_Parameters.end( ); ++pIt )
- parameters.push_back( pIt->first );
- return( parameters );
+ auto i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ return( i->second.first );
+ else
+ return( Self::NoType );
}
// -------------------------------------------------------------------------
+#define cpPlugins_Parameters_TypeAsString( Y ) \
+ if( i->second.first == Self::Y ) \
+ return( #Y )
+
+std::string cpPlugins::Interface::Parameters::
+GetTypeAsString( const std::string& name ) const
+{
+ auto i = this->m_Parameters.find( name );
+ cpPlugins_Parameters_TypeAsString( String );
+ else cpPlugins_Parameters_TypeAsString( Bool );
+ else cpPlugins_Parameters_TypeAsString( Int );
+ else cpPlugins_Parameters_TypeAsString( Uint );
+ else cpPlugins_Parameters_TypeAsString( Real );
+ else cpPlugins_Parameters_TypeAsString( OpenFileName );
+ else cpPlugins_Parameters_TypeAsString( SaveFileName );
+ else cpPlugins_Parameters_TypeAsString( PathName );
+ else cpPlugins_Parameters_TypeAsString( StringList );
+ else cpPlugins_Parameters_TypeAsString( BoolList );
+ else cpPlugins_Parameters_TypeAsString( IntList );
+ else cpPlugins_Parameters_TypeAsString( UintList );
+ else cpPlugins_Parameters_TypeAsString( RealList );
+ else cpPlugins_Parameters_TypeAsString( OpenFileNameList );
+ else cpPlugins_Parameters_TypeAsString( SaveFileNameList );
+ else cpPlugins_Parameters_TypeAsString( PathNameList );
+ else cpPlugins_Parameters_TypeAsString( Choices );
+ else return( "NoType" );
+}
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Parameters_TypeFromString( Y, str ) \
+ if( str == std::string( #Y ) ) \
+ return( Self::Y )
+
cpPlugins::Interface::Parameters::
Type cpPlugins::Interface::Parameters::
-GetParameterType( const TString& name ) const
+GetTypeFromString( const std::string& t )
{
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( Self::NoType );
- return( pIt->second.first );
+ cpPlugins_Parameters_TypeFromString( String, t );
+ else cpPlugins_Parameters_TypeFromString( Bool, t );
+ else cpPlugins_Parameters_TypeFromString( Int, t );
+ else cpPlugins_Parameters_TypeFromString( Uint, t );
+ else cpPlugins_Parameters_TypeFromString( Real, t );
+ else cpPlugins_Parameters_TypeFromString( OpenFileName, t );
+ else cpPlugins_Parameters_TypeFromString( SaveFileName, t );
+ else cpPlugins_Parameters_TypeFromString( PathName, t );
+ else cpPlugins_Parameters_TypeFromString( StringList, t );
+ else cpPlugins_Parameters_TypeFromString( BoolList, t );
+ else cpPlugins_Parameters_TypeFromString( IntList, t );
+ else cpPlugins_Parameters_TypeFromString( UintList, t );
+ else cpPlugins_Parameters_TypeFromString( RealList, t );
+ else cpPlugins_Parameters_TypeFromString( OpenFileNameList, t );
+ else cpPlugins_Parameters_TypeFromString( SaveFileNameList, t );
+ else cpPlugins_Parameters_TypeFromString( PathNameList, t );
+ else cpPlugins_Parameters_TypeFromString( Choices, t );
+ else return( Self::NoType );
}
// -------------------------------------------------------------------------
-const cpPlugins::Interface::Parameters::
-TString& cpPlugins::Interface::Parameters::
-GetValueAsString( const TString& name ) const
+std::string cpPlugins::Interface::Parameters::
+GetString( const std::string& name, bool force ) const
{
- static const TString null_str = "";
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( null_str );
- if( pIt->second.first != Self::String )
- return( null_str );
+ auto i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ {
+ if( i->second.first == Self::String || force )
+ return( i->second.second );
+ else
+ return( "" );
+ }
+ else
+ return( "" );
+}
- return( pIt->second.second );
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Parameters::
+SetString( const std::string& name, const std::string& v, bool force )
+{
+ auto i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ {
+ if( i->second.first == Self::String || force )
+ {
+ i->second.second = v;
+ this->Modified( );
+
+ } // fi
+
+ } // fi
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-TBool cpPlugins::Interface::Parameters::
-GetValueAsBool( const TString& name ) const
+void cpPlugins::Interface::Parameters::
+ConfigureAsChoices(
+ const std::string& name, const std::vector< std::string >& choices
+ )
{
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( TBool( false ) );
- if( pIt->second.first != Self::Int )
- return( TBool( false ) );
- return( TBool( std::atoi( pIt->second.second.c_str( ) ) == 1 ) );
+ // It is invalid not to give choices when configuring
+ if( choices.size( ) == 0 )
+ return;
+
+ std::stringstream str_choices;
+ str_choices << choices[ 0 ];
+ for( unsigned int i = 1; i < choices.size( ); ++i )
+ str_choices << "#" << choices[ i ];
+ str_choices << "@";
+ this->m_Parameters[ name ] =
+ TParameter( Self::Choices, str_choices.str( ) );
+ this->Modified( );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-TInt cpPlugins::Interface::Parameters::
-GetValueAsInt( const TString& name ) const
+std::vector< std::string > cpPlugins::Interface::Parameters::
+GetChoices( const std::string& name ) const
{
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( TInt( 0 ) );
- if( pIt->second.first != Self::Int )
- return( TInt( 0 ) );
- return( TInt( std::atoi( pIt->second.second.c_str( ) ) ) );
+ std::vector< std::string > choices;
+
+ TParameters::const_iterator i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ {
+ if( i->second.first == Self::Choices )
+ {
+ std::istringstream str_choices( i->second.second );
+ std::string real_choices;
+ std::getline( str_choices, real_choices, '@' );
+ std::istringstream str( real_choices );
+ std::string token;
+ while( std::getline( str, token, '#' ) )
+ choices.push_back( token );
+
+ } // fi
+
+ } // fi
+ return( choices );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-TUint cpPlugins::Interface::Parameters::
-GetValueAsUint( const TString& name ) const
+std::string cpPlugins::Interface::Parameters::
+GetSelectedChoice( const std::string& name ) const
{
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( TUint( 0 ) );
- if( pIt->second.first != Self::Uint )
- return( TUint( 0 ) );
- return( TUint( std::atoi( pIt->second.second.c_str( ) ) ) );
+ auto i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ {
+ if( i->second.first == Self::Choices )
+ {
+ std::istringstream str_choices( i->second.second );
+ std::string real_choice;
+ std::getline( str_choices, real_choice, '@' );
+ std::getline( str_choices, real_choice, '@' );
+ return( real_choice );
+ }
+ else
+ return( "" );
+ }
+ else
+ return( "" );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Parameters::
-TReal cpPlugins::Interface::Parameters::
-GetValueAsReal( const TString& name ) const
+bool cpPlugins::Interface::Parameters::
+SetSelectedChoice( const std::string& name, const std::string& choice )
{
- TParameters::const_iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return( TReal( 0 ) );
- if( pIt->second.first != Self::Real )
- return( TReal( 0 ) );
- return( TReal( std::atof( pIt->second.second.c_str( ) ) ) );
+ auto i = this->m_Parameters.find( name );
+ if( i != this->m_Parameters.end( ) )
+ {
+ if( i->second.first == Self::Choices )
+ {
+ std::istringstream str_choices( i->second.second );
+ std::string choices;
+ std::getline( str_choices, choices, '@' );
+ if( choices.find( choice ) != std::string::npos )
+ {
+ std::stringstream new_choices;
+ new_choices << choices << "@" << choice;
+ i->second.second = new_choices.str( );
+ return( true );
+ }
+ else
+ return( false );
+ }
+ else
+ return( false );
+ }
+ else
+ return( false );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-GetValueAsStringList(
- std::vector< TString >& lst, const TString& name
- ) const
+bool cpPlugins::Interface::Parameters::
+ToXML( TiXmlElement* parent_elem ) const
{
+ if( parent_elem == NULL )
+ return( false );
+
+ auto pIt = this->m_Parameters.begin( );
+ for( ; pIt != this->m_Parameters.end( ); ++pIt )
+ {
+ TiXmlElement* p = new TiXmlElement( "parameter" );
+ p->SetAttribute( "name", pIt->first.c_str( ) );
+ p->SetAttribute( "value", pIt->second.second.c_str( ) );
+ p->SetAttribute( "type", this->GetTypeAsString( pIt->first ).c_str( ) );
+ parent_elem->LinkEndChild( p );
+
+ } // rof
+ return( true );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-GetValueAsBoolList( std::vector< TBool >& lst, const TString& name ) const
+bool cpPlugins::Interface::Parameters::
+FromXML( const TiXmlElement* filter_elem )
+{
+ this->m_Parameters.clear( );
+
+ const TiXmlElement* param = filter_elem->FirstChildElement( "parameter" );
+ bool ret = false;
+ while( param != NULL )
+ {
+ const char* param_name = param->Attribute( "name" );
+ const char* param_type = param->Attribute( "type" );
+ if( param_name != NULL && param_type != NULL )
+ {
+ TParameter value;
+ value.second = param->Attribute( "value" );
+ value.first = Self::GetTypeFromString( param_type );
+ this->m_Parameters[ param_name ] = value;
+
+ } // fi
+ param = param->NextSiblingElement( "parameter" );
+ ret = true;
+
+ } // elihw
+ return( ret );
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Interface::Parameters::
+Parameters( )
+ : Superclass( ),
+ m_Process( NULL )
{
+ this->Clear( );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-GetValueAsIntList( std::vector< TInt >& lst, const TString& name ) const
+cpPlugins::Interface::Parameters::
+~Parameters( )
{
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Parameters::
-GetValueAsUintList( std::vector< TUint >& lst, const TString& name ) const
+PrintSelf( std::ostream& os, itk::Indent indent ) const
{
+ TParameters::const_iterator i = this->m_Parameters.begin( );
+ for( ; i != this->m_Parameters.end( ); ++i )
+ os << indent
+ << i->first << ": ("
+ << i->second.first << " | "
+ << i->second.second << ")"
+ << std::endl;
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-GetValueAsRealList( std::vector< TReal >& lst, const TString& name ) const
+cpPlugins::Interface::Parameters::
+TParameters& cpPlugins::Interface::Parameters::
+GetRawParameters( )
+{
+ return( this->m_Parameters );
+}
+
+// -------------------------------------------------------------------------
+const cpPlugins::Interface::Parameters::
+TParameters& cpPlugins::Interface::Parameters::
+GetRawParameters( ) const
{
+ return( this->m_Parameters );
}
// eof - $RCSfile$