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

Private GIT Repository
e2e47633ef8d842ea277df0fc2074426379d24a8
[blast.git] / GroupScene.h
1 #ifndef __GROUPSCENE_H__
2 #define __GROUPSCENE_H__
3
4 #include <QtCore>
5 #include <QtGui>
6 #include <QtWidgets>
7
8 class Dispatcher;
9 class Parameters;
10 class AbstractBlock;
11 class GroupWidget;
12 class GroupItem;
13 class BoxItem;
14 class SourceItem;
15 class AbstractBoxItem;
16 class ConnectionItem;
17 class InterfaceItem;
18
19 using namespace std;
20 using namespace Qt;
21
22 /* NOTES :
23
24  - A GroupScene is composed of a single GroupItem that contains BlockItem and ConnectionItem
25    The GroupItem is stored in the mainGroup attribute
26
27  - A GroupScene is instanciated whenever there is a GroupItem that must be created, i.e.
28   for the top scene or for subgroups.
29
30   - This class is a subclass of QGraphicsScene by convenience but it's goal is more to list
31   the different inner items. Thus, all operations that add/remove items to the scene will also
32   add them in the QList
33  */
34
35 class GroupScene : public QGraphicsScene {
36
37 public:
38
39   /* edition mode of the window:
40      - AddBlock: can only add blocks to the scene
41      - AddConnection: can only add connections to the scene
42      - AddGroup: while a new group (empty or from selected blocks) is created
43      - ItemEdtion: can move/resize blocks/interfaces, remove blocks/interface/group, ...
44    */
45   enum EditMode { InitState, AddConnection, ItemEdition };
46
47   GroupScene(GroupScene* _parentScene, GroupWidget* _window, Dispatcher* _dispatcher, Parameters* _params, bool topScene = false, QObject *parent = 0);
48   ~GroupScene();
49
50   //void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
51
52   // attributes getters
53   inline GroupItem* getGroupItem() {return groupItem;}
54   inline QList<BoxItem*> getBoxItems() { return boxItems; }
55   inline QList<SourceItem*> getSourceItems() { return sourceItems; }
56   inline QList<ConnectionItem*> getConnectionItems() { return connectionItems; }
57   inline QList<GroupScene*> getChildrenScene() { return childrenScene; }
58   inline GroupScene* getParentScene() { return parentScene; }
59   inline GroupWidget* getGroupWidget() { return window; }
60   inline int getId() { return id; }
61   inline EditMode getEditionMode() { return editMode; }
62   InterfaceItem* getSelectedInterface(int id);
63
64   // attributes setters
65   inline void setWindow(GroupWidget* _window) { window = _window; }
66   void setGroupItem(GroupItem* group);
67   inline void setId(int id) { this->id = id; }
68   inline void setEditionMode(EditMode mode) { editMode = mode; }
69   void setSelectedInterface(int id, InterfaceItem* iface);
70
71   // attributes testers
72   inline bool isTopScene() { return topScene; }
73
74   // others  
75   
76   // BoxItem related
77   BoxItem* createBoxItem(AbstractBlock* block); //! create a new BoxItem and place it at the center of the scene
78   void addBoxItem(BoxItem* item); //! add an already configured BoxItem in the scene.
79   void removeBoxItem(BoxItem* item);
80   
81   // ConnectionItem related
82   void createConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2, bool visible = true);
83   ConnectionItem* searchConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2);
84   void addConnectionItem(ConnectionItem* item);
85   void removeConnectionItem(ConnectionItem* item);
86   
87   // GroupItem related
88   void removeGroupItem();
89   
90   // SourceItem related
91   SourceItem* createSourceItem(AbstractBlock* block); //! create a new SourceItem and place it around the group item
92   void addSourceItem(SourceItem* item); //! add an already configured SourceItem in the scene.
93   void removeSourceItem(SourceItem* item);
94   
95   // child scenes related
96   inline void addChildScene(GroupScene* child) { childrenScene.append(child); }
97   inline void removeChildScene(GroupScene* child) { childrenScene.removeAll(child); }
98   inline int getNbChildScene() { return childrenScene.size(); }
99   void unselecteInterfaces();
100   
101   QList<BoxItem *> getSelectedBlocks();  
102
103   int setItemsId(int countInit=1);
104   int setInterfacesId(int countInit=1);
105
106   void updateConnectionItemsShape();
107
108   void save(QXmlStreamWriter& writer);
109
110 private:
111   Dispatcher *dispatcher;
112   Parameters *params;
113   GroupScene* parentScene; // the parent scene, =NULL for top scene
114   GroupWidget* window; // the GroupWindow that contains that scene
115   int id;
116   GroupItem *groupItem; //! for convenience, the group item is directly accessible via this attribute
117   QList<ConnectionItem*> connectionItems; //! for convenience, connections are directly accessible via this attribute
118   QList<BoxItem*> boxItems; //! for convenience, box items are directly accessible via this attribute
119   QList<SourceItem*> sourceItems; //! for convenience, box items are directly accessible via this attribute. Only usefull for top scene
120   QList<GroupScene*> childrenScene;//! for convenience, children scenes are directly accessible via this attribute
121   bool topScene;
122   EditMode editMode;
123   InterfaceItem* selectedInterfaces[2]; // selected iface 1 in AddConnection mode
124
125 };
126
127 #endif // __GROUPSCENE_H__