]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Workspace.h
yet another refactoring
[cpPlugins.git] / lib / cpPlugins / Interface / Workspace.h
1 #ifndef __cpPlugins__Interface__Workspace__h__
2 #define __cpPlugins__Interface__Workspace__h__
3
4 #include <cpPlugins/Interface/Loader.h>
5 #include <cpPlugins/Pipeline/DataObject.h>
6 #include <cpPlugins/Pipeline/ProcessObject.h>
7 #include <cpPlugins/Pipeline/Widget.h>
8 #include <itkObject.h>
9
10 class vtkRenderWindowInteractor;
11
12 namespace cpPlugins
13 {
14   namespace Interface
15   {
16     /** \brief A complex pipeline
17      */
18     class cpPlugins_EXPORT Workspace
19       : public itk::Object
20     {
21     public:
22       typedef Workspace                       Self;
23       typedef itk::Object                     Superclass;
24       typedef itk::SmartPointer< Self >       Pointer;
25       typedef itk::SmartPointer< const Self > ConstPointer;
26
27       typedef cpPlugins::Pipeline::DataObject    TDataObject;
28       typedef cpPlugins::Pipeline::ProcessObject TFilter;
29       typedef cpPlugins::Pipeline::Widget        TWidget;
30       typedef cpPlugins::Interface::Loader          TLoader;
31
32       typedef std::map< std::string, TFilter::Pointer > TFilters;
33
34       /* TODO
35          typedef
36          std::map< std::string, std::pair< std::string, std::string > >
37          TExposedPorts;
38       */
39
40     public:
41       itkNewMacro( Self );
42       itkTypeMacro( Workspace, itk::Object );
43
44     public:
45       // Workspace IO
46       void Load( const std::string& fname );
47       void Save( const std::string& fname ) const;
48
49       // Memory management
50       void Clear( );
51
52       // Filter management
53       std::vector< std::string > GetFiltersNames( ) const;
54       TFilter* GetFilter( const std::string& name );
55       const TFilter* GetFilter( const std::string& name ) const;
56       TWidget* GetWidget( const std::string& name );
57       const TWidget* GetWidget( const std::string& name ) const;
58       bool HasFilter( const std::string& name ) const;
59       bool HasWidget( const std::string& name ) const;
60       TFilter* CreateFilter(
61         const std::string& category, const std::string& filter
62         );
63       bool RenameFilter(
64         const std::string& old_name, const std::string& new_name
65         );
66       bool RemoveFilter( const std::string& name );
67
68       void SetPrintExecution( bool b );
69       void PrintExecutionOn( );
70       void PrintExecutionOff( );
71
72       // Interactors
73       void AddInteractor( vtkRenderWindowInteractor* iren );
74
75       // Connection management
76       bool Connect(
77         const std::string& origin_filter,
78         const std::string& origin_output,
79         const std::string& destination_filter,
80         const std::string& destination_input
81         );
82       bool Connect(
83         TDataObject* input,
84         const std::string& destination_filter,
85         const std::string& destination_input
86         );
87       bool Disconnect(
88         const std::string& origin_filter,
89         const std::string& origin_output,
90         const std::string& destination_filter,
91         const std::string& destination_input
92         );
93
94       /* TODO
95          std::vector< std::pair< std::string, std::string > > GetConnections(
96          const std::string& origin, const std::string& destination
97          ) const;
98          void Connect(
99          const std::string& orig_filter, const std::string& dest_filter,
100          const std::string& output_name, const std::string& input_name
101          );
102          void Connect(
103          cpPlugins::Pipeline::DataObject* output,
104          const std::string& dest_filter, const std::string& input_name
105          );
106          void Connect(
107          cpPlugins::Pipeline::DataObject* output,
108          const std::string& exposed_input_name
109          );
110          void Disconnect(
111          const std::string& orig_filter, const std::string& dest_filter,
112          const std::string& output_name, const std::string& input_name
113          );
114          void Disconnect(
115          const std::string& dest_filter, const std::string& input_name
116          );
117          void Disconnect( const std::string& dest_filter );
118       */
119
120       // Pipeline execution
121       void Update( );
122       void Update( const std::string& name );
123
124     protected:
125       Workspace( );
126       virtual ~Workspace( );
127
128     private:
129       // Purposely not implemented
130       Workspace( const Self& other );
131       Self& operator=( const Self& other );
132
133     protected:
134       TLoader  m_Loader;
135       TFilters m_Filters;
136       bool     m_PrintExecution;
137
138       /* TODO
139          TExposedPorts m_ExposedInputs;
140          TExposedPorts m_ExposedOutputs;
141       */
142
143       std::set< vtkRenderWindowInteractor* > m_Interactors;
144     };
145
146   } // ecapseman
147
148 } // ecapseman
149
150 #endif // __cpPlugins__Interface__Workspace__h__
151
152 // eof - $RCSfile$