X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FProcessObject.cxx;h=db873e9d4f854724c7606a79af4e4f00a705c5b6;hb=de874ea850042e77a99a456188f423c8df2e374f;hp=61eaf96e661763080ed48470bfabf069bca4e8b5;hpb=e561a2fa4dcaee2c544e58385e1ff7d56ba8b051;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/ProcessObject.cxx b/lib/cpPlugins/Interface/ProcessObject.cxx index 61eaf96..db873e9 100644 --- a/lib/cpPlugins/Interface/ProcessObject.cxx +++ b/lib/cpPlugins/Interface/ProcessObject.cxx @@ -1,33 +1,41 @@ #include -// ------------------------------------------------------------------------- -std::string cpPlugins::Interface::ProcessObject:: -GetClassName( ) const -{ - return( "cpPlugins::Interface::ProcessObject" ); -} +#ifdef cpPlugins_Interface_QT4 +#include +#include +#endif // cpPlugins_Interface_QT4 + +#include // ------------------------------------------------------------------------- -std::string cpPlugins::Interface::ProcessObject:: -GetClassType( ) const +void cpPlugins::Interface::ProcessObject:: +Modified( ) const { - return( "ProcessObject" ); + if( this->m_ITKObject.IsNotNull( ) ) + this->m_ITKObject->Modified( ); + if( this->m_VTKObject.GetPointer( ) != NULL ) + this->m_VTKObject->Modified( ); + this->Superclass::Modified( ); } // ------------------------------------------------------------------------- -const cpPlugins::Interface::Parameters& -cpPlugins::Interface::ProcessObject:: -GetDefaultParameters( ) const +void cpPlugins::Interface::ProcessObject:: +GetInputsNames( std::set< std::string >& names ) const { - return( this->m_DefaultParameters ); + names.clear( ); + auto dIt = this->m_Inputs.begin( ); + for( ; dIt != this->m_Inputs.end( ); ++dIt ) + names.insert( dIt->first ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::ProcessObject:: -SetParameters( const cpPlugins::Interface::Parameters& params ) +GetOutputsNames( std::set< std::string >& names ) const { - this->m_Parameters = params; - this->Modified( ); + names.clear( ); + auto dIt = this->m_Outputs.begin( ); + for( ; dIt != this->m_Outputs.end( ); ++dIt ) + names.insert( dIt->first ); } // ------------------------------------------------------------------------- @@ -45,45 +53,35 @@ GetNumberOfOutputs( ) const } // ------------------------------------------------------------------------- -void cpPlugins::Interface::ProcessObject:: -SetNumberOfInputs( unsigned int n ) -{ - this->m_Inputs.clear( ); - this->m_Inputs.resize( n ); - this->Modified( ); -} - -// ------------------------------------------------------------------------- -void cpPlugins::Interface::ProcessObject:: -SetNumberOfOutputs( unsigned int n ) +bool cpPlugins::Interface::ProcessObject:: +SetOutputObjectName( + const std::string& new_object_name, const std::string& output_name + ) { - this->m_Outputs.clear( ); - this->m_Outputs.resize( n ); - this->Modified( ); + auto oIt = this->m_Outputs.find( output_name ); + if( oIt != this->m_Outputs.end( ) ) + { + this->m_OutputObjectsNames[ output_name ] = new_object_name; + this->Modified( ); + return( true ); + } + else + return( false ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::ProcessObject:: -SetInput( unsigned int idx, cpPlugins::Interface::DataObject* dobj ) +SetInput( const std::string& id, cpPlugins::Interface::DataObject* dobj ) { - if( idx < this->m_Inputs.size( ) ) + _TDataContainer::iterator i = this->m_Inputs.find( id ); + if( i != this->m_Inputs.end( ) ) { - this->m_Inputs[ idx ] = dobj; + i->second = dobj; this->Modified( ); } // fi } -// ------------------------------------------------------------------------- -cpPlugins::Interface::DataObject* cpPlugins::Interface::ProcessObject:: -GetOutput( unsigned int idx ) -{ - if( idx < this->m_Outputs.size( ) ) - return( this->m_Outputs[ idx ] ); - else - return( NULL ); -} - // ------------------------------------------------------------------------- std::string cpPlugins::Interface::ProcessObject:: Update( ) @@ -91,18 +89,34 @@ Update( ) std::string r = ""; // Force upstream updates - for( unsigned int i = 0; i < this->m_Inputs.size( ) && r == ""; ++i ) + _TDataContainer::iterator i = this->m_Inputs.begin( ); + for( ; i != this->m_Inputs.end( ) && r == ""; ++i ) { - Self* src = dynamic_cast< Self* >( this->m_Inputs[ i ]->GetSource( ) ); - if( src != NULL ) - r = src->Update( ); - + if( i->second.IsNotNull( ) ) + { + Self* src = dynamic_cast< Self* >( i->second->GetSource( ) ); + if( src != NULL ) + r = src->Update( ); + } + else + r = "cpPlugins::Interface::ProcessObject: No input connected."; + } // rof // Current update if( r == "" ) r = this->_GenerateData( ); + // Configure output names + auto oIt = this->m_Outputs.begin( ); + for( ; oIt != this->m_Outputs.end( ); ++oIt ) + { + auto nIt = this->m_OutputObjectsNames.find( oIt->first ); + if( nIt != this->m_OutputObjectsNames.end( ) ) + oIt->second->SetName( nIt->second ); + + } // rof + // Return error description, if any return( r ); } @@ -111,41 +125,89 @@ Update( ) void cpPlugins::Interface::ProcessObject:: DisconnectOutputs( ) { - for( unsigned int idx = 0; idx < this->m_Outputs.size( ); ++idx ) - if( this->m_Outputs[ idx ].IsNotNull( ) ) - this->m_Outputs[ idx ]->DisconnectPipeline( ); + _TDataContainer::iterator i = this->m_Outputs.begin( ); + for( ; i != this->m_Outputs.end( ); ++i ) + if( i->second.IsNotNull( ) ) + i->second->DisconnectPipeline( ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ProcessObject:: +AddInteractor( vtkRenderWindowInteractor* interactor ) +{ +#ifdef cpPlugins_Interface_QT4 + if( this->m_ParametersDialog == NULL ) + this->m_ParametersDialog = new ParametersQtDialog( ); + this->m_ParametersDialog->addInteractor( interactor ); +#endif // cpPlugins_Interface_QT4 + this->m_Interactors.insert( interactor ); } // ------------------------------------------------------------------------- cpPlugins::Interface::ProcessObject:: -ProcessObject( ) - : Superclass( ) +DialogResult cpPlugins::Interface::ProcessObject:: +ExecConfigurationDialog( QWidget* parent ) { + DialogResult r = Self::DialogResult_Cancel; + +#ifdef cpPlugins_Interface_QT4 + + if( QApplication::instance( ) != NULL ) + { + if( this->m_ParametersDialog == NULL ) + this->m_ParametersDialog = new ParametersQtDialog( ); + /* TODO + this->m_ParametersDialog->setTitle( + this->GetClassName( ) + std::string( " basic configuration" ) + ); + */ + + this->m_ParametersDialog->setParent( NULL ); + this->m_ParametersDialog->setParameters( this->m_Parameters ); + + if( this->m_ParametersDialog->exec( ) == 1 ) + r = Self::DialogResult_NoModal; + else + r = Self::DialogResult_Cancel; + } + else + r = Self::DialogResult_Cancel; + +#endif // cpPlugins_Interface_QT4 + + return( r ); } // ------------------------------------------------------------------------- cpPlugins::Interface::ProcessObject:: -~ProcessObject( ) +ProcessObject( ) + : Superclass( ), + m_ITKObject( NULL ), + m_VTKObject( NULL ), + m_ParametersDialog( NULL ), + m_Plugins( NULL ) { + this->m_Parameters = TParameters::New( ); + this->m_Parameters->SetProcessObject( this ); } // ------------------------------------------------------------------------- -itk::DataObject* cpPlugins::Interface::ProcessObject:: -_GetInput( unsigned int idx ) +cpPlugins::Interface::ProcessObject:: +~ProcessObject( ) { - if( idx < this->m_Inputs.size( ) ) - return( this->m_Inputs[ idx ]->GetRealDataObject( ) ); - else - return( NULL ); + if( this->m_ParametersDialog != NULL ) + delete this->m_ParametersDialog; } // ------------------------------------------------------------------------- void cpPlugins::Interface::ProcessObject:: -_SetOutput( unsigned int idx, itk::DataObject* dobj ) +_AddInput( const std::string& name ) { - if( idx < this->m_Outputs.size( ) ) - if( this->m_Outputs[ idx ].IsNotNull( ) ) - this->m_Outputs[ idx ]->SetRealDataObject( dobj ); + this->m_Inputs[ name ] = NULL; + this->Modified( ); } +// ------------------------------------------------------------------------- +CPPLUGINS_PROVIDER_SOURCE( cpPlugins::Interface::ProcessObject, 1, 1 ); + // eof - $RCSfile$