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

Private GIT Repository
start modifying read/write blocks and project to take into account control ifaces
[blast.git] / Dispatcher.h
1 #ifndef __DISPATCHER_H__
2 #define __DISPATCHER_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8 #include <QtWidgets>
9
10 class Graph;
11 class Parameters;
12 class MainWindow;
13 class GroupWidget;
14 class GroupScene;
15 class AbstractBoxItem;
16 class GroupItem;
17 class BoxItem;
18 class ConnectionItem;
19 class InterfaceItem;
20
21
22
23 using namespace std;
24 using namespace Qt;
25
26 class Dispatcher {
27
28 public:
29   Dispatcher(Parameters* _params,             
30              MainWindow* _window);
31
32   GroupWidget* loadProject(const QString& filename);
33
34   inline int getNumberOfScenes() { return groupList.length(); }
35   bool connect(InterfaceItem *iface1, InterfaceItem *iface2);
36   void checkSelection();
37   void unselectAllItems(int direction=0);
38   void setCurrentGroupWidget(GroupWidget *win);
39   void changeConnectionMode(int mode = -1);
40
41
42   GroupWidget* createTopScene();
43   GroupWidget* createChildScene(GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
44   void destroyScene(GroupScene* scene);
45   void showRaiseWindow(BoxItem *item);
46   void showRstClkIface(AbstractBoxItem *item);
47   void showWishboneIface(AbstractBoxItem *item);
48   GroupWidget *addNewEmptyGroup(GroupScene *scene, bool show = true);
49   void addNewFullGroup();  
50
51   inline GroupWidget* getCurrentGroup() { return currentGroup; }
52
53   inline void setSceneCounter(int value) { sceneCounter = value;}
54
55   bool isCurrentProject;
56
57 public slots:
58   QMap<int, QString> getAllGroupNames();
59   GroupScene* searchSceneById(int id);
60   GroupScene* searchSceneByName(QString name);
61   BoxItem* searchBlockItemById(int id);
62   GroupItem* searchGroupItemById(int id);
63   InterfaceItem* searchInterfaceItemById(int id);
64
65   // block ops
66   void addBlock(int idCategory, int idBlock, int idScene);
67   void removeBlock(BoxItem* item);
68   void duplicateBlock(BoxItem* item);
69   void renameBlockOrGroup(AbstractBoxItem* item);
70
71   // interface ops
72   /*!
73    * \brief connectInterToGroup
74    * \param item item is always owned by a BoxItem
75    *
76    * This method is called only when the user right clicks on an InterfaceItem (that belongs
77    * to a BoxItem and if it is NOT connected to an InterfaceItem of the GroupItem) and chooses
78    * connect to group in the contextual menu.
79    * Thus, parameter item is always owned by a BoxItem
80    */
81   void connectInterToGroup(InterfaceItem* item);
82   /*!
83    * \brief disconnectInterFromGroup
84    * \param item item is always owned by a BoxItem
85    *
86    * This method is called only when the user right clicks on an InterfaceItem (that belongs
87    * to a BoxItem and if it IS connected to an InterfaceItem of the GroupItem) and chooses
88    * disconnect from group in the contextual menu.
89    * Thus, parameter item is always owned by a BoxItem
90    */
91   void disconnectInterFromGroup(InterfaceItem* item);
92   /*!
93    * \brief removeFunctionalInterface
94    * \param item item is always owned by a BoxItem
95    *
96    * This method is called only when the user right clicks on an InterfaceItem (that belongs
97    * to a BoxItem that represents a functional block and has a multiplicity > 1) and chooses remove in the contextual menu.
98    * Thus, parameter item is always owned by a BoxItem
99    */
100   void removeFunctionalInterface(InterfaceItem* item);
101   /*!
102    * \brief removeGroupInterface
103    * \param item item is always owned by a GroupItem
104    *
105    * This method is called only when the user right clicks on an InterfaceItem (that belongs
106    * to a GroupItem and if it is connected only to an inner interface) and chooses remove in the contextual menu.
107    * Thus, parameter item is always owned by a GroupItem
108    */
109   void removeGroupInterface(InterfaceItem* item);
110   void duplicateInterface(InterfaceItem* item);
111   void showProperties(InterfaceItem *inter);
112   void renameInterface(InterfaceItem* item);
113
114   // connection ops
115   ConnectionItem *addConnection(InterfaceItem *input, InterfaceItem *output);
116   void removeAllBlockConnections(BoxItem *item);
117   void removeConnection(ConnectionItem *conn);
118
119
120   // others
121   void showBlocksLibrary();
122
123
124   void closeCurrentProject();
125
126 private:  
127
128   // the model
129   Parameters* params;
130
131   // attributes that corresponds to the views
132   MainWindow* mainWindow;
133   QList<GroupWidget*> groupList;
134   GroupWidget* currentGroup;
135   GroupWidget *topGroup;
136
137   static int sceneCounter;
138 };
139
140 #endif // __DISPATCHER_H__