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