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

Private GIT Repository
e14b3fe11cc856e2d2705c440f157fd6335e58d9
[blast.git] / Parameters.h
1 #ifndef __PARAMETERS_H__\r
2 #define __PARAMETERS_H__\r
3 \r
4 #include <iostream>\r
5 \r
6 #include <QtCore>\r
7 #include <QtGui>\r
8 #include <QtWidgets>\r
9 #include <QtXml>\r
10 #include <QtXmlPatterns>\r
11 \r
12 class Dispatcher;\r
13 class BlockLibraryTree;\r
14 class AbstractBlock;\r
15 class ReferenceBlock;\r
16 class GroupBlock;\r
17 class FunctionalBlock;\r
18 class GroupScene;\r
19 class AbstractBoxItem;\r
20 class GroupItem;\r
21 class BoxItem;\r
22 class InterfaceItem;\r
23 class Graph;\r
24 class GroupWidget;\r
25 \r
26 #include "BlockImplementation.h"\r
27 #include "ExternalResource.h"\r
28 \r
29 #include "Exception.h"\r
30 class Exception;\r
31 \r
32 // defines for current mode\r
33 #define MODE_EDITION 1\r
34 #define MODE_ADDBLOC 2\r
35 #define MODE_ADDCONN 3\r
36 \r
37 \r
38 using namespace std;\r
39 using namespace Qt;\r
40 \r
41 /*!\r
42  * \brief The Parameters class\r
43  *\r
44  * Parameters class represents the Model part of blast in MVC paradigm.\r
45  * It contains all data necessary to create a design: the graph of blocks,\r
46  * the scenes, ...\r
47  */\r
48 class Parameters {\r
49 \r
50 public :\r
51 \r
52   enum Direction { NoDirection, East, North, West, South};\r
53 \r
54   /* state of cursorn:\r
55      - CursorInBlock: cursor is within the main box of a block/group item\r
56      - CursorOnBlockBorder: cursor is on a block/group item border\r
57      - CursorOnInterface: cursor is on a block/group item Interface\r
58      - CursorOnConnection: cursor is one a connection\r
59      - CursorNowhere: none of the previous cases\r
60   */\r
61   enum CursorState { CursorNowhere = 0, CursorInBlock, CursorInGroupTitle, CursorOnBorder, CursorOnInterface, CursorOnConnection };\r
62   /* state of edition:\r
63 \r
64    */\r
65   enum EditState { EditNoOperation = 0, EditBlockMove, EditBlockResize, EditGroupMove, EditGroupResize, EditInterfaceMove, EditInterfaceDeselect, EditConnectionResize, EditStartConnection, EditCloseConnection, EditAbortConnection};\r
66 \r
67   enum XmlFileType { Configuration = 1, Reference, Implementation, Project };\r
68   Parameters();\r
69   ~Parameters();\r
70 \r
71   // getter\r
72   inline GroupScene* getCurrentScene() { return currentScene; }\r
73   inline GroupScene* getTopScene() { return topScene; }\r
74 \r
75   // setter\r
76   inline void setTopScene(GroupScene* _topScene) { topScene = _topScene; }\r
77   inline void setCurrentScene(GroupScene* _currentScene) { currentScene = _currentScene; }\r
78   inline void setEditState(EditState state) { editState = state; }\r
79   inline void setCursorState(CursorState state) { cursorState = state; }\r
80   inline void setDispatcher(Dispatcher* _dispatcher) { dispatcher = _dispatcher;}\r
81 \r
82   // testers\r
83 \r
84   // others\r
85   static QString normalizeName(const QString& name);\r
86   QList<ExternalResource*> searchResourceByName(const QString& name);\r
87 \r
88   /***************************************************\r
89     attributes that are general to the application\r
90   ***************************************************/  \r
91   BlockLibraryTree* categoryTree;\r
92   QList<QString> refPathes;\r
93   QList<QString> implPathes;\r
94   QList<QString> sourcePathes;\r
95   QList<ReferenceBlock*> availableBlocks;\r
96   QList<BlockImplementation*> availableImplementations;\r
97   QList<ExternalResource*> availableResources;\r
98 \r
99   ReferenceBlock* delayRef;\r
100   BlockImplementation* delayImpl;  \r
101 \r
102   QString refLib;\r
103   QString implLib;\r
104 \r
105   // defaults for vhdl\r
106   int wbDataWidth;\r
107   int wbAddressWidth;\r
108   QString validityExtension; //! the string to add to ports to obtain the name of the associated validity port.\r
109   \r
110   // defaults for scene elements\r
111   int defaultBlockWidth;\r
112   int defaultBlockHeight;\r
113   QFont defaultBlockFont;\r
114   QString defaultBlockFontName;\r
115   int defaultBlockFontSize;\r
116   int arrowWidth;\r
117   int arrowHeight;\r
118   int arrowLineLength;\r
119   QFont defaultIfaceFont;\r
120   QString defaultIfaceFontName;\r
121   int defaultIfaceFontSize;\r
122   int connGapLength;\r
123   QPainterPath dataArrowIn;\r
124   QPainterPath dataArrowOut;\r
125   QPainterPath clkrstArrow;\r
126 \r
127 \r
128   /***************************************************\r
129    attributes that are specific for the current project\r
130   ****************************************************/\r
131   bool isCurrentProject; // true if a projet is currently open\r
132   int sceneMode; // takes values from MODE_XXX\r
133   CursorState cursorState;\r
134   EditState editState; // takes values from EDIT_STATE_XXX\r
135   bool unsaveModif;\r
136   bool isRstClkShown;\r
137   QMap<FunctionalBlock*, BoxItem*> blockToItem; // allow to retrieve a box item from a functionnal block\r
138   QString projectPath;\r
139   QString projectName;\r
140   QString projectFile; // equals to projectPath/projectName.xml\r
141   bool autoConnMainClk; // true if auto-connection to main clock (i.e. ext_clk) \r
142   double mainClock; // main clock freq (reported in graph->clocks(0))\r
143 \r
144   Graph* initGraph(bool createTopGroupIfaces = true);\r
145   void destroyGraph();\r
146   inline Graph* getGraph() { return graph; }  \r
147   ReferenceBlock* getReferenceBlock(int idCategory, int idBlock); // get the reference block from its category and index\r
148   ReferenceBlock* getHiddenReferenceBlock(QString blockName); // get a hidden block by name, i.e. in category 100  \r
149   double getFeedingClockFrequency(AbstractInterface* iface); // determine at which freq. is synchronized iface\r
150 \r
151   void clear();\r
152 \r
153   QDomElement openProjectFile(const QString& projectFileName) throw(Exception);\r
154   GroupWidget *loadProject(QDomElement root) throw(Exception);\r
155 \r
156   void loadBlastConfiguration(QString confFile) throw(Exception);\r
157   void loadReferencesFromXml() throw(Exception);\r
158   void loadReferencesFromLib() throw(Exception);\r
159   void saveReferencesToLib() throw(Exception);\r
160   void createDelayBlock();\r
161 \r
162   void loadImplementationsFromXml() throw(Exception);\r
163   void loadImplementationsFromLib() throw(Exception);\r
164   void saveImplementationsToLib() throw(Exception);\r
165 \r
166   void loadSources() throw(Exception);\r
167 \r
168   void addAvailableBlock(ReferenceBlock *block);  \r
169   void parametersValidation();\r
170   void connectionsValidation();\r
171   QList<AbstractBlock *> getBlocksToConfigure();\r
172 \r
173   void updateToolbar();\r
174 \r
175 \r
176   ReferenceBlock* searchBlockByXml(QString xmlName);\r
177   ReferenceBlock* searchBlockByMd5(QString sumMd5);\r
178 \r
179   BoxItem* searchFunctionalBlock(AbstractBlock* block);\r
180 \r
181   void save(QString confFile);\r
182 \r
183 \r
184 \r
185 \r
186 private:\r
187   Graph* graph; // the graph model of blocks\r
188   Dispatcher* dispatcher;\r
189   GroupScene* topScene;\r
190   GroupScene* currentScene;\r
191 \r
192   void setArrowPathes();  \r
193   void updateIds();\r
194 \r
195   GroupScene* searchSceneById(int id, GroupScene* scene);\r
196   BoxItem* searchBlockItemById(int id, GroupScene* scene);\r
197   BoxItem* searchFunctionalBlockRecur(AbstractBlock* block, GroupScene* scene);\r
198   GroupItem* searchGroupItemById(int id, GroupScene* scene);\r
199   InterfaceItem* searchInterfaceItemById(int id, GroupScene *scene);\r
200 \r
201   void validateXmlFile(const QString& xmlFileName, const QString& xsdFileName, XmlFileType fileType) throw(Exception);\r
202   bool validate(QFile& fileXml, QFile& fileSchema);\r
203 \r
204 };\r
205 \r
206 \r
207 #endif // __PARAMETERS_H__\r