X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FParameters.cxx;h=2e6d36c88b8aba369d36421c22907b47baf296f2;hb=6ffc11d77924d6ab7e94db95d41105982ac73e00;hp=8312246c510f899def13458bd4b0b92444a6912b;hpb=2ec052efeb7289d113db1b7d306aadcac48bae4a;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Parameters.cxx b/lib/cpPlugins/Interface/Parameters.cxx index 8312246..2e6d36c 100644 --- a/lib/cpPlugins/Interface/Parameters.cxx +++ b/lib/cpPlugins/Interface/Parameters.cxx @@ -1,7 +1,6 @@ #include #include - -#include +#include // ------------------------------------------------------------------------- cpPlugins::Interface:: @@ -23,7 +22,12 @@ GetProcessObject( ) const void cpPlugins::Interface::Parameters:: SetProcessObject( ProcessObject* v ) { - this->m_Process = v; + if( this->m_Process != v ) + { + this->m_Process = v; + this->Modified( ); + + } // fi } // ------------------------------------------------------------------------- @@ -45,71 +49,7 @@ Clear( ) // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: -ConfigureAsString( const TString& name, const TString& v ) -{ - this->m_Parameters[ name ] = - TParameter( Self::String, TValues( v, v ) ); - this->Modified( ); -} - -// ------------------------------------------------------------------------- -#define cpPlugins_Parameters_Configure( Y ) \ - void cpPlugins::Interface::Parameters:: \ - ConfigureAs##Y( const TString& name, const T##Y& v ) \ - { \ - std::stringstream str; \ - str << v; \ - std::string s = str.str( ); \ - this->m_Parameters[ name ] = \ - TParameter( Self::Y, TValues( s, s ) ); \ - this->Modified( ); \ - } - -cpPlugins_Parameters_Configure( Bool ); -cpPlugins_Parameters_Configure( Int ); -cpPlugins_Parameters_Configure( Uint ); -cpPlugins_Parameters_Configure( Real ); - -// ------------------------------------------------------------------------- -#define cpPlugins_Parameters_List_Configure( Y ) \ - void cpPlugins::Interface::Parameters:: \ - ConfigureAs##Y##List( const TString& name ) \ - { \ - this->m_Parameters[ name ] = \ - TParameter( Self::Y##List, TValues( "", "" ) ); \ - this->Modified( ); \ - } - -cpPlugins_Parameters_List_Configure( String ); -cpPlugins_Parameters_List_Configure( Bool ); -cpPlugins_Parameters_List_Configure( Int ); -cpPlugins_Parameters_List_Configure( Uint ); -cpPlugins_Parameters_List_Configure( Real ); -cpPlugins_Parameters_List_Configure( Index ); -cpPlugins_Parameters_List_Configure( Point ); - -// ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -ConfigureAsChoices( - const TString& name, const std::vector< TString >& choices - ) -{ - // 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 ]; - this->m_Parameters[ name ] = - TParameter( Self::Choices, TValues( str_choices.str( ), "" ) ); - this->Modified( ); -} - -// ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -GetNames( std::vector< TString >& container ) const +GetNames( std::vector< std::string >& container ) const { container.clear( ); TParameters::const_iterator i = this->m_Parameters.begin( ); @@ -120,9 +60,9 @@ GetNames( std::vector< TString >& container ) const // ------------------------------------------------------------------------- cpPlugins::Interface::Parameters:: Type cpPlugins::Interface::Parameters:: -GetType( const TString& name ) const +GetType( const std::string& name ) const { - TParameters::const_iterator i = this->m_Parameters.find( name ); + auto i = this->m_Parameters.find( name ); if( i != this->m_Parameters.end( ) ) return( i->second.first ); else @@ -130,321 +70,271 @@ GetType( const TString& name ) const } // ------------------------------------------------------------------------- -#define cpPlugins_Parameters_Has( Y ) \ - bool cpPlugins::Interface::Parameters:: \ - Has##Y( const TString& name ) const \ - { \ - TParameters::const_iterator i = this->m_Parameters.find( name ); \ - if( i != this->m_Parameters.end( ) ) \ - return( i->second.first == Self::Y ); \ - else \ - return( false ); \ - } - -cpPlugins_Parameters_Has( String ); -cpPlugins_Parameters_Has( Bool ); -cpPlugins_Parameters_Has( Int ); -cpPlugins_Parameters_Has( Uint ); -cpPlugins_Parameters_Has( Real ); -cpPlugins_Parameters_Has( Index ); -cpPlugins_Parameters_Has( Point ); -cpPlugins_Parameters_Has( StringList ); -cpPlugins_Parameters_Has( BoolList ); -cpPlugins_Parameters_Has( IntList ); -cpPlugins_Parameters_Has( UintList ); -cpPlugins_Parameters_Has( RealList ); -cpPlugins_Parameters_Has( IndexList ); -cpPlugins_Parameters_Has( PointList ); -cpPlugins_Parameters_Has( Choices ); +#define cpPlugins_Parameters_TypeAsString( Y ) \ + if( i->second.first == Self::Y ) \ + return( #Y ) -// ------------------------------------------------------------------------- -cpPlugins::Interface::Parameters:: -TString cpPlugins::Interface::Parameters:: -GetString( const TString& name ) const +std::string cpPlugins::Interface::Parameters:: +GetTypeAsString( const std::string& name ) const { - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i != this->m_Parameters.end( ) ) - { - if( i->second.first == Self::String ) - return( i->second.second.second ); - - } // fi - return( "" ); + 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:: -TBool cpPlugins::Interface::Parameters:: -GetBool( const TString& name ) const +Type cpPlugins::Interface::Parameters:: +GetTypeFromString( const std::string& t ) { - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i != this->m_Parameters.end( ) ) - { - if( i->second.first == Self::Bool ) - return( std::atoi( i->second.second.second.c_str( ) ) == 1 ); - - } // fi - return( false ); + 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 ); } // ------------------------------------------------------------------------- -cpPlugins::Interface::Parameters:: -TInt cpPlugins::Interface::Parameters:: -GetInt( const TString& name ) const +std::string cpPlugins::Interface::Parameters:: +GetString( const std::string& name, bool force ) const { - TParameters::const_iterator i = this->m_Parameters.find( name ); + auto i = this->m_Parameters.find( name ); if( i != this->m_Parameters.end( ) ) { - if( i->second.first == Self::Int ) - return( TInt( std::atoi( i->second.second.second.c_str( ) ) ) ); - - } // fi - return( TInt( 0 ) ); + if( i->second.first == Self::String || force ) + return( i->second.second ); + else + return( "" ); + } + else + return( "" ); } // ------------------------------------------------------------------------- -cpPlugins::Interface::Parameters:: -TUint cpPlugins::Interface::Parameters:: -GetUint( const TString& name ) const +void cpPlugins::Interface::Parameters:: +SetString( const std::string& name, const std::string& v, bool force ) { - TParameters::const_iterator i = this->m_Parameters.find( name ); + auto i = this->m_Parameters.find( name ); if( i != this->m_Parameters.end( ) ) { - if( i->second.first == Self::Uint ) - return( TUint( std::atoi( i->second.second.second.c_str( ) ) ) ); + if( i->second.first == Self::String || force ) + { + if( i->second.second != v ) + { + i->second.second = v; + this->Modified( ); - } // fi - return( TUint( 0 ) ); -} + } // fi -// ------------------------------------------------------------------------- -cpPlugins::Interface::Parameters:: -TReal cpPlugins::Interface::Parameters:: -GetReal( const TString& name ) const -{ - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i != this->m_Parameters.end( ) ) - { - if( i->second.first == Self::Real ) - return( TReal( std::atof( i->second.second.second.c_str( ) ) ) ); + } // fi } // fi - return( TReal( 0 ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: -GetStringList( std::vector< TString >& lst, const TString& name ) const +ConfigureAsChoices( + const std::string& name, const std::vector< std::string >& choices + ) { - lst.clear( ); - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::StringList ) + // It is invalid not to give choices when configuring + if( choices.size( ) == 0 ) return; - std::istringstream str( i->second.second.second ); - std::string token; - while( std::getline( str, token, '#' ) ) - lst.push_back( token ); + 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( ); } // ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -GetBoolList( std::vector< TBool >& lst, const TString& name ) const +std::vector< std::string > cpPlugins::Interface::Parameters:: +GetChoices( const std::string& name ) const { - lst.clear( ); + std::vector< std::string > choices; + TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::BoolList ) - return; + 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 - std::istringstream str( i->second.second.second ); - std::string token; - while( std::getline( str, token, '#' ) ) - lst.push_back( std::atoi( token.c_str( ) ) == 1 ); + } // fi + return( choices ); } // ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -GetIntList( std::vector< TInt >& lst, const TString& name ) const +std::string cpPlugins::Interface::Parameters:: +GetSelectedChoice( const std::string& name ) const { - lst.clear( ); - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::IntList ) - return; - - std::istringstream str( i->second.second.second ); - std::string token; - while( std::getline( str, token, '#' ) ) - lst.push_back( TInt( std::atoi( token.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( "" ); } // ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -GetUintList( std::vector< TUint >& lst, const TString& name ) const +bool cpPlugins::Interface::Parameters:: +SetSelectedChoice( const std::string& name, const std::string& choice ) { - lst.clear( ); - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::UintList ) - return; - - std::istringstream str( i->second.second.second ); - std::string token; - while( std::getline( str, token, '#' ) ) - lst.push_back( TUint( std::atoi( token.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( ); + this->Modified( ); + return( true ); + } + else + return( false ); + } + else + return( false ); + } + else + return( false ); } // ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -GetRealList( std::vector< TReal >& lst, const TString& name ) const +std::string cpPlugins::Interface::Parameters:: +GetAcceptedFileExtensions( const std::string& name ) const { - lst.clear( ); - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::RealList ) - return; - - std::istringstream str( i->second.second.second ); - std::string token; - while( std::getline( str, token, '#' ) ) - lst.push_back( TReal( std::atof( token.c_str( ) ) ) ); + auto i = this->m_AcceptedFileExtensions.find( name ); + if( i != this->m_AcceptedFileExtensions.end( ) ) + return( i->second ); + else + return( "" ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: -GetChoices( std::vector< TString >& choices, const TString& name ) const +SetAcceptedFileExtensions( + const std::string& name, const std::string& extensions + ) { - choices.clear( ); - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::Choices ) - return; + auto i = this->m_Parameters.find( name ); + if( i != this->m_Parameters.end( ) ) + { + bool is_valid = ( i->second.first == Self::OpenFileName ); + is_valid |= ( i->second.first == Self::SaveFileName ); + is_valid |= ( i->second.first == Self::OpenFileNameList ); + is_valid |= ( i->second.first == Self::SaveFileNameList ); + if( is_valid ) + this->m_AcceptedFileExtensions[ name ] = extensions; - std::istringstream str( i->second.second.first ); - std::string token; - while( std::getline( str, token, '#' ) ) - choices.push_back( token ); + } // fi } // ------------------------------------------------------------------------- -cpPlugins::Interface::Parameters:: -TString cpPlugins::Interface::Parameters:: -GetSelectedChoice( const TString& name ) const +bool cpPlugins::Interface::Parameters:: +ToXML( TiXmlElement* parent_elem ) const { - TParameters::const_iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return( "" ); - if( i->second.first != Self::Choices ) - return( "" ); - return( i->second.second.second ); -} + if( parent_elem == NULL ) + return( false ); -// ------------------------------------------------------------------------- -void cpPlugins::Interface::Parameters:: -SetString( const TString& name, const TString& v ) -{ - TParameters::iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return; - if( i->second.first != Self::String ) - return; - i->second.second.second = v; - this->Modified( ); + 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 ); } -// ------------------------------------------------------------------------- -#define cpPlugins_Parameters_Set( Y ) \ - void cpPlugins::Interface::Parameters:: \ - Set##Y( const TString& name, const T##Y& v ) \ - { \ - TParameters::iterator i = this->m_Parameters.find( name ); \ - if( i == this->m_Parameters.end( ) ) \ - return; \ - if( i->second.first != Self::Y ) \ - return; \ - std::stringstream str; \ - str << v; \ - i->second.second.second = str.str( ); \ - this->Modified( ); \ - } - -cpPlugins_Parameters_Set( Bool ); -cpPlugins_Parameters_Set( Int ); -cpPlugins_Parameters_Set( Uint ); -cpPlugins_Parameters_Set( Real ); - -// ------------------------------------------------------------------------- -#define cpPlugins_Parameters_Add( Y ) \ - void cpPlugins::Interface::Parameters:: \ - AddTo##Y##List( const TString& name, const T##Y& v ) \ - { \ - TParameters::iterator i = this->m_Parameters.find( name ); \ - if( i == this->m_Parameters.end( ) ) \ - return; \ - if( i->second.first != Self::Y##List ) \ - return; \ - std::stringstream str; \ - if( i->second.second.second == "" ) \ - str << v; \ - else \ - str << "#" << v; \ - i->second.second.second += str.str( ); \ - this->Modified( ); \ - } - -cpPlugins_Parameters_Add( String ); -cpPlugins_Parameters_Add( Bool ); -cpPlugins_Parameters_Add( Int ); -cpPlugins_Parameters_Add( Uint ); -cpPlugins_Parameters_Add( Real ); - -// ------------------------------------------------------------------------- -#define cpPlugins_Parameters_Clear( Y ) \ - void cpPlugins::Interface::Parameters:: \ - Clear##Y##List( const TString& name ) \ - { \ - TParameters::iterator i = this->m_Parameters.find( name ); \ - if( i == this->m_Parameters.end( ) ) \ - return; \ - if( i->second.first != Self::Y##List ) \ - return; \ - i->second.second.second = ""; \ - this->Modified( ); \ - } - -cpPlugins_Parameters_Clear( String ); -cpPlugins_Parameters_Clear( Bool ); -cpPlugins_Parameters_Clear( Int ); -cpPlugins_Parameters_Clear( Uint ); -cpPlugins_Parameters_Clear( Real ); -cpPlugins_Parameters_Clear( Index ); -cpPlugins_Parameters_Clear( Point ); - // ------------------------------------------------------------------------- bool cpPlugins::Interface::Parameters:: -SetSelectedChoice( const TString& name, const TString& choice ) +FromXML( const TiXmlElement* filter_elem ) { - TParameters::iterator i = this->m_Parameters.find( name ); - if( i == this->m_Parameters.end( ) ) - return( false ); - if( i->second.first != Self::Choices ) - return( false ); - if( i->second.second.first.find( choice ) != std::string::npos ) + const TiXmlElement* param = filter_elem->FirstChildElement( "parameter" ); + bool ret = false; + while( param != NULL ) { - i->second.second.second = choice; - this->Modified( ); - return( true ); - } - else - return( false ); + 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 + this->Modified( ); + return( ret ); } // ------------------------------------------------------------------------- @@ -471,9 +361,24 @@ PrintSelf( std::ostream& os, itk::Indent indent ) const os << indent << i->first << ": (" << i->second.first << " | " - << i->second.second.first << " | " - << i->second.second.second << ")" + << i->second.second << ")" << std::endl; } +// ------------------------------------------------------------------------- +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$