예제 #1
0
 def paint( self, painter, option, widget ):
     """
     Overloads the paint method from QGraphicsPathItem to \
     handle custom drawing of the path using this items \
     pens and polygons.
     
     :param      painter     <QPainter>
     :param      option      <QGraphicsItemStyleOption>
     :param      widget      <QWidget>
     """
     # following the arguments required by Qt
     # pylint: disable-msg=W0613
     
     painter.setOpacity(self.opacity())
     
     # show the connection selected
     if ( not self.isEnabled() ):
         pen = QPen(self.disabledPen())
     elif ( self.isSelected() ):
         pen = QPen(self.highlightPen())
     else:
         pen = QPen(self.pen())
     
     if ( self._textItem ):
         self._textItem.setOpacity(self.opacity())
         self._textItem.setDefaultTextColor(pen.color().darker(110))
     
     # rebuild first if necessary
     if ( self.isDirty() ):
         self.setPath(self.rebuild())
     
     # store the initial hint
     hint = painter.renderHints()
     painter.setRenderHint( painter.Antialiasing )
     
     pen.setWidthF(1.25)
     painter.setPen(pen)
     painter.drawPath(self.path())
     
     # redraw the polys to force-fill them
     for poly in self._polygons:
         if ( not poly.isClosed() ):
             continue
         
         painter.setBrush(pen.color())
         painter.drawPolygon(poly)
     
     # restore the render hints
     painter.setRenderHints(hint)
예제 #2
0
        def generate_pens(basecolor):
            pen = QPen(basecolor, 1)
            pen.setCosmetic(True)

            shadow_pen = QPen(pen.color().lighter(160), 2.5)
            shadow_pen.setCosmetic(True)
            return pen, shadow_pen
예제 #3
0
        def generate_pens(basecolor):
            pen = QPen(basecolor, 1)
            pen.setCosmetic(True)

            shadow_pen = QPen(pen.color().lighter(160), 2.5)
            shadow_pen.setCosmetic(True)
            return pen, shadow_pen
예제 #4
0
    def __updateStyleState(self):
        """
        Update the arrows' brush, pen, ... based on it's state
        """
        if self.isSelected():
            color = self.__color.darker(150)
            pen = QPen(QColor(96, 158, 215), Qt.DashDotLine)
            pen.setWidthF(1.25)
            pen.setCosmetic(True)
            self.__shadow.setColor(pen.color().darker(150))
        else:
            color = self.__color
            pen = QPen(Qt.NoPen)
            self.__shadow.setColor(QColor(63, 63, 63, 180))

        self.__arrowItem.setBrush(color)
        self.__arrowItem.setPen(pen)
예제 #5
0
    def __updateStyleState(self):
        """
        Update the arrows' brush, pen, ... based on it's state
        """
        if self.isSelected():
            color = self.__color.darker(150)
            pen = QPen(QColor(96, 158, 215), Qt.DashDotLine)
            pen.setWidthF(1.25)
            pen.setCosmetic(True)
            self.__shadow.setColor(pen.color().darker(150))
        else:
            color = self.__color
            pen = QPen(Qt.NoPen)
            self.__shadow.setColor(QColor(63, 63, 63, 180))

        self.__arrowItem.setBrush(color)
        self.__arrowItem.setPen(pen)
예제 #6
0
    def plot_curves(self, target, clf_idx):
        if (target, clf_idx) not in self._curve_data:
            curve = LiftCurve_from_results(self.results, clf_idx, target)
            color = self.colors[clf_idx]
            pen = QPen(color, 1)
            pen.setCosmetic(True)
            shadow_pen = QPen(pen.color().lighter(160), 2.5)
            shadow_pen.setCosmetic(True)
            item = pg.PlotDataItem(
                curve.points[0], curve.points[1],
                pen=pen, shadowPen=shadow_pen,
                symbol="+", symbolSize=3, symbolPen=shadow_pen,
                antialias=True
            )
            hull_item = pg.PlotDataItem(
                curve.hull[0], curve.hull[1],
                pen=pen,  antialias=True
            )
            self._curve_data[target, clf_idx] = \
                PlotCurve(curve, item, hull_item)

        return self._curve_data[target, clf_idx]
