3030#include < stdexcept>
3131#include < QtGui>
3232#include < boost/bind.hpp>
33+ #include < Core/Application/Application.h>
34+ #include < Dataflow/Engine/Controller/NetworkEditorController.h>
3335#include < Interface/Application/Connection.h>
3436#include < Interface/Application/Port.h>
3537#include < Interface/Application/GuiLogger.h>
3941#include < Core/Utils/Exception.h>
4042
4143using namespace SCIRun ::Gui;
44+ using namespace SCIRun ::Core;
4245using namespace SCIRun ::Dataflow::Networks;
4346
4447class EuclideanDrawStrategy : public ConnectionDrawStrategy
4548{
4649public:
47- void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to)
50+ virtual void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to) override
4851 {
4952 QPainterPath path;
5053
@@ -70,7 +73,7 @@ class EuclideanDrawStrategy : public ConnectionDrawStrategy
7073class CubicBezierDrawStrategy : public ConnectionDrawStrategy
7174{
7275public:
73- void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to)
76+ virtual void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to) override
7477 {
7578 QPainterPath path;
7679 QPointF start = from;
@@ -79,7 +82,7 @@ class CubicBezierDrawStrategy : public ConnectionDrawStrategy
7982 auto mid = (to - start) / 2 + start;
8083
8184 double qDirXNum = -(to-start).y ();
82- double qDirXDenom = (( double ) (to-start).x ());
85+ double qDirXDenom = static_cast < double >( (to-start).x ());
8386 if (0 == qDirXDenom)
8487 qDirXDenom = -0.0001 ;
8588 QPointF qDir (qDirXNum / qDirXDenom , 1 );
@@ -100,7 +103,7 @@ class CubicBezierDrawStrategy : public ConnectionDrawStrategy
100103class ManhattanDrawStrategy : public ConnectionDrawStrategy
101104{
102105public:
103- void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to)
106+ virtual void draw (QGraphicsPathItem* item, const QPointF& from, const QPointF& to) override
104107 {
105108 QPainterPath path;
106109 path.moveTo (from);
@@ -185,15 +188,31 @@ namespace SCIRun
185188 const QString disableEnableAction (" Disable" );
186189 const QString editNotesAction (" Edit Notes..." );
187190
191+ QList<QAction*> fillInsertModuleMenu (QMenu* menu, const ModuleDescriptionMap& moduleMap, PortWidget* output, ConnectionLine* conn)
192+ {
193+ auto portTypeToMatch = output->get_typename ();
194+
195+ return fillMenuWithFilteredModuleActions (menu, moduleMap,
196+ [portTypeToMatch](const ModuleDescription& m) { return portTypeMatches (portTypeToMatch, true , m) && portTypeMatches (portTypeToMatch, false , m); },
197+ [conn](QAction* action) { QObject::connect (action, SIGNAL (triggered ()), conn, SLOT (insertNewModule ())); },
198+ menu);
199+ }
200+
188201 class ConnectionMenu : public QMenu
189202 {
190203 public:
191- explicit ConnectionMenu (QWidget* parent = nullptr ) : QMenu(parent)
204+ explicit ConnectionMenu (ConnectionLine* conn, QWidget* parent = nullptr ) : QMenu(parent)
192205 {
193206 deleteAction_ = addAction (deleteAction);
194207 addWidgetToExecutionDisableList (deleteAction_);
195208 insertAction_ = addAction (insertModuleAction);
196209 addWidgetToExecutionDisableList (insertAction_);
210+
211+
212+ auto insertable = new QMenu;
213+ fillInsertModuleMenu (insertable, Application::Instance ().controller ()->getAllAvailableModuleDescriptions (), conn->connectedPorts ().first , conn);
214+ insertAction_->setMenu (insertable);
215+
197216 disableAction_ = addAction (disableEnableAction);
198217 addWidgetToExecutionDisableList (disableAction_);
199218 notesAction_ = addAction (editNotesAction);
@@ -219,7 +238,7 @@ namespace SCIRun
219238 class ConnectionLineNoteDisplayStrategy : public NoteDisplayStrategy
220239 {
221240 public:
222- virtual QPointF relativeNotePosition (QGraphicsItem* item, const QGraphicsTextItem* note, NotePosition position) const
241+ virtual QPointF relativeNotePosition (QGraphicsItem* item, const QGraphicsTextItem* note, NotePosition position) const override
223242 {
224243 return QPointF (0 ,0 );
225244 }
@@ -260,17 +279,19 @@ ConnectionLine::ConnectionLine(PortWidget* fromPort, PortWidget* toPort, const C
260279 setFlags (ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges | ItemIsFocusable);
261280
262281 setZValue (defaultZValue ());
263- setToolTip (" Left - Highlight\n Double-Left - Menu\n i - Datatype info" );
282+ setToolTip (" <font color= \" #000000 \" size=2> Left - Highlight\n Double-Left - Menu\n i - Datatype info" );
264283 setAcceptHoverEvents (true );
265284
266- menu_ = new ConnectionMenu ();
285+ menu_ = new ConnectionMenu (this );
267286 connectNoteEditorToAction (menu_->notesAction_ );
268287 connectUpdateNote (this );
269288
270289 NeedsScenePositionProvider::setPositionObject (boost::make_shared<MidpointPositionerFromPorts>(fromPort_, toPort_));
271290
272291 connect (menu_->disableAction_ , SIGNAL (triggered ()), this , SLOT (toggleDisabled ()));
273292
293+ menu_->setStyleSheet (fromPort->styleSheet ());
294+
274295 trackNodes ();
275296 GuiLogger::Instance ().logInfoStd (" Connection made: " + id_.id_ );
276297}
@@ -430,6 +451,11 @@ QVariant ConnectionLine::itemChange(GraphicsItemChange change, const QVariant& v
430451 return QGraphicsItem::itemChange (change, value);
431452}
432453
454+ void ConnectionLine::insertNewModule ()
455+ {
456+ qDebug () << " INSERTING NEW MODULE" ;
457+ }
458+
433459ModuleIdPair ConnectionLine::getConnectedToModuleIds () const
434460{
435461 return std::make_pair (toPort_->getUnderlyingModuleId (), fromPort_->getUnderlyingModuleId ());
@@ -574,7 +600,7 @@ ConnectionInProgress* ConnectionFactory::makeConnectionInProgress(PortWidget* po
574600 }
575601 default :
576602 std::cerr << " Unknown connection type." << std::endl;
577- return 0 ;
603+ return nullptr ;
578604 }
579605}
580606
@@ -626,7 +652,7 @@ ConnectionDrawStrategyPtr ConnectionFactory::getCurrentDrawer() const
626652 }
627653}
628654
629- ConnectionLine* ConnectionFactory::makeFinishedConnection (PortWidget* fromPort, PortWidget* toPort, const SCIRun::Dataflow::Networks:: ConnectionId& id) const
655+ ConnectionLine* ConnectionFactory::makeFinishedConnection (PortWidget* fromPort, PortWidget* toPort, const ConnectionId& id) const
630656{
631657 auto c = new ConnectionLine (fromPort, toPort, id, getCurrentDrawer ());
632658 activate (c);
0 commit comments