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

Private GIT Repository
start modifying read/write blocks and project to take into account control ifaces
[blast.git] / ConnectionItem.h
1 #ifndef __CONNECTIONITEM_H__
2 #define __CONNECTIONITEM_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8 #include <QGraphicsItem>
9
10 class Dispatcher;
11 class Parameters;
12 class InterfaceItem;
13 class GroupScene;
14
15 using namespace std;
16 using namespace Qt;
17
18 /*! \brief ConnectionItem class
19
20    A ConnectionItem represents a graphical link between two interface items.
21    Even if it links two in/out interfaces, it is always oriented.
22    The orientation depends on the type and direction of linked interfaces :
23
24    If interfaces are owned by blocks (group or func) that are within the same
25    parent group, then src must be an output, and dest an input, or both are in/out
26    and src/dest may be interchanged.
27
28    If one interface I1 is owend by a block, and the other I2 by the parent group of that block,
29    then they have the same direction. If this direction is input, then src = I2 and dest = I1,
30    if it is output, then src = I1, dest = I2, and if it is in/out, no order matters.
31
32    In order to simplify other methods, the constructor of ConnectionItem
33    checks these cases in order to retrieve the good src and dest if they are
34    not provided in the good order.
35
36  */
37 class ConnectionItem : public QGraphicsItem {
38
39 public:
40
41   ConnectionItem(InterfaceItem* _iface1,
42                  InterfaceItem* _iface2,
43                  Dispatcher* _dispatcher,
44                  Parameters* _params,
45                  QGraphicsItem* _parent);
46   ConnectionItem (const ConnectionItem & copy);
47   ConnectionItem();
48   ~ConnectionItem();
49
50   QRectF boundingRect() const;
51   QPainterPath shape() const;
52
53   void prepareChange();
54   
55   // getters
56   inline GroupScene* getScene() { return (GroupScene*)(scene()); }
57   inline InterfaceItem* getToInterfaceItem(){ return toInterfaceItem; }
58   inline InterfaceItem* getFromInterfaceItem(){ return fromInterfaceItem; }
59   inline int getId(){ return id; }
60   
61   // setters
62   inline void setToInterfaceItem(InterfaceItem *iface){ toInterfaceItem = iface; }  
63   inline void setFromInterfaceItem(InterfaceItem* iface){ fromInterfaceItem = iface; }  
64   inline void setId(int id){ this->id = id; }
65   void setSelected(bool selected);
66   inline void setVisible(bool state) { visible = state; }
67   
68   // testers
69   inline bool isSelected() { return selected; }
70   
71   // others
72   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
73
74   /*!
75    * \brief setPath
76    * setPath() allows to compute the graphical shape of the ConnectionItem
77    * taking into account the position/direction of from and to interface items.
78    * Depending on their vlaue, it calls on of the dedicated methods.
79    *
80    * CAUTION: this method calls prepareGeometryChange() so that the scene
81    * can automatically updates and redraw the ConnectionItem. Thus, there is
82    * no need to call update() after the termination of this method.
83    *
84    */
85   void setPath();
86   void addInterPoint(QPointF point);
87
88   static int counter;
89
90 protected:
91   void mousePressEvent(QGraphicsSceneMouseEvent *event);
92   void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
93   void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
94   void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
95
96 private:
97   void computeEsse(int orientationFrom);
98   void computeStaircase(int orientationFrom);
99   void computeHookSmallEnd(int orientationFrom, int orientationTo);
100   void computeHookSmallStart(int orientationFrom, int orientationTo);
101   void computeOpenRect(int orientationFrom, int orientationTo);
102   void computeElle(int orientationFrom);
103   void computeCorner(int orientationFrom);
104   
105   QPointF pointFrom;
106   QPointF pointTo;
107   QList<QPointF> interPoints;
108   QPointF interPoint1;
109   QPointF interPoint2;
110   QPointF interPoint3;
111   QPointF interPoint4;
112
113   QPainterPath pathPaint;
114   QPainterPath pathShape;
115   QPainterPathStroker pps;
116   Dispatcher* dispatcher;
117   Parameters* params;
118   InterfaceItem* fromInterfaceItem;
119   InterfaceItem* toInterfaceItem;
120   bool selected;
121   int id;
122   int marginConn;
123   
124   bool visible;
125
126   friend QDataStream &operator << (QDataStream &out, ConnectionItem &c);
127   friend QDataStream &operator >> (QDataStream &in, ConnectionItem &c);
128 };
129
130 #endif //