X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FcpPipelineEditor%2FcpPipelineEditor.cxx;h=8d838b829e821b299014d71d70624a51b01ed203;hb=9c75dcecf566cc567583caf4687ce523a2af586d;hp=87fd6c86e65984f7c81926d1aeac700462407da9;hpb=dd763c7c99bb59edcc7035738ff1ad10255e2525;p=cpPlugins.git diff --git a/appli/cpPipelineEditor/cpPipelineEditor.cxx b/appli/cpPipelineEditor/cpPipelineEditor.cxx index 87fd6c8..8d838b8 100644 --- a/appli/cpPipelineEditor/cpPipelineEditor.cxx +++ b/appli/cpPipelineEditor/cpPipelineEditor.cxx @@ -12,6 +12,13 @@ this, SLOT( _Action##ACTION( ) ) \ ) +// ------------------------------------------------------------------------- +#define cpPipelineEditor_ConnectButton( BUTTON ) \ + QObject::connect( \ + this->m_UI->Button##BUTTON, SIGNAL( clicked( ) ), \ + this, SLOT( _Button##BUTTON( ) ) \ + ) + // ------------------------------------------------------------------------- cpPipelineEditor:: cpPipelineEditor( QWidget* parent ) @@ -22,6 +29,8 @@ cpPipelineEditor( QWidget* parent ) this->m_UI->setupUi( this ); // Connect actions to slots + cpPipelineEditor_ConnectButton( LoadPluginsFile ); + cpPipelineEditor_ConnectButton( LoadPluginsPath ); cpPipelineEditor_ConnectAction( OpenWorkspace ); } @@ -34,6 +43,131 @@ cpPipelineEditor:: delete this->m_Workspace; } +// ------------------------------------------------------------------------- +void cpPipelineEditor:: +_UpdateLoadedPlugins( ) +{ + typedef cpPlugins::Interface::Workspace::TStringContainer _TStrings; + + if( this->m_Workspace == NULL ) + return; + + _TStrings categories; + this->m_Workspace->GetLoadedPluginCategories( categories ); + for( auto cIt = categories.begin( ); cIt != categories.end( ); ++cIt ) + { + // Create or get category + QList< QTreeWidgetItem* > cat_items = + this->m_UI->LoadedPlugins->findItems( + cIt->c_str( ), Qt::MatchExactly | Qt::MatchRecursive + ); + QTreeWidgetItem* cat = NULL; + if( cat_items.size( ) == 0 ) + { + cat = new QTreeWidgetItem( + ( QTreeWidgetItem* )( NULL ), QStringList( cIt->c_str( ) ) + ); + this->m_UI->LoadedPlugins->addTopLevelItem( cat ); + } + else + cat = cat_items[ 0 ]; + + // Add filters + _TStrings filters = this->m_Workspace->GetLoadedPluginFilters( *cIt ); + for( auto fIt = filters.begin( ); fIt != filters.end( ); ++fIt ) + { + // Find filter + 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 +} + +// ------------------------------------------------------------------------- +void cpPipelineEditor:: +_ButtonLoadPluginsFile( ) +{ + QFileDialog dlg( this ); + dlg.setFileMode( QFileDialog::ExistingFiles ); + dlg.setDirectory( "." ); +#ifdef _WIN32 + dlg.setNameFilter( "Plugins file (*.dll);;All files (*)" ); + dlg.setDefaultSuffix( "dll" ); +#else // _WIN32 + dlg.setNameFilter( "Plugins file (*.so);;All files (*)" ); + dlg.setDefaultSuffix( "so" ); +#endif // _WIN32 + if( !( dlg.exec( ) ) ) + return; + + // Create a new workspace, if not ready + if( this->m_Workspace == NULL ) + this->m_Workspace = new cpPlugins::Interface::Workspace( ); + + // Read + QStringList names = dlg.selectedFiles( ); + std::stringstream err_str; + for( auto qIt = names.begin( ); qIt != names.end( ); ++qIt ) + if( !( this->m_Workspace->LoadPlugins( qIt->toStdString( ) ) ) ) + err_str << qIt->toStdString( ) << std::endl; + + // Show an error message + std::string err = err_str.str( ); + if( err.size( ) > 0 ) + QMessageBox::critical( + this, + "Error loading plugins", + err.c_str( ) + ); + + // Update view + this->m_UI->Canvas->setWorkspace( this->m_Workspace ); + this->_UpdateLoadedPlugins( ); +} + +// ------------------------------------------------------------------------- +void cpPipelineEditor:: +_ButtonLoadPluginsPath( ) +{ + QFileDialog dlg( this ); + dlg.setFileMode( QFileDialog::DirectoryOnly ); + dlg.setDirectory( "." ); + if( !( dlg.exec( ) ) ) + return; + + // Create a new workspace, if not ready + if( this->m_Workspace == NULL ) + this->m_Workspace = new cpPlugins::Interface::Workspace( ); + + // Read + std::string dir = dlg.selectedFiles( ).begin( )->toStdString( ); + if( !( this->m_Workspace->LoadPluginsPath( dir, false ) ) ) + QMessageBox::critical( + this, + "Error loading plugins directory", + dir.c_str( ) + ); + + // Update view + this->m_UI->Canvas->setWorkspace( this->m_Workspace ); + this->_UpdateLoadedPlugins( ); +} + // ------------------------------------------------------------------------- void cpPipelineEditor:: _ActionOpenWorkspace( )