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

Private GIT Repository
changed ref/impls xsd and xml
[blast.git] / Dispatcher.h
index 8ffce457a598e488e5a284f13407b1e66882f9f6..0fa74bd0954c764c67cdad4cfa49b14660b3d96e 100644 (file)
@@ -15,58 +15,96 @@ class GroupScene;
 class AbstractBoxItem;
 class GroupItem;
 class BoxItem;
+class SourceItem;
 class ConnectionItem;
 class InterfaceItem;
+class GroupBlock;
+class FunctionalBlock;
+#include "Exception.h"
+class Exception;
 
 
 
 using namespace std;
 using namespace Qt;
 
+/*!
+ * \brief The Dispatcher class
+ * The Dispatcher class represents the control part (in MVC) of the application. It relays
+ * user's interactions with the GUI into model's modifications and feeds back them onto the view.
+ */
 class Dispatcher {
 
 public:
+  /*!
+   * \brief The Context enum
+   * Some methods are called while creating a design from scratch or when loading
+   * a desgin from a project file previously saved. Thus, their behavior may change
+   * according to the situation. Context is used to specifiy the situation.
+   * Must be always specified.
+   */
+  enum Context {AnyContext = 0, Design = 1, Load = 2 };
+
   Dispatcher(Parameters* _params,             
              MainWindow* _window);
 
   GroupWidget* loadProject(const QString& filename);
 
-  inline int getNumberOfScenes() { return groupList.length(); }
-  bool connect(InterfaceItem *iface1, InterfaceItem *iface2);
-  void checkSelection();
-  void unselectAllItems(int direction=0);
-  void setCurrentGroupWidget(GroupWidget *win);
-  void changeConnectionMode(int mode = -1);
-
 
-  GroupWidget* createTopScene();
-  GroupWidget* createChildScene(GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
-  void destroyScene(GroupScene* scene);
-  void showRaiseWindow(BoxItem *item);
-  void showRstClkIface(AbstractBoxItem *item);
-  void showWishboneIface(AbstractBoxItem *item);
-  GroupWidget *addNewEmptyGroup(GroupScene *scene, bool show = true);
-  void addNewFullGroup();  
-
-  inline GroupWidget* getCurrentGroup() { return currentGroup; }
-
-  inline void setSceneCounter(int value) { sceneCounter = value;}
 
   bool isCurrentProject;
 
-public slots:
+  /**************************
+   *  scene ops
+   *************************/
+  // getters
+  GroupScene* getSceneById(int id);
+  GroupScene* getSceneByName(QString name);
+  BoxItem* getBoxItemById(int id);
+  GroupItem* getGroupItemById(int id);
+  InterfaceItem* getInterfaceItemById(int id);
+  inline GroupWidget* getCurrentGroup() { return currentGroupWidget; }
+  inline int getNumberOfScenes() { return groupList.length(); }
+  // setters
+  void showRaiseWindow(Context context, BoxItem *item);
+  void showRstClkIface(Context context, AbstractBoxItem *item);
+  void showWishboneIface(Context context, AbstractBoxItem *item);
+  void unselectAllItems(Context context, int direction=0);
+  void setCurrentGroupWidget(Context context, GroupWidget *win);
+  void changeConnectionMode(Context context, int mode = -1);
+  void setSceneCounter(Context context, int value);
+  // testers
+  // others
+  GroupWidget* createTopScene(Context context);
+  GroupWidget* createChildScene(Context context, GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
+  void destroyScene(Context context, GroupScene* scene);
+  GroupWidget *addNewEmptyGroup(Context context, GroupScene *scene, bool show = true);
+  void addNewFullGroup(Context context);
+
+  /**************************
+   *  graph ops
+   *************************/
+  // getters
   QMap<int, QString> getAllGroupNames();
-  GroupScene* searchSceneById(int id);
-  GroupScene* searchSceneByName(QString name);
-  BoxItem* searchBlockItemById(int id);
-  GroupItem* searchGroupItemById(int id);
-  InterfaceItem* searchInterfaceItemById(int id);
-
-  // block ops
-  void addBlock(int idCategory, int idBlock, int idScene);
-  void removeBlock(BoxItem* item);
-  void duplicateBlock(BoxItem* item);
-  void renameBlockOrGroup(AbstractBoxItem* item);
+  // setters
+  // testers
+  // others
+  void generateVHDL(Context context) throw(Exception);
+
+  /**************************
+   *  block ops
+   *************************/
+  BoxItem* addBlock(Context context, int idCategory, int idBlock, int idScene, QHash<QString,int> clkRstToGen );
+  void addClkRstGenBlock(Context context, double frequency);
+  void removeBoxItem(Context context, BoxItem* item);
+  void duplicateBoxItem(Context context, BoxItem* item);
+  void renameFunctionalBlock(Context context, BoxItem* item);
+  void generateBlockVHDL(Context context, BoxItem* item);
+  void renameGroupBlock(Context context, GroupItem* item);
+  void renameSourceBlock(Context context, SourceItem* item);
+  void removeSourceItem(Context context, SourceItem* item);
+  void duplicateSourceItem(Context context, SourceItem* item);
+
 
   // interface ops
   /*!
@@ -78,17 +116,7 @@ public slots:
    * connect to group in the contextual menu.
    * Thus, parameter item is always owned by a BoxItem
    */
-  void connectInterToGroup(InterfaceItem* item);
-  /*!
-   * \brief disconnectInterFromGroup
-   * \param item item is always owned by a BoxItem
-   *
-   * This method is called only when the user right clicks on an InterfaceItem (that belongs
-   * to a BoxItem and if it IS connected to an InterfaceItem of the GroupItem) and chooses
-   * disconnect from group in the contextual menu.
-   * Thus, parameter item is always owned by a BoxItem
-   */
-  void disconnectInterFromGroup(InterfaceItem* item);
+  void connectInterToGroup(Context context, InterfaceItem* item);
   /*!
    * \brief removeFunctionalInterface
    * \param item item is always owned by a BoxItem
@@ -97,7 +125,7 @@ public slots:
    * to a BoxItem that represents a functional block and has a multiplicity > 1) and chooses remove in the contextual menu.
    * Thus, parameter item is always owned by a BoxItem
    */
-  void removeFunctionalInterface(InterfaceItem* item);
+  void removeFunctionalInterface(Context context, InterfaceItem* item);
   /*!
    * \brief removeGroupInterface
    * \param item item is always owned by a GroupItem
@@ -106,16 +134,22 @@ public slots:
    * to a GroupItem and if it is connected only to an inner interface) and chooses remove in the contextual menu.
    * Thus, parameter item is always owned by a GroupItem
    */
-  void removeGroupInterface(InterfaceItem* item);
-  void duplicateInterface(InterfaceItem* item);
-  void showProperties(InterfaceItem *inter);
-  void renameInterface(InterfaceItem* item);
+  void removeGroupInterface(Context context, InterfaceItem* item);
+  void duplicateInterfaceItem(Context context, InterfaceItem* item);
+  void showProperties(Context context, InterfaceItem *inter);
+  void renameInterface(Context context, InterfaceItem* item);
+  void showPatterns(Context context, InterfaceItem* item);
+  void showModifier(Context context, InterfaceItem* item);
+  void removeModifier(Context context, InterfaceItem* item);
 
   // connection ops
-  ConnectionItem *addConnection(InterfaceItem *input, InterfaceItem *output);
-  void removeAllBlockConnections(BoxItem *item);
-  void removeConnection(ConnectionItem *conn);
+  bool createConnection(Context context, InterfaceItem *iface1, InterfaceItem *iface2, bool visible = true);
+  void removeAllBlockConnections(Context context, AbstractBoxItem *item);
+  void removeConnection(Context context, ConnectionItem *conn);
+
 
+  // analysis ops
+  void findGraphModifications(Context context, FunctionalBlock* block); // find modif so that block has compatible inputs
 
   // others
   void showBlocksLibrary();
@@ -131,8 +165,8 @@ private:
   // attributes that corresponds to the views
   MainWindow* mainWindow;
   QList<GroupWidget*> groupList;
-  GroupWidget* currentGroup;
-  GroupWidget *topGroup;
+  GroupWidget* currentGroupWidget;
+  GroupWidget *topGroupWidget;
 
   static int sceneCounter;
 };