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

Private GIT Repository
6eeb46c011f04b5d313df596c58338a5da850bd3
[blast.git] / AbstractBoxItem.h
1 #ifndef __ABSTRACTBOXITEM_H__
2 #define __ABSTRACTBOXITEM_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8 #include <QGraphicsItem>
9
10 class Dispatcher;
11 class InterfaceItem;
12 class Parameters;
13 class AbstractBlock;
14 class GroupScene;
15 class ConnectedInterface;
16
17 class AbstractBoxItem : public QGraphicsItem {
18
19 public:  
20
21   enum BorderType { NoBorder = 0, BorderEast, BorderNorth, BorderWest, BorderSouth, CornerSouthEast, Title};
22   enum ChangeType { Resize = 0, InterfaceMove };
23
24   AbstractBoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, QGraphicsItem* parent = Q_NULLPTR);
25
26   virtual ~AbstractBoxItem();
27
28   // getters
29   inline AbstractBlock* getRefBlock() { return refBlock; }
30   inline int getWidth() { return boxWidth;}
31   inline int getHeight() { return boxHeight;}
32   inline int getTotalWidth() { return totalWidth;}
33   inline int getTotalHeight() { return totalHeight; }
34   inline QList<InterfaceItem* > getInterfaces() { return interfaces; }
35   inline InterfaceItem *getCurrentInterface() { return currentInterface; }
36   inline int getId(){ return id; }
37   inline GroupScene* getScene() { return (GroupScene*)(scene()); }
38   inline int getIfaceMargin() { return ifaceMargin; }
39   inline int getNameMargin() { return nameMargin; }
40   inline QPointF getOriginPoint() { return originPoint; }
41
42   // setters
43   inline void setId(int id){ this->id = id; }
44   inline void setSelected(bool _selected) { selected = _selected; }  
45   inline void setRstClkVisible(bool b){ rstClkVisible = b;}
46   void setDimension(int x, int y);
47   inline void setCurrentInterface(InterfaceItem* iface) { currentInterface = iface; }
48
49   // testers
50   virtual bool isBoxItem();
51   virtual bool isGroupItem();  
52   inline bool isSelected() { return selected; }
53   inline bool isRstClkVisible(){ return rstClkVisible;}
54   bool isInterfaces(int orientation) const;
55
56   // others
57
58   void addInterface(InterfaceItem* i, bool resetPosition = false);
59   void removeInterface(InterfaceItem* i);
60   void resetInterfacesPosition();
61   void deplaceInterface(QPointF pos);
62   void updateInterfacesAndConnections();
63
64   InterfaceItem *searchInterfaceByName(QString name);
65   InterfaceItem *searchInterfaceByRef(ConnectedInterface* ref);
66   InterfaceItem* getInterfaceFromCursor(qreal x, qreal y);  
67
68 protected: 
69   Dispatcher *dispatcher;
70   Parameters *params;
71   QList<InterfaceItem*> interfaces;
72   /* NOTE : the reference block may be a FunctionalBlock or a GroupBlock, depending on the fact
73   that the real instace will be of FunctionalBlock or GroupBlock
74   */
75   AbstractBlock *refBlock;
76
77   InterfaceItem* currentInterface; // currently clicked interface in ItemEdition mode
78
79   BorderType currentBorder; // which border cursor is on
80   QPointF cursorPosition;
81
82   int id;  
83   int boxWidth; // the width of the main box (without interface, title, ...)
84   int boxHeight; // the height of the main box (without interface, title, ...)
85   int minimumBoxWidth; // minimum width of the main box: may be recomputed if position/number of interface changes
86   int minimumBoxHeight; // minimum height of the main box: may be recomputed if position/number of interface changes
87   int totalWidth; // width and heigth taking into account interfaces,title, ...
88   int totalHeight;  
89   int nameWidth; // the width of the  box (group or block) name in Arial 10
90   int nameHeight; // the height of the name in Arial 10
91   int nameMargin; // the margin around each side of the name
92   int ifaceMargin; // the margin around each side of interfaces' name
93   QPointF originPoint; // the left-top point that is the origin of the bounding box
94
95   bool selected;
96   bool rstClkVisible;
97
98   QPointF currentPosition; // the start point for resize
99
100   virtual void updateMinimumSize() = 0; // modify the minimum size
101   virtual bool updateGeometry(ChangeType type) = 0; // modify the originPoint and the total dimension
102
103   QRectF boundingRect() const;
104   /* pure virtual method inherited from QGraphicsItem :
105     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) =0;
106     virtual QRectF boundingRect() const =0;
107   */
108   void initInterfaces();
109   int nbInterfacesByOrientation(int orientation);
110 };
111
112 #endif // __ABSTRACTBOXITEM_H__