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

Private GIT Repository
1st commit of all files
[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 AbstractBoxItem;
15 class ConnectionItem;
16 class InterfaceItem;
17
18 using namespace std;
19 using namespace Qt;
20
21 /* NOTES :
22
23  - A GroupScene is composed of a single GroupItem that contains BlockItem and ConnectionItem
24    The GroupItem is stored in the mainGroup attribute
25
26  - A GroupScene is instanciated whenever there is a GroupItem that must be created, i.e.
27   for the top scene or for subgroups.
28
29   - This class is a subclass of QGraphicsScene by convenience but it's goal is more to list
30   the different inner items. Thus, all operations that add/remove items to the scene will also
31   add them in the QList
32  */
33
34 class GroupScene : public QGraphicsScene {
35
36 public:
37
38   /* edition mode of the window:
39      - AddBlock: can only add blocks to the scene
40      - AddConnection: can only add connections to the scene
41      - AddGroup: while a new group (empty or from selected blocks) is created
42      - ItemEdtion: can move/resize blocks/interfaces, remove blocks/interface/group, ...
43    */
44   enum EditMode { InitState, AddBlock, AddConnection, AddGroup, ItemEdition };
45
46   GroupScene(GroupScene* _parentScene, GroupWidget* _window, Dispatcher* _dispatcher, Parameters* _params, bool topScene = false, QObject *parent = 0);
47   ~GroupScene();
48
49   // attributes getters
50   inline GroupItem* getGroupItem() {return groupItem;}
51   inline QList<BoxItem*> getBlockItems() { return blockItems; }
52   inline QList<ConnectionItem*> getConnectionItems() { return connectionItems; }
53   inline QList<GroupScene*> getChildrenScene() { return childrenScene; }
54   inline GroupWidget* getGroupWindow() { return window; }
55   inline int getId() { return id; }
56   inline EditMode getEditionMode() { return editMode; }
57   InterfaceItem* getSelectedInterface(int id);
58
59   // attributes setters
60   inline void setWindow(GroupWidget* _window) { window = _window; }
61   void setGroupItem(GroupItem* group);
62   inline void setId(int id) { this->id = id; }
63   inline void setEditionMode(EditMode mode) { editMode = mode; }
64   void setSelectedInterface(int id, InterfaceItem* iface);
65
66   // attributes testers
67   inline bool isTopScene() { return topScene; }
68
69
70   // others  
71   void createBlockItem(AbstractBlock* block);
72   void addBlockItem(BoxItem* item);
73   void removeBlockItem(BoxItem* item);
74   void createConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2);
75   ConnectionItem* searchConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2);
76   void addConnectionItem(ConnectionItem* item);
77   void removeConnectionItem(ConnectionItem* item);
78   void removeGroupItem();
79   inline void addChildScene(GroupScene* child) { childrenScene.append(child); }
80   void unselecteInterfaces();
81
82   QList<AbstractBoxItem*> getGroupAndBlocks();
83   QList<BoxItem *> getSelectedBlocks();
84
85   QList<ConnectionItem *> getInterfaceConnections(InterfaceItem *item);
86
87   int setItemsId(int countInit=1);
88   int setInterfacesId(int countInit=1);
89
90   void updateConnectionItemsShape();
91
92   void save(QXmlStreamWriter& writer);
93
94 private:
95   Dispatcher *dispatcher;
96   Parameters *params;
97   GroupScene* parentScene; // the parnet scene, =NULL for top scene
98   GroupWidget* window; // the GroupWindow that contains that scene
99   int id;
100   GroupItem *groupItem; // mandatory to be an instance of GroupItem.
101   QList<ConnectionItem*> connectionItems;
102   QList<BoxItem*> blockItems;
103   QList<GroupScene*> childrenScene;
104   bool topScene;
105   EditMode editMode;
106   InterfaceItem* selectedInterfaces[2]; // selected iface 1 in AddConnection mode
107
108 };
109
110 #endif // __GROUPSCENE_H__