示例#1
0
    def startLineDraw(self, event):
        # highlight all ports that match
        startItems = self.items(event.scenePos())
        if len(startItems):
            if isinstance(startItems[0], OutPort):
                if QtCore.Qt.AltModifier == getKeyboardModifiers():
                    startItems[0].toggleMemSaver()
                    return
                self.portMatches = startItems[0].findMatchingInPorts()
                for port in self.portMatches:
                    port.scaleUp()
                self.graph.viewAndSceneForcedUpdate()

            if isinstance(startItems[0], InPort):
                self.portMatches = startItems[0].findMatchingOutPorts()
                for port in self.portMatches:
                    port.scaleUp()
                self.graph.viewAndSceneForcedUpdate()

        self.line = QtGui.QGraphicsLineItem(
            QtCore.QLineF(event.scenePos(), event.scenePos()))
        fade = QtGui.QColor(QtCore.Qt.red)
        fade.setAlpha(150)
        self.line.setPen(QtGui.QPen(fade, 2))
        self.line.setZValue(10)
        self.addItem(self.line)
示例#2
0
文件: edge.py 项目: schudds/framework
    def __init__(self, graph, destPort, sourcePort):
        super(EdgeTracer, self).__init__()

        # show a faux copy of the delete menu
        menu = QtWidgets.QMenu()
        menu.addAction("Delete")

        # position of pipe end based on port type
        bindout_y = 5
        bindin_y = -1
        p1 = self.mapFromItem(sourcePort, 3.5, bindin_y)
        p2 = self.mapFromItem(destPort, 3.5, bindout_y)

        pos = graph.mapToGlobal(graph.mapFromScene((p1 - p2) / 2 + p2))

        # render the menu without executing it
        try:
            # PyQt4
            menupixmap = QtGui.QPixmap().grabWidget(menu)
        except AttributeError:
            menupixmap = menu.grab()  # QtGui.QPixmap().grabWidget(menu)

        # round edges
        #mask = menupixmap.createMaskFromColor(QtGui.QColor(255, 255, 255), QtCore.Qt.MaskOutColor)
        #p = QtGui.QPainter(menupixmap)
        #p.setRenderHint(QtGui.QPainter.Antialiasing)
        #p.drawRoundedRect(0,0,menupixmap.width(),menupixmap.height(), 5,5)
        #p.drawPixmap(menupixmap.rect(), mask, mask.rect())
        #p.end()

        # display the menu image (as a dummy menu as its being built)
        # TODO: this could probably be moved to the FauxMenu
        self._tracer = QtWidgets.QLabel()
        self._tracer.setWindowFlags(QtCore.Qt.Tool
                                    | QtCore.Qt.FramelessWindowHint)
        self._tracer.move(pos)
        self._tracer.setPixmap(menupixmap)
        self._tracer.show()
        self._tracer.raise_()

        # draw a faux selected line
        line = QtCore.QLineF(p1, p2)
        self.setPen(
            QtGui.QPen(QtGui.QColor(QtCore.Qt.red), 2, QtCore.Qt.DashLine,
                       QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin))
        self.setLine(line)
        self.setZValue(0)

        # cleanup both menu item and line by removing from scene (parent).
        self._timer = QtCore.QTimer()
        self._timer.singleShot(300, lambda: graph.scene().removeItem(self))
示例#3
0
    def mousePressEvent(self, event):  # CANVAS SCENE
        printMouseEvent(self, event)
        modifiers = getKeyboardModifiers()

        # allow graphics view panning
        if self.graph._panning:
            event.ignore()
            return

        # if its not a port, then don't draw a line
        modmidbutton_event = (event.button() == QtCore.Qt.LeftButton
                              and modifiers == QtCore.Qt.AltModifier)

        if ((event.button() == QtCore.Qt.LeftButton) or (event.button() == QtCore.Qt.MidButton) or modmidbutton_event) \
                and isinstance(self.itemAt(event.scenePos()), Port):
            event.accept()
            self.startLineDraw(event)
        # rubber band select
        # elif ((event.button() == QtCore.Qt.MidButton) or modmidbutton_event):
        elif ((event.button() == QtCore.Qt.LeftButton) \
                and not isinstance(self.itemAt(event.scenePos()), Node) \
                and not isinstance(self.itemAt(event.scenePos()), PortEdge)):
            event.accept()
            self.unselectAllItems()  # reset select before making another
            self.origin = event.scenePos()
            self.rubberBand = QtGui.QGraphicsRectItem(
                QtCore.QRectF(self.origin, QtCore.QSizeF()))
            self.rubberBand.setPen(
                QtGui.QPen(QtCore.Qt.gray, 0, QtCore.Qt.SolidLine))
            self.rubberBand.setBrush(QtGui.QBrush(QtCore.Qt.lightGray))
            self.rubberBand.setZValue(0)
            self.addItem(self.rubberBand)
        else:
            QtGui.QApplication.restoreOverrideCursor()
            event.ignore()
            super(CanvasScene, self).mousePressEvent(event)
