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