]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Pipeline/Connection.cxx
...
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / Connection.cxx
1 #include <cpBaseQtApplication/Pipeline/Connection.h>\r
2 #include <cpBaseQtApplication/Pipeline/Port.h>\r
3 \r
4 #include <QBrush>\r
5 #include <QGraphicsScene>\r
6 #include <QPainter>\r
7 #include <QPen>\r
8 \r
9 // -------------------------------------------------------------------------\r
10 cpBaseQtApplication::Pipeline::Connection::\r
11 Connection( QGraphicsItem* parent, QGraphicsScene* scene )\r
12   : Superclass( parent, scene )\r
13 {\r
14   this->setPen( QPen( Qt::black, 2 ) );\r
15   this->setBrush( Qt::NoBrush );\r
16   this->setZValue( -1 );\r
17   this->m_Port1 = NULL;\r
18   this->m_Port2 = NULL;\r
19   this->setFlag( QGraphicsItem::ItemIsSelectable );\r
20 }\r
21 \r
22 // -------------------------------------------------------------------------\r
23 cpBaseQtApplication::Pipeline::Connection::\r
24 ~Connection( )\r
25 {\r
26   if( this->m_Port1 != NULL )\r
27     this->m_Port1->removeConnection( this );\r
28   if( this->m_Port2 != NULL )\r
29     this->m_Port2->removeConnection( this );\r
30 }\r
31 \r
32 // -------------------------------------------------------------------------\r
33 void cpBaseQtApplication::Pipeline::Connection::\r
34 setPos1( const QPointF& p )\r
35 {\r
36   this->m_Pos1 = p;\r
37 }\r
38 \r
39 // -------------------------------------------------------------------------\r
40 void cpBaseQtApplication::Pipeline::Connection::\r
41 setPos2( const QPointF& p )\r
42 {\r
43   this->m_Pos2 = p;\r
44 }\r
45 \r
46 // -------------------------------------------------------------------------\r
47 void cpBaseQtApplication::Pipeline::Connection::\r
48 setPort1( OutputPort* p )\r
49 {\r
50   if( p != NULL )\r
51   {\r
52     p->connections( ).push_back( this );\r
53     this->m_Port1 = p;\r
54 \r
55   } // fi\r
56 }\r
57 \r
58 // -------------------------------------------------------------------------\r
59 void cpBaseQtApplication::Pipeline::Connection::\r
60 setPort2( InputPort* p )\r
61 {\r
62   if( p != NULL )\r
63   {\r
64     p->setConnection( this );\r
65     this->m_Port2 = p;\r
66 \r
67   } // fi\r
68 }\r
69 \r
70 // -------------------------------------------------------------------------\r
71 void cpBaseQtApplication::Pipeline::Connection::\r
72 updatePosFromPorts( )\r
73 {\r
74   if( this->m_Port1 != NULL )\r
75     this->m_Pos1 =\r
76       this->m_Port1->scenePos( ) +\r
77       QPointF( this->m_Port1->radius( ), this->m_Port1->radius( ) );\r
78   if( this->m_Port2 != NULL )\r
79     this->m_Pos2 =\r
80       this->m_Port2->scenePos( ) +\r
81       QPointF( this->m_Port2->radius( ), this->m_Port2->radius( ) );\r
82 }\r
83 \r
84 // -------------------------------------------------------------------------\r
85 void cpBaseQtApplication::Pipeline::Connection::\r
86 updatePath( )\r
87 {\r
88   QPainterPath p;\r
89   p.moveTo( this->m_Pos1 );\r
90 \r
91   qreal dx = this->m_Pos2.x( ) - this->m_Pos1.x( );\r
92   qreal dy = this->m_Pos2.y( ) - this->m_Pos1.y( );\r
93   QPointF c1( this->m_Pos1.x( ) + dx * 0.25, this->m_Pos1.y( ) + dy * 0.1 );\r
94   QPointF c2( this->m_Pos1.x( ) + dx * 0.75, this->m_Pos1.y( ) + dy * 0.9 );\r
95   p.cubicTo( c1, c2, this->m_Pos2 );\r
96 \r
97   this->setPath( p );\r
98 }\r
99 \r
100 // -------------------------------------------------------------------------\r
101 cpBaseQtApplication::Pipeline::OutputPort*\r
102 cpBaseQtApplication::Pipeline::Connection::\r
103 port1( ) const\r
104 {\r
105   return( this->m_Port1 );\r
106 }\r
107 \r
108 // -------------------------------------------------------------------------\r
109 cpBaseQtApplication::Pipeline::InputPort*\r
110 cpBaseQtApplication::Pipeline::Connection::\r
111 port2( ) const\r
112 {\r
113   return( this->m_Port2 );\r
114 }\r
115 \r
116 // -------------------------------------------------------------------------\r
117 void cpBaseQtApplication::Pipeline::Connection::\r
118 paint(\r
119   QPainter* painter,\r
120   const QStyleOptionGraphicsItem* option,\r
121   QWidget* widget\r
122   )\r
123 {\r
124   Q_UNUSED( option );\r
125   Q_UNUSED( widget );\r
126 \r
127   if( this->isSelected( ) )\r
128     painter->setPen( QPen( Qt::red, 5 ) );\r
129   else\r
130     painter->setPen( QPen( Qt::black, 2 ) );\r
131   this->setBrush( Qt::NoBrush );\r
132   painter->drawPath( this->path( ) );\r
133 }\r
134 \r
135 // eof - $RCSfile$\r