1 #ifndef __ABSTRACTBOXITEM_H__
2 #define __ABSTRACTBOXITEM_H__
8 #include <QGraphicsItem>
15 class ConnectedInterface;
17 class AbstractBoxItem : public QGraphicsItem {
21 enum BorderType { NoBorder = 0, BorderEast, BorderNorth, BorderWest, BorderSouth, CornerSouthEast, Title};
22 enum ChangeType { Resize = 0, InterfaceMove };
24 AbstractBoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, QGraphicsItem* parent = Q_NULLPTR);
26 virtual ~AbstractBoxItem();
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; }
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; }
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;
58 void addInterface(InterfaceItem* i, bool resetPosition = false);
59 void removeInterface(InterfaceItem* i);
60 void resetInterfacesPosition();
61 void deplaceInterface(QPointF pos);
62 void updateInterfacesAndConnections();
64 InterfaceItem *searchInterfaceByName(QString name);
65 InterfaceItem *searchInterfaceByRef(ConnectedInterface* ref);
66 InterfaceItem* getInterfaceFromCursor(qreal x, qreal y);
69 Dispatcher *dispatcher;
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
75 AbstractBlock *refBlock;
77 InterfaceItem* currentInterface; // currently clicked interface in ItemEdition mode
79 BorderType currentBorder; // which border cursor is on
80 QPointF cursorPosition;
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, ...
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
98 QPointF currentPosition; // the start point for resize
100 virtual void updateMinimumSize() = 0; // modify the minimum size
101 virtual bool updateGeometry(ChangeType type) = 0; // modify the originPoint and the total dimension
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;
108 void initInterfaces();
109 int nbInterfacesByOrientation(int orientation);
112 #endif // __ABSTRACTBOXITEM_H__