예제 #7
0
class FeatureHighlightItem(QgsMapCanvasItem):
    # Code ported from QGIS QgsHighlight

    def __init__(self, mapCanvas, feature, layer):
        super(FeatureHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._brush = QBrush()
        self._pen = QPen()
        self._feature = None  # QgsFeature()
        self._layer = None  # QgsMapLayer()
        self._buffer = 0.0
        self._minWidth = 0.0

        self._mapCanvas = mapCanvas
        if (not layer or not feature or not isinstance(feature, QgsFeature)
                or not feature.geometry() or feature.geometry().isEmpty()
                or not feature.geometry().isGeosValid()):
            return
        self._feature = QgsFeature(feature)  # Force deep copy
        self._layer = layer
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        self._minWidth = Application.highlightMinimumWidth()
        self._buffer = Application.highlightBuffer()
        if self._mapCanvas.mapSettings().hasCrsTransformEnabled():
            ct = self._mapCanvas.mapSettings().layerTransform(self._layer)
            if ct:
                self._feature.geometry().transform(ct)
        self.updateRect()
        self.update()

    def remove(self):
        self._mapCanvas.scene().removeItem(self)

    def setLineWidth(self, width):
        self._pen.setWidth(width)

    def setLineColor(self, color):
        self._pen.setColor(color)

    def setFillColor(self, fillColor):
        self._brush.setColor(fillColor)
        self._brush.setStyle(Qt.SolidPattern)

    def setBuffer(self, buff):
        self._buffer = buff

    def setMinWidth(self, width):
        self._minWidth = width

    def layer(self):
        return self._layer

    def updatePosition(self):
        pass

    # protected:
    def paint(self, painter, option=None, widget=None):  # Override
        if not self._feature:
            return

        mapSettings = self._mapCanvas.mapSettings()
        context = QgsRenderContext.fromMapSettings(mapSettings)
        renderer = self._getRenderer(context, self._pen.color(),
                                     self._brush.color())

        if renderer:
            context.setPainter(painter)
            renderer.startRender(context, self._layer.fields())
            renderer.renderFeature(self._feature, context)
            renderer.stopRender(context)

    def updateRect(self):
        if self._feature and self._feature.constGeometry():
            m2p = self._mapCanvas.mapSettings().mapToPixel()
            topLeft = m2p.toMapPoint(0, 0)
            res = m2p.mapUnitsPerPixel()
            imageSize = self._mapCanvas.mapSettings().outputSize()
            rect = QgsRectangle(topLeft.x(), topLeft.y(),
                                topLeft.x() + imageSize.width() * res,
                                topLeft.y() - imageSize.height() * res)
            self.setRect(rect)
            self.setVisible(True)
        else:
            self.setRect(QgsRectangle())

    # private:
    def _setSymbol(self, symbol, context, color, fillColor):
        if not symbol:
            return

        for symbolLayer in reversed(symbol.symbolLayers()):
            if symbolLayer:
                if symbolLayer.subSymbol():
                    self._setSymbol(symbolLayer.subSymbol(), context, color,
                                    fillColor)
                else:
                    symbolLayer.setColor(color)
                    symbolLayer.setOutlineColor(color)
                    symbolLayer.setFillColor(fillColor)
                    if isinstance(symbolLayer, QgsSimpleMarkerSymbolLayerV2):
                        symbolLayer.setOutlineWidth(
                            self._getSymbolWidth(
                                context, symbolLayer.outlineWidth(),
                                symbolLayer.outlineWidthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Line:
                        symbolLayer.setWidth(
                            self._getSymbolWidth(context, symbolLayer.width(),
                                                 symbolLayer.widthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Fill:
                        symbolLayer.setBorderWidth(
                            self._getSymbolWidth(context,
                                                 symbolLayer.borderWidth(),
                                                 symbolLayer.outputUnit()))
                    symbolLayer.removeDataDefinedProperty('color')
                    symbolLayer.removeDataDefinedProperty('color_border')

    def _getSymbolWidth(self, context, width, unit):
        scale = 1.0
        if unit == QgsSymbolV2.MapUnit:
            scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor(
                context,
                QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor(
                    context, QgsSymbolV2.MapUnit)
        width = max(width + 2 * self._buffer * scale, self._minWidth * scale)
        return width

    def _getRenderer(self, context, color, fillColor):
        renderer = None
        if self._layer and self._layer.rendererV2():
            renderer = self._layer.rendererV2().clone()
        if renderer:
            for symbol in renderer.symbols2(context):
                self._setSymbol(symbol, context, color, fillColor)
        return renderer
예제 #8
0
class Theme(object):
    # enum PortType
    THEME_PORT_SQUARE = 0
    THEME_PORT_POLYGON = 1

    # enum List
    THEME_MODERN_DARK = 0
    THEME_MODERN_DARK_TINY = 1
    THEME_MODERN_DARK_TEXT = 2
    THEME_MODERN_LIGHT = 3
    THEME_CLASSIC_DARK = 4
    THEME_PROTOCLASSIC_DARK = 5
    THEME_NEOCLASSIC_DARK = 6
    THEME_OOSTUDIO = 7
    THEME_MAX = 8

    # enum BackgroundType
    THEME_BG_SOLID = 0
    THEME_BG_GRADIENT = 1

    def __init__(self, idx):
        object.__init__(self)

        self.idx = idx

        # Default theme settings

        # Canvas
        self.canvas_bg = QColor(0, 0, 0)

        # Boxes
        self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 1,
                            Qt.SolidLine)
        self.box_pen_sel = QPen(QColor(143, 143, 143), 1, Qt.CustomDashLine,
                                Qt.RoundCap)
        self.box_pen_sel.setDashPattern([3, 4])
        self.box_bg_1 = QColor(30, 34, 36)
        self.box_bg_2 = QColor(30, 34, 36)
        self.box_shadow = QColor(89, 89, 89, 180)
        self.box_hover = QColor(255, 255, 255, 60)
        self.box_header_pixmap = None
        self.box_header_height = 19
        self.box_header_spacing = 0
        self.box_rounding = 0.0
        self.box_bottom_space = 3

        self.box_text = QPen(QColor(255, 255, 255), 0)
        self.box_text_sel = self.box_text
        self.box_font_name = "Sans"
        self.box_font_size = 9
        self.box_font_state = QFont.Normal

        self.box_bg_type = self.THEME_BG_GRADIENT
        self.box_use_icon = False

        # Ports
        self.port_text = QPen(QColor(250, 250, 250, 150), 0)
        self.port_hover = QColor(255, 255, 255, 150)
        self.port_bg_pixmap = None
        self.port_font_name = "Sans"
        self.port_font_size = 8
        self.port_font_state = QFont.Normal
        self.port_mode = self.THEME_PORT_SQUARE

        self.port_audio_jack_bg = hsvAdjusted(QColor(41, 61, 99),
                                              saturation=120)
        self.port_audio_jack_bg_sel = QColor(255, 0, 0)
        self.port_midi_jack_bg = hsvAdjusted(QColor(120, 15, 16),
                                             saturation=150)
        self.port_midi_jack_bg_sel = QColor(255, 0, 0)
        self.port_midi_a2j_bg = hsvAdjusted(QColor(101, 47, 17),
                                            saturation=150)
        self.port_midi_a2j_bg_sel = QColor(255, 0, 0)
        self.port_midi_alsa_bg = hsvAdjusted(QColor(63, 112, 19),
                                             saturation=120)
        self.port_midi_alsa_bg_sel = QColor(255, 0, 0)

        port_pen = QPen(QColor(255, 255, 255, 50), 1)
        self.port_audio_jack_pen_sel = self.port_audio_jack_pen = QPen(
            hsvAdjustedRel(self.port_audio_jack_bg.lighter(180),
                           saturation=-60), 1)
        self.port_midi_jack_pen_sel = self.port_midi_jack_pen = QPen(
            hsvAdjustedRel(self.port_midi_jack_bg.lighter(180),
                           saturation=-60), 1)
        self.port_midi_a2j_pen_sel = self.port_midi_a2j_pen = QPen(
            hsvAdjustedRel(self.port_midi_a2j_bg.lighter(180), saturation=-60),
            1)
        self.port_midi_alsa_pen_sel = self.port_midi_alsa_pen = QPen(
            hsvAdjustedRel(self.port_midi_alsa_bg.lighter(180),
                           saturation=-60), 1)

        self.port_audio_jack_text = self.port_audio_jack_pen_sel
        self.port_audio_jack_text_sel = self.port_audio_jack_pen_sel
        self.port_midi_jack_text = self.port_midi_jack_pen_sel
        self.port_midi_jack_text_sel = self.port_midi_jack_pen_sel
        self.port_midi_a2j_text = self.port_midi_a2j_pen_sel
        self.port_midi_a2j_text_sel = self.port_midi_a2j_pen_sel
        self.port_midi_alsa_text = self.port_midi_alsa_pen_sel
        self.port_midi_alsa_text_sel = self.port_midi_alsa_pen_sel

        self.port_text_padding = 0
        self.port_offset = 0
        self.port_spacing = 1
        self.port_spacingT = 0
        self.port_rounding = 0.0
        self.port_inglow_alpha = 0
        self.port_inglow_size = 0
        self.port_side_min_space = 3

        # Lines
        self.line_audio_jack = QColor(53, 78, 116)
        self.line_audio_jack_sel = QColor(255, 0, 0)
        self.line_audio_jack_glow = QColor(255, 0, 0)
        self.line_midi_jack = QColor(139, 32, 32)
        self.line_midi_jack_sel = QColor(255, 0, 0)
        self.line_midi_jack_glow = QColor(255, 0, 0)
        self.line_midi_a2j = QColor(120, 65, 33)
        self.line_midi_a2j_sel = QColor(255, 0, 0)
        self.line_midi_a2j_glow = QColor(255, 0, 0)
        self.line_midi_alsa = QColor(81, 130, 36)
        self.line_midi_alsa_sel = QColor(255, 0, 0)
        self.line_midi_alsa_glow = QColor(255, 0, 0)

        self.rubberband_pen = QPen(QColor(147, 151, 143), 1, Qt.SolidLine)
        self.rubberband_brush = QColor(35, 61, 99, 100)

        if idx == self.THEME_MODERN_DARK:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine)
            self.box_bg_1 = QColor(32, 34, 35)
            self.box_bg_2 = QColor(43, 47, 48)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = None
            self.box_header_height = 24
            self.box_header_spacing = 0
            self.box_rounding = 3.0
            self.box_bottom_space = 3

            self.box_text = QPen(QColor(240, 240, 240), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Deja Vu Sans"
            self.box_font_size = 8
            self.box_font_state = QFont.Bold

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = True

            # Ports
            self.port_text = QPen(QColor(250, 250, 250, 180), 0)
            self.port_hover = QColor(255, 255, 255, 80)
            self.port_bg_pixmap = None
            self.port_font_name = "Deja Vu Sans"
            self.port_font_size = 8
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_POLYGON

            self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1)
            self.port_audio_jack_pen_sel = QPen(
                QColor(63 + 30, 90 + 30, 126 + 30), 1)
            self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1)
            self.port_midi_jack_pen_sel = QPen(
                QColor(159 + 30, 44 + 30, 42 + 30), 1)
            self.port_midi_a2j_pen = QPen(QColor(137, 76, 43), 1)
            self.port_midi_a2j_pen_sel = QPen(
                QColor(137 + 30, 76 + 30, 43 + 30), 1)
            self.port_midi_alsa_pen = QPen(QColor(93, 141, 46), 1)
            self.port_midi_alsa_pen_sel = QPen(
                QColor(93 + 30, 141 + 30, 46 + 30), 1)

            self.port_audio_jack_bg = QColor(35, 61, 99)
            self.port_audio_jack_bg_sel = QColor(35 + 50, 61 + 50, 99 + 50)
            self.port_midi_jack_bg = QColor(120, 15, 16)
            self.port_midi_jack_bg_sel = QColor(120 + 50, 15 + 50, 16 + 50)
            self.port_midi_a2j_bg = QColor(101, 47, 16)
            self.port_midi_a2j_bg_sel = QColor(101 + 50, 47 + 50, 16 + 50)
            self.port_midi_alsa_bg = QColor(64, 112, 18)
            self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50)

            self.port_audio_jack_text = self.port_text
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 1
            self.port_offset = 0
            self.port_spacing = 3
            self.port_spacingT = 2
            self.port_rounding = 0.0

            # To not scale some line widths
            self.box_pen.setCosmetic(True)
            self.box_pen_sel.setCosmetic(True)
            self.port_audio_jack_pen.setCosmetic(True)
            self.port_audio_jack_pen_sel.setCosmetic(True)
            self.port_midi_jack_pen.setCosmetic(True)
            self.port_midi_jack_pen_sel.setCosmetic(True)
            self.port_midi_a2j_pen.setCosmetic(True)
            self.port_midi_a2j_pen_sel.setCosmetic(True)
            self.port_midi_alsa_pen.setCosmetic(True)
            self.port_midi_alsa_pen_sel.setCosmetic(True)

            # Lines
            self.line_audio_jack = QColor(63, 90, 126)
            self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90)
            self.line_audio_jack_glow = QColor(100, 100, 200)
            self.line_midi_jack = QColor(159, 44, 42)
            self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90)
            self.line_midi_jack_glow = QColor(200, 100, 100)
            self.line_midi_a2j = QColor(137, 76, 43)
            self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
            self.line_midi_a2j_glow = QColor(166, 133, 133)
            self.line_midi_alsa = QColor(93, 141, 46)
            self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90)
            self.line_midi_alsa_glow = QColor(100, 200, 100)

            self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine)
            self.rubberband_brush = QColor(76, 77, 78, 100)

        elif idx == self.THEME_MODERN_DARK_TINY:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine)
            self.box_bg_1 = QColor(32, 34, 35)
            self.box_bg_2 = QColor(43, 47, 48)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = None
            self.box_header_height = 14
            self.box_header_spacing = 0
            self.box_rounding = 2.0
            self.box_bottom_space = 2

            self.box_text = QPen(QColor(240, 240, 240), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Deja Vu Sans"
            self.box_font_size = 7
            self.box_font_state = QFont.Bold

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = False

            # Ports
            self.port_text = QPen(QColor(250, 250, 250, 220), 0)
            self.port_hover = QColor(255, 255, 255, 80)
            self.port_bg_pixmap = None
            self.port_font_name = "Deja Vu Sans"
            self.port_font_size = 6
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_POLYGON

            self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1)
            self.port_audio_jack_pen_sel = QPen(
                QColor(63 + 30, 90 + 30, 126 + 30), 1)
            self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1)
            self.port_midi_jack_pen_sel = QPen(
                QColor(159 + 30, 44 + 30, 42 + 30), 1)
            self.port_midi_a2j_pen = QPen(QColor(137, 76, 43), 1)
            self.port_midi_a2j_pen_sel = QPen(
                QColor(137 + 30, 76 + 30, 43 + 30), 1)
            self.port_midi_alsa_pen = QPen(QColor(93, 141, 46), 1)
            self.port_midi_alsa_pen_sel = QPen(
                QColor(93 + 30, 141 + 30, 46 + 30), 1)

            self.port_audio_jack_bg = QColor(35, 61, 99)
            self.port_audio_jack_bg_sel = QColor(35 + 50, 61 + 50, 99 + 50)
            self.port_midi_jack_bg = QColor(120, 15, 16)
            self.port_midi_jack_bg_sel = QColor(120 + 50, 15 + 50, 16 + 50)
            self.port_midi_a2j_bg = QColor(101, 47, 16)
            self.port_midi_a2j_bg_sel = QColor(101 + 50, 47 + 50, 16 + 50)
            self.port_midi_alsa_bg = QColor(64, 112, 18)
            self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50)

            self.port_audio_jack_text = self.port_text
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 1
            self.port_offset = 0
            self.port_spacing = -1
            self.port_spacingT = 2
            self.port_rounding = 0.0

            # To not scale some line widths
            self.box_pen.setCosmetic(True)
            self.box_pen_sel.setCosmetic(True)
            self.port_audio_jack_pen.setCosmetic(True)
            self.port_audio_jack_pen_sel.setCosmetic(True)
            self.port_midi_jack_pen.setCosmetic(True)
            self.port_midi_jack_pen_sel.setCosmetic(True)
            self.port_midi_a2j_pen.setCosmetic(True)
            self.port_midi_a2j_pen_sel.setCosmetic(True)
            self.port_midi_alsa_pen.setCosmetic(True)
            self.port_midi_alsa_pen_sel.setCosmetic(True)

            # Lines
            self.line_audio_jack = QColor(63, 90, 126)
            self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90)
            self.line_audio_jack_glow = QColor(100, 100, 200)
            self.line_midi_jack = QColor(159, 44, 42)
            self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90)
            self.line_midi_jack_glow = QColor(200, 100, 100)
            self.line_midi_a2j = QColor(137, 76, 43)
            self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
            self.line_midi_a2j_glow = QColor(166, 133, 133)
            self.line_midi_alsa = QColor(93, 141, 46)
            self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90)
            self.line_midi_alsa_glow = QColor(100, 200, 100)

            self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine)
            self.rubberband_brush = QColor(76, 77, 78, 100)

        if idx == self.THEME_MODERN_DARK_TEXT:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine)
            self.box_bg_1 = QColor(15, 15, 15)
            self.box_bg_2 = self.box_bg_1
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = None
            self.box_header_height = 14
            self.box_header_spacing = 0
            self.box_rounding = 3.0
            self.box_bottom_space = 3

            self.box_text = QPen(QColor(240, 240, 240), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Deja Vu Sans"
            self.box_font_size = 7
            self.box_font_state = QFont.Bold

            self.box_bg_type = self.THEME_BG_SOLID
            self.box_use_icon = False

            # Ports
            self.port_text = QPen(QColor(250, 250, 250, 180), 1)
            self.port_hover = QColor(255, 255, 255, 40)
            self.port_bg_pixmap = None
            self.port_font_name = "Deja Vu Sans"
            self.port_font_size = 6
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_SQUARE

            self.port_audio_jack_pen = Qt.NoPen
            self.port_audio_jack_pen_sel = Qt.NoPen
            self.port_midi_jack_pen = Qt.NoPen
            self.port_midi_jack_pen_sel = Qt.NoPen
            self.port_midi_a2j_pen = Qt.NoPen
            self.port_midi_a2j_pen_sel = Qt.NoPen
            self.port_midi_alsa_pen = Qt.NoPen
            self.port_midi_alsa_pen_sel = Qt.NoPen

            self.port_audio_jack_bg = QColor(0, 0, 0, 0)
            self.port_midi_jack_bg = QColor(0, 0, 0, 0)
            self.port_midi_a2j_bg = QColor(0, 0, 0, 0)
            self.port_midi_alsa_bg = QColor(0, 0, 0, 0)
            self.port_audio_jack_bg_sel = QColor(60, 71, 99)
            self.port_midi_jack_bg_sel = QColor(120, 70, 70)
            self.port_midi_a2j_bg_sel = QColor(120, 80, 60)
            self.port_midi_alsa_bg_sel = QColor(64, 112, 48)

            self.port_audio_jack_text = QPen(
                hsvAdjusted(QColor(63, 90, 126), value=255), 1)
            self.port_midi_jack_text = QPen(
                hsvAdjusted(QColor(159, 44, 42), value=255), 1)
            self.port_midi_a2j_text = QPen(
                hsvAdjusted(QColor(137, 76, 43), value=255), 1)
            self.port_midi_alsa_text = QPen(
                hsvAdjusted(QColor(93, 141, 46), value=255), 1)
            self.port_audio_jack_text_sel = QPen(
                self.port_audio_jack_text.color().lighter(130), 1)
            self.port_midi_jack_text_sel = QPen(
                self.port_midi_jack_text.color().lighter(150), 1)
            self.port_midi_a2j_text_sel = QPen(
                self.port_midi_a2j_text.color().lighter(150), 1)
            self.port_midi_alsa_text_sel = QPen(
                self.port_midi_alsa_text.color().lighter(150), 1)

            self.port_text_padding = 0
            self.port_offset = 0
            self.port_spacing = 0
            self.port_spacingT = 2
            self.port_rounding = 6.0

            # Lines
            self.line_audio_jack = QColor(63, 90, 126)
            self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90)
            self.line_audio_jack_glow = QColor(100, 100, 200)
            self.line_midi_jack = QColor(159, 44, 42)
            self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90)
            self.line_midi_jack_glow = QColor(200, 100, 100)
            self.line_midi_a2j = QColor(137, 76, 43)
            self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
            self.line_midi_a2j_glow = QColor(166, 133, 133)
            self.line_midi_alsa = QColor(93, 141, 46)
            self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90)
            self.line_midi_alsa_glow = QColor(100, 200, 100)

            self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine)
            self.rubberband_brush = QColor(76, 77, 78, 100)

        elif idx == self.THEME_MODERN_LIGHT:
            # Canvas
            self.canvas_bg = QColor(248, 249, 250)

            # Boxes
            self.box_pen = QPen(QColor(0, 0, 0, 60), 1, Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(1, 2, 3), 2, Qt.DashLine)
            self.box_bg_1 = QColor(220, 220, 220)
            self.box_bg_2 = self.box_bg_1.darker(120)
            self.box_shadow = QColor(1, 1, 1, 100)
            self.box_hover = QColor(0, 0, 0, 60)
            self.box_header_pixmap = None
            self.box_header_height = 24
            self.box_header_spacing = 0
            self.box_rounding = 3.0
            self.box_bottom_space = 3

            self.box_text = QPen(QColor(1, 1, 1), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Ubuntu"
            self.box_font_size = 10
            self.box_font_state = QFont.Bold

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = True

            # Ports
            self.port_text = QPen(QColor(255, 255, 255, 220), 1)
            self.port_hover = QColor(0, 0, 0, 255)
            self.port_bg_pixmap = None
            self.port_font_name = "Ubuntu"
            self.port_font_size = 9
            self.port_font_state = QFont.Bold
            self.port_mode = self.THEME_PORT_POLYGON

            # Port colors
            port_audio_jack_color = QColor.fromHsv(240, 214, 181)
            port_midi_jack_color = QColor.fromHsv(0, 214, 130)
            port_midi_a2j_color = QColor.fromHsv(22, 214, 102)
            port_midi_alsa_color = QColor.fromHsv(91, 214, 112)

            port_lineW = 1
            port_pen_shade = 130
            self.port_audio_jack_pen = QPen(
                port_audio_jack_color.darker(port_pen_shade), port_lineW)
            self.port_midi_jack_pen = QPen(
                port_midi_jack_color.darker(port_pen_shade), port_lineW)
            self.port_midi_a2j_pen = QPen(
                port_midi_a2j_color.darker(port_pen_shade), port_lineW)
            self.port_midi_alsa_pen = QPen(
                port_midi_alsa_color.darker(port_pen_shade), port_lineW)
            port_selW = 1.5
            self.port_audio_jack_pen_sel = QPen(
                port_audio_jack_color.lighter(port_pen_shade), port_selW)
            self.port_midi_jack_pen_sel = QPen(
                port_midi_jack_color.lighter(port_pen_shade), port_selW)
            self.port_midi_a2j_pen_sel = QPen(
                port_midi_a2j_color.lighter(port_pen_shade), port_selW)
            self.port_midi_alsa_pen_sel = QPen(
                port_midi_alsa_color.lighter(port_pen_shade), port_selW)

            port_bg_shade = 170
            self.port_audio_jack_bg = port_audio_jack_color
            self.port_midi_jack_bg = port_midi_jack_color
            self.port_midi_a2j_bg = port_midi_a2j_color
            self.port_midi_alsa_bg = port_midi_alsa_color
            self.port_audio_jack_bg_sel = hsvAdjustedRel(
                self.port_audio_jack_bg, saturation=-80).lighter(130)
            self.port_midi_jack_bg_sel = hsvAdjustedRel(
                self.port_midi_jack_bg, saturation=-80).lighter(130)
            self.port_midi_a2j_bg_sel = hsvAdjustedRel(
                self.port_midi_a2j_bg, saturation=-80).lighter(130)
            self.port_midi_alsa_bg_sel = hsvAdjustedRel(
                self.port_midi_alsa_bg, saturation=-80).lighter(130)

            self.port_audio_jack_text = QPen(
                hsvAdjustedRel(port_audio_jack_color,
                               hue=-30,
                               saturation=-70,
                               value=70), 1)
            self.port_midi_jack_text = QPen(
                hsvAdjustedRel(port_midi_jack_color,
                               hue=10,
                               saturation=-70,
                               value=70), 1)
            self.port_midi_a2j_text = QPen(
                hsvAdjustedRel(port_midi_a2j_color,
                               hue=8,
                               saturation=-70,
                               value=70), 1)
            self.port_midi_alsa_text = QPen(
                hsvAdjustedRel(port_midi_alsa_color,
                               hue=-8,
                               saturation=-70,
                               value=70), 1)
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 0.5
            self.port_offset = 0
            self.port_spacing = 2
            self.port_spacingT = 1
            self.port_rounding = 0.0

            # To not scale some line widths
            self.box_pen.setCosmetic(True)
            self.box_pen_sel.setCosmetic(True)
            self.port_audio_jack_pen.setCosmetic(True)
            self.port_audio_jack_pen_sel.setCosmetic(True)
            self.port_midi_jack_pen.setCosmetic(True)
            self.port_midi_jack_pen_sel.setCosmetic(True)
            self.port_midi_a2j_pen.setCosmetic(True)
            self.port_midi_a2j_pen_sel.setCosmetic(True)
            self.port_midi_alsa_pen.setCosmetic(True)
            self.port_midi_alsa_pen_sel.setCosmetic(True)

            # Lines
            self.line_audio_jack = QColor(63, 90, 126)
            self.line_audio_jack_sel = QColor(63 + 63, 90 + 90, 126 + 90)
            self.line_audio_jack_glow = QColor(100, 100, 200)
            self.line_midi_jack = QColor(159, 44, 42)
            self.line_midi_jack_sel = QColor(159 + 44, 44 + 90, 42 + 90)
            self.line_midi_jack_glow = QColor(200, 100, 100)
            self.line_midi_a2j = QColor(137, 43, 43)
            self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
            self.line_midi_a2j_glow = QColor(166, 133, 133)
            self.line_midi_alsa = QColor(93, 141, 46)
            self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90)
            self.line_midi_alsa_glow = QColor(100, 200, 100)

            self.rubberband_pen = QPen(QColor(76, 77, 78, 130), 1,
                                       Qt.SolidLine)
            self.rubberband_brush = QColor(76, 77, 78, 100)

        elif idx == self.THEME_CLASSIC_DARK:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 2,
                                Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(143, 143, 143), 2,
                                    Qt.CustomDashLine, Qt.RoundCap)
            self.box_pen_sel.setDashPattern([1.5, 3])
            self.box_bg_1 = QColor(30, 34, 36)
            self.box_bg_2 = QColor(30, 34, 36)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = None
            self.box_header_height = 19
            self.box_header_spacing = 0
            self.box_rounding = 0
            self.box_bottom_space = 3

            self.box_text = QPen(QColor(255, 255, 255), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Sans"
            self.box_font_size = 9
            self.box_font_state = QFont.Normal

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = False

            # Ports
            self.port_text = QPen(QColor(250, 250, 250), 0)
            self.port_hover = QColor(255, 255, 255, 80)
            self.port_bg_pixmap = None
            self.port_font_name = "Sans"
            self.port_font_size = 8
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_SQUARE

            port_pen = Qt.NoPen
            self.port_audio_jack_pen = port_pen
            self.port_midi_jack_pen = port_pen
            self.port_midi_a2j_pen = port_pen
            self.port_midi_alsa_pen = port_pen
            self.port_audio_jack_pen_sel = port_pen
            self.port_midi_jack_pen_sel = port_pen
            self.port_midi_a2j_pen_sel = port_pen
            self.port_midi_alsa_pen_sel = port_pen

            self.port_audio_jack_bg = QColor(35, 61, 99)
            self.port_midi_jack_bg = QColor(120, 15, 16)
            self.port_midi_a2j_bg = QColor(101, 47, 17)
            self.port_midi_alsa_bg = QColor(63, 112, 19)
            self.port_audio_jack_bg_sel = hsvAdjustedRel(
                self.port_audio_jack_bg.lighter(150), saturation=-60)
            self.port_midi_jack_bg_sel = hsvAdjustedRel(
                self.port_midi_jack_bg.lighter(150), saturation=-60)
            self.port_midi_a2j_bg_sel = hsvAdjustedRel(
                self.port_midi_a2j_bg.lighter(150), saturation=-60)
            self.port_midi_alsa_bg_sel = hsvAdjustedRel(
                self.port_midi_alsa_bg.lighter(150), saturation=-60)

            self.port_audio_jack_text = self.port_text
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 0
            self.port_offset = 0
            self.port_spacing = 1
            self.port_spacingT = 0
            self.port_rounding = 0

            # Lines
            self.line_audio_jack = QColor(53, 78, 116)
            self.line_audio_jack_sel = self.line_audio_jack.lighter(200)
            self.line_audio_jack_glow = self.line_audio_jack.lighter(180)
            self.line_midi_jack = QColor(139, 32, 32)
            self.line_midi_jack_sel = self.line_midi_jack.lighter(200)
            self.line_midi_jack_glow = self.line_midi_jack.lighter(180)
            self.line_midi_a2j = QColor(120, 65, 33)
            self.line_midi_a2j_sel = self.line_midi_a2j.lighter(200)
            self.line_midi_a2j_glow = self.line_midi_a2j.lighter(180)
            self.line_midi_alsa = QColor(81, 130, 36)
            self.line_midi_alsa_sel = self.line_midi_alsa.lighter(200)
            self.line_midi_alsa_glow = self.line_midi_alsa.lighter(180)

            self.rubberband_pen = QPen(QColor.fromHsv(191, 100, 120, 170), 2,
                                       Qt.SolidLine)
            self.rubberband_brush = QColor.fromHsv(191, 100, 99, 100)

        elif idx == self.THEME_PROTOCLASSIC_DARK:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_bg_1 = QColor(30, 41, 58)
            self.box_bg_2 = QColor(30, 41, 58)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = hsvAdjusted(self.box_bg_1,
                                         value=255,
                                         saturation=80)
            self.box_pen = QPen(
                hsvAdjusted(self.box_bg_1, value=180, saturation=60), 1,
                Qt.SolidLine)
            self.box_pen_sel = QPen(self.box_pen)
            self.box_pen_sel.setDashPattern([3, 4])
            self.box_header_pixmap = None
            self.box_header_height = 19
            self.box_header_spacing = 0
            self.box_rounding = 0.0
            self.box_bottom_space = 2

            self.box_text = QPen(
                hsvAdjusted(self.box_bg_1, value=255, saturation=60), 1,
                Qt.SolidLine)
            self.box_text_sel = QPen(
                hsvAdjusted(self.box_bg_1, value=255, saturation=30), 1)
            self.box_font_name = "Dejavu Sans"
            self.box_font_size = 8
            self.box_font_state = QFont.Normal

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = False

            # Ports
            self.port_text = QPen(QColor(255, 255, 255), 1)
            self.port_hover = QColor(255, 255, 255, 150)
            self.port_bg_pixmap = None
            self.port_font_name = "Dejavu Sans"
            self.port_font_size = 6
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_SQUARE

            self.port_audio_jack_bg = QColor(63, 88, 133)
            self.port_midi_jack_bg = hsvAdjusted(QColor(120, 15, 16),
                                                 saturation=150)
            self.port_midi_a2j_bg = hsvAdjusted(QColor(101, 47, 17),
                                                saturation=150)
            self.port_midi_alsa_bg = hsvAdjusted(QColor(44, 141, 92),
                                                 saturation=150,
                                                 value=120)
            self.port_audio_jack_bg_sel = hsvAdjusted(
                self.port_audio_jack_bg.lighter(140), saturation=80)
            self.port_midi_jack_bg_sel = hsvAdjusted(
                self.port_midi_jack_bg.lighter(140), saturation=80)
            self.port_midi_a2j_bg_sel = hsvAdjusted(
                self.port_midi_a2j_bg.lighter(140), saturation=80)
            self.port_midi_alsa_bg_sel = hsvAdjusted(
                self.port_midi_alsa_bg.lighter(140), saturation=80)

            port_pen = QPen(QColor(255, 255, 255, 50), 1)
            self.port_audio_jack_pen_sel = self.port_audio_jack_pen = QPen(
                hsvAdjusted(self.port_audio_jack_bg.lighter(140),
                            saturation=80), 1)
            self.port_midi_jack_pen_sel = self.port_midi_jack_pen = QPen(
                hsvAdjusted(self.port_midi_jack_bg.lighter(140),
                            saturation=80), 1)
            self.port_midi_a2j_pen_sel = self.port_midi_a2j_pen = QPen(
                hsvAdjusted(self.port_midi_a2j_bg.lighter(140), saturation=80),
                1)
            self.port_midi_alsa_pen_sel = self.port_midi_alsa_pen = QPen(
                hsvAdjusted(self.port_midi_alsa_bg.lighter(140),
                            saturation=80), 1)

            self.port_audio_jack_text = QPen(
                hsvAdjusted(self.port_audio_jack_bg, saturation=40, value=255),
                1)
            self.port_midi_jack_text = QPen(
                hsvAdjusted(self.port_midi_jack_bg, saturation=40, value=255),
                1)
            self.port_midi_a2j_text = QPen(
                hsvAdjusted(self.port_midi_a2j_bg, saturation=40, value=255),
                1)
            self.port_midi_alsa_text = QPen(
                hsvAdjusted(self.port_midi_alsa_bg, saturation=40, value=255),
                1)
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 1.5
            self.port_offset = 0
            self.port_spacing = 1
            self.port_spacingT = 0
            self.port_rounding = 0.0
            self.port_inglow_alpha = 0
            self.port_inglow_size = 0

            # Lines
            self.line_audio_jack = self.port_audio_jack_bg
            self.line_audio_jack_sel = self.port_audio_jack_bg_sel
            self.line_audio_jack_glow = self.port_audio_jack_bg_sel
            self.line_midi_jack = self.port_midi_jack_bg
            self.line_midi_jack_sel = self.port_midi_jack_bg_sel
            self.line_midi_jack_glow = self.port_midi_jack_bg_sel
            self.line_midi_a2j = self.port_midi_a2j_bg
            self.line_midi_a2j_sel = self.port_midi_a2j_bg_sel
            self.line_midi_a2j_glow = self.port_midi_a2j_bg_sel
            self.line_midi_alsa = self.port_midi_alsa_bg
            self.line_midi_alsa_sel = self.port_midi_alsa_bg_sel
            self.line_midi_alsa_glow = self.port_midi_alsa_bg_sel

            self.rubberband_pen = QPen(self.box_pen)
            self.rubberband_pen.setDashPattern([3, 4])
            self.rubberband_brush = QColor(0, 0, 0, 0)

        elif idx == self.THEME_NEOCLASSIC_DARK:
            # Canvas
            self.canvas_bg = QColor(0, 0, 0)

            # Boxes
            self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 2,
                                Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(143, 143, 143), 2,
                                    Qt.CustomDashLine, Qt.RoundCap)
            self.box_pen_sel.setDashPattern([1.5, 3])
            self.box_bg_1 = QColor(30, 34, 36)
            self.box_bg_2 = QColor(30, 34, 36)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = None
            self.box_header_height = 19
            self.box_header_spacing = 0
            self.box_rounding = 4.0
            self.box_bottom_space = 6

            self.box_text = QPen(QColor(255, 255, 255), 0)
            self.box_text_sel = self.box_text
            self.box_font_name = "Sans"
            self.box_font_size = 8
            self.box_font_state = QFont.Normal

            self.box_bg_type = self.THEME_BG_GRADIENT
            self.box_use_icon = False

            # Ports
            self.port_text = QPen(QColor(250, 250, 250), 0)
            self.port_hover = QColor(255, 255, 255, 80)
            self.port_bg_pixmap = None
            self.port_font_name = "Sans"
            self.port_font_size = 8
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_SQUARE

            port_dash = [4, 3]
            self.port_audio_jack_pen = QPen(QColor(55, 91, 149), 1)
            self.port_midi_jack_pen = QPen(QColor(150, 25, 26), 1)
            self.port_midi_a2j_pen = QPen(QColor(141, 67, 27), 1)
            self.port_midi_alsa_pen = QPen(QColor(83, 152, 29), 1)
            self.port_audio_jack_pen_sel = QPen(
                hsvAdjustedRel(QColor(55, 91, 149), saturation=-80, value=80),
                1)
            self.port_midi_jack_pen_sel = QPen(
                hsvAdjustedRel(QColor(150, 25, 26), saturation=-80, value=80),
                1)
            self.port_midi_a2j_pen_sel = QPen(
                hsvAdjustedRel(QColor(141, 67, 27), saturation=-80, value=80),
                1)
            self.port_midi_alsa_pen_sel = QPen(
                hsvAdjustedRel(QColor(83, 152, 29), saturation=-80, value=80),
                1)
            self.port_audio_jack_pen_sel.setDashPattern(port_dash)
            self.port_midi_jack_pen_sel.setDashPattern(port_dash)
            self.port_midi_a2j_pen_sel.setDashPattern(port_dash)
            self.port_midi_alsa_pen_sel.setDashPattern(port_dash)

            self.port_audio_jack_bg = QColor(35, 61, 99)
            self.port_midi_jack_bg = QColor(120, 15, 16)
            self.port_midi_a2j_bg = QColor(101, 47, 17)
            self.port_midi_alsa_bg = QColor(63, 112, 19)
            self.port_audio_jack_bg_sel = self.port_audio_jack_bg.darker(130)
            self.port_midi_jack_bg_sel = self.port_midi_jack_bg.darker(130)
            self.port_midi_a2j_bg_sel = self.port_midi_a2j_bg.darker(130)
            self.port_midi_alsa_bg_sel = self.port_midi_alsa_bg.darker(130)

            self.port_audio_jack_text = self.port_text
            self.port_audio_jack_text_sel = self.port_text
            self.port_midi_jack_text = self.port_text
            self.port_midi_jack_text_sel = self.port_text
            self.port_midi_a2j_text = self.port_text
            self.port_midi_a2j_text_sel = self.port_text
            self.port_midi_alsa_text = self.port_text
            self.port_midi_alsa_text_sel = self.port_text

            self.port_text_padding = 1
            self.port_offset = 0
            self.port_spacing = 1
            self.port_spacingT = 0
            self.port_rounding = 4.0

            # Lines
            self.line_audio_jack = QColor(53, 78, 116)
            self.line_audio_jack_sel = self.line_audio_jack.lighter(200)
            self.line_audio_jack_glow = self.line_audio_jack.lighter(180)
            self.line_midi_jack = QColor(139, 32, 32)
            self.line_midi_jack_sel = self.line_midi_jack.lighter(200)
            self.line_midi_jack_glow = self.line_midi_jack.lighter(180)
            self.line_midi_a2j = QColor(120, 65, 33)
            self.line_midi_a2j_sel = self.line_midi_a2j.lighter(200)
            self.line_midi_a2j_glow = self.line_midi_a2j.lighter(180)
            self.line_midi_alsa = QColor(81, 130, 36)
            self.line_midi_alsa_sel = self.line_midi_alsa.lighter(200)
            self.line_midi_alsa_glow = self.line_midi_alsa.lighter(180)

            self.rubberband_pen = QPen(QColor.fromHsv(191, 100, 120, 170), 2,
                                       Qt.SolidLine)
            self.rubberband_brush = QColor.fromHsv(191, 100, 99, 100)

        elif idx == self.THEME_OOSTUDIO:
            # Canvas
            self.canvas_bg = QColor(11, 11, 11)

            # Boxes
            self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
            self.box_pen_sel = QPen(QColor(189, 122, 214), 1, Qt.DashLine)
            self.box_bg_1 = QColor(46, 46, 46)
            self.box_bg_2 = QColor(23, 23, 23)
            self.box_shadow = QColor(89, 89, 89, 180)
            self.box_hover = QColor(255, 255, 255, 60)
            self.box_header_pixmap = QPixmap(
                ":/bitmaps/canvas/frame_node_header.png")
            self.box_header_height = 22
            self.box_header_spacing = 6
            self.box_rounding = 3.0
            self.box_bottom_space = 4

            self.box_text = QPen(QColor(144, 144, 144), 0)
            self.box_text_sel = QPen(QColor(189, 122, 214), 0)
            self.box_font_name = "Deja Vu Sans"
            self.box_font_size = 8
            self.box_font_state = QFont.Bold

            self.box_bg_type = self.THEME_BG_SOLID
            self.box_use_icon = False

            # Ports
            normalPortBG = QColor(46, 46, 46)
            selPortBG = QColor(23, 23, 23)

            self.port_text = QPen(QColor(155, 155, 155), 0)
            self.port_hover = QColor(255, 255, 255, 80)
            self.port_bg_pixmap = QPixmap(":/bitmaps/canvas/frame_port_bg.png")
            self.port_font_name = "Deja Vu Sans"
            self.port_font_size = 8
            self.port_font_state = QFont.Normal
            self.port_mode = self.THEME_PORT_SQUARE

            self.port_audio_jack_pen = QPen(selPortBG, 2)
            self.port_audio_jack_pen_sel = QPen(QColor(1, 230, 238), 1)
            self.port_midi_jack_pen = QPen(selPortBG, 2)
            self.port_midi_jack_pen_sel = QPen(QColor(252, 118, 118), 1)
            self.port_midi_a2j_pen = QPen(selPortBG, 2)
            self.port_midi_a2j_pen_sel = QPen(QColor(137, 76, 43), 1)
            self.port_midi_alsa_pen = QPen(selPortBG, 2)
            self.port_midi_alsa_pen_sel = QPen(QColor(129, 244, 118), 0)

            self.port_audio_jack_bg = normalPortBG
            self.port_audio_jack_bg_sel = selPortBG
            self.port_midi_jack_bg = normalPortBG
            self.port_midi_jack_bg_sel = selPortBG
            self.port_midi_a2j_bg = normalPortBG
            self.port_midi_a2j_bg_sel = selPortBG
            self.port_midi_alsa_bg = normalPortBG
            self.port_midi_alsa_bg_sel = selPortBG

            self.port_audio_jack_text = self.port_text
            self.port_audio_jack_text_sel = self.port_audio_jack_pen_sel
            self.port_midi_jack_text = self.port_text
            self.port_midi_jack_text_sel = self.port_midi_jack_pen_sel
            self.port_midi_a2j_text = self.port_text
            self.port_midi_a2j_text_sel = self.port_midi_a2j_pen_sel
            self.port_midi_alsa_text = self.port_text
            self.port_midi_alsa_text_sel = self.port_midi_alsa_pen_sel

            # missing, ports 2
            self.port_text_padding = 3
            self.port_offset = -1
            self.port_spacing = 3
            self.port_spacingT = 0
            self.port_rounding = 3.0

            # Lines
            self.line_audio_jack = QColor(64, 64, 64)
            self.line_audio_jack_sel = QColor(1, 230, 238)
            self.line_audio_jack_glow = QColor(100, 200, 100)
            self.line_midi_jack = QColor(64, 64, 64)
            self.line_midi_jack_sel = QColor(252, 118, 118)
            self.line_midi_jack_glow = QColor(200, 100, 100)
            self.line_midi_a2j = QColor(64, 64, 64)
            self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
            self.line_midi_a2j_glow = QColor(166, 133, 133)
            self.line_midi_alsa = QColor(64, 64, 64)
            self.line_midi_alsa_sel = QColor(129, 244, 118)
            self.line_midi_alsa_glow = QColor(100, 200, 100)

            self.rubberband_pen = QPen(QColor(1, 230, 238), 2, Qt.SolidLine)
            self.rubberband_brush = QColor(90, 90, 90, 100)

        # Font-dependant port height
        port_font = QFont(self.port_font_name, self.port_font_size,
                          self.port_font_state)
        self.port_height = QFontMetrics(
            port_font).height() + 2 * self.port_text_padding
