def mousePressEvent(self, mouseEvent):
        if (mouseEvent.button() != QtCore.Qt.LeftButton):
            return

        if self.myMode == self.InsertItem:
            item = DiagramItem(self.myItemType, self.myItemMenu)
            item.setBrush(self.myItemColor)
            self.addItem(item)
            item.setPos(mouseEvent.scenePos())
            self.itemInserted.emit(item)
        elif self.myMode == self.InsertLine:
            self.line = QtGui.QGraphicsLineItem(QtCore.QLineF(mouseEvent.scenePos(),
                                        mouseEvent.scenePos()))
            self.line.setPen(QtGui.QPen(self.myLineColor, 2))
            self.addItem(self.line)
        elif self.myMode == self.InsertText:
            textItem = DiagramTextItem()
            textItem.setFont(self.myFont)
            textItem.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
            textItem.setZValue(1000.0)
            textItem.lostFocus.connect(self.editorLostFocus)
            textItem.selectedChange.connect(self.itemSelected)
            self.addItem(textItem)
            textItem.setDefaultTextColor(self.myTextColor)
            textItem.setPos(mouseEvent.scenePos())
            self.textInserted.emit(textItem)

        super(DiagramScene, self).mousePressEvent(mouseEvent)
Exemple #2
0
    def mousePressEvent(self, event):
        """
        Draw a line if a connection widget is selected and dragged.
        """
        item = self.itemAt(event.scenePos())
        node = self.nodeAt(event.scenePos())

        modifiers = QtGui.QApplication.keyboardModifiers()

        # left mouse
        if event.button() == QtCore.Qt.LeftButton:
            if modifiers == QtCore.Qt.AltModifier:
                if item:
                    if self.is_edge(item):
                        if self.splitEdge(item, event.scenePos()):
                            log.info('splitting edge...')
                        else:
                            log.warning('cannot split edge.')

            elif modifiers == QtCore.Qt.ShiftModifier:
                if node:
                    if self.is_node(node):
                        if self.popNode(node):
                            log.info('popping node "%s"' % node.dagnode.name)
                        else:
                            log.warning('cannot pop node "%s"' %
                                        node.dagnode.name)
            else:
                if item:
                    if self.is_connection(item):
                        if item.isOutputConnection():
                            crect = item.boundingRect()
                            lpen = QtGui.QPen(
                                QtGui.QBrush(QtGui.QColor(*[251, 251, 251])),
                                1, QtCore.Qt.SolidLine)
                            self.line = QtGui.QGraphicsLineItem(
                                QtCore.QLineF(event.scenePos(),
                                              event.scenePos()))
                            self.line.setPen(lpen)
                            self.addItem(self.line)
                            self.update(self.itemsBoundingRect())

                        # disconnect the edge if this is an input
                        if item.isInputConnection():
                            # query the edge(s) attached.
                            edges = item.connections.values()
                            if edges:
                                if len(edges) == 1:
                                    conn_edge = edges[0]

                                    # remove the edge from the connections
                                    if conn_edge.disconnect_terminal(item):
                                        log.info('disconnecting edge: "%s"' %
                                                 self.graph.edge_nice_name(
                                                     *conn_edge.ids))
                                        # todo: call manage?
                                        self.graph.remove_edge(*conn_edge.ids)

                                        edge_line = conn_edge.getLine()
                                        p1 = edge_line.p1()

                                        self.line = QtGui.QGraphicsLineItem(
                                            QtCore.QLineF(
                                                p1, event.scenePos()))
                                        self.addItem(self.line)
                                        self.update(self.itemsBoundingRect())

        if event.button() == QtCore.Qt.RightButton:
            pass

        QtWidgets.QGraphicsScene.mousePressEvent(self, event)
        self.update()