#include <limits>
#include <cpPlugins/Interface/ParametersListWidget.h>
+#include <cpPlugins/Interface/ProcessObject.h>
-#include <vtkSmartPointer.h>
-#include <cpExtensions/Interaction/SeedWidget.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkSeedRepresentation.h>
+#include <vtkCommand.h>
+#include <vtkRenderWindowInteractor.h>
#include <QCheckBox>
-#include <QDialogButtonBox>
+#include <QComboBox>
#include <QDoubleSpinBox>
+#include <QFileDialog>
#include <QHBoxLayout>
+#include <QInputDialog>
#include <QLineEdit>
+#include <QPushButton>
#include <QWidget>
+/* TODO
+class SingleSeedCommand
+ : public vtkCommand
+{
+public:
+ static SingleSeedCommand* New( )
+ { return( new SingleSeedCommand ); }
+ virtual void Execute( vtkObject* caller, unsigned long eid, void* data )
+ {
+ // Get seed, avoiding segfaults!!!
+ if( eid != vtkCommand::PlacePointEvent || this->Dialog == NULL )
+ return;
+ vtkSeedWidget* widget = dynamic_cast< vtkSeedWidget* >( caller );
+ if( widget == NULL )
+ return;
+ vtkSeedRepresentation* rep = widget->GetSeedRepresentation( );
+ if( rep == NULL )
+ return;
+ if( rep->GetNumberOfSeeds( ) == 0 )
+ return;
+ double seed[ 3 ];
+ rep->GetSeedWorldPosition( 0, seed );
+
+ // Delete all seeds (remember that this command is just for one seed)
+ while( rep->GetNumberOfSeeds( ) > 0 )
+ widget->DeleteSeed( 0 );
+
+ if( this->Dialog->getParameters( )->HasIndex( this->Name ) )
+ {
+ }
+ else if( this->Dialog->getParameters( )->HasPoint( this->Name ) )
+ {
+ this->Dialog->getParameters( )->SetPoint( this->Name, 3, seed );
+ this->Dialog->updateParameters( );
+ auto filter = this->Dialog->getParameters( )->GetProcessObject( );
+ if( filter != NULL )
+ {
+ auto plugins = filter->GetPlugins( );
+ if( plugins != NULL )
+ {
+ auto app = plugins->GetApplication( );
+ if( app != NULL )
+ app->UpdateActualFilter( );
+
+ } // fi
+
+ } // fi
+
+ } // fi
+ }
+protected:
+ SingleSeedCommand( )
+ : vtkCommand( ),
+ Dialog( NULL )
+ {
+ }
+ virtual ~SingleSeedCommand( )
+ {
+ }
+
+public:
+ cpPlugins::Interface::ParametersQtDialog* Dialog;
+ std::string Name;
+};
+*/
+
// -------------------------------------------------------------------------
cpPlugins::Interface::ParametersQtDialog::
ParametersQtDialog( QWidget* parent, Qt::WindowFlags f )
: QDialog( parent, f ),
m_Parameters( NULL ),
- m_IsModal( false ),
- m_Interactor( NULL )
+ m_Interactive( false )
{
this->m_Title = new QLabel( this );
this->m_Title->setText( "Parameters dialog title" );
~ParametersQtDialog( )
{
delete this->m_Title;
- delete this->m_MainLayout;
delete this->m_ToolsLayout;
+ delete this->m_MainLayout;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Interface::
+Parameters* cpPlugins::Interface::ParametersQtDialog::
+getParameters( ) const
+{
+ return( this->m_Parameters );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+addInteractor( vtkRenderWindowInteractor* interactor )
+{
+ this->m_Interactors.insert( interactor );
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Interface::ParametersQtDialog::
+TInteractors& cpPlugins::Interface::ParametersQtDialog::
+getInteractors( )
+{
+ return( this->m_Interactors );
+}
- for( unsigned int i = 0; i < this->m_Widgets.size( ); ++i )
- this->m_Widgets[ i ]->Delete( );
+// -------------------------------------------------------------------------
+const cpPlugins::Interface::ParametersQtDialog::
+TInteractors& cpPlugins::Interface::ParametersQtDialog::
+getInteractors( ) const
+{
+ return( this->m_Interactors );
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::ParametersQtDialog::
-IsModal( ) const
+isInteractive( ) const
{
- return( this->m_IsModal );
+ return( this->m_Interactive );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::
-Parameters* cpPlugins::Interface::ParametersQtDialog::
-getParameters( ) const
+void cpPlugins::Interface::ParametersQtDialog::
+setInteractive( bool i )
{
- return( this->m_Parameters );
+ this->m_Interactive = i;
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+interactiveOn( )
+{
+ this->m_Interactive = true;
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::ParametersQtDialog::
-setInteractor( vtkRenderWindowInteractor* interactor )
+interactiveOff( )
{
- this->m_Interactor = interactor;
+ this->m_Interactive = false;
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::ParametersQtDialog::
setParameters( Parameters* parameters )
{
- this->m_IsModal = true;
- this->m_Parameters = parameters;
- if( this->m_Parameters == NULL )
+ if( this->m_Parameters != NULL || parameters == NULL )
return( false );
+ this->m_Parameters = parameters;
+
+ // Set dialog title
+ auto filter = this->m_Parameters->GetProcessObject( );
+ std::stringstream title;
+ title << "Parameters for \"" << filter->GetName( ) << "\"";
+ this->m_Title->setText( title.str( ).c_str( ) );
// 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 )
+ this->m_Widgets.clear( );
+ auto& raw_params = this->m_Parameters->GetRawParameters( );
+ for( auto pIt = raw_params.begin( ); pIt != raw_params.end( ); ++pIt )
{
- Parameters::Type pt = this->m_Parameters->GetType( *nIt );
-
QWidget* w_input = NULL;
- if( pt == Parameters::String )
+ switch( pIt->second.first )
+ {
+ case Parameters::String:
{
QLineEdit* v_string = new QLineEdit( this );
- v_string->setText( "Enter some text!!!" );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
w_input = v_string;
}
- else if( pt == Parameters::Bool )
+ break;
+ case Parameters::Bool:
{
QCheckBox* v_bool = new QCheckBox( this );
+ v_bool->setObjectName( pIt->first.c_str( ) );
v_bool->setText( "[ON/OFF]" );
- v_bool->setChecked( this->m_Parameters->GetBool( *nIt ) );
+ v_bool->setChecked( pIt->second.second == "1" );
w_input = v_bool;
}
- else if( pt == Parameters::Uint )
+ break;
+ case Parameters::Int:
+ case Parameters::Uint:
{
+ std::istringstream tok_str( pIt->second.second );
+ int v;
+ tok_str >> v;
QSpinBox* v_uint = new QSpinBox( this );
- v_uint->setMinimum( 0 );
+ v_uint->setObjectName( pIt->first.c_str( ) );
+ if( pIt->second.first == Parameters::Uint )
+ v_uint->setMinimum( 0 );
+ else
+ v_uint->setMinimum( -std::numeric_limits< int >::max( ) );
v_uint->setMaximum( std::numeric_limits< int >::max( ) );
- v_uint->setValue( this->m_Parameters->GetUint( *nIt ) );
+ v_uint->setValue( v );
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 )
+ break;
+ case Parameters::Real:
{
+ std::istringstream tok_str( pIt->second.second );
+ double v;
+ tok_str >> v;
QDoubleSpinBox* v_double = new QDoubleSpinBox( this );
+ v_double->setObjectName( pIt->first.c_str( ) );
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 ) );
+ v_double->setValue( v );
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;
+ break;
+ case Parameters::OpenFileName:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "..." );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_OpenSingleFile( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
}
- else if( pt == Parameters::Point || pt == Parameters::Index )
+ case Parameters::SaveFileName:
{
- 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
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "..." );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_SaveSingleFile( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::PathName:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "..." );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_OpenSinglePath( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::StringList:
+ break;
+ case Parameters::BoolList:
+ break;
+ case Parameters::IntList:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "+" );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_AddInt( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::UintList:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "+" );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_AddUint( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::RealList:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "+" );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_AddReal( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::OpenFileNameList:
+ {
+ QFrame* frame = new QFrame( this );
+ QHBoxLayout* layout = new QHBoxLayout( frame );
+ QLineEdit* v_string = new QLineEdit( frame );
+ v_string->setObjectName( pIt->first.c_str( ) );
+ v_string->setText( pIt->second.second.c_str( ) );
+ QPushButton* v_button = new QPushButton( frame );
+ v_button->setObjectName( ( pIt->first + "_=?btn" ).c_str( ) );
+ v_button->setText( "..." );
+ v_button->connect(
+ v_button, SIGNAL( clicked( ) ),
+ this, SLOT( _dlg_OpenMultipleFiles( ) )
+ );
+ layout->addWidget( v_string );
+ layout->addWidget( v_button );
+ w_input = frame;
+ }
+ break;
+ case Parameters::SaveFileNameList:
+ break;
+ case Parameters::PathNameList:
+ break;
+ case Parameters::Choices:
+ {
+ QComboBox* v_choices = new QComboBox( this );
+ v_choices->setObjectName( pIt->first.c_str( ) );
+
+ std::istringstream str0( pIt->second.second );
+ std::string choices;
+ std::getline( str0, choices, '@' );
+ std::istringstream str1( choices );
+ std::string token;
+ int id = 0;
+ while( std::getline( str1, token, '#' ) )
+ v_choices->insertItem( id++, token.c_str( ) );
+ w_input = v_choices;
+ }
+ break;
+ default:
+ w_input = NULL;
+ break;
+ } // hctiws
// 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( ) ) );
+ label->setText( QString( pIt->first.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( ) );
+ // Add buttons
+ this->m_Buttons = new QDialogButtonBox(
+ QDialogButtonBox::Ok | QDialogButtonBox::Cancel
+ );
+ this->connect(
+ this->m_Buttons, SIGNAL( accepted( ) ), this, SLOT( accept( ) )
+ );
+ this->connect(
+ this->m_Buttons, SIGNAL( rejected( ) ), this, SLOT( reject( ) )
+ );
+ this->m_ToolsLayout->addWidget( this->m_Buttons );
+
+ // Update values
+ this->updateView( );
+
+ return( true );
}
// -------------------------------------------------------------------------
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 );
-
int ret = this->QDialog::exec( );
- this->syncParameters( );
+ if( ret == 1 )
+ this->updateParameters( );
+ else
+ this->updateView( );
return( ret );
}
void cpPlugins::Interface::ParametersQtDialog::
show( )
{
- if( this->m_IsModal )
- return;
-
this->QDialog::show( );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::ParametersQtDialog::
-syncParameters( )
+updateParameters( )
{
- std::cout << "TODO: SyncParameters" << std::endl;
-}
-
-
-
-
-
-
-
-
-
-/* TODO
- enum Type
- {
- Index,
- Point,
- StringList,
- BoolList,
- IntList,
- 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 );
+ if( this->m_Parameters == NULL )
+ return;
// 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 )
- {
- QLineEdit* v_string = new QLineEdit( dlg );
- v_string->setText( "Enter some text!!!" );
- w_input = v_string;
- }
- else if( pt == Parameters::Bool )
+ auto& raw_params = this->m_Parameters->GetRawParameters( );
+ for( auto pIt = raw_params.begin( ); pIt != raw_params.end( ); ++pIt )
{
- QCheckBox* v_bool = new QCheckBox( dlg );
- 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( dlg );
- 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( dlg );
- 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( dlg );
- 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, dlg );
- w_input = l_double;
-
- } // fi
+ QString pName = pIt->first.c_str( );
+ switch( pIt->second.first )
+ {
+ case Parameters::String:
+ case Parameters::OpenFileName:
+ case Parameters::SaveFileName:
+ case Parameters::PathName:
+ case Parameters::IntList:
+ case Parameters::UintList:
+ case Parameters::RealList:
+ case Parameters::OpenFileNameList:
+ {
+ QLineEdit* v_string = this->findChild< QLineEdit* >( pName );
+ if( v_string != NULL )
+ pIt->second.second = v_string->text( ).toStdString( );
+ }
+ break;
+ case Parameters::Bool:
+ {
+ QCheckBox* v_bool = this->findChild< QCheckBox* >( pName );
+ if( v_bool != NULL )
+ pIt->second.second = ( v_bool->isChecked( ) )? "1": "0";
+ }
+ break;
+ case Parameters::Int:
+ case Parameters::Uint:
+ {
+ QSpinBox* v_uint = this->findChild< QSpinBox* >( pName );
+ if( v_uint )
+ {
+ std::stringstream str;
+ str << v_uint->value( );
+ pIt->second.second = str.str( );
- // Ok, a representation was created
- if( w_input != NULL )
+ } // fi
+ }
+ break;
+ case Parameters::Real:
{
- w_input->setObjectName( QString( nIt->c_str( ) ) );
+ QDoubleSpinBox* v_double = this->findChild< QDoubleSpinBox* >( pName );
+ if( v_double )
+ {
+ std::stringstream str;
+ str << v_double->value( );
+ pIt->second.second = str.str( );
- QHBoxLayout* horizontalLayout = new QHBoxLayout( );
- QLabel* label = new QLabel( dlg );
- label->setText( QString( nIt->c_str( ) ) );
- horizontalLayout->addWidget( label );
- horizontalLayout->addWidget( w_input );
- verticalLayout->addLayout( horizontalLayout );
+ } // fi
+ }
+ break;
+ case Parameters::StringList:
+ break;
+ case Parameters::BoolList:
+ break;
+ case Parameters::SaveFileNameList:
+ break;
+ case Parameters::PathNameList:
+ break;
+ case Parameters::Choices:
+ {
+ QComboBox* v_choices = this->findChild< QComboBox* >( pName );
+ if( v_choices != NULL )
+ {
+ std::istringstream str_choices( pIt->second.second );
+ std::string real_choices;
+ std::getline( str_choices, real_choices, '@' );
+ pIt->second.second =
+ real_choices + "@" +
+ v_choices->currentText( ).toStdString( );
- } // fi
+ } // fi
+ }
+ break;
+ default:
+ break;
+ } // hctiws
- } // rof
+ } // rof
+}
- // Add buttons
- QDialogButtonBox* bb = new QDialogButtonBox(
- QDialogButtonBox::Ok | QDialogButtonBox::Cancel
- );
- QObject::connect( bb, SIGNAL( accepted( ) ), dlg, SLOT( accept( ) ) );
- QObject::connect( bb, SIGNAL( rejected( ) ), dlg, SLOT( reject( ) ) );
- verticalLayout->addWidget( bb );
- gridLayout->addLayout( verticalLayout, 0, 0, 1, 1 );
-
- // Execute
- QMetaObject::connectSlotsByName( dlg );
- if( !( dlg->exec( ) ) )
- return( false );
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+updateView( )
+{
+ if( this->m_Parameters == NULL )
+ return;
- // Get values back
- nIt = names.begin( );
- for( ; nIt != names.end( ); ++nIt )
+ // Put values
+ auto& raw_params = this->m_Parameters->GetRawParameters( );
+ for( auto pIt = raw_params.begin( ); pIt != raw_params.end( ); ++pIt )
+ {
+ QString pName = pIt->first.c_str( );
+ switch( pIt->second.first )
{
- Parameters::Type pt = this->m_Parameters->GetType( *nIt );
- if( pt == Parameters::String )
+ case Parameters::String:
+ case Parameters::OpenFileName:
+ case Parameters::SaveFileName:
+ case Parameters::PathName:
+ case Parameters::IntList:
+ case Parameters::UintList:
+ case Parameters::RealList:
+ case Parameters::OpenFileNameList:
{
- QLineEdit* v_string = dlg->findChild< QLineEdit* >( nIt->c_str( ) );
- if( v_string != NULL )
- this->m_Parameters->SetString( *nIt, v_string->text( ).toStdString( ) );
+ QLineEdit* v_string = this->findChild< QLineEdit* >( pName );
+ if( v_string != NULL )
+ v_string->setText( pIt->second.second.c_str( ) );
}
- else if( pt == Parameters::Bool )
+ break;
+ case Parameters::Bool:
{
- QCheckBox* v_bool = dlg->findChild< QCheckBox* >( nIt->c_str( ) );
- if( v_bool != NULL )
- this->m_Parameters->SetBool( *nIt, v_bool->isChecked( ) );
+ QCheckBox* v_bool = this->findChild< QCheckBox* >( pName );
+ if( v_bool != NULL )
+ v_bool->setChecked( pIt->second.second == "1" );
}
- else if( pt == Parameters::Uint )
+ break;
+ case Parameters::Int:
+ case Parameters::Uint:
{
- QSpinBox* v_uint = dlg->findChild< QSpinBox* >( nIt->c_str( ) );
- if( v_uint != NULL )
- this->m_Parameters->SetUint( *nIt, v_uint->value( ) );
+ QSpinBox* v_uint = this->findChild< QSpinBox* >( pName );
+ if( v_uint )
+ {
+ std::istringstream tok_str( pIt->second.second );
+ int v;
+ tok_str >> v;
+ v_uint->setValue( v );
+
+ } // fi
}
- else if( pt == Parameters::Int )
+ break;
+ case Parameters::Real:
{
- QSpinBox* v_int = dlg->findChild< QSpinBox* >( nIt->c_str( ) );
- if( v_int != NULL )
- this->m_Parameters->SetInt( *nIt, v_int->value( ) );
+ QDoubleSpinBox* v_double = this->findChild< QDoubleSpinBox* >( pName );
+ if( v_double )
+ {
+ std::istringstream tok_str( pIt->second.second );
+ double v;
+ tok_str >> v;
+ v_double->setValue( v );
+
+ } // fi
}
- else if( pt == Parameters::Real )
+ break;
+ case Parameters::StringList:
+ break;
+ case Parameters::BoolList:
+ break;
+ case Parameters::SaveFileNameList:
+ break;
+ case Parameters::PathNameList:
+ break;
+ case Parameters::Choices:
{
- QDoubleSpinBox* v_double =
- dlg->findChild< QDoubleSpinBox* >( nIt->c_str( ) );
- if( v_double != NULL )
- this->m_Parameters->SetReal( *nIt, v_double->value( ) );
+ QComboBox* v_choices = this->findChild< QComboBox* >( pName );
+ if( v_choices != NULL )
+ {
+ std::istringstream str_choices( pIt->second.second );
+ std::string choices, real_choice;
+ std::getline( str_choices, choices, '@' );
+ std::getline( str_choices, real_choice, '@' );
+ std::istringstream str( choices );
+ std::string token;
+ int id = -1, cont = 0;
+ while( std::getline( str, token, '#' ) )
+ {
+ if( token == real_choice )
+ id = cont;
+ cont++;
+
+ } // elihw
+
+ if( id > -1 )
+ v_choices->setCurrentIndex( id );
+
+ } // fi
}
- else if(
- pt == Parameters::StringList ||
- pt == Parameters::IntList ||
- pt == Parameters::UintList ||
- pt == Parameters::RealList
- )
- {
- cpPlugins::Interface::ParametersListWidget* l_double =
- dlg->findChild< cpPlugins::Interface::ParametersListWidget* >(
- nIt->c_str( )
- );
- if( l_double != NULL )
+ break;
+ default:
+ break;
+ } // hctiws
+
+ } // rof
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_OpenSingleFile( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
{
- if( pt == Parameters::StringList )
+ std::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ std::string param_value =
+ this->m_Parameters->GetOpenFileName( param_name );
+ if( param_value == "" )
+ param_value = ".";
+ QStringList filters;
+ filters << "Any file (*)";
+
+ // Show dialog and check if it was accepted
+ QFileDialog dialog( this );
+ dialog.setFileMode( QFileDialog::ExistingFile );
+ dialog.setDirectory( QFileDialog::tr( param_value.c_str( ) ) );
+ dialog.setNameFilters( filters );
+ dialog.setAcceptMode( QFileDialog::AcceptOpen );
+ if( dialog.exec( ) )
+ line->setText( *( dialog.selectedFiles( ).begin( ) ) );
+
+ } // fi
+
+ } // fi
+
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_SaveSingleFile( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
{
- 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::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ std::string param_value =
+ this->m_Parameters->GetSaveFileName( param_name );
+ if( param_value == "" )
+ param_value = ".";
+ QStringList filters;
+ filters << "Any file (*)";
+
+ // Show dialog and check if it was accepted
+ QFileDialog dialog( this );
+ dialog.setFileMode( QFileDialog::AnyFile );
+ dialog.setDirectory( QFileDialog::tr( param_value.c_str( ) ) );
+ dialog.setNameFilters( filters );
+ dialog.setAcceptMode( QFileDialog::AcceptSave );
+ if( dialog.exec( ) )
+ line->setText( *( dialog.selectedFiles( ).begin( ) ) );
+
+ } // fi
+
+ } // fi
+
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_OpenSinglePath( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
{
- 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::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ std::string param_value =
+ this->m_Parameters->GetPathName( param_name );
+ if( param_value == "" )
+ param_value = ".";
+
+ // Show dialog and check if it was accepted
+ QFileDialog dialog( this );
+ dialog.setFileMode( QFileDialog::Directory );
+ dialog.setDirectory( QFileDialog::tr( param_value.c_str( ) ) );
+ dialog.setAcceptMode( QFileDialog::AcceptOpen );
+ if( dialog.exec( ) )
+ line->setText( *( dialog.selectedFiles( ).begin( ) ) );
+
+ } // fi
+
+ } // fi
+
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_OpenMultipleFiles( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
{
- 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::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ QStringList filters;
+ filters << "Any file (*)";
+
+ // Show dialog and check if it was accepted
+ QFileDialog dialog( this );
+ dialog.setFileMode( QFileDialog::ExistingFiles );
+ dialog.setNameFilters( filters );
+ dialog.setAcceptMode( QFileDialog::AcceptOpen );
+ if( dialog.exec( ) )
+ {
+ if( dialog.selectedFiles( ).size( ) > 0 )
+ {
+ std::stringstream str;
+ auto files = dialog.selectedFiles( );
+ auto fIt = files.begin( );
+ str << fIt->toStdString( );
+ ++fIt;
+ for( ; fIt != files.end( ); ++fIt )
+ str << "#" << fIt->toStdString( );
+ line->setText( str.str( ).c_str( ) );
+
+ } // fi
+
+ } // fi
+
+ } // fi
+
+ } // fi
+
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_AddInt( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
{
- std::vector< double > values = l_double->GetDoubleValues( );
- for( int r = 0; r < values.size( ); ++r )
- this->m_Parameters->AddToRealList( *nIt, values[ r ] );
+ std::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ bool ok;
+ int value =
+ QInputDialog::getInt(
+ this,
+ (
+ std::string( "Add new value to \"" ) +
+ param_name +
+ std::string( "\"" )
+ ).c_str( ),
+ "Value:",
+ 0, -2147483647, 2147483647, 1,
+ &ok
+ );
+ if( ok )
+ {
+ std::string values = line->text( ).toStdString( );
+ if( values != "" )
+ values += "#";
+ std::stringstream str;
+ str << values << value;
+ line->setText( str.str( ).c_str( ) );
+
+ } // fi
+
+ } // fi
} // fi
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_AddUint( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
+ {
+ std::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ bool ok;
+ int value =
+ QInputDialog::getInt(
+ this,
+ (
+ std::string( "Add new value to \"" ) +
+ param_name +
+ std::string( "\"" )
+ ).c_str( ),
+ "Value:",
+ 0, 0, 2147483647, 1,
+ &ok
+ );
+ if( ok )
+ {
+ std::string values = line->text( ).toStdString( );
+ if( values != "" )
+ values += "#";
+ std::stringstream str;
+ str << values << value;
+ line->setText( str.str( ).c_str( ) );
+
+ } // fi
+
+ } // fi
+
} // fi
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::ParametersQtDialog::
+_dlg_AddReal( )
+{
+ QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
+ if( btn != NULL )
+ {
+ std::string bName = btn->objectName( ).toStdString( );
+ std::string line_name = bName.substr( 0, bName.find( "_=?btn" ) );
+ QLineEdit* line = this->findChild< QLineEdit* >( line_name.c_str( ) );
+ if( line != NULL )
+ {
+ std::string param_name = line->objectName( ).toStdString( );
+ if( param_name != "" )
+ {
+ bool ok;
+ double value =
+ QInputDialog::getDouble(
+ this,
+ (
+ std::string( "Add new value to \"" ) +
+ param_name +
+ std::string( "\"" )
+ ).c_str( ),
+ "Value:",
+ 0, -2147483647, 2147483647, 1,
+ &ok
+ );
+ if( ok )
+ {
+ std::string values = line->text( ).toStdString( );
+ if( values != "" )
+ values += "#";
+ std::stringstream str;
+ str << values << value;
+ line->setText( str.str( ).c_str( ) );
+
+ } // fi
+
+ } // fi
+
} // fi
- } // rof
- return( true );
- }
-*/
+ } // fi
+}
#endif // cpPlugins_Interface_QT4