示例#4
0
文件: edge.py 项目: schudds/framework
    def paint(self, painter, option, widget):  # EDGE
        if not self.source or not self.dest:
            return

        # Draw the line itself.
        line = QtCore.QLineF(self.sourcePoint, self.destPoint)

        if line.length() == 0.0:
            return

        if self.isSelected(
        ) or self._beingHovered or self.connectedPortIsHovered():
            fade = QtGui.QColor(QtCore.Qt.red)
            fade.setAlpha(200)
            #painter.setPen(QtGui.QPen(QtCore.Qt.red, 1, QtCore.Qt.DashLine,
            painter.setPen(
                QtGui.QPen(fade, 2, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,
                           QtCore.Qt.RoundJoin))
        elif self.isCyclicConnection():
            painter.setPen(
                QtGui.QPen(QtCore.Qt.red, 2, QtCore.Qt.SolidLine,
                           QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin))
        else:
            fade = QtGui.QColor(QtCore.Qt.black)
            fade.setAlpha(150)
            #painter.setPen(QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine,
            painter.setPen(
                QtGui.QPen(fade, 2, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,
                           QtCore.Qt.RoundJoin))

        painter.drawLine(line)
        x = (line.x1() + line.x2()) / 2.0
        y = (line.y1() + line.y2()) / 2.0
        xa = (line.x1() - line.x2())
        ya = (line.y1() - line.y2())
        m = math.sqrt(xa * xa + ya * ya)
        a = math.atan2(ya, xa) * 180.0 / math.pi
        buf = self.source.getDataString()
        if self._beingHovered:
            f = QtGui.QFont("Times New Roman", 8)
        else:
            f = QtGui.QFont("Times New Roman", 6)
        fm = QtGui.QFontMetricsF(f)
        bw = fm.width(buf)
        bw2 = -bw * 0.5
        #bh = fm.height()

        # bezier curves
        if False:
            sa = (a + 90.) * 0.5
            path = QtGui.QPainterPath(line.p1())
            path.cubicTo(x - sa, y - sa, x + sa, y + sa, line.x2(), line.y2())
            painter.drawPath(path)

        # bezier curves, change direction on the angle
        if False:
            sa = (a + 90.) * 0.5
            if a > 90 or a < -90:
                path = QtGui.QPainterPath(line.p1())
                path.cubicTo(x - sa, y - sa, x + sa, y + sa, line.x2(),
                             line.y2())
                painter.drawPath(path)
            else:
                path = QtGui.QPainterPath(line.p1())
                path.cubicTo(x + sa, y + sa, x - sa, y - sa, line.x2(),
                             line.y2())
                painter.drawPath(path)

        painter.setFont(f)
        if self._beingHovered:
            painter.setPen(QtGui.QPen(QtCore.Qt.red, 1))
        else:
            painter.setPen(QtGui.QPen(QtCore.Qt.darkGray, 1))

        painter.save()
        painter.translate(QtCore.QPointF(x, y))
        if m > bw * 1.1 or self._beingHovered:
            if a > 90 or a < -90:
                painter.rotate(a + 180.0)
                painter.drawText(QtCore.QPointF(bw2, -2.0), buf)
            else:
                painter.rotate(a)
                painter.drawText(QtCore.QPointF(bw2, -2.0), buf)
        else:
            painter.drawText(QtCore.QPointF(bw2, -2.0), '')
        painter.restore()
