class AbstractBoxItem;
class GroupItem;
class BoxItem;
-class SourceItem;
+class StimuliItem;
class ConnectionItem;
class InterfaceItem;
class GroupBlock;
class FunctionalBlock;
+#include "Exception.h"
+class Exception;
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(); }
-
- 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:
- QMap<int, QString> getAllGroupNames();
+ /**************************
+ * scene ops
+ *************************/
+ // getters
GroupScene* getSceneById(int id);
GroupScene* getSceneByName(QString name);
BoxItem* getBoxItemById(int id);
GroupItem* getGroupItemById(int id);
InterfaceItem* getInterfaceItemById(int id);
-
-
- // block ops
- void addBlock(int idCategory, int idBlock, int idScene);
- void removeBoxItem(BoxItem* item);
- void duplicateBoxItem(BoxItem* item);
- void renameFunctionalBlock(BoxItem* item);
- void renameGroupBlock(GroupItem* item);
- void renameSourceBlock(SourceItem* item);
- void removeSourceItem(SourceItem* item);
- void duplicateSourceItem(SourceItem* item);
+ 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, double mainClock = 0.0);
+ 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();
+ // setters
+ // testers
+ // others
+ void generateVHDL(Context context) throw(Exception);
+
+ /**************************
+ * block ops
+ *************************/
+ void 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 renameStimuliItem(Context context, StimuliItem* item);
+ void removeStimuliItem(Context context, StimuliItem* item);
+ void duplicateStimuliItem(Context context, StimuliItem* item);
+
// interface ops
/*!
* 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
* 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
* 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 duplicateInterfaceItem(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
- bool createConnection(InterfaceItem *iface1, InterfaceItem *iface2);
- void removeAllBlockConnections(AbstractBoxItem *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);
+ void connectBoxItemClock(Context context, BoxItem* item, QString clkName, int idGen = 0) throw(Exception);
+ void connectBoxItemReset(Context context, BoxItem* item, QString rstName, int idGen = 0) throw(Exception);
+ void connectStimuliItemClock(Context context, StimuliItem* item, QString clkName, int idGen = 0) throw(Exception);
+ void connectStimuliItemReset(Context context, StimuliItem* item, QString rstName, int idGen = 0) throw(Exception);
+
+ // analysis ops
+ void findGraphModifications(Context context, FunctionalBlock* block); // find modif so that block has compatible inputs
// others
void showBlocksLibrary();
// attributes that corresponds to the views
MainWindow* mainWindow;
QList<GroupWidget*> groupList;
- GroupWidget* currentGroup;
- GroupWidget *topGroup;
+ GroupWidget* currentGroupWidget;
+ GroupWidget *topGroupWidget;
static int sceneCounter;
};