Salome HOME
7ba5786e1187a2c2421b24552e82efff0953a554
[modules/yacs.git] / src / genericgui / SceneLinkItem.hxx
1 //  Copyright (C) 2006-2008  CEA/DEN, EDF R&D
2 //
3 //  This library is free software; you can redistribute it and/or
4 //  modify it under the terms of the GNU Lesser General Public
5 //  License as published by the Free Software Foundation; either
6 //  version 2.1 of the License.
7 //
8 //  This library is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 //  Lesser General Public License for more details.
12 //
13 //  You should have received a copy of the GNU Lesser General Public
14 //  License along with this library; if not, write to the Free Software
15 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 #ifndef _SCENELINKITEM_HXX_
20 #define _SCENELINKITEM_HXX_
21
22 #include "SceneObserverItem.hxx"
23 #include "LinkMatrix.hxx"
24
25 #include <QPointF>
26 #include <QPainterPath>
27 #include <vector>
28
29 namespace YACS
30 {
31   namespace HMI
32   {
33
34     typedef enum
35       {
36         _UP    = 0,
37         _RIGHT = 1,
38         _DOWN  = 2,
39         _LEFT  = 3
40       } Direction;
41
42     class ScenePortItem;
43
44     class SceneLinkItem: public SceneObserverItem
45     {
46     public:
47       SceneLinkItem(QGraphicsScene *scene, SceneItem *parent,
48                     ScenePortItem* from, ScenePortItem* to,
49                     QString label, Subject *subject);
50       virtual ~SceneLinkItem();
51
52       virtual void select(bool isSelected);
53       virtual QRectF boundingRect() const;
54       virtual QPainterPath shape() const;
55       virtual void paint(QPainter *painter,
56                          const QStyleOptionGraphicsItem *option,
57                          QWidget *widget);
58       virtual void update(GuiEvent event, int type, Subject* son);
59       virtual void popupMenu(QWidget *caller, const QPoint &globalPos);
60       virtual void setPath(LinkPath lp);
61       virtual void minimizeDirectionChanges();
62       virtual void force2points();
63       virtual QPointF start();
64       virtual QPointF goal();
65
66     protected:
67       void setShape();
68       void addArrow(QPointF pfrom,
69                     QPointF pto,
70                     HMI::Direction dir);
71
72       QPainterPath _path;
73       ScenePortItem* _from;
74       ScenePortItem* _to;
75       std::vector<QPointF> _lp;
76       std::vector<Direction> _directions;
77       int _nbPoints;
78     };
79   }
80 }
81
82 #endif