]> Creatis software - cpPlugins.git/blobdiff - lib/cpBaseQtApplication/Pipeline/Block.h
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / Block.h
diff --git a/lib/cpBaseQtApplication/Pipeline/Block.h b/lib/cpBaseQtApplication/Pipeline/Block.h
new file mode 100644 (file)
index 0000000..a61e00e
--- /dev/null
@@ -0,0 +1,120 @@
+#ifndef __cpBaseQtApplication__Pipeline__Block__h__\r
+#define __cpBaseQtApplication__Pipeline__Block__h__\r
+\r
+#include <cpBaseQtApplication_Export.h>\r
+#include <QGraphicsPathItem>\r
+#include <itkCommand.h>\r
+#include <cpPlugins/Pipeline/ProcessObject.h>\r
+\r
+namespace cpBaseQtApplication\r
+{\r
+  namespace Pipeline\r
+  {\r
+    class Port;\r
+    class NamePort;\r
+    class InfoPort;\r
+    class InputPort;\r
+    class OutputPort;\r
+\r
+    /**\r
+     */\r
+    class cpBaseQtApplication_EXPORT Block\r
+      : public QGraphicsPathItem\r
+    {\r
+    public:\r
+      typedef Block             Self;\r
+      typedef QGraphicsPathItem Superclass;\r
+      typedef cpPlugins::Pipeline::ProcessObject TFilter;\r
+\r
+    protected:\r
+      /**\r
+       */\r
+      class _TFilterObserver\r
+        : public itk::Command\r
+      {\r
+      public:\r
+        typedef itk::SmartPointer< _TFilterObserver >       Pointer;\r
+        typedef itk::SmartPointer< const _TFilterObserver > ConstPointer;\r
+        itkNewMacro( _TFilterObserver );\r
+      public:\r
+        void Execute( itk::Object* c, const itk::EventObject& e )\r
+          { this->Execute( const_cast< const itk::Object* >( c ), e ); }\r
+        void Execute( const itk::Object* c, const itk::EventObject& e );\r
+      public:\r
+        Block* ObservedBlock;\r
+      };\r
+\r
+    public:\r
+      enum { Type = QGraphicsItem::UserType + 6 };\r
+\r
+      Block(\r
+        TFilter* filter,\r
+        QGraphicsItem* parent = NULL, QGraphicsScene* scene = NULL\r
+        );\r
+      virtual ~Block( );\r
+\r
+      TFilter* filter( );\r
+      const TFilter* filter( ) const;\r
+\r
+      void setNamePort( const QString& txt );\r
+      void setInfoPort( const QString& txt );\r
+      InputPort* addInputPort( const QString& txt, bool multiple );\r
+      OutputPort* addOutputPort( const QString& txt );\r
+\r
+      InputPort* inputPort( const QString& txt );\r
+      OutputPort* outputPort( const QString& txt );\r
+\r
+      QString namePort( ) const;\r
+      const InputPort* inputPort( const QString& txt ) const;\r
+      const OutputPort* outputPort( const QString& txt ) const;\r
+\r
+      bool connectOutputPortSlot( QObject* receiver, const char* slot );\r
+\r
+      inline int type( ) const\r
+        { return( this->Type ); }\r
+\r
+      virtual void setPos( const QPointF& pos );\r
+      virtual void setPos( qreal x, qreal y );\r
+\r
+      virtual void paint(\r
+        QPainter* painter,\r
+        const QStyleOptionGraphicsItem* option,\r
+        QWidget* widget\r
+        );\r
+\r
+    protected:\r
+      QVariant itemChange( GraphicsItemChange change, const QVariant& value );\r
+      void _setTypeInfo( const QString& txt );\r
+      void _configPort( Port* port );\r
+\r
+      virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent* evt );\r
+      virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent* evt );\r
+\r
+    private:\r
+      int m_HorzMargin;\r
+      int m_VertMargin;\r
+      int m_Width;\r
+      int m_Height;\r
+\r
+      NamePort* m_NamePort;\r
+      InfoPort* m_InfoPort;\r
+      std::map< std::string, InputPort* >  m_InputPorts;\r
+      std::map< std::string, OutputPort* > m_OutputPorts;\r
+\r
+      TFilter::Pointer m_Filter;\r
+      _TFilterObserver::Pointer m_FilterObserver;\r
+      unsigned long m_FilterObserverId;\r
+\r
+      static QColor SelectedAndUpdated;\r
+      static QColor NotSelectedAndUpdated;\r
+      static QColor SelectedAndNotUpdated;\r
+      static QColor NotSelectedAndNotUpdated;\r
+    };\r
+\r
+  } // ecapseman\r
+\r
+} // ecapseman\r
+\r
+#endif // __cpBaseQtApplication__Pipeline__Block__h__\r
+\r
+// eof - $RCSfile$\r