X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FWorkspace.h;h=428f13a72148727478c2cb4f1f0e156e142b94fd;hb=f1747c7248d5eead5ea9d7e57bda0b081bcef065;hp=9bad734953c89f98b01e526db4aa21ad9af13ef2;hpb=950ea6d252c9a5bc5be29d413497fe0ef69e6703;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Workspace.h b/lib/cpPlugins/Interface/Workspace.h index 9bad734..428f13a 100644 --- a/lib/cpPlugins/Interface/Workspace.h +++ b/lib/cpPlugins/Interface/Workspace.h @@ -1,93 +1,163 @@ -#ifndef __CPPLUGINS__INTERFACE__WORKSPACE__H__ -#define __CPPLUGINS__INTERFACE__WORKSPACE__H__ +#ifndef __cpPlugins__Interface__Workspace__h__ +#define __cpPlugins__Interface__Workspace__h__ -#include -#include -#include -#include +#include +#include +#include +#include +#include -#include -#include +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; + typedef Workspace Self; + typedef itk::Object Superclass; + typedef itk::SmartPointer< Self > Pointer; + typedef itk::SmartPointer< const Self > ConstPointer; - // Various types - typedef std::set< std::string > TStringContainer; + typedef cpPlugins::BaseObjects::ProcessObject TProcess; + typedef cpPlugins::BaseObjects::Widget TWidget; + typedef cpPlugins::Interface::Plugins TInterface; - // Graph type - typedef std::pair< std::string, std::string > TConnection; + typedef std::map< std::string, TProcess::Pointer > TFilters; typedef - cpExtensions::DataStructures:: - Graph< TObject::Pointer, TConnection, std::string > TGraph; + std::map< std::string, std::pair< std::string, std::string > > + TExposedPorts; public: - Workspace( ); - virtual ~Workspace( ); + itkNewMacro( Self ); + itkTypeMacro( Workspace, itk::Object ); + + public: + // Workspace IO + void Load( const std::string& fname ); + void Save( const std::string& fname ) const; - // Plugins management - bool LoadPluginsPath( const std::string& path, bool r = false ); - bool LoadPlugins( const std::string& fname ); - const TStringContainer& GetLoadedPlugins( ) const; - void GetLoadedPluginCategories( TStringContainer& categories ) const; - void GetLoadedPluginFilters( TStringContainer& filters ) const; - const TStringContainer& GetLoadedPluginFilters( - const std::string& category + // Memory management + void Clear( ); + + // Filter management + std::vector< std::string > GetFiltersNames( ) const; + TProcess* GetFilter( + const std::string& name + ); + const TProcess* 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; + bool HasWidget( const std::string& name ) const; + TProcess* CreateFilter( + const std::string& category, + const std::string& filter, + const std::string& name + ); + bool RenameFilter( + const std::string& old_name, const std::string& new_name + ); + bool RemoveFilter( const std::string& name ); - // Workspace IO - std::string LoadWorkspace( const std::string& fname ); - std::string SaveWorkspace( const std::string& fname ) const; - - // Graph management - 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 + void SetPrintExecution( bool b ); + void PrintExecutionOn( ); + void PrintExecutionOff( ); + + // Interactors + void AddInteractor( vtkRenderWindowInteractor* iren ); + + // Exposed ports + 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 ); - TParameters* GetParameters( const std::string& name ); - const TParameters* GetParameters( const std::string& name ) const; - // Graph reduction - bool Reduce( const std::string& name ); + // Connection management + 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 ); + void Execute( ); + void Execute( 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; - std::string m_LastLoadedPlugin; - TStringContainer m_LoadedPlugins; - std::map< std::string, TStringContainer > m_LoadedFilters; - - // Processing graph - typename TGraph::Pointer m_Graph; + TFilters m_Filters; + bool m_PrintExecution; + + TExposedPorts m_ExposedInputs; + TExposedPorts m_ExposedOutputs; + + std::set< vtkRenderWindowInteractor* > m_Interactors; }; } // ecapseman } // ecapseman -#endif // __CPPLUGINS__INTERFACE__WORKSPACE__H__ +#endif // __cpPlugins__Interface__Workspace__h__ // eof - $RCSfile$