Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
    def dropNodeConnect(self):
        sitems = self.graph.scene().selectedItems()
        if not sitems:
            return self.dropNodeCenter()

        last_node = sitems[0].data
        pos = last_node.pos
        newPos = (pos[0], pos[1] + (n.NodeDesigner.height * 2) + 20)
        nodelabel = self.selectedItems()[0].text(1)
        node = self.graph.dropNode(nodelabel, newPos)

        for snode in sitems:
            for outsocket in snode.data.outsockets:
                for insocket in node.insockets:
                    if (MT.isCompatible(insocket, outsocket)
                            and not insocket.connected):
                        insocket.connected = outsocket
                        break
Exemplo n.º 4
0
    def dropNodeConnect(self):
        sitems = self.graph.scene().selectedItems()
        if not sitems:
            return self.dropNodeCenter()

        last_node = sitems[0].data
        pos = last_node.pos
        newPos = (pos[0], pos[1] + (n.NodeDesigner.height * 2) + 20)
        nodelabel = self.selectedItems()[0].text(1)
        node = self.graph.dropNode(nodelabel, newPos)

        for snode in sitems:
            for outsocket in snode.data.outsockets:
                for insocket in node.insockets:
                    if (MT.isCompatible(insocket, outsocket)
                        and not insocket.connected):
                        insocket.connected = outsocket
                        break