]> Creatis software - cpPlugins.git/blobdiff - lib/cpBaseQtApplication/Pipeline/Port.h
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / Port.h
diff --git a/lib/cpBaseQtApplication/Pipeline/Port.h b/lib/cpBaseQtApplication/Pipeline/Port.h
new file mode 100644 (file)
index 0000000..0622925
--- /dev/null
@@ -0,0 +1,216 @@
+#ifndef __cpBaseQtApplication__Pipeline__Port__h__\r
+#define __cpBaseQtApplication__Pipeline__Port__h__\r
+\r
+#include <cpBaseQtApplication_Export.h>\r
+#include <QGraphicsPathItem>\r
+\r
+namespace cpBaseQtApplication\r
+{\r
+  namespace Pipeline\r
+  {\r
+    class Block;\r
+    class Connection;\r
+\r
+    /**\r
+     */\r
+    class cpBaseQtApplication_EXPORT Port\r
+      : public QObject,\r
+        public QGraphicsPathItem\r
+    {\r
+      Q_OBJECT;\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 cpBaseQtApplication_EXPORT NamePort\r
+      : public Port\r
+    {\r
+      Q_OBJECT;\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 cpBaseQtApplication_EXPORT InfoPort\r
+      : public Port\r
+    {\r
+      Q_OBJECT;\r
+    public:\r
+      typedef InfoPort Self;\r
+      typedef Port     Superclass;\r
+\r
+      enum { Type = Superclass::Type + 2 };\r
+\r
+    public:\r
+      InfoPort( QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL );\r
+      virtual ~InfoPort( );\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 cpBaseQtApplication_EXPORT InputPort\r
+      : public Port\r
+    {\r
+      Q_OBJECT;\r
+    public:\r
+      typedef InputPort Self;\r
+      typedef Port      Superclass;\r
+\r
+      enum { Type = Superclass::Type + 3 };\r
+\r
+    public:\r
+      InputPort(\r
+        QGraphicsItem* parent,\r
+        bool multiple,\r
+        QGraphicsScene* scene = NULL\r
+        );\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
+      void removeConnection( Connection* c );\r
+      inline unsigned int numberOfConnections( ) const\r
+        { return( this->m_Connection.size( ) ); }\r
+      inline Connection* connection( unsigned int i )\r
+        { return( this->m_Connection[ i ] ); }\r
+      inline const Connection* connection( unsigned int i ) const\r
+        { return( this->m_Connection[ i ] ); }\r
+      inline bool hasConnection( ) const\r
+        { return( this->m_Connection.size( ) > 0 ); }\r
+      inline bool isMultiple( ) const\r
+        { return( this->m_IsMultiple ); }\r
+\r
+    protected:\r
+      QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
+      virtual void _updateLabels( );\r
+\r
+    protected:\r
+      std::vector< Connection* > m_Connection;\r
+      bool m_IsMultiple;\r
+    };\r
+\r
+    /**\r
+     */\r
+    class cpBaseQtApplication_EXPORT OutputPort\r
+      : public Port\r
+    {\r
+      Q_OBJECT;\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
+      void removeConnection( Connection* c );\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 std::vector< Connection* >& connections( )\r
+        { return( this->m_Connections ); }\r
+      inline const std::vector< Connection* >& connections( ) const\r
+        { return( this->m_Connections ); }\r
+\r
+    signals:\r
+    void viewData( const std::string& name, bool show );\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
+      std::vector< Connection* > m_Connections;\r
+    };\r
+\r
+  } // ecapseman\r
+\r
+} // ecapseman\r
+\r
+#endif // __cpBaseQtApplication__Pipeline__Port__h__\r
+\r
+// eof - $RCSfile$\r