]> Creatis software - cpPlugins.git/blobdiff - lib/cpBaseQtApplication/Pipeline/Connection.cxx
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / Connection.cxx
diff --git a/lib/cpBaseQtApplication/Pipeline/Connection.cxx b/lib/cpBaseQtApplication/Pipeline/Connection.cxx
new file mode 100644 (file)
index 0000000..28bd39c
--- /dev/null
@@ -0,0 +1,135 @@
+#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