Exemplo n.º 1
0
    def mousePressEvent(self, event):
        super(NodeBoxTreeWidget, self).mousePressEvent(event)
        item_clicked = self.currentItem()
        if not item_clicked:
            event.ignore()
            return
        # check if clicked item is a category
        if item_clicked.bCategory:
            event.ignore()
            return
        # find top level parent
        rootItem = item_clicked
        while not rootItem.parent() is None:
            rootItem = rootItem.parent()
        packageName = rootItem.text(0)
        pressed_text = item_clicked.text(0)
        libName = item_clicked.libName

        if pressed_text in self.categoryPaths.keys():
            event.ignore()
            return

        jsonTemplate = NodeBase.jsonTemplate()
        jsonTemplate['package'] = packageName
        jsonTemplate['lib'] = libName
        jsonTemplate['type'] = pressed_text
        jsonTemplate['name'] = pressed_text
        jsonTemplate['uuid'] = str(uuid.uuid4())
        jsonTemplate['meta']['label'] = pressed_text

        # TODO: Rewrite self.bGripsEnabled. Node box can be floating window or a tool.
        # If node box is a tool it onbly can create nodes by dragging and dropping
        if self.canvas.pressedPin is not None and self.bGripsEnabled:
            a = self.canvas.mapToScene(self.canvas.mouseReleasePos)
            jsonTemplate["x"] = a.x()
            jsonTemplate["y"] = a.y()
            node = self.canvas.createNode(jsonTemplate)
            self.canvas.hideNodeBox()
            pressedPin = self.canvas.pressedPin
            if pressedPin.direction == PinDirection.Input:
                for pin in node.UIoutputs.values():
                    wire = self.canvas.connectPinsInternal(pressedPin, pin)
                    if wire is not None:
                        EditorHistory().saveState("Connect pins", modify=True)
                        break
            if pressedPin.direction == PinDirection.Output:
                for pin in node.UIinputs.values():
                    wire = self.canvas.connectPinsInternal(pin, pressedPin)
                    if wire is not None:
                        EditorHistory().saveState("Connect pins", modify=True)
                        break
        else:
            drag = QtGui.QDrag(self)
            mime_data = QtCore.QMimeData()

            pressed_text = json.dumps(jsonTemplate)
            mime_data.setText(pressed_text)
            drag.setMimeData(mime_data)
            drag.exec_()
Exemplo n.º 2
0
    def mousePressEvent(self, event):
        super(NodeBoxTreeWidget, self).mousePressEvent(event)
        canvas = self.parent().canvasRef()
        item_clicked = self.currentItem()
        if not item_clicked:
            event.ignore()
            return
        # check if clicked item is a category
        if item_clicked.bCategory:
            event.ignore()
            return
        # find top level parent
        rootItem = item_clicked
        while not rootItem.parent() is None:
            rootItem = rootItem.parent()
        packageName = rootItem.text(0)
        pressed_text = item_clicked.text(0)
        libName = item_clicked.libName

        if pressed_text in self.categoryPaths.keys():
            event.ignore()
            return

        try:
            mousePos = canvas.mapToScene(canvas.mousePressPose)
        except:
            mousePos = canvas.mapToScene(canvas.mousePressPose.toPoint())

        jsonTemplate = NodeBase.jsonTemplate()
        jsonTemplate['package'] = packageName
        jsonTemplate['lib'] = libName
        jsonTemplate['type'] = pressed_text
        jsonTemplate['name'] = pressed_text
        jsonTemplate['uuid'] = str(uuid.uuid4())
        jsonTemplate['x'] = mousePos.x()
        jsonTemplate['y'] = mousePos.y()
        jsonTemplate['meta']['label'] = pressed_text

        if self.bUseDragAndDrop:
            drag = QtGui.QDrag(self)
            mime_data = QtCore.QMimeData()

            pressed_text = json.dumps(jsonTemplate)
            mime_data.setText(pressed_text)
            drag.setMimeData(mime_data)
            drag.exec_()
        else:
            canvas.createNode(jsonTemplate)
Exemplo n.º 3
0
 def eventDropOnCanvas(self):
     # TODO: try to simplify this with Canvas.spawnNode
     nodeTemplate = NodeBase.jsonTemplate()
     nodeTemplate['package'] = "Base"
     nodeTemplate['lib'] = ""
     nodeTemplate['type'] = "loopEnd"
     nodeTemplate['name'] = self.canvasRef().graphManager.getUniqNodeName(
         "loopEnd")
     nodeTemplate['x'] = self.scenePos().x() + self.geometry().width() + 30
     nodeTemplate['y'] = self.scenePos().y()
     nodeTemplate['uuid'] = str(uuid.uuid4())
     endNode = self.canvasRef()._createNode(nodeTemplate)
     self.getPinSG("Paired block").setData(str(endNode.path()))
     endNode.getPinSG("Paired block").setData(self.path())
     self.canvasRef().connectPins(self.getPinSG("LoopBody"),
                                  endNode.getPinSG(DEFAULT_IN_EXEC_NAME))
Exemplo n.º 4
0
    def keyPressEvent(self, event):
        super(NodeBoxTreeWidget, self).keyPressEvent(event)
        key = event.key()
        canvas = self.parent().canvasRef()
        if key == QtCore.Qt.Key_Return:
            item_clicked = self.currentItem()
            if not item_clicked:
                event.ignore()
                return
            # check if clicked item is a category
            if item_clicked.bCategory:
                event.ignore()
                return
            # find top level parent
            rootItem = item_clicked
            while not rootItem.parent() is None:
                rootItem = rootItem.parent()
            packageName = rootItem.text(0)
            pressed_text = item_clicked.text(0)
            libName = item_clicked.libName
            if pressed_text in self.categoryPaths.keys():
                event.ignore()
                return

            nodeClassName = self.currentItem().text(0)
            name = nodeClassName
            try:
                # TODO: replace position gathering method to canvas center
                pos = canvas.mapToScene(canvas.mouseReleasePos)
                nodeTemplate = NodeBase.jsonTemplate()
                nodeTemplate['package'] = packageName
                nodeTemplate['lib'] = libName
                nodeTemplate['type'] = pressed_text
                nodeTemplate['name'] = name
                nodeTemplate['x'] = pos.x()
                nodeTemplate['y'] = pos.y()
                nodeTemplate['meta']['label'] = nodeClassName
                nodeTemplate['uuid'] = str(uuid.uuid4())

                canvas.createNode(nodeTemplate)
            except:
                pass