X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FPipelineEditor%2FPipelineEditor.cxx;h=05dee60e955b10fb76b82e359eaa850c7f574fd0;hb=2e142df11d6f312a2a2b5097b8da73571ed523e8;hp=5fe9bdf70014a9fb8eb6b7e2ab693cf5a73c022d;hpb=dc1614d6180dbb97486870a379ae73e2c70525a1;p=cpPlugins.git diff --git a/appli/PipelineEditor/PipelineEditor.cxx b/appli/PipelineEditor/PipelineEditor.cxx index 5fe9bdf..05dee60 100644 --- a/appli/PipelineEditor/PipelineEditor.cxx +++ b/appli/PipelineEditor/PipelineEditor.cxx @@ -1,435 +1,53 @@ -#include "PipelineEditor.h" -#include "ui_PipelineEditor.h" - -#include - -#include -#include +// ========================================================================= +// @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) +// ========================================================================= -#include -#include - -#include - -// ------------------------------------------------------------------------- -#define PipelineEditor_ConnectAction( ACTION ) \ - this->connect( \ - this->m_UI->Action##ACTION, SIGNAL( triggered( ) ), \ - this, SLOT( _Action##ACTION( ) ) \ - ) - -// ------------------------------------------------------------------------- -#define PipelineEditor_ConnectButton( BUTTON ) \ - this->connect( \ - this->m_UI->Button##BUTTON, SIGNAL( clicked( ) ), \ - this, SLOT( _Button##BUTTON( ) ) \ - ) - -// ------------------------------------------------------------------------- -bool PipelineEditor_Blocker:: -eventFilter( QObject* obj, QEvent* event ) -{ - return( true ); // -> Block all events - /* NOTE: correct implementation: - switch( event->type( ) ) - { - //list event you want to prevent here ... - case QEvent::KeyPress: - case QEvent::KeyRelease: - case QEvent::MouseButtonRelease: - case QEvent::MouseButtonPress: - case QEvent::MouseButtonDblClick: - //... - return( true ); - } // hctiws - return( this->QObject::eventFilter( obj, event ) ); - */ -} +#include "PipelineEditor.h" +#include // ------------------------------------------------------------------------- PipelineEditor:: -PipelineEditor( int argc, char* argv[], QApplication* app, QWidget* parent ) +PipelineEditor( QWidget* parent ) : QMainWindow( parent ), - m_UI( new Ui::PipelineEditor ), - m_Application( app ), - m_Workspace( NULL ), - m_PluginsPath( "." ) + Ui::PipelineEditor( ) { - this->m_UI->setupUi( this ); - - // Prepare plugins interface - QFileInfo info( argv[ 0 ] ); - if( info.exists( ) ) - { - this->m_PluginsPath = info.canonicalPath( ).toStdString( ); - this->_LoadPluginsFromPath( this->m_PluginsPath ); - - } // fi - - /* TODO - this->m_Interface = new cpPlugins::Interface( ); - this->m_PluginsPath = info.canonicalPath( ).toStdString( ); - if( !( this->m_Interface->LoadDefaultConfiguration( this->m_PluginsPath ) ) ) - if( this->m_Interface->LoadFromFolder( this->m_PluginsPath, false ) != "" ) - if( !( this->m_Interface->SaveDefaultConfiguration( this->m_PluginsPath ) ) ) - QMessageBox::critical( - this, - "Error creating default plugins configuration", - "Could not save default plugins configuration" - ); - this->_UpdateLoadedPlugins( ); - - } // fi - */ - - // Create an empty workspace - this->m_Workspace = new cpPlugins::Workspace( ); - this->m_Workspace->SetInterface( &( this->m_Interface ) ); - this->m_UI->Canvas->editor( )->setWorkspace( this->m_Workspace ); - this->m_Workspace->SetMPRViewer( this->m_UI->Viewer ); - - // Connect actions to slots - PipelineEditor_ConnectButton( LoadPluginsFile ); - PipelineEditor_ConnectButton( LoadPluginsPath ); - PipelineEditor_ConnectAction( OpenWorkspace ); - PipelineEditor_ConnectAction( SaveWorkspace ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( execFilter( const std::string& ) ), - this, - SLOT( _ExecFilter( const std::string& ) ) - ); - this->connect( - this->m_UI->Canvas->editor( ), - SIGNAL( showFilterOutput( const std::string&, const std::string& ) ), - this, - SLOT( _ShowFilterOutput( const std::string&, const std::string& ) ) - ); + this->setupUi( this ); } // ------------------------------------------------------------------------- PipelineEditor:: ~PipelineEditor( ) { - if( this->m_Workspace != NULL ) - delete this->m_Workspace; - delete this->m_UI; -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_LoadPluginsFromPath( const std::string& path ) -{ - QDir dir( path.c_str( ) ); - std::stringstream filters_str; - filters_str << "*." << cpPlugins_PLUGIN_EXT; - QStringList filters; - filters << filters_str.str( ).c_str( ); - auto files = dir.entryList( filters ); - for( auto fIt = files.begin( ); fIt != files.end( ); ++fIt ) - { - try - { - this->m_Interface.LoadPluginFile( fIt->toStdString( ) ); - } - catch( ... ) - { - // Just ignore un-loadable libraries - } - - } // yrt - this->_UpdateLoadedPlugins( ); -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_UpdateLoadedPlugins( ) -{ - this->_Block( ); - auto filters = this->m_Interface.GetFilters( ); - if( filters.size( ) == 0 ) - { - QMessageBox::critical( - this, - "Error loading default plugins", - "No plugins loaded: remember to load some!!!" - ); - return; - - } // fi - - for( auto cIt = filters.begin( ); cIt != filters.end( ); ++cIt ) - { - // Create or get category - QList< QTreeWidgetItem* > cat_items = - this->m_UI->LoadedPlugins->findItems( - cIt->first.c_str( ), Qt::MatchExactly | Qt::MatchRecursive - ); - QTreeWidgetItem* cat = NULL; - if( cat_items.size( ) == 0 ) - { - cat = new QTreeWidgetItem( - ( QTreeWidgetItem* )( NULL ), QStringList( cIt->first.c_str( ) ) - ); - this->m_UI->LoadedPlugins->addTopLevelItem( cat ); - } - else - cat = cat_items[ 0 ]; - - // Create filters - auto fIt = cIt->second.begin( ); - for( ; fIt != cIt->second.end( ); ++fIt ) - { - QList< QTreeWidgetItem* > filter_items = - this->m_UI->LoadedPlugins->findItems( - fIt->c_str( ), Qt::MatchExactly | Qt::MatchRecursive - ); - auto fiIt = filter_items.begin( ); - auto found_fiIt = filter_items.end( ); - for( ; fiIt != filter_items.end( ); ++fiIt ) - if( ( *fiIt )->parent( ) == cat ) - found_fiIt = fiIt; - - // Add filter - if( found_fiIt == filter_items.end( ) ) - QTreeWidgetItem* filter = new QTreeWidgetItem( - cat, QStringList( fIt->c_str( ) ) - ); - - } // rof - - } // rof - this->_UnBlock( ); -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_Block( ) -{ - this->m_Application->setOverrideCursor( Qt::WaitCursor ); - this->m_Application->installEventFilter( &( this->m_Blocker ) ); } // ------------------------------------------------------------------------- -void PipelineEditor:: -_UnBlock( ) -{ - while( this->m_Application->overrideCursor( ) ) - this->m_Application->restoreOverrideCursor( ); - this->m_Application->removeEventFilter( &( this->m_Blocker ) ); -} +#include +#include +#include -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ButtonLoadPluginsFile( ) +int main( int argc, char* argv[] ) { - /* - QFileDialog dlg( this ); - dlg.setFileMode( QFileDialog::ExistingFiles ); - dlg.setDirectory( "." ); - - std::stringstream name_filter; - std::string suffix = std::string( cpPlugins_PLUGIN_EXT ).substr( 1 ); - - name_filter << "Plugins file (*" << cpPlugins_PLUGIN_EXT << ");;All files (*)"; - dlg.setNameFilter( name_filter.str( ).c_str( ) ); - dlg.setDefaultSuffix( suffix.c_str( ) ); - - if( !( dlg.exec( ) ) ) - return; + // TODO: Q_INIT_RESOURCE(application); - // Read - QStringList names = dlg.selectedFiles( ); - std::stringstream err_str; - for( auto qIt = names.begin( ); qIt != names.end( ); ++qIt ) - err_str << this->m_Interface->Load( qIt->toStdString( ) ); + QApplication app( argc, argv ); + QCoreApplication::setOrganizationName( "Creatis-PUJ" ); + QCoreApplication::setApplicationName( "cpPlugins_PipelineEditor" ); + QCoreApplication::setApplicationVersion( "1.0.0" ); - // Show an error message - std::string err = err_str.str( ); - if( err.size( ) > 0 ) - QMessageBox::critical( - this, - "Error loading plugins", - err.c_str( ) - ); + QCommandLineParser parser; + parser.setApplicationDescription( QCoreApplication::applicationName( ) ); + parser.addHelpOption( ); + parser.addVersionOption( ); + parser.addPositionalArgument( "file", "The file to open." ); + parser.process( app ); - // Update view - this->m_Interface->SaveDefaultConfiguration( this->m_PluginsPath ); - this->_UpdateLoadedPlugins( ); - */ -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ButtonLoadPluginsPath( ) -{ - /* - QFileDialog dlg( this ); - dlg.setFileMode( QFileDialog::DirectoryOnly ); - dlg.setDirectory( "." ); - if( !( dlg.exec( ) ) ) - return; - - // Read - std::string dir = dlg.selectedFiles( ).begin( )->toStdString( ); - std::string err = this->m_Interface->LoadFromFolder( dir, false ); - if( err != "" ) - QMessageBox::critical( - this, - "Error loading plugins directory", - err.c_str( ) - ); - - // Update view - this->m_Interface->SaveDefaultConfiguration( this->m_PluginsPath ); - this->_UpdateLoadedPlugins( ); + PipelineEditor win; + /* TODO + if( !parser.positionalArguments( ).isEmpty( ) ) + win.loadFile( parser.positionalArguments( ).first( ) ); */ -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ActionOpenWorkspace( ) -{ - QFileDialog dlg( this ); - dlg.setFileMode( QFileDialog::ExistingFile ); - dlg.setDirectory( "." ); - dlg.setNameFilter( - QFileDialog::tr( "Workspace file (*.wxml);;All files (*)" ) - ); - dlg.setDefaultSuffix( QFileDialog::tr( "wxml" ) ); - if( !( dlg.exec( ) ) ) - return; - - std::string fname = dlg.selectedFiles( ).at( 0 ).toStdString( ); - if( this->m_Workspace != NULL ) - delete this->m_Workspace; - this->m_Workspace = new cpPlugins::Workspace( ); - this->m_Workspace->SetInterface( &( this->m_Interface ) ); - this->m_Workspace->SetMPRViewer( this->m_UI->Viewer ); - std::string err = this->m_Workspace->LoadWorkspace( fname ); - if( err != "" ) - { - delete this->m_Workspace; - this->m_Workspace = NULL; - QMessageBox::critical( - this, - QMessageBox::tr( "Error loading workspace" ), - QMessageBox::tr( err.c_str( ) ) - ); - } - else - this->m_UI->Canvas->editor( )->setWorkspace( this->m_Workspace ); -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ActionSaveWorkspace( ) -{ - if( this->m_Workspace == NULL ) - return; - - QFileDialog dlg( this ); - dlg.setFileMode( QFileDialog::AnyFile ); - dlg.setDirectory( "." ); - dlg.setAcceptMode( QFileDialog::AcceptSave ); - dlg.setNameFilter( - QFileDialog::tr( "Workspace file (*.wxml);;All files (*)" ) - ); - dlg.setDefaultSuffix( QFileDialog::tr( "wxml" ) ); - if( !( dlg.exec( ) ) ) - return; - std::string fname = dlg.selectedFiles( ).at( 0 ).toStdString( ); - - std::string err = this->m_Workspace->SaveWorkspace( fname ); - if( err != "" ) - QMessageBox::critical( - this, - QMessageBox::tr( "Error saving workspace" ), - QMessageBox::tr( err.c_str( ) ) - ); -} - - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ExecFilter( const std::string& filter_name ) -{ - if( this->m_Workspace != NULL ) - { - // Update filter, if needed - this->_Block( ); - std::string err = this->m_Workspace->Execute( filter_name ); - this->_UnBlock( ); - if( err != "" ) - QMessageBox::critical( - this, - QMessageBox::tr( "Error executing filter" ), - QMessageBox::tr( err.c_str( ) ) - ); - - } // fi -} - -// ------------------------------------------------------------------------- -void PipelineEditor:: -_ShowFilterOutput( - const std::string& filter_name, const std::string& output_name - ) -{ - typedef cpPlugins::DataObject _TDataObject; - - // Update filter, if needed - this->_ExecFilter( filter_name ); - - // Get output - auto filter = this->m_Workspace->GetFilter( filter_name ); - if( filter != NULL ) - { - auto output = filter->GetOutputData( output_name ); - if( output != NULL ) - { - std::string data_name = output_name + "@" + filter_name; - auto idata = output->GetVTK< vtkImageData >( ); - auto mdata = output->GetVTK< vtkPolyData >( ); - if( idata != NULL ) - { - if( this->m_UI->Viewer->AddData( idata, data_name, "" ) ) - { - if( this->m_UI->Viewer->GetNumberOfData( ) > 1 ) - this->m_UI->Viewer->SetDataColor( data_name, 1, 0, 0 ); - else - this->m_UI->Viewer->SetMainImage( data_name ); - this->_Block( ); - this->m_UI->Viewer->ShowData( data_name ); - this->_UnBlock( ); - - } // fi - } - else if( mdata != NULL ) - { - } - else - QMessageBox::critical( - this, - QMessageBox::tr( "Error showing data" ), - QMessageBox::tr( "No known VTK conversion!" ) - ); - - /* TODO - if( this->m_UI->Viewer->AddData( output, data_name, "" ) ) - { - if( this->m_UI->Viewer->GetNumberOfData( ) > 1 ) - this->m_UI->Viewer->SetDataColor( data_name, 1, 0, 0 ); - else - this->m_UI->Viewer->SetMainImage( data_name ); - this->m_UI->Viewer->ShowData( data_name ); - } - else - */ - - } // fi - - } // fi + win.show( ); + return( app.exec( ) ); } // eof - $RCSfile$