X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FParametersQtDialog.cxx;h=80d73a265f5499e0d8445ca868f471f6455ed6cd;hb=4f9005fe71854d7cff6ab68e48627989a6d1fbc8;hp=1cc5820f30ee9561ba890cff5df75907133ea912;hpb=62d056ccb528d63392d197552830460e980a5aba;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/ParametersQtDialog.cxx b/lib/cpPlugins/Interface/ParametersQtDialog.cxx index 1cc5820..80d73a2 100644 --- a/lib/cpPlugins/Interface/ParametersQtDialog.cxx +++ b/lib/cpPlugins/Interface/ParametersQtDialog.cxx @@ -1,47 +1,238 @@ #include +#ifdef cpPlugins_Interface_QT4 + #include -#include + +#include + +#include +#include +#include +#include +#include #include -#include #include #include #include -#include #include -#include #include // ------------------------------------------------------------------------- -bool cpPlugins::Interface:: -ParametersQtDialog( - Parameters& parameters, const std::string& title, QWidget* parent - ) +cpPlugins::Interface::ParametersQtDialog:: +ParametersQtDialog( QWidget* parent, Qt::WindowFlags f ) + : QDialog( parent, f ), + m_Parameters( NULL ), + m_IsModal( false ), + m_Interactor( NULL ) { - // Create dialog with a simple layout - QDialog* dlg = new QDialog( parent ); - dlg->setWindowFlags( Qt::FramelessWindowHint ); - dlg->setWindowFlags( Qt::WindowTitleHint ); - QGridLayout* gridLayout = new QGridLayout( dlg ); - QVBoxLayout* verticalLayout = new QVBoxLayout( ); + this->m_Title = new QLabel( this ); + this->m_Title->setText( "Parameters dialog title" ); - // Put a title - QLabel* dlg_title = new QLabel( dlg ); - dlg_title->setText( title.c_str( ) ); - verticalLayout->addWidget( dlg_title ); + this->m_MainLayout = new QGridLayout( this ); + this->m_ToolsLayout = new QVBoxLayout( ); + this->m_ToolsLayout->addWidget( this->m_Title ); + this->m_MainLayout->addLayout( this->m_ToolsLayout, 0, 0, 1, 1 ); +} + +// ------------------------------------------------------------------------- +cpPlugins::Interface::ParametersQtDialog:: +~ParametersQtDialog( ) +{ + delete this->m_Title; + delete this->m_MainLayout; + delete this->m_ToolsLayout; + + for( unsigned int i = 0; i < this->m_Widgets.size( ); ++i ) + this->m_Widgets[ i ]->Delete( ); +} + +// ------------------------------------------------------------------------- +bool cpPlugins::Interface::ParametersQtDialog:: +IsModal( ) const +{ + return( this->m_IsModal ); +} + +// ------------------------------------------------------------------------- +cpPlugins::Interface:: +Parameters* cpPlugins::Interface::ParametersQtDialog:: +getParameters( ) const +{ + return( this->m_Parameters ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ParametersQtDialog:: +setInteractor( vtkRenderWindowInteractor* interactor ) +{ + this->m_Interactor = interactor; +} + +// ------------------------------------------------------------------------- +bool cpPlugins::Interface::ParametersQtDialog:: +setParameters( Parameters* parameters ) +{ + this->m_IsModal = true; + this->m_Parameters = parameters; + if( this->m_Parameters == NULL ) + return( false ); // Put values - std::vector< std::string > names = parameters.GetParameters( ); + std::vector< std::string > names; + this->m_Parameters->GetNames( names ); std::vector< std::string >::const_iterator nIt = names.begin( ); for( ; nIt != names.end( ); ++nIt ) { - Parameters::Type pt = parameters.GetParameterType( *nIt ); + Parameters::Type pt = this->m_Parameters->GetType( *nIt ); + + QWidget* w_input = NULL; + if( pt == Parameters::String ) + { + QLineEdit* v_string = new QLineEdit( this ); + v_string->setText( "Enter some text!!!" ); + w_input = v_string; + } + else if( pt == Parameters::Bool ) + { + QCheckBox* v_bool = new QCheckBox( this ); + v_bool->setText( "[ON/OFF]" ); + v_bool->setChecked( this->m_Parameters->GetBool( *nIt ) ); + w_input = v_bool; + } + else if( pt == Parameters::Uint ) + { + QSpinBox* v_uint = new QSpinBox( this ); + v_uint->setMinimum( 0 ); + v_uint->setMaximum( std::numeric_limits< int >::max( ) ); + v_uint->setValue( this->m_Parameters->GetUint( *nIt ) ); + w_input = v_uint; + } + else if( pt == Parameters::Int ) + { + QSpinBox* v_int = new QSpinBox( this ); + v_int->setMinimum( -std::numeric_limits< int >::max( ) ); + v_int->setMaximum( std::numeric_limits< int >::max( ) ); + v_int->setValue( this->m_Parameters->GetInt( *nIt ) ); + w_input = v_int; + } + else if( pt == Parameters::Real ) + { + QDoubleSpinBox* v_double = new QDoubleSpinBox( this ); + v_double->setDecimals( 3 ); + v_double->setMinimum( -std::numeric_limits< double >::max( ) ); + v_double->setMaximum( std::numeric_limits< double >::max( ) ); + v_double->setValue( this->m_Parameters->GetReal( *nIt ) ); + w_input = v_double; + } + else if( + pt == Parameters::StringList || + pt == Parameters::IntList || + pt == Parameters::UintList || + pt == Parameters::RealList + ) + { + cpPlugins::Interface::ParametersListWidget* l_double = + new cpPlugins::Interface::ParametersListWidget( *nIt, this ); + w_input = l_double; + } + else if( pt == Parameters::Point || pt == Parameters::Index ) + { + if( this->m_Interactor != NULL ) + { + // Create a point widget and its representation + vtkSmartPointer< vtkPointHandleRepresentation3D > handle = + vtkSmartPointer< vtkPointHandleRepresentation3D >::New( ); + handle->GetProperty( )->SetColor( 1, 0, 0 ); + vtkSmartPointer< vtkSeedRepresentation > rep = + vtkSmartPointer< vtkSeedRepresentation >::New( ); + rep->SetHandleRepresentation( handle ); + + cpExtensions::Interaction::SeedWidget* widget = + cpExtensions::Interaction::SeedWidget::New( ); + widget->SetInteractor( this->m_Interactor ); + widget->SetRepresentation( rep ); + widget->On( ); + + this->m_Widgets.push_back( widget ); + this->m_IsModal = false; + + } // fi + + } // fi + + // Ok, a representation was created + if( w_input != NULL ) + { + w_input->setObjectName( QString( nIt->c_str( ) ) ); + + QHBoxLayout* new_layout = new QHBoxLayout( ); + QLabel* label = new QLabel( this ); + label->setText( QString( nIt->c_str( ) ) ); + new_layout->addWidget( label ); + new_layout->addWidget( w_input ); + this->m_ToolsLayout->addLayout( new_layout ); + + } // fi + + } // rof + return( this->m_IsModal ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ParametersQtDialog:: +setTitle( const std::string& title ) +{ + this->m_Title->setText( title.c_str( ) ); +} + +// ------------------------------------------------------------------------- +int cpPlugins::Interface::ParametersQtDialog:: +exec( ) +{ + if( !this->m_IsModal ) + return( 0 ); + + // Add buttons + QDialogButtonBox* bb = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel + ); + QObject::connect( bb, SIGNAL( accepted( ) ), this, SLOT( accept( ) ) ); + QObject::connect( bb, SIGNAL( rejected( ) ), this, SLOT( reject( ) ) ); + this->m_ToolsLayout->addWidget( bb ); + + return( this->QDialog::exec( ) ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ParametersQtDialog:: +show( ) +{ + if( this->m_IsModal ) + return; + + this->QDialog::show( ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ParametersQtDialog:: +syncParameters( ) +{ + std::cout << "TODO: SyncParameters" << std::endl; +} + + + + + + + + /* TODO enum Type { - Bool, Index, Point, StringList, @@ -50,9 +241,36 @@ ParametersQtDialog( UintList, IndexList, PointList, + Choices, NoType }; */ +/* +bool cpPlugins::Interface:: +ParametersQtDialog( + Parameters* parameters, const std::string& title, QWidget* parent + ) +{ + // Create dialog with a simple layout + QDialog* dlg = new QDialog( parent ); + dlg->setWindowFlags( Qt::FramelessWindowHint ); + dlg->setWindowFlags( Qt::WindowTitleHint ); + QGridLayout* gridLayout = new QGridLayout( dlg ); + QVBoxLayout* verticalLayout = new QVBoxLayout( ); + + // Put a title + QLabel* dlg_title = new QLabel( dlg ); + dlg_title->setText( title.c_str( ) ); + verticalLayout->addWidget( dlg_title ); + + // Put values + std::vector< std::string > names; + this->m_Parameters->GetNames( names ); + std::vector< std::string >::const_iterator nIt = names.begin( ); + for( ; nIt != names.end( ); ++nIt ) + { + Parameters::Type pt = this->m_Parameters->GetType( *nIt ); + QWidget* w_input = NULL; if( pt == Parameters::String ) { @@ -64,7 +282,7 @@ ParametersQtDialog( { QCheckBox* v_bool = new QCheckBox( dlg ); v_bool->setText( "[ON/OFF]" ); - v_bool->setChecked( parameters.GetValueAsBool( *nIt ) ); + v_bool->setChecked( this->m_Parameters->GetBool( *nIt ) ); w_input = v_bool; } else if( pt == Parameters::Uint ) @@ -72,7 +290,7 @@ ParametersQtDialog( QSpinBox* v_uint = new QSpinBox( dlg ); v_uint->setMinimum( 0 ); v_uint->setMaximum( std::numeric_limits< int >::max( ) ); - v_uint->setValue( parameters.GetValueAsUint( *nIt ) ); + v_uint->setValue( this->m_Parameters->GetUint( *nIt ) ); w_input = v_uint; } else if( pt == Parameters::Int ) @@ -80,7 +298,7 @@ ParametersQtDialog( QSpinBox* v_int = new QSpinBox( dlg ); v_int->setMinimum( -std::numeric_limits< int >::max( ) ); v_int->setMaximum( std::numeric_limits< int >::max( ) ); - v_int->setValue( parameters.GetValueAsInt( *nIt ) ); + v_int->setValue( this->m_Parameters->GetInt( *nIt ) ); w_input = v_int; } else if( pt == Parameters::Real ) @@ -89,27 +307,18 @@ ParametersQtDialog( v_double->setDecimals( 3 ); v_double->setMinimum( -std::numeric_limits< double >::max( ) ); v_double->setMaximum( std::numeric_limits< double >::max( ) ); - v_double->setValue( parameters.GetValueAsReal( *nIt ) ); + v_double->setValue( this->m_Parameters->GetReal( *nIt ) ); w_input = v_double; } - else if( pt == Parameters::RealList ) + else if( + pt == Parameters::StringList || + pt == Parameters::IntList || + pt == Parameters::UintList || + pt == Parameters::RealList + ) { - QStringList header; - header << nIt->c_str( ); - - QTableWidget* l_double = new QTableWidget( dlg ); - l_double->setColumnCount( 1 ); - l_double->setRowCount( 1 ); - l_double->setHorizontalHeaderLabels( header ); - l_double->setShowGrid( true ); - l_double->setSelectionBehavior( QAbstractItemView::SelectRows ); - l_double->setSelectionMode( QAbstractItemView::SingleSelection ); - - QObject::connect( - l_double, SIGNAL( cellDoubleClicked( int, int ) ), - l_double, SLOT( insertRow( int ) ) - ); - + cpPlugins::Interface::ParametersListWidget* l_double = + new cpPlugins::Interface::ParametersListWidget( *nIt, dlg ); w_input = l_double; } // fi @@ -148,53 +357,76 @@ ParametersQtDialog( nIt = names.begin( ); for( ; nIt != names.end( ); ++nIt ) { - Parameters::Type pt = parameters.GetParameterType( *nIt ); + Parameters::Type pt = this->m_Parameters->GetType( *nIt ); if( pt == Parameters::String ) { QLineEdit* v_string = dlg->findChild< QLineEdit* >( nIt->c_str( ) ); if( v_string != NULL ) - parameters.SetValueAsString( *nIt, v_string->text( ).toStdString( ) ); + this->m_Parameters->SetString( *nIt, v_string->text( ).toStdString( ) ); } else if( pt == Parameters::Bool ) { QCheckBox* v_bool = dlg->findChild< QCheckBox* >( nIt->c_str( ) ); if( v_bool != NULL ) - parameters.SetValueAsBool( *nIt, v_bool->isChecked( ) ); + this->m_Parameters->SetBool( *nIt, v_bool->isChecked( ) ); } else if( pt == Parameters::Uint ) { QSpinBox* v_uint = dlg->findChild< QSpinBox* >( nIt->c_str( ) ); if( v_uint != NULL ) - parameters.SetValueAsUint( *nIt, v_uint->value( ) ); + this->m_Parameters->SetUint( *nIt, v_uint->value( ) ); } else if( pt == Parameters::Int ) { QSpinBox* v_int = dlg->findChild< QSpinBox* >( nIt->c_str( ) ); if( v_int != NULL ) - parameters.SetValueAsInt( *nIt, v_int->value( ) ); + this->m_Parameters->SetInt( *nIt, v_int->value( ) ); } else if( pt == Parameters::Real ) { QDoubleSpinBox* v_double = dlg->findChild< QDoubleSpinBox* >( nIt->c_str( ) ); if( v_double != NULL ) - parameters.SetValueAsReal( *nIt, v_double->value( ) ); + this->m_Parameters->SetReal( *nIt, v_double->value( ) ); } - else if( pt == Parameters::RealList ) + else if( + pt == Parameters::StringList || + pt == Parameters::IntList || + pt == Parameters::UintList || + pt == Parameters::RealList + ) { - QTableWidget* l_double = - dlg->findChild< QTableWidget* >( nIt->c_str( ) ); + cpPlugins::Interface::ParametersListWidget* l_double = + dlg->findChild< cpPlugins::Interface::ParametersListWidget* >( + nIt->c_str( ) + ); if( l_double != NULL ) { - for( int r = 0; r < l_double->rowCount( ); ++r ) + if( pt == Parameters::StringList ) { - double v = - std::atof( - l_double->item( r, 0 )->text( ).toStdString( ).c_str( ) - ); - parameters.AddValueToRealList( *nIt, v ); + std::vector< std::string > values = l_double->GetStringValues( ); + for( int r = 0; r < values.size( ); ++r ) + this->m_Parameters->AddToStringList( *nIt, values[ r ] ); + } + else if( pt == Parameters::IntList ) + { + std::vector< int > values = l_double->GetIntValues( ); + for( int r = 0; r < values.size( ); ++r ) + this->m_Parameters->AddToIntList( *nIt, values[ r ] ); + } + else if( pt == Parameters::UintList ) + { + std::vector< unsigned int > values = l_double->GetUintValues( ); + for( int r = 0; r < values.size( ); ++r ) + this->m_Parameters->AddToUintList( *nIt, values[ r ] ); + } + else if( pt == Parameters::RealList ) + { + std::vector< double > values = l_double->GetDoubleValues( ); + for( int r = 0; r < values.size( ); ++r ) + this->m_Parameters->AddToRealList( *nIt, values[ r ] ); - } // rof + } // fi } // fi @@ -203,5 +435,8 @@ ParametersQtDialog( } // rof return( true ); } +*/ + +#endif // cpPlugins_Interface_QT4 // eof - $RCSfile$