#include <cpPlugins/Interface/Workspace.h>
+#include <cpPlugins/Interface/SimpleMPRWidget.h>
+#include <vtkRenderWindowInteractor.h>
// -------------------------------------------------------------------------
cpPlugins::Interface::Workspace::
Workspace( )
- : m_LastLoadedPlugin( "" )
+ : m_Plugins( NULL ),
+ m_MPRViewer( NULL )
{
this->m_Graph = TGraph::New( );
}
}
// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Workspace::
-LoadPluginsPath( const std::string& path, bool r )
+cpPlugins::Interface::Workspace::
+TPlugins* cpPlugins::Interface::Workspace::
+GetPlugins( )
{
- // Load all plugins from given folder
- std::list< std::string > files =
- this->m_Interface.LoadFromFolder( path, r );
-
- // Update a simple track
- bool ret = false;
- if( files.size( ) > 0 )
- {
- for( auto fIt = files.begin( ); fIt != files.end( ); ++fIt )
- {
- this->m_LoadedPlugins.insert( *fIt );
- this->m_LastLoadedPlugin = *fIt;
-
- } // rof
- this->_UpdateLoadedPluginsInformation( );
- ret = true;
-
- } // fi
- return( ret );
-}
-
-// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Workspace::
-LoadPlugins( const std::string& fname )
-{
- // Is it already loaded?
- bool ret = true;
- if( this->m_LoadedPlugins.find( fname ) == this->m_LoadedPlugins.end( ) )
- {
- // Was it succesfully loaded?
- ret = this->m_Interface.Load( fname );
-
- // Update a simple track
- if( ret )
- {
- this->m_LoadedPlugins.insert( fname );
- this->m_LastLoadedPlugin = fname;
- this->_UpdateLoadedPluginsInformation( );
-
- } // fi
-
- } // fi
- return( ret );
+ return( this->m_Plugins );
}
// -------------------------------------------------------------------------
const cpPlugins::Interface::Workspace::
-TStringContainer& cpPlugins::Interface::Workspace::
-GetLoadedPlugins( ) const
+TPlugins* cpPlugins::Interface::Workspace::
+GetPlugins( ) const
{
- return( this->m_LoadedPlugins );
+ return( this->m_Plugins );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Workspace::
-GetLoadedPluginCategories( TStringContainer& categories ) const
+SetPlugins( TPlugins* i )
{
- categories.clear( );
- auto fIt = this->m_LoadedFilters.begin( );
- for( ; fIt != this->m_LoadedFilters.end( ); ++fIt )
- categories.insert( fIt->first );
+ if( this->m_Plugins != i )
+ this->m_Plugins = i;
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Workspace::
-GetLoadedPluginFilters( TStringContainer& filters ) const
+cpPlugins::Interface::Workspace::
+TGraph* cpPlugins::Interface::Workspace::
+GetGraph( )
{
- filters.clear( );
- auto pIt = this->m_LoadedFilters.begin( );
- for( ; pIt != this->m_LoadedFilters.end( ); ++pIt )
- for( auto fIt = pIt->second.begin( ); fIt != pIt->second.end( ); ++fIt )
- filters.insert( *fIt );
+ return( this->m_Graph );
}
// -------------------------------------------------------------------------
const cpPlugins::Interface::Workspace::
-TStringContainer& cpPlugins::Interface::Workspace::
-GetLoadedPluginFilters( const std::string& category ) const
+TGraph* cpPlugins::Interface::Workspace::
+GetGraph( ) const
{
- static const TStringContainer EMPTY;
- auto pIt = this->m_LoadedFilters.find( category );
- if( pIt != this->m_LoadedFilters.end( ) )
- return( pIt->second );
- else
- return( EMPTY );
+ return( this->m_Graph );
}
// -------------------------------------------------------------------------
this->m_Graph->Clear( );
}
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+ClearConnections( )
+{
+}
+
// -------------------------------------------------------------------------
cpPlugins::Interface::Workspace::
-TGraph* cpPlugins::Interface::Workspace::
-GetGraph( )
+TFilter* cpPlugins::Interface::Workspace::
+GetFilter( const std::string& name )
{
- return( this->m_Graph );
+ TFilter* f =
+ dynamic_cast< TFilter* >(
+ this->m_Graph->GetVertex( name ).GetPointer( )
+ );
+ return( f );
}
// -------------------------------------------------------------------------
const cpPlugins::Interface::Workspace::
-TGraph* cpPlugins::Interface::Workspace::
-GetGraph( ) const
+TFilter* cpPlugins::Interface::Workspace::
+GetFilter( const std::string& name ) const
{
- return( this->m_Graph );
+ const TFilter* f =
+ dynamic_cast< const TFilter* >(
+ this->m_Graph->GetVertex( name ).GetPointer( )
+ );
+ return( f );
}
// -------------------------------------------------------------------------
bool cpPlugins::Interface::Workspace::
+HasFilter( const std::string& name ) const
+{
+ if( this->m_Graph->HasVertexIndex( name ) )
+ return( this->GetFilter( name ) != NULL );
+ else
+ return( false );
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Interface::Workspace::
+TFilter* cpPlugins::Interface::Workspace::
CreateFilter( const std::string& filter, const std::string& name )
{
+ if( this->m_Plugins == NULL )
+ return( NULL );
+
// Get or create new filter from name
if( !( this->m_Graph->HasVertexIndex( name ) ) )
{
- TFilter::Pointer f = this->m_Interface.CreateObject( filter );
+ TFilter::Pointer f = this->m_Plugins->CreateObject( filter );
if( f.IsNotNull( ) )
{
f->SetName( name );
+ f->SetSingleInteractor( this->m_SingleInteractor );
+ f->SetMPRViewer( this->m_MPRViewer );
+
TObject::Pointer o = f.GetPointer( );
- this->m_Graph->InsertVertex( name, o );
- return( true );
- }
- else
- return( false );
+ this->m_Graph->SetVertex( name, o );
+
+ } // fi
+ return( f.GetPointer( ) );
}
else
+ return( this->GetFilter( name ) );
+}
+
+// -------------------------------------------------------------------------
+bool cpPlugins::Interface::Workspace::
+RenameFilter( const std::string& old_name, const std::string& new_name )
+{
+ if( this->m_Graph->RenameVertex( old_name, new_name ) )
+ {
+ TFilter* f = this->GetFilter( new_name );
+ f->SetName( new_name );
return( true );
+ }
+ else
+ return( false );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+RemoveFilter( const std::string& name )
+{
+}
+
+// -------------------------------------------------------------------------
+vtkRenderWindowInteractor* cpPlugins::Interface::Workspace::
+GetSingleInteractor( )
+{
+ return( this->m_SingleInteractor );
+}
+
+// -------------------------------------------------------------------------
+const vtkRenderWindowInteractor* cpPlugins::Interface::Workspace::
+GetSingleInteractor( ) const
+{
+ return( this->m_SingleInteractor );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+SetSingleInteractor( vtkRenderWindowInteractor* interactor )
+{
+ this->m_SingleInteractor = interactor;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Interface::
+SimpleMPRWidget* cpPlugins::Interface::Workspace::
+GetMPRViewer( )
+{
+ return( this->m_MPRViewer );
+}
+
+// -------------------------------------------------------------------------
+const cpPlugins::Interface::
+SimpleMPRWidget* cpPlugins::Interface::Workspace::
+GetMPRViewer( ) const
+{
+ return( this->m_MPRViewer );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+SetMPRViewer( cpPlugins::Interface::SimpleMPRWidget* wdg )
+{
+ this->m_MPRViewer = wdg;
}
// -------------------------------------------------------------------------
)
{
// Get filters
- TFilter* orig =
- dynamic_cast< TFilter* >(
- this->m_Graph->GetVertex( orig_filter ).GetPointer( )
- );
- TFilter* dest =
- dynamic_cast< TFilter* >(
- this->m_Graph->GetVertex( dest_filter ).GetPointer( )
- );
+ TFilter* orig = this->GetFilter( orig_filter );
+ TFilter* dest = this->GetFilter( dest_filter );
if( orig == NULL || dest == NULL )
return( false );
// Real connection
- dest->SetInput( input_name, orig->GetOutput< TData >( output_name ) );
- this->m_Graph->AddConnection(
- orig_filter, dest_filter,
- TConnection( output_name, input_name )
- );
- return( false );
+ if( dest->SetInput( input_name, orig->GetOutput( output_name ) ) )
+ {
+ this->m_Graph->AddEdge(
+ orig_filter, dest_filter,
+ TConnection( output_name, input_name )
+ );
+ return( true );
+ }
+ else
+ return( false );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Workspace::
-TParameters* cpPlugins::Interface::Workspace::
-GetParameters( const std::string& name )
+bool cpPlugins::Interface::Workspace::
+Connect(
+ const ProcessObjectPort& input_port, const std::string& exposed_port
+ )
{
- TFilter* f =
- dynamic_cast< TFilter* >(
- this->m_Graph->GetVertex( name ).GetPointer( )
- );
- if( f != NULL )
- return( f->GetParameters( ) );
+ auto port = this->m_ExposedInputPorts.find( exposed_port );
+ if( port != this->m_ExposedInputPorts.end( ) )
+ {
+ TFilter* filter = this->GetFilter( port->second.first );
+ if( filter != NULL )
+ return( filter->SetInput( port->second.second, input_port ) );
+ else
+ return( false );
+ }
else
- return( NULL );
+ return( false );
}
// -------------------------------------------------------------------------
-const cpPlugins::Interface::Workspace::
-TParameters* cpPlugins::Interface::Workspace::
-GetParameters( const std::string& name ) const
+bool cpPlugins::Interface::Workspace::
+Reduce( const std::string& name )
{
- const TFilter* f =
- dynamic_cast< const TFilter* >(
- this->m_Graph->GetVertex( name ).GetPointer( )
- );
- if( f != NULL )
- return( f->GetParameters( ) );
+ return( false );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+ExposeInputPort(
+ const std::string& name,
+ const std::string& filter, const std::string& filter_input
+ )
+{
+ this->m_ExposedInputPorts[ name ] = TExposedPort( filter, filter_input );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+ExposeOutputPort(
+ const std::string& name,
+ const std::string& filter, const std::string& filter_output
+ )
+{
+ this->m_ExposedOutputPorts[ name ] = TExposedPort( filter, filter_output );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+HideInputPort( const std::string& name )
+{
+ auto i = this->m_ExposedInputPorts.find( name );
+ if( i != this->m_ExposedInputPorts.end( ) )
+ this->m_ExposedInputPorts.erase( i );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Interface::Workspace::
+HideOutputPort( const std::string& name )
+{
+ auto i = this->m_ExposedOutputPorts.find( name );
+ if( i != this->m_ExposedOutputPorts.end( ) )
+ this->m_ExposedOutputPorts.erase( i );
+}
+
+// -------------------------------------------------------------------------
+bool cpPlugins::Interface::Workspace::
+RenameExposedInputPort(
+ const std::string& old_name,
+ const std::string& new_name
+ )
+{
+ auto o = this->m_ExposedInputPorts.find( old_name );
+ auto n = this->m_ExposedInputPorts.find( new_name );
+ if(
+ o != this->m_ExposedInputPorts.end( ) &&
+ n == this->m_ExposedInputPorts.end( )
+ )
+ {
+ this->m_ExposedInputPorts[ new_name ] = o->second;
+ this->m_ExposedInputPorts.erase( o );
+ }
else
- return( NULL );
+ return( false );
}
// -------------------------------------------------------------------------
-cpPlugins::Interface::Workspace::
-TFilter* cpPlugins::Interface::Workspace::
-GetFilter( const std::string& name )
+bool cpPlugins::Interface::Workspace::
+RenameExposedOutputPort(
+ const std::string& old_name,
+ const std::string& new_name
+ )
{
- TFilter* f =
- dynamic_cast< TFilter* >(
- this->m_Graph->GetVertex( name ).GetPointer( )
- );
- return( f );
+ auto o = this->m_ExposedOutputPorts.find( old_name );
+ auto n = this->m_ExposedOutputPorts.find( new_name );
+ if(
+ o != this->m_ExposedOutputPorts.end( ) &&
+ n == this->m_ExposedOutputPorts.end( )
+ )
+ {
+ this->m_ExposedOutputPorts[ new_name ] = o->second;
+ this->m_ExposedOutputPorts.erase( o );
+ }
+ else
+ return( false );
}
// -------------------------------------------------------------------------
const cpPlugins::Interface::Workspace::
-TFilter* cpPlugins::Interface::Workspace::
-GetFilter( const std::string& name ) const
+TExposedPorts& cpPlugins::Interface::Workspace::
+GetExposedInputPorts( ) const
{
- const TFilter* f =
- dynamic_cast< const TFilter* >(
- this->m_Graph->GetVertex( name ).GetPointer( )
- );
- return( f );
+ return( this->m_ExposedInputPorts );
}
// -------------------------------------------------------------------------
-bool cpPlugins::Interface::Workspace::
-Reduce( const std::string& name )
+const cpPlugins::Interface::Workspace::
+TExposedPorts& cpPlugins::Interface::Workspace::
+GetExposedOutputPorts( ) const
{
- return( false );
+ return( this->m_ExposedOutputPorts );
}
// -------------------------------------------------------------------------
std::string err = "";
for( auto sIt = sinks.begin( ); sIt != sinks.end( ); ++sIt )
{
- std::string lerr = this->Execute( *sIt, NULL );
+ std::string lerr = this->Execute( *sIt );
if( lerr != "" )
err += lerr + std::string( "\n" );
// -------------------------------------------------------------------------
std::string cpPlugins::Interface::Workspace::
-Execute( const std::string& name, QWidget* p )
+Execute( const std::string& name )
{
// Get filter
- TFilter* f =
- dynamic_cast< TFilter* >(
- this->m_Graph->GetVertex( name ).GetPointer( )
- );
+ TFilter* f = this->GetFilter( name );
if( f == NULL )
return(
std::string( "cpPlugins::Interface::Workspace: Vertex \"" ) +
);
// Execute and return
- if( p != NULL )
- {
- auto diag_res = f->ExecConfigurationDialog( p );
- if( diag_res == TFilter::DialogResult_NoModal )
- return( f->Update( ) );
- else
- return( "" );
- }
- else
- return( f->Update( ) );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Workspace::
-_UpdateLoadedPluginsInformation( )
-{
- this->m_LoadedFilters.clear( );
- const TInterface::TClasses& cls = this->m_Interface.GetClasses( );
- for( auto i = cls.begin( ); i != cls.end( ); ++i )
- {
- TFilter::Pointer o = this->m_Interface.CreateObject( i->first );
- std::string name = o->GetClassName( );
- std::string category = o->GetClassCategory( );
- this->m_LoadedFilters[ category ].insert( name );
-
- } // rof
+ return( f->Update( ) );
}
// eof - $RCSfile$