]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Port.h
1f6bda1289c84a196801648df445a238e7637451
[cpPlugins.git] / lib / cpBaseQtApplication / Port.h
1 #ifndef __CPBASEQTAPPLICATION__PORT__H__\r
2 #define __CPBASEQTAPPLICATION__PORT__H__\r
3 \r
4 #include <cpBaseQtApplication_Export.h>\r
5 #include <QGraphicsPathItem>\r
6 \r
7 namespace cpBaseQtApplication\r
8 {\r
9   class Block;\r
10   class Connection;\r
11 \r
12   /**\r
13    */\r
14   class cpBaseQtApplication_EXPORT Port\r
15     : public QGraphicsPathItem\r
16   {\r
17   public:\r
18     typedef Port Self;\r
19     typedef QGraphicsPathItem Superclass;\r
20 \r
21     enum { Type = QGraphicsItem::UserType + 1 };\r
22 \r
23   public:\r
24     Port( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
25     virtual ~Port( );\r
26 \r
27     void setBlock( Block* b );\r
28     inline Block* block( ) const\r
29       { return( this->m_Block ); }\r
30 \r
31     virtual void setName( const QString& n );\r
32     virtual void setExtendedName( const QString& n );\r
33     inline QString name( ) const\r
34       { return( this->m_Label->toPlainText( ) ); }\r
35     inline QString extendedName( ) const\r
36       { return( this->m_ExtendedLabel->toPlainText( ) ); }\r
37 \r
38     inline int radius( ) const\r
39       { return( this->m_Radius ); }\r
40 \r
41     inline bool isExtended( ) const\r
42       { return( this->m_IsExtended ); }\r
43     virtual void setExtend( bool extend );\r
44 \r
45     virtual bool isConnected( Port* other ) = 0;\r
46     inline int type( ) const\r
47       { return( this->Type ); }\r
48 \r
49     virtual void paint(\r
50       QPainter* painter,\r
51       const QStyleOptionGraphicsItem* option,\r
52       QWidget* widget\r
53       );\r
54 \r
55   protected:\r
56     virtual void _updateLabels( ) { }\r
57 \r
58   protected:\r
59     Block* m_Block;\r
60 \r
61     int  m_Radius;\r
62     int  m_Margin;\r
63     bool m_IsExtended;\r
64 \r
65     QGraphicsTextItem* m_Label;\r
66     QGraphicsTextItem* m_ExtendedLabel;\r
67   };\r
68 \r
69   /**\r
70    */\r
71   class NamePort\r
72     : public Port\r
73   {\r
74   public:\r
75     typedef NamePort Self;\r
76     typedef Port     Superclass;\r
77 \r
78     enum { Type = Superclass::Type + 1 };\r
79 \r
80   public:\r
81     NamePort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
82     virtual ~NamePort( );\r
83 \r
84     virtual bool isConnected( Port* other );\r
85     inline int type( ) const\r
86       { return( this->Type ); }\r
87 \r
88   protected:\r
89     virtual void _updateLabels( );\r
90   };\r
91 \r
92   /**\r
93    */\r
94   class InputPort\r
95     : public Port\r
96   {\r
97   public:\r
98     typedef InputPort Self;\r
99     typedef Port      Superclass;\r
100 \r
101     enum { Type = Superclass::Type + 3 };\r
102 \r
103   public:\r
104     InputPort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
105     virtual ~InputPort( );\r
106 \r
107     virtual void setExtend( bool extend );\r
108 \r
109     virtual bool isConnected( Port* other );\r
110     inline int type( ) const\r
111       { return( this->Type ); }\r
112 \r
113     void setConnection( Connection* c );\r
114     inline Connection* connection( )\r
115       { return( this->m_Connection ); }\r
116     inline const Connection* connection( ) const\r
117       { return( this->m_Connection ); }\r
118     inline bool hasConnection( ) const\r
119       { return( this->m_Connection != NULL ); }\r
120 \r
121   protected:\r
122     QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
123     virtual void _updateLabels( );\r
124 \r
125   protected:\r
126     Connection* m_Connection;\r
127   };\r
128 \r
129   /**\r
130    */\r
131   class OutputPort\r
132     : public Port\r
133   {\r
134   public:\r
135     typedef OutputPort Self;\r
136     typedef Port       Superclass;\r
137 \r
138     enum { Type = Superclass::Type + 4 };\r
139 \r
140   public:\r
141     OutputPort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
142     virtual ~OutputPort( );\r
143 \r
144     virtual void setExtend( bool extend );\r
145 \r
146     virtual bool isConnected( Port* other );\r
147     inline int type( ) const\r
148       { return( this->Type ); }\r
149 \r
150     inline QVector< Connection* >& connections( )\r
151       { return( this->m_Connections ); }\r
152     inline const QVector< Connection* >& connections( ) const\r
153       { return( this->m_Connections ); }\r
154 \r
155   protected:\r
156     QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
157     virtual void _updateLabels( );\r
158 \r
159     virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent* evt );\r
160 \r
161   protected:\r
162     QVector< Connection* > m_Connections;\r
163   };\r
164 \r
165 } // ecapseman\r
166 \r
167 #endif // __CPBASEQTQPPLICATION__PORT__H__\r
168 \r
169 // eof - $RCSfile$\r