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

Private GIT Repository
4354466f7db5acd80329b85225a034e5d87614d6
[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 SourceItem;
19 class ConnectionItem;
20 class InterfaceItem;
21 class GroupBlock;
22 class FunctionalBlock;
23 #include "Exception.h"
24 class Exception;
25
26
27
28 using namespace std;
29 using namespace Qt;
30
31 /*!
32  * \brief The Dispatcher class
33  * The Dispatcher class represents the control part (in MVC) of the application. It relays
34  * user's interactions with the GUI into model's modifications and feeds back them onto the view.
35  */
36 class Dispatcher {
37
38 public:
39   /*!
40    * \brief The Context enum
41    * Some methods are called while creating a design from scratch or when loading
42    * a desgin from a project file previously saved. Thus, their behavior may change
43    * according to the situation. Context is used to specifiy the situation.
44    * Must be always specified.
45    */
46   enum Context {AnyContext = 0, Design = 1, Load = 2 };
47
48   Dispatcher(Parameters* _params,             
49              MainWindow* _window);
50
51   GroupWidget* loadProject(const QString& filename);
52
53
54
55   bool isCurrentProject;
56
57   /**************************
58    *  scene ops
59    *************************/
60   // getters
61   GroupScene* getSceneById(int id);
62   GroupScene* getSceneByName(QString name);
63   BoxItem* getBoxItemById(int id);
64   GroupItem* getGroupItemById(int id);
65   InterfaceItem* getInterfaceItemById(int id);
66   inline GroupWidget* getCurrentGroup() { return currentGroupWidget; }
67   inline int getNumberOfScenes() { return groupList.length(); }
68   // setters
69   void showRaiseWindow(Context context, BoxItem *item);
70   void showRstClkIface(Context context, AbstractBoxItem *item);
71   void showWishboneIface(Context context, AbstractBoxItem *item);
72   void unselectAllItems(Context context, int direction=0);
73   void setCurrentGroupWidget(Context context, GroupWidget *win);
74   void changeConnectionMode(Context context, int mode = -1);
75   void setSceneCounter(Context context, int value);
76   // testers
77   // others
78   GroupWidget* createTopScene(Context context);
79   GroupWidget* createChildScene(Context context, GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
80   void destroyScene(Context context, GroupScene* scene);
81   GroupWidget *addNewEmptyGroup(Context context, GroupScene *scene, bool show = true);
82   void addNewFullGroup(Context context);
83
84   /**************************
85    *  graph ops
86    *************************/
87   // getters
88   QMap<int, QString> getAllGroupNames();
89   // setters
90   // testers
91   // others
92   void generateVHDL(Context context) throw(Exception);
93
94   /**************************
95    *  block ops
96    *************************/
97   BoxItem* addBlock(Context context, int idCategory, int idBlock, int idScene);
98   void removeBoxItem(Context context, BoxItem* item);
99   void duplicateBoxItem(Context context, BoxItem* item);
100   void renameFunctionalBlock(Context context, BoxItem* item);
101   void generateBlockVHDL(Context context, BoxItem* item);
102   void renameGroupBlock(Context context, GroupItem* item);
103   void renameSourceBlock(Context context, SourceItem* item);
104   void removeSourceItem(Context context, SourceItem* item);
105   void duplicateSourceItem(Context context, SourceItem* item);
106
107
108   // interface ops
109   /*!
110    * \brief connectInterToGroup
111    * \param item item is always owned by a BoxItem
112    *
113    * This method is called only when the user right clicks on an InterfaceItem (that belongs
114    * to a BoxItem and if it is NOT connected to an InterfaceItem of the GroupItem) and chooses
115    * connect to group in the contextual menu.
116    * Thus, parameter item is always owned by a BoxItem
117    */
118   void connectInterToGroup(Context context, InterfaceItem* item);
119   /*!
120    * \brief removeFunctionalInterface
121    * \param item item is always owned by a BoxItem
122    *
123    * This method is called only when the user right clicks on an InterfaceItem (that belongs
124    * to a BoxItem that represents a functional block and has a multiplicity > 1) and chooses remove in the contextual menu.
125    * Thus, parameter item is always owned by a BoxItem
126    */
127   void removeFunctionalInterface(Context context, InterfaceItem* item);
128   /*!
129    * \brief removeGroupInterface
130    * \param item item is always owned by a GroupItem
131    *
132    * This method is called only when the user right clicks on an InterfaceItem (that belongs
133    * to a GroupItem and if it is connected only to an inner interface) and chooses remove in the contextual menu.
134    * Thus, parameter item is always owned by a GroupItem
135    */
136   void removeGroupInterface(Context context, InterfaceItem* item);
137   void duplicateInterfaceItem(Context context, InterfaceItem* item);
138   void showProperties(Context context, InterfaceItem *inter);
139   void renameInterface(Context context, InterfaceItem* item);
140   void showPatterns(Context context, InterfaceItem* item);
141   void showModifier(Context context, InterfaceItem* item);
142   void removeModifier(Context context, InterfaceItem* item);
143
144   // connection ops
145   bool createConnection(Context context, InterfaceItem *iface1, InterfaceItem *iface2, bool visible = true);
146   void removeAllBlockConnections(Context context, AbstractBoxItem *item);
147   void removeConnection(Context context, ConnectionItem *conn);
148
149
150   // analysis ops
151   void findGraphModifications(Context context, FunctionalBlock* block); // find modif so that block has compatible inputs
152
153   // others
154   void showBlocksLibrary();
155
156
157   void closeCurrentProject();
158
159 private:  
160
161   // the model
162   Parameters* params;
163
164   // attributes that corresponds to the views
165   MainWindow* mainWindow;
166   QList<GroupWidget*> groupList;
167   GroupWidget* currentGroupWidget;
168   GroupWidget *topGroupWidget;
169
170   static int sceneCounter;
171 };
172
173 #endif // __DISPATCHER_H__