]> AND Private Git Repository - blast.git/blobdiff - AbstractBoxItem.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
finished conn mode of library
[blast.git] / AbstractBoxItem.h
index fb2bdcc594feb1278af6ad9635ec84f131bac452..e490088f956e91b19e36ff84207580e887359138 100644 (file)
@@ -9,6 +9,7 @@
 
 class Dispatcher;
 class InterfaceItem;
+#include "Parameters.h"
 class Parameters;
 class AbstractBlock;
 class GroupScene;
@@ -23,10 +24,16 @@ class AbstractBoxItem : public QGraphicsItem {
 public:  
 
   enum BorderType { NoBorder = 0, BorderEast, BorderNorth, BorderWest, BorderSouth, CornerSouthEast, Title};
-  enum ChangeType { Resize = 0, InterfaceMove };
+  enum ChangeType { Creation = 0, Resize, InterfaceMove };
 
-  AbstractBoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, QGraphicsItem* parent = Q_NULLPTR);
-  AbstractBoxItem(Dispatcher *_dispatcher, Parameters *_params, QGraphicsItem* parent = Q_NULLPTR);
+  static int NoLock;
+  static int Position;
+  static int Dimension;
+  static int Interfaces;
+  static int Names;
+
+  AbstractBoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, int _lock = NoLock, QGraphicsItem* parent = Q_NULLPTR);
+  AbstractBoxItem(Dispatcher *_dispatcher, Parameters *_params, int _lock = NoLock, QGraphicsItem* parent = Q_NULLPTR);
 
   virtual ~AbstractBoxItem();
 
@@ -43,6 +50,8 @@ public:
   inline int getIfaceMargin() { return ifaceMargin; }
   inline int getNameMargin() { return nameMargin; }
   inline QPointF getOriginPoint() { return originPoint; }
+  inline int getMinimumBoxWidth() { return minimumBoxWidth; }
+  inline int getMinimumBoxHeight() { return minimumBoxHeight; }
 
   // setters
   void setRefBlock(AbstractBlock* _refBlock);
@@ -51,7 +60,18 @@ public:
   void setRstClkVisible(bool b);
   void setWishboneVisible(bool b);
   void setDimension(int x, int y);
+  inline void setWidth(int width) { boxWidth = width; }
+  inline void setHeight(int height) {boxHeight = height; }
   inline void setCurrentInterface(InterfaceItem* iface) { currentInterface = iface; }
+  inline void setLock(int _lock) { lock = _lock; }
+  inline void lockPosition() { lock = lock | Position; }
+  inline void unlockPosition() { lock = (lock&Position)^lock; }
+  inline void lockDimension() { lock = lock | Dimension; }
+  inline void unlockDimension() { lock = (lock&Dimension)^lock; }
+  inline void lockInterfaces() { lock = lock | Interfaces; }
+  inline void unlockInterfaces() { lock = (lock&Interfaces)^lock; }
+  inline void lockNames() { lock = lock | Names; }
+  inline void unlockNames() { lock = (lock&Names)^lock; }
 
   // testers
   virtual bool isBoxItem();
@@ -61,7 +81,10 @@ public:
   inline bool isRstClkVisible(){ return rstClkVisible;}
   inline bool isWishboneVisible(){ return wishboneVisible;}
   bool isInterfaces(int orientation) const;
-
+  inline bool isPositionLock() { return (lock&Position)!=0?true:false; }
+  inline bool isDimensionLock() { return (lock&Dimension)!=0?true:false; }
+  inline bool isInterfacesLock() { return (lock&Interfaces)!=0?true:false; }
+  inline bool isNamesLock() { return (lock&Names)!=0?true:false; }
   // others
   QRectF boundingRectInScene();
   virtual void nameChanged() = 0; // called when an interface or box name have changed
@@ -96,6 +119,8 @@ public:
   InterfaceItem *searchInterfaceItemByRef(ConnectedInterface* ref);
   InterfaceItem* getInterfaceItemFromCursor(qreal x, qreal y);  
 
+  QRectF boundingRect() const;
+
 protected: 
   Dispatcher *dispatcher;
   Parameters *params;
@@ -123,6 +148,7 @@ protected:
   int ifaceMargin; // the margin around each side of interfaces' name
   QPointF originPoint; // the left-top point that is the origin of the bounding box, in the item coordinates
 
+  int lock;
   bool selected;
   bool rstClkVisible; //! true if clock/reset interfaces are visible
   bool wishboneVisible; //! true if wishbone interfaces are visible
@@ -132,13 +158,13 @@ protected:
   virtual void updateMinimumSize() = 0; // modify the minimum size
   virtual bool updateGeometry(ChangeType type) = 0; // modify the originPoint and the total dimension
 
-  QRectF boundingRect() const;
+
   /* pure virtual method inherited from QGraphicsItem :
     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) =0;
     virtual QRectF boundingRect() const =0;
   */   
   
-  void initInterfaceItems();
+  void createInterfaceItems(Parameters::Direction posInputs = Parameters::West, Parameters::Direction posOutputs = Parameters::East, Parameters::Direction posBidirs = Parameters::South);
   int nbInterfacesByOrientation(int orientation);
 };