X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FInteractiveDeformableMeshSegmentation%2FMainWnd_ExecutePlugins.cxx;fp=appli%2FInteractiveDeformableMeshSegmentation%2FMainWnd_ExecutePlugins.cxx;h=8429a818d38ceb7c41dfa1f792359d1e30801dc4;hb=93ddd2fe04d05b28dff31448032fd3af93ffe750;hp=0000000000000000000000000000000000000000;hpb=6d6bf5d5e3b9318a507216f2f231c32299d1a941;p=cpMesh.git diff --git a/appli/InteractiveDeformableMeshSegmentation/MainWnd_ExecutePlugins.cxx b/appli/InteractiveDeformableMeshSegmentation/MainWnd_ExecutePlugins.cxx new file mode 100644 index 0000000..8429a81 --- /dev/null +++ b/appli/InteractiveDeformableMeshSegmentation/MainWnd_ExecutePlugins.cxx @@ -0,0 +1,188 @@ +#include "MainWnd.h" +#include "ui_MainWnd.h" + +#include + +#include +#include + +// ------------------------------------------------------------------------- +bool MainWnd:: +_ParametersDialog( const TParameters& parameters ) +{ + if( this->m_ActiveParameters != NULL ) + this->m_ActiveParameters->close( ); + this->m_ActiveParameters = new QWidget( NULL ); + this->m_ActiveParameters->setWindowFlags( Qt::FramelessWindowHint ); + this->m_ActiveParameters->setWindowFlags( Qt::WindowTitleHint ); + + QGridLayout* gridLayout = new QGridLayout( this->m_ActiveParameters ); + QVBoxLayout* verticalLayout = new QVBoxLayout( ); + + // Put values + QLabel* title = new QLabel( this->m_ActiveParameters ); + title->setText( this->m_ActivePlugin->GetClassName( ).c_str( ) ); + verticalLayout->addWidget( title ); + + TParameters::const_iterator pIt = parameters.begin( ); + for( ; pIt != parameters.end( ); ++pIt ) + { + std::string par_name = pIt->first; + std::string par_type = pIt->second.first; + std::string par_value = pIt->second.second; + + if( par_type == "double" ) + { + QHBoxLayout* horizontalLayout = new QHBoxLayout( ); + QLabel* label = new QLabel( this->m_ActiveParameters ); + label->setText( QString( par_name.c_str( ) ) ); + horizontalLayout->addWidget( label ); + + QDoubleSpinBox* v_double = + new QDoubleSpinBox( this->m_ActiveParameters ); + v_double->setDecimals( 3 ); + v_double->setMinimum( -( std::numeric_limits< double >::max( ) ) ); + v_double->setMaximum( std::numeric_limits< double >::max( ) ); + v_double->setValue( std::atof( par_value.c_str( ) ) ); + v_double->setObjectName( QString( par_name.c_str( ) ) ); + horizontalLayout->addWidget( v_double ); + verticalLayout->addLayout( horizontalLayout ); + + } // fi + + } // rof + gridLayout->addLayout( verticalLayout, 0, 0, 1, 1 ); + QMetaObject::connectSlotsByName( this->m_ActiveParameters ); + this->m_ActiveParameters->show( ); + + /* + typedef std::map< std::string, QWidget* > _TWidgets; + _TWidgets widgets; + TParameters::const_iterator pIt = parameters.begin( ); + for( ; pIt != parameters.end( ); ++pIt ) + { + unsigned long pos = pIt->first.find_last_of( ":" ); + std::string v_name = pIt->first.substr( 0, pos ); + std::string v_type = pIt->first.substr( pos + 1 ); + QHBoxLayout* horizontalLayout = new QHBoxLayout( ); + QLabel* label = new QLabel( this->m_ActiveParameters ); + label->setText( QString( v_name.c_str( ) ) ); + horizontalLayout->addWidget( label ); + if( v_type == "real" ) + { + QDoubleSpinBox* v_double = new QDoubleSpinBox( this->m_ActiveParameters ); + v_double->setDecimals( 3 ); + v_double->setMinimum( -( std::numeric_limits< double >::max( ) ) ); + v_double->setMaximum( std::numeric_limits< double >::max( ) ); + v_double->setValue( std::atof( pIt->second.c_str( ) ) ); + horizontalLayout->addWidget( v_double ); + widgets[ pIt->first ] = v_double; + } + else if( v_type == "atomic_real" ) + { + if( v_name == "MeshType" ) + { + QLabel* info = new QLabel( this->m_ActiveParameters ); + if( typeid( TScalar ) == typeid( float ) ) + info->setText( QString( "float" ) ); + else if( typeid( TScalar ) == typeid( double ) ) + info->setText( QString( "double" ) ); + horizontalLayout->addWidget( info ); + widgets[ pIt->first ] = info; + } // fi + } // fi + verticalLayout.addLayout( horizontalLayout ); + } // rof + gridLayout.addLayout( &verticalLayout, 0, 0, 1, 1 ); + // Buttons box + QDialogButtonBox buttonBox( this->m_ActiveParameters ); + buttonBox.setOrientation( Qt::Horizontal ); + buttonBox.setStandardButtons( + QDialogButtonBox::Cancel | QDialogButtonBox::Ok + ); + gridLayout.addWidget( &buttonBox, 1, 0, 1, 1 ); + QObject::connect( + &buttonBox, SIGNAL( accepted( ) ), + this->m_ActiveParameters, SLOT( accept( ) ) + ); + QObject::connect( + &buttonBox, SIGNAL( rejected( ) ), + this->m_ActiveParameters, SLOT( reject( ) ) + ); + QMetaObject::connectSlotsByName( this->m_ActiveParameters ); + + // Execute dialog + if( dlg.exec( ) == QDialog::Accepted ) + { + _TWidgets::const_iterator wIt = widgets.begin( ); + for( ; wIt != widgets.end( ); ++wIt ) + { + unsigned long pos = wIt->first.find_last_of( ":" ); + std::string v_name = wIt->first.substr( 0, pos ); + std::string v_type = wIt->first.substr( pos + 1 ); + std::stringstream sstr; + if( v_type == "real" ) + { + QDoubleSpinBox* v_double = + dynamic_cast< QDoubleSpinBox* >( wIt->second ); + if( v_double != NULL ) + sstr << v_double->value( ); + } + else if( v_type == "atomic_real" ) + { + if( v_name == "MeshType" ) + { + QLabel* info = dynamic_cast< QLabel* >( wIt->second ); + if( info != NULL ) + sstr << info->text( ).toStdString( ); + + } // fi + + } // fi + parameters[ wIt->first ] = sstr.str( ); + + } // rof + return( true ); + } + */ + return( false ); +} + +// ------------------------------------------------------------------------- +void MainWnd:: +_triggered_actionSegmentImage( ) +{ +} + +// ------------------------------------------------------------------------- +void MainWnd:: +_triggered_actionFilterSegmentation( ) +{ + // Get filter name + if( this->m_SegmentedImage == NULL ) + return; + QAction* action = dynamic_cast< QAction* >( this->sender( ) ); + if( action == NULL ) + return; + std::string filter_name = action->text( ).toStdString( ); + + // Create plugin + if( this->m_ActivePlugin != NULL ) delete this->m_ActivePlugin; + this->m_ActivePlugin = + dynamic_cast< TPlugin* >( + this->m_Plugins.CreateObject( + this->m_SegmentationFilterClasses[ filter_name ] + ) + ); + + // Show parameters dialog + this->_ParametersDialog( this->m_ActivePlugin->GetDefaultParameters( ) ); +} + +// ------------------------------------------------------------------------- +void MainWnd:: +_triggered_actionProcessMesh( ) +{ +} + +// eof - $RCSfile$