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

Private GIT Repository
added clk/rst link when creating a block
[blast.git] / GroupItem.h
1 #ifndef __GROUPITEM_H__
2 #define __GROUPITEM_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 BoxItem;
16 class InterfaceItem;
17 class Dispatcher;
18 class Parameters;
19
20 #include "Exception.h"
21
22 using namespace std;
23 using namespace Qt;
24
25 class GroupItem : public AbstractBoxItem {
26
27 public:
28   /* CAUTION : the parentItem of a group block IS NOT the group item of the parent scene. It is a BlockItem that is
29      wihtin the parent scene. It is used when interfaceItem are added to the current GroupItem: they must be also added
30      to the parent BlockItem.
31
32      NB : this yields a problem when loading a project because scenes are created before creating group and then block.
33      thus, the parentItem must be initialized afterward when all block items have been created.
34
35    */
36   GroupItem(BoxItem* _parentItem, AbstractBlock *_refBlock, Dispatcher *_dispatcher, Parameters *_params) throw(Exception);
37   GroupItem(Dispatcher *_dispatcher, Parameters *_params) throw(Exception); //! uses only when loading a project file
38   ~GroupItem();
39
40   // getters
41   BoxItem* getParentItem();
42
43   // setters
44   void setParentItem(BoxItem* _parentItem);
45
46   // testers
47   bool isGroupItem();
48
49   // others  
50   void nameChanged();
51
52   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);  
53   void load(QDomElement groupElement) throw(Exception);
54   void save(QXmlStreamWriter& writer);
55
56   void updateShape();
57   void updateMinimumSize(); // modify the minimum size
58   bool updateGeometry(ChangeType type);
59   void updateBorderSpanItems();
60
61    void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
62    void mousePressEvent(QGraphicsSceneMouseEvent *event);
63    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
64    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
65
66 protected:
67
68
69   void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
70
71
72
73 private:
74   /* NOTE : parentItem attribute is never NULL except for the top GroupItem
75   in the top scene
76   */
77   BoxItem* parentItem;
78   QRectF rectTitle;
79   QPointF boxPoint; // the coordinates of the top-left corner of the box (without ifaces)
80
81   InterfaceItem *isHoverInterface(QPointF point);
82 };
83
84 #endif // __GROUPITEM_H__