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

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