@@ -878,11 +878,11 @@ def removeLink(self, link):
878878 command = commands .RemoveLinkCommand (self .__scheme , link )
879879 self .__undoStack .push (command )
880880
881- def insertNode (self , link , new_node ):
881+ def insertNode (self , new_node , old_link , new_links ):
882882 """
883883 Insert a node in-between two linked nodes.
884884 """
885- command = commands .InsertNodeCommand (self .__scheme , link , new_node )
885+ command = commands .InsertNodeCommand (self .__scheme , new_node , old_link , new_links )
886886 self .__undoStack .push (command )
887887
888888 def onNewLink (self , func ):
@@ -1054,7 +1054,20 @@ def tryInsertNode(self, link, new_node_desc, pos):
10541054 if nodes_are_compatible (source_node .description , new_node_desc ) and \
10551055 nodes_are_compatible (new_node_desc , sink_node .description ):
10561056 new_node = self .newNodeHelper (new_node_desc , position = (pos .x (), pos .y ()))
1057- self .insertNode (link , new_node )
1057+
1058+ possible_links = (self .scheme ().propose_links (source_node , new_node ),
1059+ self .scheme ().propose_links (new_node , sink_node ))
1060+
1061+ if not possible_links [0 ] or not possible_links [1 ]:
1062+ raise ValueError ("Cannot insert widget: links not possible" )
1063+
1064+ new_links = (
1065+ SchemeLink (source_node , link .source_channel ,
1066+ new_node , possible_links [0 ][0 ][1 ]), # first link, first entry, output
1067+ SchemeLink (new_node , possible_links [1 ][0 ][0 ], # second link, first entry, input
1068+ sink_node , link .sink_channel ))
1069+
1070+ self .insertNode (new_node , link , new_links )
10581071 else :
10591072 self .createNewNode (new_node_desc , position = (pos .x (), pos .y ()))
10601073
@@ -1083,9 +1096,9 @@ def eventFilter(self, obj, event):
10831096 log .error ("Unknown qualified name '%s'" , qname )
10841097 else :
10851098 pos = event .scenePos ()
1086- item = self .__scene .item_at (event .scenePos ())
1087- if item and isinstance ( item , items . LinkCurveItem ) :
1088- link = self .__scene .link_for_item (item . parent () )
1099+ item = self .__scene .item_at (event .scenePos (), items . LinkItem )
1100+ if item :
1101+ link = self .__scene .link_for_item (item )
10891102 self .tryInsertNode (link , desc , pos )
10901103 else :
10911104 self .createNewNode (desc , position = (pos .x (), pos .y ()))
@@ -1667,7 +1680,19 @@ def filterFunc(index):
16671680 else :
16681681 return
16691682
1670- self .insertNode (original_link , new_node )
1683+ possible_links = (self .scheme ().propose_links (source_node , new_node ),
1684+ self .scheme ().propose_links (new_node , sink_node ))
1685+
1686+ if not possible_links [0 ] or not possible_links [1 ]:
1687+ raise ValueError ("Cannot insert widget: links not possible" )
1688+
1689+ new_links = (
1690+ SchemeLink (source_node , original_link .source_channel ,
1691+ new_node , possible_links [0 ][0 ][1 ]), # first link, first entry, output
1692+ SchemeLink (new_node , possible_links [1 ][0 ][0 ], # second link, first entry, input
1693+ sink_node , original_link .sink_channel ))
1694+
1695+ self .insertNode (new_node , original_link , new_links )
16711696
16721697 def __duplicateSelected (self ):
16731698 """
0 commit comments