def dropEvent(self, event): nodeLabel = str(event.mimeData().text()) event.mimeData().setText("") self.drop = False if nodeLabel == "": return _node = MT.createNode(nodeLabel) if _node is not None: self.scene().space.addNode(_node) scenePos = self.mapToScene(event.pos()) nw = NodeDesigner.width nh = NodeDesigner.height _node.pos = (scenePos.x() - nw / 2, scenePos.y() - nh / 2) #link it #find sockets this corresponds to insocket = None for socket in self.start.data.insockets: if (socket.connected is not None and socket.connected.node.ptr == self.end.data.ptr): insocket = socket break out = insocket.connected #find new matching insocket and link insockets = MT.getCompatibleSockets(out, node_) if len(insockets) == 1: insockets[0].connected = out else: menu = QMenu() for socket in insockets: action = menu.addAction(socket.name) def connect(): socket.connected = out action.triggered.connect(connect) menu.exec_(event.screenPos()) outsockets = list( filter(lambda o: MT.isCompatible(insocket, o), _node.outsockets)) if len(outsockets) == 1: insocket.connected = outsockets[0] else: menu = QMenu() for socket in outsockets: action = menu.addAction(socket.name) def connect(): insocket.connected = socket action.triggered.connect(connect) menu.exec_(event.screenPos())
def dropEvent(self, event): nodeLabel = str(event.mimeData().text()) event.mimeData().setText("") self.drop = False if nodeLabel == "": return _node = MT.createNode(nodeLabel) if _node is not None: self.scene().space.addNode(_node) scenePos = self.mapToScene(event.pos()) nw = NodeDesigner.width nh = NodeDesigner.height _node.pos = (scenePos.x() - nw/2, scenePos.y() - nh/2) #link it #find sockets this corresponds to insocket = None for socket in self.start.data.insockets: if (socket.connected is not None and socket.connected.node.ptr == self.end.data.ptr): insocket = socket break out = insocket.connected #find new matching insocket and link insockets = MT.getCompatibleSockets(out, node_) if len(insockets) == 1: insockets[0].connected = out else: menu = QMenu() for socket in insockets: action = menu.addAction(socket.name) def connect(): socket.connected = out action.triggered.connect(connect) menu.exec_(event.screenPos()) outsockets = list(filter(lambda o: MT.isCompatible(insocket, o), _node.outsockets)) if len(outsockets) == 1: insocket.connected = outsockets[0] else: menu = QMenu() for socket in outsockets: action = menu.addAction(socket.name) def connect(): insocket.connected = socket action.triggered.connect(connect) menu.exec_(event.screenPos())
def dropEvent(self, event): if self.scene().tmpLink: out = self.scene().tmpLink.outsocket self.scene().removeTmpLink() compSockets = MT.getCompatibleSockets(out, self.data) if len(compSockets) > 1: menu = QMenu() def action_triggered_cb(s): def action_triggered(): s.connected = out return action_triggered for name, s in compSockets.items(): action = menu.addAction(name) action.triggered.connect(action_triggered_cb(s)) menu.exec_(event.screenPos()) elif len(compSockets) == 1: s = list(compSockets.values())[0] s.connected = out