+// -------------------------------------------------------------------------
+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->editor( )->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->editor( )->setWorkspace( this->m_Workspace );
+ this->_UpdateLoadedPlugins( );
+}
+