SCIRun  5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Connection.h
Go to the documentation of this file.
1 /*
2  For more information, please see: http://software.sci.utah.edu
3 
4  The MIT License
5 
6  Copyright (c) 2012 Scientific Computing and Imaging Institute,
7  University of Utah.
8 
9  License for the specific language governing rights and limitations under
10  Permission is hereby granted, free of charge, to any person obtaining a
11  copy of this software and associated documentation files (the "Software"),
12  to deal in the Software without restriction, including without limitation
13  the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  and/or sell copies of the Software, and to permit persons to whom the
15  Software is furnished to do so, subject to the following conditions:
16 
17  The above copyright notice and this permission notice shall be included
18  in all copies or substantial portions of the Software.
19 
20  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  DEALINGS IN THE SOFTWARE.
27 */
28 
29 #ifndef INTERFACE_APPLICATION_CONNECTION_H
30 #define INTERFACE_APPLICATION_CONNECTION_H
31 
32 #include <QGraphicsLineItem>
33 #include <QGraphicsPathItem>
34 #include <QPen>
35 #include <boost/function.hpp>
39 #include <Core/Utils/Exception.h>
40 
41 namespace SCIRun {
42 namespace Gui {
43 
44 class PortWidget;
45 
47 {
48 public:
50  virtual void draw(QGraphicsPathItem* item, const QPointF& from, const QPointF& to) = 0;
51 };
52 
53 typedef boost::shared_ptr<ConnectionDrawStrategy> ConnectionDrawStrategyPtr;
54 
56 {
58 };
59 
60 class ConnectionLine : public QObject, public QGraphicsPathItem, public HasNotes, public NoteDisplayHelper, public NeedsScenePositionProvider
61 {
62  Q_OBJECT
63 
64 public:
67  void setColor(const QColor& color);
68  QColor color() const;
69  std::list<SCIRun::Dataflow::Networks::ModuleId> getConnectedToModuleId();
70 
71 public Q_SLOTS:
72  void trackNodes();
74  void updateNote(const Note& note);
75 
76 Q_SIGNALS:
78 protected:
79  void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
80  void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
81  void mouseMoveEvent(QGraphicsSceneMouseEvent * event) override;
82  QVariant itemChange(GraphicsItemChange change, const QVariant& value);
83  void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
84  virtual void setNoteGraphicsContext() override;
85 
86 private:
87  PortWidget* fromPort_;
88  PortWidget* toPort_;
91  void destroy();
92  bool destroyed_;
93  class ConnectionMenu* menu_;
94  bool menuOpen_;
95  QColor placeHoldingColor_;
96 };
97 
99 
101 {
102 public:
104  virtual void update(const QPointF& end) = 0;
105 };
106 
107 template <class Base>
109 {
110 public:
112  {
113  Base::setZValue(1000); //TODO
114  setColor(port->color());
115  }
116 
117  void setColor(const QColor& color)
118  {
119  Base::setPen(QPen(color, 5.0, Qt::DashLine));
120  }
121 
122  QColor color() const
123  {
124  return Base::pen().color();
125  }
126 
127 protected:
130 };
131 
133 {
134 public:
136  virtual void update(const QPointF& end);
137 };
138 
140 {
141 public:
143  virtual void update(const QPointF& end);
144 };
145 
147 {
148 public:
150  virtual void update(const QPointF& end);
151 };
152 
153 class ConnectionFactory : public QObject
154 {
155  Q_OBJECT
156 public:
157  explicit ConnectionFactory(QGraphicsScene* scene);
160  void setType(ConnectionDrawType type);
161  ConnectionDrawType getType() const;
162 Q_SIGNALS:
163  void typeChanged(ConnectionDrawStrategyPtr drawerMaker);
164 private:
165  ConnectionDrawType currentType_;
166  void activate(QGraphicsItem* item) const;
167  QGraphicsScene* scene_;
168  ConnectionDrawStrategyPtr euclidean_;
170  ConnectionDrawStrategyPtr manhattan_;
171  ConnectionDrawStrategyPtr getCurrentDrawer() const;
172 };
173 
174 }
175 }
176 #endif
Definition: Port.h:55
ConnectionLine * makeFinishedConnection(PortWidget *fromPort, PortWidget *toPort, const SCIRun::Dataflow::Networks::ConnectionId &id) const
Definition: Connection.cc:433
ConnectionInProgressGraphicsItem(PortWidget *port, ConnectionDrawStrategyPtr drawer)
Definition: Connection.h:111
void setColor(const QColor &color)
Definition: Connection.cc:214
Definition: Connection.h:57
virtual void update(const QPointF &end)=0
virtual void draw(QGraphicsPathItem *item, const QPointF &from, const QPointF &to)=0
PortWidget * fromPort_
Definition: Connection.h:128
virtual void update(const QPointF &end)
Definition: Connection.cc:340
void updateNote(const Note &note)
Definition: Connection.cc:307
void deleted(const SCIRun::Dataflow::Networks::ConnectionId &id)
Definition: Note.h:58
Definition: ConnectionId.h:67
virtual void setNoteGraphicsContext() override
Definition: Connection.cc:300
ConnectionFactory(QGraphicsScene *scene)
Definition: Connection.cc:359
std::list< SCIRun::Dataflow::Networks::ModuleId > getConnectedToModuleId()
Definition: Connection.cc:293
ConnectionDrawStrategyPtr drawStrategy_
Definition: Connection.h:129
void setType(ConnectionDrawType type)
Definition: Connection.cc:403
ConnectionInProgressCurved(PortWidget *port, ConnectionDrawStrategyPtr drawer)
Definition: Connection.cc:325
Definition: Connection.h:57
Definition: PositionProvider.h:49
virtual ~ConnectionInProgress()
Definition: Connection.h:103
Definition: Connection.cc:116
Definition: Connection.h:139
Definition: Connection.h:100
QColor color() const
Definition: Connection.h:122
ConnectionDrawType
Definition: Connection.h:55
ConnectionInProgressManhattan(PortWidget *port, ConnectionDrawStrategyPtr drawer)
Definition: Connection.cc:335
ConnectionLine(PortWidget *fromPort, PortWidget *toPort, const SCIRun::Dataflow::Networks::ConnectionId &id, ConnectionDrawStrategyPtr drawer)
Definition: Connection.cc:146
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition: Connection.cc:275
ConnectionInProgress * makeConnectionInProgress(PortWidget *port) const
Definition: Connection.cc:365
Definition: Connection.h:153
void setDrawStrategy(ConnectionDrawStrategyPtr drawer)
Definition: Connection.cc:235
QVariant itemChange(GraphicsItemChange change, const QVariant &value)
Definition: Connection.cc:280
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
Definition: Connection.cc:249
Definition: Exception.h:46
Definition: Note.h:64
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition: Connection.cc:243
void trackNodes()
Definition: Connection.cc:224
Definition: Connection.h:46
virtual void update(const QPointF &end)
Definition: Connection.cc:330
Definition: Connection.h:57
ConnectionDrawType getType() const
Definition: Connection.cc:412
virtual ~ConnectionDrawStrategy()
Definition: Connection.h:49
void setColor(const QColor &color)
Definition: Connection.h:117
Definition: Connection.h:98
QColor color() const
Definition: Port.h:65
Definition: Connection.h:132
Definition: Connection.h:60
Definition: Connection.h:146
QColor color() const
Definition: Connection.cc:219
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override
Definition: Connection.cc:260
virtual void update(const QPointF &end)
Definition: Connection.cc:317
~ConnectionLine()
Definition: Connection.cc:188
Definition: Note.h:92
void typeChanged(ConnectionDrawStrategyPtr drawerMaker)
boost::shared_ptr< ConnectionDrawStrategy > ConnectionDrawStrategyPtr
Definition: Connection.h:53
ConnectionInProgressStraight(PortWidget *port, ConnectionDrawStrategyPtr drawer)
Definition: Connection.cc:312