--- /dev/null
+#include <cpBaseQtApplication/Pipeline/Connection.h>\r
+#include <cpBaseQtApplication/Pipeline/Port.h>\r
+\r
+#include <QBrush>\r
+#include <QGraphicsScene>\r
+#include <QPainter>\r
+#include <QPen>\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::Connection::\r
+Connection( QGraphicsItem* parent, QGraphicsScene* scene )\r
+ : Superclass( parent, scene )\r
+{\r
+ this->setPen( QPen( Qt::black, 2 ) );\r
+ this->setBrush( Qt::NoBrush );\r
+ this->setZValue( -1 );\r
+ this->m_Port1 = NULL;\r
+ this->m_Port2 = NULL;\r
+ this->setFlag( QGraphicsItem::ItemIsSelectable );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::Connection::\r
+~Connection( )\r
+{\r
+ if( this->m_Port1 != NULL )\r
+ this->m_Port1->removeConnection( this );\r
+ if( this->m_Port2 != NULL )\r
+ this->m_Port2->removeConnection( this );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+setPos1( const QPointF& p )\r
+{\r
+ this->m_Pos1 = p;\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+setPos2( const QPointF& p )\r
+{\r
+ this->m_Pos2 = p;\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+setPort1( OutputPort* p )\r
+{\r
+ if( p != NULL )\r
+ {\r
+ p->connections( ).push_back( this );\r
+ this->m_Port1 = p;\r
+\r
+ } // fi\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+setPort2( InputPort* p )\r
+{\r
+ if( p != NULL )\r
+ {\r
+ p->setConnection( this );\r
+ this->m_Port2 = p;\r
+\r
+ } // fi\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+updatePosFromPorts( )\r
+{\r
+ if( this->m_Port1 != NULL )\r
+ this->m_Pos1 =\r
+ this->m_Port1->scenePos( ) +\r
+ QPointF( this->m_Port1->radius( ), this->m_Port1->radius( ) );\r
+ if( this->m_Port2 != NULL )\r
+ this->m_Pos2 =\r
+ this->m_Port2->scenePos( ) +\r
+ QPointF( this->m_Port2->radius( ), this->m_Port2->radius( ) );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+updatePath( )\r
+{\r
+ QPainterPath p;\r
+ p.moveTo( this->m_Pos1 );\r
+\r
+ qreal dx = this->m_Pos2.x( ) - this->m_Pos1.x( );\r
+ qreal dy = this->m_Pos2.y( ) - this->m_Pos1.y( );\r
+ QPointF c1( this->m_Pos1.x( ) + dx * 0.25, this->m_Pos1.y( ) + dy * 0.1 );\r
+ QPointF c2( this->m_Pos1.x( ) + dx * 0.75, this->m_Pos1.y( ) + dy * 0.9 );\r
+ p.cubicTo( c1, c2, this->m_Pos2 );\r
+\r
+ this->setPath( p );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::OutputPort*\r
+cpBaseQtApplication::Pipeline::Connection::\r
+port1( ) const\r
+{\r
+ return( this->m_Port1 );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::InputPort*\r
+cpBaseQtApplication::Pipeline::Connection::\r
+port2( ) const\r
+{\r
+ return( this->m_Port2 );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::Connection::\r
+paint(\r
+ QPainter* painter,\r
+ const QStyleOptionGraphicsItem* option,\r
+ QWidget* widget\r
+ )\r
+{\r
+ Q_UNUSED( option );\r
+ Q_UNUSED( widget );\r
+\r
+ if( this->isSelected( ) )\r
+ painter->setPen( QPen( Qt::red, 5 ) );\r
+ else\r
+ painter->setPen( QPen( Qt::black, 2 ) );\r
+ this->setBrush( Qt::NoBrush );\r
+ painter->drawPath( this->path( ) );\r
+}\r
+\r
+// eof - $RCSfile$\r