class FeatureHighlightItem(QgsMapCanvasItem):
    # Code ported from QGIS QgsHighlight

    def __init__(self, mapCanvas, feature, layer):
        super(FeatureHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._brush = QBrush()
        self._pen = QPen()
        self._feature = None  # QgsFeature()
        self._layer = None  # QgsMapLayer()
        self._buffer = 0.0
        self._minWidth = 0.0

        self._mapCanvas = mapCanvas
        if (not layer
                or not feature
                or not isinstance(feature, QgsFeature)
                or not feature.geometry()
                or feature.geometry().isEmpty()
                or not feature.geometry().isGeosValid()):
            return
        self._feature = QgsFeature(feature)  # Force deep copy
        self._layer = layer
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        self._minWidth = Application.highlightMinimumWidth()
        self._buffer = Application.highlightBuffer()
        if self._mapCanvas.mapSettings().hasCrsTransformEnabled():
            ct = self._mapCanvas.mapSettings().layerTransform(self._layer)
            if ct:
                self._feature.geometry().transform(ct)
        self.updateRect()
        self.update()

    def remove(self):
        self._mapCanvas.scene().removeItem(self)

    def setLineWidth(self, width):
        self._pen.setWidth(width)

    def setLineColor(self, color):
        self._pen.setColor(color)

    def setFillColor(self, fillColor):
        self._brush.setColor(fillColor)
        self._brush.setStyle(Qt.SolidPattern)

    def setBuffer(self, buff):
        self._buffer = buff

    def setMinWidth(self, width):
        self._minWidth = width

    def layer(self):
        return self._layer

    def updatePosition(self):
        pass

    # protected:
    def paint(self, painter, option=None, widget=None):  # Override
        if not self._feature:
            return

        mapSettings = self._mapCanvas.mapSettings()
        context = QgsRenderContext.fromMapSettings(mapSettings)
        renderer = self._getRenderer(context, self._pen.color(), self._brush.color())

        if renderer:
            context.setPainter(painter)
            renderer.startRender(context, self._layer.fields())
            renderer.renderFeature(self._feature, context)
            renderer.stopRender(context)

    def updateRect(self):
        if self._feature and self._feature.constGeometry():
            m2p = self._mapCanvas.mapSettings().mapToPixel()
            topLeft = m2p.toMapPoint(0, 0)
            res = m2p.mapUnitsPerPixel()
            imageSize = self._mapCanvas.mapSettings().outputSize()
            rect = QgsRectangle(topLeft.x(), topLeft.y(), topLeft.x() + imageSize.width()
                                * res, topLeft.y() - imageSize.height() * res)
            self.setRect(rect)
            self.setVisible(True)
        else:
            self.setRect(QgsRectangle())

    # private:
    def _setSymbol(self, symbol, context, color, fillColor):
        if not symbol:
            return

        for symbolLayer in reversed(symbol.symbolLayers()):
            if symbolLayer:
                if symbolLayer.subSymbol():
                    self._setSymbol(symbolLayer.subSymbol(), context, color, fillColor)
                else:
                    symbolLayer.setColor(color)
                    symbolLayer.setOutlineColor(color)
                    symbolLayer.setFillColor(fillColor)
                    if isinstance(symbolLayer, QgsSimpleMarkerSymbolLayerV2):
                        symbolLayer.setOutlineWidth(
                            self._getSymbolWidth(context, symbolLayer.outlineWidth(), symbolLayer.outlineWidthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Line:
                        symbolLayer.setWidth(
                            self._getSymbolWidth(context, symbolLayer.width(), symbolLayer.widthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Fill:
                        symbolLayer.setBorderWidth(
                            self._getSymbolWidth(context, symbolLayer.borderWidth(), symbolLayer.outputUnit()))
                    symbolLayer.removeDataDefinedProperty('color')
                    symbolLayer.removeDataDefinedProperty('color_border')

    def _getSymbolWidth(self, context, width, unit):
        scale = 1.0
        if unit == QgsSymbolV2.MapUnit:
            scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor(
                context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor(context, QgsSymbolV2.MapUnit)
        width = max(width + 2 * self._buffer * scale, self._minWidth * scale)
        return width

    def _getRenderer(self, context, color, fillColor):
        renderer = None
        if self._layer and self._layer.rendererV2():
            renderer = self._layer.rendererV2().clone()
        if renderer:
            for symbol in renderer.symbols2(context):
                self._setSymbol(symbol, context, color, fillColor)
        return renderer
예제 #10
0
    def paintEvent(self, e):
        """ """
        PKWidget.paintEvent(self, e)

        painter = QPainter(self)
        orig_pen = QPen(painter.pen())
        orig_brush = QBrush(painter.brush())
        orig_font = QFont(painter.font())
        metrics = painter.fontMetrics()
        f_height = metrics.ascent()
        text_flags = Qt.AlignHCenter | Qt.AlignVCenter
        
        region = e.region()
        for item in self._shown:
            font_y = item.y + item.height / 2 + f_height / 2

            item_rect = QRect(0, item.y, self.width(), item.height)
            if not region.contains(item_rect):
                continue

            painter.setFont(orig_font)

            # background
            pen = item.color().dark(110)
            pen.setAlpha(100)
            painter.setBrush(QBrush(item.color()))
            painter.setPen(QPen(pen))
            w = self.width() * (item.progress * .01)
            rect = QRect(0, item.y, w, item.height)
            painter.drawRect(rect)

            # queue pos
            pen = pen.dark(140)
            pen.setAlpha(255)
            painter.setPen(QPen(pen))
            queue_rect = QRect(self.padding, item.y + self.padding,
                               item.height - self.padding * 2,
                               item.height - self.padding * 2)
            painter.drawRoundRect(queue_rect, 35, 35)

            # num
            if not item.num is None:
                painter.setPen(orig_pen)
                painter.setBrush(orig_brush)
                painter.drawText(queue_rect, text_flags, str(item.num))

            # text
            painter.setPen(orig_pen)
            painter.setBrush(orig_brush)
            font = QFont('Utopia, Italic', 14, -1, True)
            painter.setFont(font)
            rect = QRect(item_rect)
            rect.setX(item.height + self.padding * 2)
            rect.setWidth(rect.width() - rect.x())
            painter.drawText(rect, Qt.AlignVCenter | Qt.AlignLeft, item.text)

            # state
            if item.state:
                font = QFont('7th Service Expanded Italic, Italic')
                font.setPointSize(18)
                pen = QColor(orig_pen.color())
                pen.setAlpha(50)
                painter.setPen(QPen(pen))
                painter.setFont(font)
                x = item.x
                y = item.y
                w = self.width()
                h = item.height
                rect = QRect(x, y, w, h)
                flags = Qt.AlignVCenter | Qt.AlignRight
                painter.drawText(rect, flags, item.state+'  ')