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

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