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

Private GIT Repository
finished testbench generation
[blast.git] / BoxItem.h
1 #ifndef __BLOCKITEM_H__
2 #define __BLOCKITEM_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8 #include <QtXml>
9 #include <QtXmlPatterns>
10
11
12 #include "AbstractBoxItem.h"
13 class AbstractBoxItem;
14
15 class GroupItem;
16 class Parameters;
17 class Dispacther;
18
19 #include "Exception.h"
20
21 using namespace std;
22 using namespace Qt;
23
24 /* NOTE :
25
26   A BoxItem may represent a functional block or a group block within a group item, itslef
27   within a scene. What says what it represents is refBlock, i.e. if refBlock->isFunctionalBlock()
28   or refBlock->isGroupBlock() returns true.
29  */
30 class BoxItem : public AbstractBoxItem {
31
32 public:
33
34   enum Position { Free = 0, Left , Right, Top, Bottom, TopLeft, BottomLeft, TopRight, BottomRight }; // if not Free, glue the box to the desired border
35   enum SpanType { NoSpan = 0, HSpan = 1, VSpan = 2 };
36
37   BoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, GroupItem* parent, int _lock = NoLock, SpanType _span = NoSpan, Position _position = Free) throw(Exception);
38   BoxItem(Dispatcher *_dispatcher, Parameters *_params, GroupItem* parent, int _lock = NoLock, SpanType _span = NoSpan, Position _position = Free) throw(Exception);
39   ~BoxItem();
40
41   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);  
42
43   // getters
44   inline GroupItem *getChildGroupItem() { return childGroupItem; }
45   inline Position getPosition() { return position; }
46   inline SpanType getSpan() { return span; }
47
48   // setters
49   inline void setChildGroupItem(GroupItem* item) { childGroupItem = item; }
50   inline void setPosition(Position _position) { position = _position; }
51   inline void setSpan(SpanType _span) { span = _span; }
52
53   // testers
54   bool isBoxItem();
55
56   // others
57   void nameChanged();
58   void moveTo(QPointF dest);
59   void loadFunctional(QDomElement funcElement) throw(Exception);
60   void save(QXmlStreamWriter& writer);
61
62   void updateMinimumSize(); // modify the minimum size
63   bool updateGeometry(ChangeType type); // modify the originPoint and the total dimension
64
65 protected:
66
67   SpanType span;
68   Position position;
69
70   void mousePressEvent(QGraphicsSceneMouseEvent *event);
71   void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
72   void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
73   void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
74   void hoverMoveEvent( QGraphicsSceneHoverEvent *event);  
75
76 private:
77
78   /* NOTE :
79    A BoxItem is always graphically within a GroupItem, inside the same scene.
80
81    A BoxItem may also be the graphical view of a GroupBlock. In this case, there exists a child scene
82    containing a GroupItem. insideGroup atribute refers to this GroupItem and thus, may be NULL if the current
83    blockItem represents a functional block
84    */
85   GroupItem *childGroupItem;
86
87
88   friend QDataStream &operator<<(QDataStream &out, BoxItem &b);
89   friend QDataStream &operator>>(QDataStream &in, BoxItem &b);
90
91 /*
92 signals:
93   void itemMustBeDeleted(QGraphicsItem*);
94 */
95   
96 };
97
98 QDataStream & operator <<(QDataStream &out, BoxItem &b);
99 QDataStream & operator >>(QDataStream &in, BoxItem &b);
100
101 #endif // __BLOCKITEM_H__