]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
Widgets updated
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.h
1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
3
4 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
5
6 #include <map>
7
8 #include <cpPlugins/Interface/Config.h>
9 #include <cpPlugins/Interface/Object.h>
10 #include <cpPlugins/Interface/DataObject.h>
11 #include <cpPlugins/Interface/Parameters.h>
12
13 #ifdef cpPlugins_Interface_QT4
14 class QWidget;
15 #else
16 typedef char QWidget;
17 #endif // cpPlugins_Interface_QT4
18
19 #include <itkProcessObject.h>
20
21 #include <vtkSmartPointer.h>
22 #include <vtkAlgorithm.h>
23
24 namespace cpPlugins
25 {
26   namespace Interface
27   {
28 #ifdef cpPlugins_Interface_QT4
29     class ParametersQtDialog;
30 #else
31     typedef char ParametersQtDialog;
32 #endif // cpPlugins_Interface_QT4
33
34     /**
35      */
36     class cpPlugins_Interface_EXPORT ProcessObject
37       : public Object
38     {
39     public:
40       typedef ProcessObject                   Self;
41       typedef Object                          Superclass;
42       typedef itk::SmartPointer< Self >       Pointer;
43       typedef itk::SmartPointer< const Self > ConstPointer;
44
45       typedef Parameters TParameters;
46
47     public:
48       itkTypeMacro( ProcessObject, Object );
49       cpPlugins_Id_Macro(
50         cpPlugins::Interface::ProcessObject, "BaseObject"
51         );
52
53     public:
54       // To impact pipeline
55       virtual void Modified( ) const;
56
57       virtual TParameters* GetParameters( );
58       virtual const TParameters* GetParameters( ) const;
59
60       virtual unsigned int GetNumberOfInputs( ) const;
61       virtual unsigned int GetNumberOfOutputs( ) const;
62
63       virtual void SetInput( const std::string& id, DataObject* dobj );
64
65       virtual std::string Update( );
66       virtual void DisconnectOutputs( );
67
68       virtual bool ExecConfigurationDialog( QWidget* parent );
69
70       template< class T >
71         inline T* GetITK( );
72
73       template< class T >
74         inline const T* GetITK( ) const;
75
76       template< class T >
77         inline T* GetVTK( );
78
79       template< class T >
80         inline const T* GetVTK( ) const;
81
82       template< class T >
83         inline T* GetInput( const std::string& id );
84
85       template< class T >
86         inline const T* GetInput( const std::string& id ) const;
87
88       template< class T >
89         inline T* GetOutput( const std::string& id );
90
91       template< class T >
92         inline const T* GetOutput( const std::string& id ) const;
93
94     protected:
95       ProcessObject( );
96       virtual ~ProcessObject( );
97
98       virtual void _AddInput( const std::string& name );
99
100       template< class F >
101         inline F* _CreateITK( );
102
103       template< class F >
104         inline F* _CreateVTK( );
105
106       template< class O >
107         inline void _MakeOutput( const std::string& id );
108
109       virtual std::string _GenerateData( ) = 0;
110
111     private:
112       // Purposely not implemented
113       ProcessObject( const Self& );
114       Self& operator=( const Self& );
115
116     protected:
117       itk::ProcessObject::Pointer     m_ITKObject;
118       vtkSmartPointer< vtkAlgorithm > m_VTKObject;
119
120       Parameters::Pointer m_Parameters;
121       ParametersQtDialog* m_ParametersDialog;
122
123       typedef std::map< std::string, DataObject::Pointer > _TDataContainer;
124       _TDataContainer m_Inputs;
125       _TDataContainer m_Outputs;
126     };
127
128   } // ecapseman
129
130 } // ecapseman
131
132 #include <cpPlugins/Interface/ProcessObject.hxx>
133
134 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
135
136 // eof - $RCSfile$