@@ -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 insertNodeIntoLink (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 .InsertWidgetIntoLinkCommand (self .__scheme , new_node , old_link , new_links )
886886 self .__undoStack .push (command )
887887
888888 def onNewLink (self , func ):
@@ -1047,14 +1047,27 @@ def changeEvent(self, event):
10471047
10481048 QWidget .changeEvent (self , event )
10491049
1050- def tryInsertNode (self , link , new_node_desc , pos ):
1050+ def tryInsertNodeIntoLink (self , link , new_node_desc , pos ):
10511051 source_node = link .source_node
10521052 sink_node = link .sink_node
10531053
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 .insertNodeIntoLink (new_node , link , new_links )
10581071 else :
10591072 self .createNewNode (new_node_desc , position = (pos .x (), pos .y ()))
10601073
@@ -1083,10 +1096,10 @@ 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 () )
1089- self .tryInsertNode (link , desc , pos )
1099+ item = self .__scene .item_at (event .scenePos (), items . LinkItem )
1100+ if item :
1101+ link = self .__scene .link_for_item (item )
1102+ self .tryInsertNodeIntoLink (link , desc , pos )
10901103 else :
10911104 self .createNewNode (desc , position = (pos .x (), pos .y ()))
10921105 return True
@@ -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 .insertNodeIntoLink (new_node , original_link , new_links )
16711696
16721697 def __duplicateSelected (self ):
16731698 """
0 commit comments