]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Pipeline/Block.h
73b31f8e11b9588d5f809d7b200930a0ff4b2a0b
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / Block.h
1 #ifndef __cpBaseQtApplication__Pipeline__Block__h__\r
2 #define __cpBaseQtApplication__Pipeline__Block__h__\r
3 \r
4 #include <cpBaseQtApplication_Export.h>\r
5 #include <QGraphicsPathItem>\r
6 #include <itkCommand.h>\r
7 #include <cpPlugins/BaseObjects/ProcessObject.h>\r
8 \r
9 namespace cpBaseQtApplication\r
10 {\r
11   namespace Pipeline\r
12   {\r
13     class Port;\r
14     class NamePort;\r
15     class InfoPort;\r
16     class InputPort;\r
17     class OutputPort;\r
18 \r
19     /**\r
20      */\r
21     class cpBaseQtApplication_EXPORT Block\r
22       : public QGraphicsPathItem\r
23     {\r
24     public:\r
25       typedef Block             Self;\r
26       typedef QGraphicsPathItem Superclass;\r
27       typedef cpPlugins::BaseObjects::ProcessObject TFilter;\r
28 \r
29     protected:\r
30       /**\r
31        */\r
32       class _TFilterObserver\r
33         : public itk::Command\r
34       {\r
35       public:\r
36         typedef itk::SmartPointer< _TFilterObserver >       Pointer;\r
37         typedef itk::SmartPointer< const _TFilterObserver > ConstPointer;\r
38         itkNewMacro( _TFilterObserver );\r
39       public:\r
40         void Execute( itk::Object* c, const itk::EventObject& e )\r
41           { this->Execute( const_cast< const itk::Object* >( c ), e ); }\r
42         void Execute( const itk::Object* c, const itk::EventObject& e );\r
43       public:\r
44         Block* ObservedBlock;\r
45       };\r
46 \r
47     public:\r
48       enum { Type = QGraphicsItem::UserType + 6 };\r
49 \r
50       Block(\r
51         TFilter* filter,\r
52         QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL\r
53         );\r
54       virtual ~Block( );\r
55 \r
56       TFilter* filter( );\r
57       const TFilter* filter( ) const;\r
58 \r
59       void setNamePort( const QString& txt );\r
60       void setInfoPort( const QString& txt );\r
61       InputPort* addInputPort( const QString& txt, bool multiple );\r
62       OutputPort* addOutputPort( const QString& txt );\r
63 \r
64       InputPort* inputPort( const QString& txt );\r
65       OutputPort* outputPort( const QString& txt );\r
66 \r
67       QString namePort( ) const;\r
68       const InputPort* inputPort( const QString& txt ) const;\r
69       const OutputPort* outputPort( const QString& txt ) const;\r
70 \r
71       bool connectOutputPortSlot( QObject* receiver, const char* slot );\r
72 \r
73       inline int type( ) const\r
74         { return( this->Type ); }\r
75 \r
76       virtual void setPos( const QPointF& pos );\r
77       virtual void setPos( qreal x, qreal y );\r
78 \r
79       virtual void paint(\r
80         QPainter* painter,\r
81         const QStyleOptionGraphicsItem* option,\r
82         QWidget* widget\r
83         );\r
84 \r
85     protected:\r
86       QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
87       void _setTypeInfo( const QString& txt );\r
88       void _configPort( Port* port );\r
89 \r
90       virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent* evt );\r
91       virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent* evt );\r
92 \r
93     private:\r
94       int m_HorzMargin;\r
95       int m_VertMargin;\r
96       int m_Width;\r
97       int m_Height;\r
98 \r
99       NamePort* m_NamePort;\r
100       InfoPort* m_InfoPort;\r
101       std::map< std::string, InputPort* >  m_InputPorts;\r
102       std::map< std::string, OutputPort* > m_OutputPorts;\r
103 \r
104       TFilter::Pointer m_Filter;\r
105       _TFilterObserver::Pointer m_FilterObserver;\r
106       unsigned long m_FilterObserverId;\r
107 \r
108       static QColor SelectedAndUpdated;\r
109       static QColor NotSelectedAndUpdated;\r
110       static QColor SelectedAndNotUpdated;\r
111       static QColor NotSelectedAndNotUpdated;\r
112     };\r
113 \r
114   } // ecapseman\r
115 \r
116 } // ecapseman\r
117 \r
118 #endif // __cpBaseQtApplication__Pipeline__Block__h__\r
119 \r
120 // eof - $RCSfile$\r