#include "cpPipelineEditor.h"
#include "ui_cpPipelineEditor.h"
+#include "QNodesEditor.h"
+
#include <QFileDialog>
#include <QMessageBox>
#include <cpPlugins/Interface/Workspace.h>
// -------------------------------------------------------------------------
cpPipelineEditor::
-cpPipelineEditor( QWidget* parent )
+cpPipelineEditor( int argc, char* argv[], QWidget* parent )
: QMainWindow( parent ),
m_UI( new Ui::cpPipelineEditor ),
m_Workspace( NULL )
{
this->m_UI->setupUi( this );
+ // Prepare plugins interface
+ this->m_Plugins = new cpPlugins::Interface::Interface( );
+ QFileInfo info( argv[ 0 ] );
+ if( info.exists( ) )
+ {
+ std::string path = info.canonicalPath( ).toStdString( );
+ if( !( this->m_Plugins->LoadDefaultConfiguration( path ) ) )
+ if( this->m_Plugins->LoadFromFolder( path, false ) )
+ if( !( this->m_Plugins->SaveDefaultConfiguration( path ) ) )
+ 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::Interface::Workspace( );
+ this->m_Workspace->SetInterface( this->m_Plugins );
+ this->m_UI->Canvas->editor( )->setWorkspace( this->m_Workspace );
+
// Connect actions to slots
cpPipelineEditor_ConnectButton( LoadPluginsFile );
cpPipelineEditor_ConnectButton( LoadPluginsPath );
cpPipelineEditor_ConnectAction( OpenWorkspace );
+ cpPipelineEditor_ConnectAction( SaveWorkspace );
}
// -------------------------------------------------------------------------
delete this->m_UI;
if( this->m_Workspace != NULL )
delete this->m_Workspace;
+ delete this->m_Plugins;
}
// -------------------------------------------------------------------------
void cpPipelineEditor::
_UpdateLoadedPlugins( )
{
- typedef cpPlugins::Interface::Workspace::TStringContainer _TStrings;
+ auto& classes = this->m_Plugins->GetClasses( );
- if( this->m_Workspace == NULL )
+ if( classes.size( ) == 0 )
+ {
+ QMessageBox::critical(
+ this,
+ "Error loading default plugins",
+ "No plugins loaded: remember to load some!!!"
+ );
return;
- _TStrings categories;
- this->m_Workspace->GetLoadedPluginCategories( categories );
- for( auto cIt = categories.begin( ); cIt != categories.end( ); ++cIt )
+ } // fi
+
+ auto catIt = classes.begin( );
+ for( ; catIt != classes.end( ); ++catIt )
{
// Create or get category
QList< QTreeWidgetItem* > cat_items =
this->m_UI->LoadedPlugins->findItems(
- cIt->c_str( ), Qt::MatchExactly | Qt::MatchRecursive
+ catIt->first.c_str( ), Qt::MatchExactly | Qt::MatchRecursive
);
QTreeWidgetItem* cat = NULL;
if( cat_items.size( ) == 0 )
{
cat = new QTreeWidgetItem(
- ( QTreeWidgetItem* )( NULL ), QStringList( cIt->c_str( ) )
+ ( QTreeWidgetItem* )( NULL ), QStringList( catIt->first.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 )
+ // Create filters
+ auto fIt = catIt->second.begin( );
+ for( ; fIt != catIt->second.end( ); ++fIt )
{
- // Find filter
QList< QTreeWidgetItem* > filter_items =
this->m_UI->LoadedPlugins->findItems(
- fIt->c_str( ), Qt::MatchExactly | Qt::MatchRecursive
+ fIt->first.c_str( ), Qt::MatchExactly | Qt::MatchRecursive
);
auto fiIt = filter_items.begin( );
auto found_fiIt = filter_items.end( );
// Add filter
if( found_fiIt == filter_items.end( ) )
QTreeWidgetItem* filter = new QTreeWidgetItem(
- cat, QStringList( fIt->c_str( ) )
+ cat, QStringList( fIt->first.c_str( ) )
);
-
} // rof
} // rof
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( ) ) ) )
+ if( !( this->m_Plugins->Load( qIt->toStdString( ) ) ) )
err_str << qIt->toStdString( ) << std::endl;
// Show an error message
);
// Update view
- this->m_UI->Canvas->setWorkspace( this->m_Workspace );
this->_UpdateLoadedPlugins( );
}
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 ) ) )
+ if( !( this->m_Plugins->LoadFromFolder( dir, false ) ) )
QMessageBox::critical(
this,
"Error loading plugins directory",
);
// Update view
- this->m_UI->Canvas->setWorkspace( this->m_Workspace );
this->_UpdateLoadedPlugins( );
}
if( this->m_Workspace != NULL )
delete this->m_Workspace;
this->m_Workspace = new cpPlugins::Interface::Workspace( );
+ this->m_Workspace->SetInterface( this->m_Plugins );
std::string err = this->m_Workspace->LoadWorkspace( fname );
- if( err == "" )
- {
- this->m_UI->Canvas->setWorkspace( this->m_Workspace );
- }
- else
+ if( err != "" )
{
delete this->m_Workspace;
this->m_Workspace = NULL;
QMessageBox::tr( "Error loading workspace" ),
QMessageBox::tr( err.c_str( ) )
);
+ }
+ else
+ this->m_UI->Canvas->editor( )->setWorkspace( this->m_Workspace );
+}
- } // fi
+// -------------------------------------------------------------------------
+void cpPipelineEditor::
+_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 (*.xml);;All files (*)" )
+ );
+ dlg.setDefaultSuffix( QFileDialog::tr( "xml" ) );
+ 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( ) )
+ );
}
// eof - $RCSfile$