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

Private GIT Repository
insert/move/remove block/groups/interface done. Next to fo: loading project file
[blast.git] / BoxItem.h
1 #ifndef __BLOCKITEM_H__
2 #define __BLOCKITEM_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8
9
10 #include "AbstractBoxItem.h"
11 class AbstractBoxItem;
12
13 class GroupItem;
14 class Parameters;
15 class Dispacther;
16
17 #include "Exception.h"
18
19 using namespace std;
20 using namespace Qt;
21
22 /* NOTE :
23
24   A BoxItem may represent a functional block or a group block within a group item, itslef
25   within a scene. What says what it represents is refBlock, i.e. if refBlock->isFunctionalBlock()
26   or refBlock->isGroupBlock() returns true.
27  */
28 class BoxItem : public AbstractBoxItem {
29
30 public:
31   BoxItem(AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params, GroupItem* parent) throw(Exception);
32   ~BoxItem();
33
34   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);  
35
36   // getters
37   inline GroupItem *getChildGroupItem() { return childGroupItem; }
38
39   // setters
40   inline void setChildGroupItem(GroupItem* item) { childGroupItem = item; }
41
42   // testers
43   bool isBoxItem();
44
45   // others
46   void moveTo(QPointF dest);
47   void save(QXmlStreamWriter& writer);
48
49 protected:
50
51   void updateMinimumSize(); // modify the minimum size
52   bool updateGeometry(ChangeType type); // modify the originPoint and the total dimension
53
54   void mousePressEvent(QGraphicsSceneMouseEvent *event);
55   void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
56   void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
57   void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
58   void hoverMoveEvent( QGraphicsSceneHoverEvent *event);  
59
60 private:
61
62   /* NOTE :
63    A BlockItem is always graphically within a GroupItem, inside the same scene.   
64
65    A BlockItem may also be the graphical view of a GroupBlock. In this case, there exists a child scene
66    containing a GroupItem. insideGroup atribute refers to this GroupItem and thus, may be NULL if the current
67    blockItem represents a functional block
68    */
69   GroupItem *childGroupItem;
70
71
72   friend QDataStream &operator<<(QDataStream &out, BoxItem &b);
73   friend QDataStream &operator>>(QDataStream &in, BoxItem &b);
74
75 signals:
76   void itemMustBeDeleted(QGraphicsItem*);
77
78 };
79
80 QDataStream & operator <<(QDataStream &out, BoxItem &b);
81 QDataStream & operator >>(QDataStream &in, BoxItem &b);
82
83 #endif // __BLOCKITEM_H__