]> Creatis software - cpPlugins.git/blobdiff - lib/cpPipelineEditor/Port.h
First dump for version 0.1.0
[cpPlugins.git] / lib / cpPipelineEditor / Port.h
diff --git a/lib/cpPipelineEditor/Port.h b/lib/cpPipelineEditor/Port.h
new file mode 100644 (file)
index 0000000..4daafd0
--- /dev/null
@@ -0,0 +1,169 @@
+#ifndef __CPPIPELINEEDITOR__PORT__H__\r
+#define __CPPIPELINEEDITOR__PORT__H__\r
+\r
+#include <cpPipelineEditor/cpPipelineEditor_Export.h>\r
+#include <QGraphicsPathItem>\r
+\r
+namespace cpPipelineEditor\r
+{\r
+  class Block;\r
+  class Connection;\r
+\r
+  /**\r
+   */\r
+  class cpPipelineEditor_EXPORT Port\r
+    : public QGraphicsPathItem\r
+  {\r
+  public:\r
+    typedef Port Self;\r
+    typedef QGraphicsPathItem Superclass;\r
+\r
+    enum { Type = QGraphicsItem::UserType + 1 };\r
+\r
+  public:\r
+    Port( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
+    virtual ~Port( );\r
+\r
+    void setBlock( Block* b );\r
+    inline Block* block( ) const\r
+      { return( this->m_Block ); }\r
+\r
+    virtual void setName( const QString& n );\r
+    virtual void setExtendedName( const QString& n );\r
+    inline QString name( ) const\r
+      { return( this->m_Label->toPlainText( ) ); }\r
+    inline QString extendedName( ) const\r
+      { return( this->m_ExtendedLabel->toPlainText( ) ); }\r
+\r
+    inline int radius( ) const\r
+      { return( this->m_Radius ); }\r
+\r
+    inline bool isExtended( ) const\r
+      { return( this->m_IsExtended ); }\r
+    virtual void setExtend( bool extend );\r
+\r
+    virtual bool isConnected( Port* other ) = 0;\r
+    inline int type( ) const\r
+      { return( this->Type ); }\r
+\r
+    virtual void paint(\r
+      QPainter* painter,\r
+      const QStyleOptionGraphicsItem* option,\r
+      QWidget* widget\r
+      );\r
+\r
+  protected:\r
+    virtual void _updateLabels( ) { }\r
+\r
+  protected:\r
+    Block* m_Block;\r
+\r
+    int  m_Radius;\r
+    int  m_Margin;\r
+    bool m_IsExtended;\r
+\r
+    QGraphicsTextItem* m_Label;\r
+    QGraphicsTextItem* m_ExtendedLabel;\r
+  };\r
+\r
+  /**\r
+   */\r
+  class NamePort\r
+    : public Port\r
+  {\r
+  public:\r
+    typedef NamePort Self;\r
+    typedef Port     Superclass;\r
+\r
+    enum { Type = Superclass::Type + 1 };\r
+\r
+  public:\r
+    NamePort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
+    virtual ~NamePort( );\r
+\r
+    virtual bool isConnected( Port* other );\r
+    inline int type( ) const\r
+      { return( this->Type ); }\r
+\r
+  protected:\r
+    virtual void _updateLabels( );\r
+  };\r
+\r
+  /**\r
+   */\r
+  class InputPort\r
+    : public Port\r
+  {\r
+  public:\r
+    typedef InputPort Self;\r
+    typedef Port      Superclass;\r
+\r
+    enum { Type = Superclass::Type + 3 };\r
+\r
+  public:\r
+    InputPort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
+    virtual ~InputPort( );\r
+\r
+    virtual void setExtend( bool extend );\r
+\r
+    virtual bool isConnected( Port* other );\r
+    inline int type( ) const\r
+      { return( this->Type ); }\r
+\r
+    void setConnection( Connection* c );\r
+    inline Connection* connection( )\r
+      { return( this->m_Connection ); }\r
+    inline const Connection* connection( ) const\r
+      { return( this->m_Connection ); }\r
+    inline bool hasConnection( ) const\r
+      { return( this->m_Connection != NULL ); }\r
+\r
+  protected:\r
+    QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
+    virtual void _updateLabels( );\r
+\r
+  protected:\r
+    Connection* m_Connection;\r
+  };\r
+\r
+  /**\r
+   */\r
+  class OutputPort\r
+    : public Port\r
+  {\r
+  public:\r
+    typedef OutputPort Self;\r
+    typedef Port       Superclass;\r
+\r
+    enum { Type = Superclass::Type + 4 };\r
+\r
+  public:\r
+    OutputPort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
+    virtual ~OutputPort( );\r
+\r
+    virtual void setExtend( bool extend );\r
+\r
+    virtual bool isConnected( Port* other );\r
+    inline int type( ) const\r
+      { return( this->Type ); }\r
+\r
+    inline QVector< Connection* >& connections( )\r
+      { return( this->m_Connections ); }\r
+    inline const QVector< Connection* >& connections( ) const\r
+      { return( this->m_Connections ); }\r
+\r
+  protected:\r
+    QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
+    virtual void _updateLabels( );\r
+\r
+    virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent* evt );\r
+\r
+  protected:\r
+    QVector< Connection* > m_Connections;\r
+  };\r
+\r
+} // ecapseman\r
+\r
+#endif // __CPPIPELINEEDITOR__PORT__H__\r
+\r
+// eof - $RCSfile$\r