-#ifndef __CPPLUGINS__INTERFACE__WORKSPACE__H__
-#define __CPPLUGINS__INTERFACE__WORKSPACE__H__
+#ifndef __cpPlugins__Interface__Workspace__h__
+#define __cpPlugins__Interface__Workspace__h__
-#include <cpExtensions/DataStructures/Graph.h>
-#include <cpPlugins/Interface/Interface.h>
-#include <cpPlugins/Interface/DataObject.h>
-#include <cpPlugins/Interface/ProcessObject.h>
+#include <cpPlugins/Interface/Plugins.h>
+#include <cpPlugins/BaseObjects/DataObject.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+#include <cpPlugins/BaseObjects/Widget.h>
+#include <itkObject.h>
-#include <set>
-#include <string>
-
-// Some forward declarations
-class QWidget;
+class vtkRenderWindowInteractor;
namespace cpPlugins
{
namespace Interface
{
- /**
+ /** \brief A complex pipeline
*/
- class cpPlugins_Interface_EXPORT Workspace
+ class cpPlugins_EXPORT Workspace
+ : public itk::Object
{
public:
- typedef cpPlugins::Interface::Interface TInterface;
- typedef cpPlugins::Interface::Object TObject;
- typedef cpPlugins::Interface::ProcessObject TFilter;
- typedef cpPlugins::Interface::DataObject TData;
- typedef TFilter::TParameters TParameters;
-
- // Various types
- typedef std::set< std::string > TStringContainer;
- typedef std::pair< std::string, std::string > TGlobalPort;
- typedef std::map< std::string, TGlobalPort > TGlobalPorts;
-
- // Graph type
- typedef std::pair< std::string, std::string > TConnection;
- typedef
- cpExtensions::DataStructures::
- Graph< TObject::Pointer, TConnection, std::string > TGraph;
+ typedef Workspace Self;
+ typedef itk::Object Superclass;
+ typedef itk::SmartPointer< Self > Pointer;
+ typedef itk::SmartPointer< const Self > ConstPointer;
- public:
- Workspace( );
- virtual ~Workspace( );
+ typedef cpPlugins::BaseObjects::DataObject TDataObject;
+ typedef cpPlugins::BaseObjects::ProcessObject TFilter;
+ typedef cpPlugins::BaseObjects::Widget TWidget;
+ typedef cpPlugins::Interface::Plugins TPlugins;
+
+ typedef std::map< std::string, TFilter::Pointer > TFilters;
- // Plugins management
- TInterface* GetInterface( );
- void SetInterface( TInterface* i );
+ /* TODO
+ typedef
+ std::map< std::string, std::pair< std::string, std::string > >
+ TExposedPorts;
+ */
+ public:
+ itkNewMacro( Self );
+ itkTypeMacro( Workspace, itk::Object );
+
+ public:
// Workspace IO
- std::string LoadWorkspace( const std::string& fname );
- std::string SaveWorkspace( const std::string& fname ) const;
+ void Load( const std::string& fname );
+ void Save( const std::string& fname ) const;
- // Graph management
+ // Memory management
void Clear( );
- TGraph* GetGraph( );
- const TGraph* GetGraph( ) const;
- bool CreateFilter( const std::string& filter, const std::string& name );
- bool Connect(
- const std::string& orig_filter, const std::string& dest_filter,
- const std::string& output_name,
- const std::string& input_name
- );
- bool Connect( const std::string& i, const std::string& o );
- TParameters* GetParameters( const std::string& name );
- const TParameters* GetParameters( const std::string& name ) const;
+
+ // Filter management
+ std::vector< std::string > GetFiltersNames( ) const;
TFilter* GetFilter( const std::string& name );
const TFilter* GetFilter( const std::string& name ) const;
+ TWidget* GetWidget( const std::string& name );
+ const TWidget* GetWidget( const std::string& name ) const;
bool HasFilter( const std::string& name ) const;
-
- // Graph reduction
- bool Reduce( const std::string& name );
- void AddInputPort(
- const std::string& name,
- const std::string& filter, const std::string& filter_input
+ bool HasWidget( const std::string& name ) const;
+ TFilter* CreateFilter(
+ const std::string& category, const std::string& filter
+ );
+ bool RenameFilter(
+ const std::string& old_name, const std::string& new_name
+ );
+ bool RemoveFilter( const std::string& name );
+
+ void SetPrintExecution( bool b );
+ void PrintExecutionOn( );
+ void PrintExecutionOff( );
+
+ // Interactors
+ void AddInteractor( vtkRenderWindowInteractor* iren );
+
+ // Exposed ports
+ /* TODO
+ const TExposedPorts& GetExposedInputs( ) const;
+ const TExposedPorts& GetExposedOutputs( ) const;
+ cpPlugins::BaseObjects::DataObject* GetExposedOutput(
+ const std::string& name
+ );
+ const cpPlugins::BaseObjects::DataObject* GetExposedOutput(
+ const std::string& name
+ ) const;
+ bool ExposeInput(
+ const std::string& name,
+ const std::string& filter, const std::string& filter_input
+ );
+ bool ExposeOutput(
+ const std::string& name,
+ const std::string& filter, const std::string& filter_output
+ );
+ void HideInput( const std::string& name );
+ void HideOutput( const std::string& name );
+ bool RenameExposedInput(
+ const std::string& old_name,
+ const std::string& new_name
+ );
+ bool RenameExposedOutput(
+ const std::string& old_name,
+ const std::string& new_name
+ );
+ */
+
+ // Connection management
+ bool Connect(
+ const std::string& origin_filter,
+ const std::string& origin_output,
+ const std::string& destination_filter,
+ const std::string& destination_input
+ );
+ bool Connect(
+ TDataObject* input,
+ const std::string& destination_filter,
+ const std::string& destination_input
);
- void AddOutputPort(
- const std::string& name,
- const std::string& filter, const std::string& filter_output
+ bool Disconnect(
+ const std::string& origin_filter,
+ const std::string& origin_output,
+ const std::string& destination_filter,
+ const std::string& destination_input
);
- void ClearInputPorts( );
- void ClearOutputPorts( );
+
+ /* TODO
+ std::vector< std::pair< std::string, std::string > > GetConnections(
+ const std::string& origin, const std::string& destination
+ ) const;
+ void Connect(
+ const std::string& orig_filter, const std::string& dest_filter,
+ const std::string& output_name, const std::string& input_name
+ );
+ void Connect(
+ cpPlugins::BaseObjects::DataObject* output,
+ const std::string& dest_filter, const std::string& input_name
+ );
+ void Connect(
+ cpPlugins::BaseObjects::DataObject* output,
+ const std::string& exposed_input_name
+ );
+ void Disconnect(
+ const std::string& orig_filter, const std::string& dest_filter,
+ const std::string& output_name, const std::string& input_name
+ );
+ void Disconnect(
+ const std::string& dest_filter, const std::string& input_name
+ );
+ void Disconnect( const std::string& dest_filter );
+ */
// Pipeline execution
- std::string Execute( );
- std::string Execute( const std::string& name, QWidget* p = NULL );
+ void Update( );
+ void Update( const std::string& name );
protected:
- void _UpdateLoadedPluginsInformation( );
+ Workspace( );
+ virtual ~Workspace( );
+
+ private:
+ // Purposely not implemented
+ Workspace( const Self& other );
+ Self& operator=( const Self& other );
protected:
- // Plugins interface
- TInterface* m_Interface;
+ TPlugins::Pointer m_Plugins;
+ TFilters m_Filters;
+ bool m_PrintExecution;
+
+ /* TODO
+ TExposedPorts m_ExposedInputs;
+ TExposedPorts m_ExposedOutputs;
+ */
- // Processing graph
- typename TGraph::Pointer m_Graph;
- TGlobalPorts m_InputPorts;
- TGlobalPorts m_OutputPorts;
+ std::set< vtkRenderWindowInteractor* > m_Interactors;
};
} // ecapseman
} // ecapseman
-#endif // __CPPLUGINS__INTERFACE__WORKSPACE__H__
+#endif // __cpPlugins__Interface__Workspace__h__
// eof - $RCSfile$