]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Connection.cxx
81ac61d58de55d405e60a88bbf362564ac6dca6a
[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     if( p->connection( ) == NULL )\r
67     {\r
68       p->setConnection( this );\r
69       this->m_Port2 = p;\r
70 \r
71     } // fi\r
72 \r
73   } // fi\r
74 }\r
75 \r
76 // -------------------------------------------------------------------------\r
77 void cpBaseQtApplication::Connection::\r
78 updatePosFromPorts( )\r
79 {\r
80   if( this->m_Port1 != NULL )\r
81     this->m_Pos1 =\r
82       this->m_Port1->scenePos( ) +\r
83       QPointF( this->m_Port1->radius( ), this->m_Port1->radius( ) );\r
84   if( this->m_Port2 != NULL )\r
85     this->m_Pos2 =\r
86       this->m_Port2->scenePos( ) +\r
87       QPointF( this->m_Port2->radius( ), this->m_Port2->radius( ) );\r
88 }\r
89 \r
90 // -------------------------------------------------------------------------\r
91 void cpBaseQtApplication::Connection::\r
92 updatePath( )\r
93 {\r
94   QPainterPath p;\r
95   p.moveTo( this->m_Pos1 );\r
96 \r
97   qreal dx = this->m_Pos2.x( ) - this->m_Pos1.x( );\r
98   qreal dy = this->m_Pos2.y( ) - this->m_Pos1.y( );\r
99   QPointF c1( this->m_Pos1.x( ) + dx * 0.25, this->m_Pos1.y( ) + dy * 0.1 );\r
100   QPointF c2( this->m_Pos1.x( ) + dx * 0.75, this->m_Pos1.y( ) + dy * 0.9 );\r
101   p.cubicTo( c1, c2, this->m_Pos2 );\r
102 \r
103   this->setPath( p );\r
104 }\r
105 \r
106 // -------------------------------------------------------------------------\r
107 cpBaseQtApplication::OutputPort* cpBaseQtApplication::Connection::\r
108 port1( ) const\r
109 {\r
110   return( this->m_Port1 );\r
111 }\r
112 \r
113 // -------------------------------------------------------------------------\r
114 cpBaseQtApplication::InputPort* cpBaseQtApplication::Connection::\r
115 port2( ) const\r
116 {\r
117   return( this->m_Port2 );\r
118 }\r
119 \r
120 // -------------------------------------------------------------------------\r
121 void cpBaseQtApplication::Connection::\r
122 paint(\r
123   QPainter* painter,\r
124   const QStyleOptionGraphicsItem* option,\r
125   QWidget* widget\r
126   )\r
127 {\r
128   Q_UNUSED( option );\r
129   Q_UNUSED( widget );\r
130 \r
131   if( this->isSelected( ) )\r
132     painter->setPen( QPen( Qt::red, 5 ) );\r
133   else\r
134     painter->setPen( QPen( Qt::black, 2 ) );\r
135   this->setBrush( Qt::NoBrush );\r
136   painter->drawPath( this->path( ) );\r
137 }\r
138 \r
139 // eof - $RCSfile$\r