示例#5
0
    def paint(self, painter, option, widget):
        if not self.source or not self.dest:
            return

        # Draw the line itself.
        line = QtCore.QLineF(self.sourcePoint, self.destPoint)

        if line.length() == 0.0:
            return

        painter.setPen(
            QtGui.QPen(QtCore.Qt.gray, self.penWidth, QtCore.Qt.SolidLine,
                       QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin))
        painter.drawLine(line)

        # drawing text
        x = (line.x1() + line.x2()) / 2.0
        y = (line.y1() + line.y2()) / 2.0
        xa = (line.x1() - line.x2())
        ya = (line.y1() - line.y2())
        m = math.sqrt(xa * xa + ya * ya)
        a = math.atan2(ya, xa) * 180.0 / math.pi
        buf = "Macro"
        f = QtGui.QFont("times", 20)
        fm = QtGui.QFontMetricsF(f)
        bw = fm.width(buf)
        bw2 = -bw * 0.5
        # bh = fm.height()

        # Draw the arrows if there's enough room.
        angle = math.acos(line.dx() / line.length())
        if line.dy() >= 0:
            angle = self.TwoPi - angle

        sourceArrowP1 = self.sourcePoint + QtCore.QPointF(
            math.sin(angle + self.Pi / 3) * self.arrowSize,
            math.cos(angle + self.Pi / 3) * self.arrowSize)
        sourceArrowP2 = self.sourcePoint + QtCore.QPointF(
            math.sin(angle + self.Pi - self.Pi / 3) * self.arrowSize,
            math.cos(angle + self.Pi - self.Pi / 3) * self.arrowSize)
        destArrowP1 = self.destPoint + QtCore.QPointF(
            math.sin(angle - self.Pi / 3) * self.arrowSize,
            math.cos(angle - self.Pi / 3) * self.arrowSize)
        destArrowP2 = self.destPoint + QtCore.QPointF(
            math.sin(angle - self.Pi + self.Pi / 3) * self.arrowSize,
            math.cos(angle - self.Pi + self.Pi / 3) * self.arrowSize)

        painter.setBrush(QtCore.Qt.gray)
        painter.drawPolygon(
            QtGui.QPolygonF([line.p1(), sourceArrowP1, sourceArrowP2]))
        painter.drawPolygon(
            QtGui.QPolygonF([line.p2(), destArrowP1, destArrowP2]))

        # drawing text
        painter.setFont(f)
        painter.setPen(QtGui.QPen(QtCore.Qt.darkGray, 1))
        painter.save()
        painter.translate(QtCore.QPointF(x, y))
        if m > bw * 1.1:
            if a > 90 or a < -90:
                painter.rotate(a + 180.0)
                painter.drawText(QtCore.QPointF(bw2, -5.0), buf)
            else:
                painter.rotate(a)
                painter.drawText(QtCore.QPointF(bw2, -5.0), buf)
        else:
            painter.drawText(QtCore.QPointF(bw2, -5.0), '')
        painter.restore()
示例#6
0
    def paint(self, painter, option, widget):  # NODE

        w = self.getNodeWidth()
        # h = self.getTitleWidth()[1]

        # draw shadow
        painter.setPen(QtCore.Qt.NoPen)
        painter.setBrush(QtCore.Qt.darkGray)
        painter.drawRoundedRect(-8, -8, w, 20, 3, 3)

        # choose module color
        gradient = QtGui.QRadialGradient(-10, -10, 40)

        # update the face node based on the state of internal nodes.
        if self._role == 'Macro':
            if self._macroParent.isProcessing():
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.gray).lighter(70))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkGray).lighter(70))
            elif (option.state & QtGui.QStyle.State_Sunken) or (
                    self._macroParent.inComputeErrorState()):
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.red).lighter(150))
                gradient.setColorAt(1,
                                    QtGui.QColor(QtCore.Qt.red).lighter(170))
            elif self._macroParent.inValidateErrorState():
                gradient.setColorAt(
                    0,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(190))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(170))
            elif self._macroParent.inInitUIErrorState():
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.red).lighter(150))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(170))
            else:
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.gray).lighter(150))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkGray).lighter(150))

        # let the src and sink nodes update themselves normally
        else:
            conf = self.getCurState()
            if self._computeState is conf:
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.gray).lighter(70))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkGray).lighter(70))
            elif (option.state & QtGui.QStyle.State_Sunken) or (
                    self._computeErrorState is conf):
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.red).lighter(150))
                gradient.setColorAt(1,
                                    QtGui.QColor(QtCore.Qt.red).lighter(170))
            elif self._validateError is conf:
                gradient.setColorAt(
                    0,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(190))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(170))
            else:
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.gray).lighter(150))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkGray).lighter(150))

        # draw module box (apply color)
        painter.setBrush(QtGui.QBrush(gradient))
        if self.beingHovered or self.isSelected():
            #painter.setPen(QtGui.QPen(QtCore.Qt.red, 1))
            fade = QtGui.QColor(QtCore.Qt.red)
            fade.setAlpha(100)
            painter.setPen(QtGui.QPen(fade, 2))
        else:
            #painter.setPen(QtGui.QPen(QtCore.Qt.black, 0))
            fade = QtGui.QColor(QtCore.Qt.black)
            fade.setAlpha(50)
            painter.setPen(QtGui.QPen(fade, 0))

        painter.drawRoundedRect(-10, -10, w, 20, 3, 3)

        # title
        painter.setPen(QtGui.QPen(QtCore.Qt.black, 0))
        painter.setFont(self.title_font)

        buf = self.getMacroNodeName()

        # paint the node title
        painter.drawText(-5, -9, w, 20,
                         (QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter),
                         str(buf))
