]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Connection.cxx
...
[cpPlugins.git] / lib / cpBaseQtApplication / Connection.cxx
1 #include <cpBaseQtApplication/Connection.h>\r
2 #include <cpBaseQtApplication/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::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::Connection::\r
24 ~Connection( )\r
25 {\r
26   if( this->m_Port1 != NULL )\r
27     this->m_Port1->connections( ).\r
28       remove( this->m_Port1->connections( ).indexOf( this ) );\r
29 \r
30   if( this->m_Port2 != NULL )\r
31     this->m_Port2->setConnection( NULL );\r
32 }\r
33 \r
34 // -------------------------------------------------------------------------\r
35 void cpBaseQtApplication::Connection::\r
36 setPos1( const QPointF& p )\r
37 {\r
38   this->m_Pos1 = p;\r
39 }\r
40 \r
41 // -------------------------------------------------------------------------\r
42 void cpBaseQtApplication::Connection::\r
43 setPos2( const QPointF& p )\r
44 {\r
45   this->m_Pos2 = p;\r
46 }\r
47 \r
48 // -------------------------------------------------------------------------\r
49 void cpBaseQtApplication::Connection::\r
50 setPort1( OutputPort* p )\r
51 {\r
52   if( p != NULL )\r
53   {\r
54     p->connections( ).append( this );\r
55     this->m_Port1 = p;\r
56 \r
57   } // fi\r
58 }\r
59 \r
60 // -------------------------------------------------------------------------\r
61 void cpBaseQtApplication::Connection::\r
62 setPort2( InputPort* p )\r
63 {\r
64   if( p != NULL )\r
65   {\r
66     p->setConnection( this );\r
67     this->m_Port2 = p;\r
68 \r
69   } // fi\r
70 }\r
71 \r
72 // -------------------------------------------------------------------------\r
73 void cpBaseQtApplication::Connection::\r
74 updatePosFromPorts( )\r
75 {\r
76   if( this->m_Port1 != NULL )\r
77     this->m_Pos1 =\r
78       this->m_Port1->scenePos( ) +\r
79       QPointF( this->m_Port1->radius( ), this->m_Port1->radius( ) );\r
80   if( this->m_Port2 != NULL )\r
81     this->m_Pos2 =\r
82       this->m_Port2->scenePos( ) +\r
83       QPointF( this->m_Port2->radius( ), this->m_Port2->radius( ) );\r
84 }\r
85 \r
86 // -------------------------------------------------------------------------\r
87 void cpBaseQtApplication::Connection::\r
88 updatePath( )\r
89 {\r
90   QPainterPath p;\r
91   p.moveTo( this->m_Pos1 );\r
92 \r
93   qreal dx = this->m_Pos2.x( ) - this->m_Pos1.x( );\r
94   qreal dy = this->m_Pos2.y( ) - this->m_Pos1.y( );\r
95   QPointF c1( this->m_Pos1.x( ) + dx * 0.25, this->m_Pos1.y( ) + dy * 0.1 );\r
96   QPointF c2( this->m_Pos1.x( ) + dx * 0.75, this->m_Pos1.y( ) + dy * 0.9 );\r
97   p.cubicTo( c1, c2, this->m_Pos2 );\r
98 \r
99   this->setPath( p );\r
100 }\r
101 \r
102 // -------------------------------------------------------------------------\r
103 cpBaseQtApplication::OutputPort* cpBaseQtApplication::Connection::\r
104 port1( ) const\r
105 {\r
106   return( this->m_Port1 );\r
107 }\r
108 \r
109 // -------------------------------------------------------------------------\r
110 cpBaseQtApplication::InputPort* cpBaseQtApplication::Connection::\r
111 port2( ) const\r
112 {\r
113   return( this->m_Port2 );\r
114 }\r
115 \r
116 // -------------------------------------------------------------------------\r
117 void cpBaseQtApplication::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