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

Private GIT Repository
patter compat continued
[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   void addBlock(int idCategory, int idBlock, int idScene);
75   void removeBoxItem(BoxItem* item);
76   void duplicateBoxItem(BoxItem* item);
77   void renameFunctionalBlock(BoxItem* item);
78   void renameGroupBlock(GroupItem* item);
79   void renameSourceBlock(SourceItem* item);
80   void removeSourceItem(SourceItem* item);
81   void duplicateSourceItem(SourceItem* item);
82
83   // interface ops
84   /*!
85    * \brief connectInterToGroup
86    * \param item item is always owned by a BoxItem
87    *
88    * This method is called only when the user right clicks on an InterfaceItem (that belongs
89    * to a BoxItem and if it is NOT connected to an InterfaceItem of the GroupItem) and chooses
90    * connect to group in the contextual menu.
91    * Thus, parameter item is always owned by a BoxItem
92    */
93   void connectInterToGroup(InterfaceItem* item);  
94   /*!
95    * \brief removeFunctionalInterface
96    * \param item item is always owned by a BoxItem
97    *
98    * This method is called only when the user right clicks on an InterfaceItem (that belongs
99    * to a BoxItem that represents a functional block and has a multiplicity > 1) and chooses remove in the contextual menu.
100    * Thus, parameter item is always owned by a BoxItem
101    */
102   void removeFunctionalInterface(InterfaceItem* item);
103   /*!
104    * \brief removeGroupInterface
105    * \param item item is always owned by a GroupItem
106    *
107    * This method is called only when the user right clicks on an InterfaceItem (that belongs
108    * to a GroupItem and if it is connected only to an inner interface) and chooses remove in the contextual menu.
109    * Thus, parameter item is always owned by a GroupItem
110    */
111   void removeGroupInterface(InterfaceItem* item);
112   void duplicateInterfaceItem(InterfaceItem* item);
113   void showProperties(InterfaceItem *inter);
114   void renameInterface(InterfaceItem* item);
115   void showPatterns(InterfaceItem* item);
116
117   // connection ops
118   bool createConnection(InterfaceItem *iface1, InterfaceItem *iface2);    
119   void removeAllBlockConnections(AbstractBoxItem *item);
120   void removeConnection(ConnectionItem *conn);
121
122
123   // others
124   void showBlocksLibrary();
125
126
127   void closeCurrentProject();
128
129 private:  
130
131   // the model
132   Parameters* params;
133
134   // attributes that corresponds to the views
135   MainWindow* mainWindow;
136   QList<GroupWidget*> groupList;
137   GroupWidget* currentGroup;
138   GroupWidget *topGroup;
139
140   static int sceneCounter;
141 };
142
143 #endif // __DISPATCHER_H__