示例#7
0
    def paint(self, painter, option, widget):  # PORT
        # choose module color
        gradient = QtGui.QRadialGradient(-1, -1, 10)
        if option.state & QtGui.QStyle.State_Sunken:
            gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.red).lighter(150))
            gradient.setColorAt(1,
                                QtGui.QColor(QtCore.Qt.darkRed).lighter(150))
        # elif self._beingHovered:
        #    gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.darkRed).lighter(150))
        #    gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.red).lighter(150))
        elif isinstance(self, InPort):
            # if self.menuWidget:
            if self.isREQUIRED():
                # gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.yellow).lighter(200))
                # gradient.setColorAt(1,
                # QtGui.QColor(QtCore.Qt.darkYellow).lighter(200))
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.blue).lighter(200))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkBlue).lighter(200))
                # gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.gray).lighter(300))
                # gradient.setColorAt(0,
                # QtGui.QColor(QtCore.Qt.darkGray).lighter(150))
            else:
                gradient.setColorAt(0,
                                    QtGui.QColor(QtCore.Qt.green).lighter(200))
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.darkGreen).lighter(150))
            #    gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.gray).lighter(150))
            # gradient.setColorAt(1,
            # QtGui.QColor(QtCore.Qt.darkGray).lighter(100))
        elif isinstance(self, OutPort):
            # if self.menuWidget:
            # orange=QtGui.QColor().fromRgbF(1.,0.5,0.)
            # gradient.setColorAt(0, orange.lighter(200))
            # gradient.setColorAt(1, orange.lighter(100))
            # gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.blue).lighter(300))
            # gradient.setColorAt(1,
            # QtGui.QColor(QtCore.Qt.darkBlue).lighter(300))
            if self.dataIsNone():
                gradient.setColorAt(1,
                                    QtGui.QColor(QtCore.Qt.red).lighter(300))
                gradient.setColorAt(
                    0,
                    QtGui.QColor(QtCore.Qt.darkRed).lighter(150))
            elif self.dataHasChanged():
                # gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.gray).lighter(200))
                # gradient.setColorAt(0,
                # QtGui.QColor(QtCore.Qt.darkGray).lighter(100))
                gradient.setColorAt(1,
                                    QtGui.QColor(QtCore.Qt.blue).lighter(200))
                gradient.setColorAt(
                    0,
                    QtGui.QColor(QtCore.Qt.darkBlue).lighter(200))
            else:
                gradient.setColorAt(
                    1,
                    QtGui.QColor(QtCore.Qt.yellow).lighter(200))
                gradient.setColorAt(
                    0,
                    QtGui.QColor(QtCore.Qt.darkYellow).lighter(150))
        # else:
        # gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.blue).lighter(175))
        # gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.darkBlue).lighter(175))
        # gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.gray).lighter(150))
        # gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.darkGray).lighter(100))
        #    if self.dataIsNone():
        #        gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.red).lighter(150))
        #        gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.darkRed).lighter(100))
        #    elif self.dataHasChanged():
        #        gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.gray).lighter(150))
        #        gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.darkGray).lighter(100))
        #    else:
        #        gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.yellow).lighter(200))
        # gradient.setColorAt(1,
        # QtGui.QColor(QtCore.Qt.darkYellow).lighter(150))

        # draw module box (apply color)
        painter.setBrush(QtGui.QBrush(gradient))
        #painter.setPen(QtGui.QPen(QtCore.Qt.black, 0))
        fade = QtGui.QColor(QtCore.Qt.black)
        fade.setAlpha(50)
        painter.setPen(QtGui.QPen(fade, 0))

        # if isinstance(self,InPort):
        #    if self.isREQUIRED():
        #        painter.setPen(QtGui.QPen(QtCore.Qt.red, 0))
        #    else:
        #        painter.setPen(QtGui.QPen(QtCore.Qt.black, 0))
        #        #painter.setPen(QtGui.QPen(QtCore.Qt.yellow, 0))

        if self.isMemSaver():
            painter.drawPolygon(self.portShape_memSave)
        else:
            if self.menuWidget:
                painter.drawEllipse(1, 0, 5, 5)
            else:
                painter.drawPolygon(self.portShape)