Exemple #1
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)

        self.minimum_value = -100
        self.maximum_value = 100
        self.value_range = self.maximum_value - self.minimum_value
        self.total_angle = 200  # degree
        self.pressed = False
        self.scale_visible = True
        self.scale_arc_visible = True
        self.scale_text_visible = True
        self.scale_step_size = 10
        self.scale_step_divisions = 2
        self.knob_radius = 20  # px
        self.knob_style = KnobWidget.STYLE_ROUND
        self.dynamic_resize = False
        self.dynamic_knob_radius = None
        self.needle_base_radius = 7  # px
        self.needle_color = Qt.red
        self.knob_to_scale = 4  # px
        self.knob_scaleless_to_border = 1  # px, applied if scale not visible
        self.base_color = QColor(245, 245, 245)
        self.base_color_pressed = Qt.red
        self.mark_color = Qt.black
        self.border_color = QColor(190, 190, 190)
        self.tick_size_large = 9  # px
        self.tick_size_small = 5  # px
        self.tick_to_text = 4  # px
        self.text_to_border = 2  # px
        self.text_radius = None
        self.title_text = None
        self.value = self.value_range / 2
        self.value_factor = float(self.value -
                                  self.minimum_value) / self.value_range
        self.font_metrics = QFontMetrics(self.font())

        self.recalculate_size()
Exemple #2
0
    def mousePressEvent(self, event):
        if self.foldArea > 0:
            xofs = self.width() - self.foldArea
            font_metrics = QFontMetrics(self.edit.document().defaultFont())
            fh = font_metrics.lineSpacing()
            ys = event.posF().y()
            lineNumber = 0

            if event.pos().x() > xofs:
                pattern = self.pat
                if self.edit.lang != "python":
                    pattern = self.patNotPython
                block = self.edit.firstVisibleBlock()
                viewport_offset = self.edit.contentOffset()
                page_bottom = self.edit.viewport().height()
                while block.isValid():
                    position = self.edit.blockBoundingGeometry(
                        block).topLeft() + viewport_offset
                    if position.y() > page_bottom:
                        break
                    if position.y() < ys and (position.y() + fh) > ys and \
                      pattern.match(str(block.text())):
                        if not block.blockNumber() in self._endDocstringBlocks:
                            lineNumber = block.blockNumber() + 1
                            break
                    if position.y() < ys and (position.y() + fh) > ys and \
                      event.button() == Qt.LeftButton:
                        line = block.blockNumber()
                        self.set_breakpoint(line)
                        break
                    elif position.y() < ys and (position.y() + fh) > ys and \
                      event.button() == Qt.RightButton:
                        line = block.blockNumber()
                        self.set_bookmark(line)
                        break
                    block = block.next()
            if lineNumber > 0:
                self.code_folding_event(lineNumber)
    def create_values_text(self):
        painter = QPainter(self)
        # painter.setRenderHint(QPainter.HighQualityAntialiasing)
        painter.setRenderHint(QPainter.Antialiasing)

        # Koordinatenursprung in die Mitte der Flaeche legen
        painter.translate(self.width() / 2, self.height() / 2)
        # painter.save()
        # xShadow = 3.0
        # yShadow = 3.0
        font = QFont(self.value_fontname, self.value_fontsize)
        fm = QFontMetrics(font)

        pen_shadow = QPen()

        pen_shadow.setBrush(self.DisplayValueColor)
        painter.setPen(pen_shadow)

        text_radius = self.widget_diameter / 2 * self.text_radius_factor

        # angle_distance = (float(self.scale_angle_size) / float(self.scala_main_count))
        # for i in range(self.scala_main_count + 1):
        text = str(int(self.value))
        w = fm.width(text) + 1
        h = fm.height()
        painter.setFont(QFont(self.value_fontname, self.value_fontsize))

        # Mitte zwischen Skalenstart und Skalenende:
        # Skalenende = Skalenanfang - 360 + Skalenlaenge
        # Skalenmitte = (Skalenende - Skalenanfang) / 2 + Skalenanfang
        angle_end = float(self.scale_angle_start_value + self.scale_angle_size - 360)
        angle = (angle_end - self.scale_angle_start_value) / 2 + self.scale_angle_start_value

        x = text_radius * math.cos(math.radians(angle))
        y = text_radius * math.sin(math.radians(angle))
        # print(w, h, x, y, text)
        text = [x - int(w/2), y - int(h/2), int(w), int(h), Qt.AlignCenter, text]
        painter.drawText(text[0], text[1], text[2], text[3], text[4], text[5])
Exemple #4
0
    def _calc_size(self):
        realSize = self.realsize
        canvaswidth = self.canvas.width()
        mapunitsperpixel = abs(self.canvas.mapUnitsPerPixel())
        mapunits = self.canvas.mapUnits()
        prefered_units = roam.config.settings.get("prefer_units", "meters")
        newunits = QGis.fromLiteral(prefered_units, QGis.Meters)
        mapunitsperpixel *= QGis.fromUnitToUnitFactor(mapunits, newunits)
        mapunits = newunits

        # Convert the real distance into pixels
        barwidth = realSize / mapunitsperpixel

        if barwidth < 30:
            barwidth = canvaswidth / 4

        while barwidth > canvaswidth / 3:
            barwidth /= 3

        realSize = barwidth * mapunitsperpixel

        # Round
        powerof10 = math.floor(math.log10(realSize))
        scaler = math.pow(10.0, powerof10)
        realSize = round(realSize / scaler) * scaler
        barwidth = realSize / mapunitsperpixel
        label, realSize = self._label_size(mapunits, realSize)
        metrics = QFontMetrics(self.font)
        fontwidth = metrics.width(label)
        fontheight = metrics.height()

        sizelabel = QLocale.system().toString(realSize)
        sizelabel = "{} {}".format(sizelabel, label)

        barwidth = self._adjust_bar_size(barwidth, mapunits)
        barwidth = barwidth + fontwidth

        return barwidth, realSize, sizelabel, (fontwidth, fontheight)
Exemple #5
0
    def paintEvent(self, event):
        """QLineEdit.paintEvent implementation.
        Draws prompt
        """
        QLineEdit.paintEvent(self, event)

        if self._promptText and not self.text() and self.isEnabled():
            option = QStyleOptionFrameV3()
            self.initStyleOption(option)

            left, top, right, bottom = self.getTextMargins()

            va = self.style().visualAlignment(self.layoutDirection(),
                                              self.alignment())
            rect = self.style().subElementRect(
                QStyle.SE_LineEditContents, option,
                self).adjusted(2, 0, 0, 0).adjusted(left, top, -right, -bottom)
            fm = QFontMetrics(self.font())
            text = fm.elidedText(self._promptText, Qt.ElideRight, rect.width())
            painter = QPainter(self)

            painter.setPen(self.palette().color(QPalette.Disabled,
                                                QPalette.Text))
            painter.drawText(rect, va, text)
Exemple #6
0
    def updateAlexaAppImgCoords(self):
        self.edit._alexaAppImgIconsCoords = []
        #block = self.edit.document().findBlock(0)
        block = self.edit.firstVisibleBlock()
        line_count = block.blockNumber()

        pat = re.compile('\s*#AppImage:')

        viewport_offset = self.edit.contentOffset()

        while block.isValid():
            line_count += 1
            #maxLine = math.ceil(math.log10(self.edit.blockCount()))
            font_metrics = QFontMetrics(self.edit.document().defaultFont())

            position = self.edit.blockBoundingGeometry(block).topLeft() + viewport_offset
            width = self.edit.blockBoundingGeometry(block).width()
            '''
            width = 4
            for char in block.text():
                width += font_metrics.width(char)
            '''

            x = 5 + viewport_offset.x()
            if pat.match(block.text()):
                try:
                    if self.edit.useTabs:
                        x += block.text().index("    #") * (font_metrics.width('.') * self.edit.indent)
                    else:
                        x += block.text().index("    #") * font_metrics.width('.')
                except:
                    pass
                if block.isVisible():  # da notare che il blocco è la riga e non il blocco compreso tra i tag di Al'exa
                    self.edit._alexaAppImgIconsCoords.append((x, position.y(), width, line_count))

            block = block.next()
Exemple #7
0
    def __init__(self, parent=None):
        super(RichTextLineEdit, self).__init__(parent)

        self.monofamily = QString("courier")
        self.sansfamily = QString("helvetica")
        self.seriffamily = QString("times")

        self.setLineWrapMode(QTextEdit.NoWrap)

        self.setTabChangesFocus(True)

        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        fm = QFontMetrics(self.font())

        h = int(fm.height() * (1.4 if platform.system() == "Windows" else 1.2))

        self.setMinimumHeight(h)
        self.setMaximumHeight(int(h * 1.2))

        self.setToolTip(
            "Press <b>Ctrl+M</b> for text effects menu and <b>Ctrl+K</b> for the color menu"
        )
Exemple #8
0
    def splash_screen():
        path = pkg_resources.resource_filename(
            __name__, "icons/oasys-splash-screen.png")
        pm = QPixmap(path)

        version = QCoreApplication.applicationVersion()
        size = 21 if len(version) < 5 else 16
        font = QFont("Helvetica")
        font.setPixelSize(size)
        font.setBold(True)
        font.setItalic(True)
        font.setLetterSpacing(QFont.AbsoluteSpacing, 2)
        metrics = QFontMetrics(font)
        br = metrics.boundingRect(version).adjusted(-5, 0, 5, 0)
        br.moveCenter(QPoint(436, 224))

        p = QPainter(pm)
        p.setRenderHint(QPainter.Antialiasing)
        p.setRenderHint(QPainter.TextAntialiasing)
        p.setFont(font)
        p.setPen(QColor("#231F20"))
        p.drawText(br, Qt.AlignCenter, version)
        p.end()
        return pm, QRect(88, 193, 200, 20)
Exemple #9
0
    def resizeEvent(self, event):
        super(VersionItemWidget, self).resizeEvent(event)

        # make sure we have finished initializing before we resize
        if (not '_version' in self.__dict__):
            return

        metrics = QFontMetrics(self.font())
        version = self._version

        # update the labels with eliding based on new spacing
        self.uiUserLBL.setText(
            metrics.elidedText(version.username(), Qt.ElideRight,
                               self.uiUserLBL.width()))

        # convert out any html data
        comments = str(version.comments())
        doc = QTextDocument()
        doc.setHtml(comments)
        comments = str(doc.toPlainText())

        self.uiCommentsLBL.setText(
            metrics.elidedText(comments.replace('\n', ' '), Qt.ElideRight,
                               self.uiCommentsLBL.width()))
Exemple #10
0
    def __init__(self, parent, *args):
        QToolBar.__init__(self, parent, *args)

        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum))
        self._dock = parent

        self.aClose = QToolBar.addAction(
            self,
            self.style().standardIcon(QStyle.SP_TitleBarCloseButton), "")

        self.setMovable(False)
        self.setFloatable(False)

        self.aClose.triggered.connect(self._dock.close)

        textHeight = QFontMetrics(self.font()).height()
        self.setIconSize(QSize(textHeight, textHeight))

        # a fake spacer widget
        self._spacer = QWidget(self)
        self._spacer.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.MinimumExpanding))
        self.addWidget(self._spacer)
def gen_font(font_configs,
             font_type=FONT_TYPES.font01,
             img_width=1024,
             draw_outlines=False):
    img_height = HEIGHT_FACTOR

    seen_chars = []

    game_font = GameFont(width=img_width)
    painter = QPainter(game_font.trans)

    text_brush = QtGui.QBrush(QColor(255, 255, 255, 255))
    painter.setBrush(text_brush)

    outline_brush = QtGui.QBrush()
    outline_pen = QtGui.QPen(QColor(255, 0, 0, 255),
                             1,
                             style=Qt.Qt.DotLine,
                             join=Qt.Qt.MiterJoin)

    x_pos = 0
    y_pos = 0

    line_height = LINE_HEIGHT[font_type]

    for config in font_configs:
        font = QFont(config.family, config.size, config.weight, italic=False)
        font.setKerning(False)
        metric = QFontMetrics(font)

        painter.setFont(font)
        painter.setRenderHint(QPainter.TextAntialiasing, True)
        painter.setRenderHint(QPainter.Antialiasing, True)

        text_pen = painter.pen()
        text_pen.setBrush(QColor(255, 255, 255, 255))
        text_pen.setWidthF(config.pen_size)
        text_pen.setCapStyle(config.pen_cap)
        text_pen.setJoinStyle(config.pen_join)
        text_pen.setStyle(Qt.Qt.SolidLine if config.use_pen else Qt.Qt.NoPen)
        painter.setPen(text_pen)

        for char in sorted(config.chars):

            if char in seen_chars:
                continue
            else:
                seen_chars.append(char)

            # If we want a character to represent something it's not.
            char_to_print = char

            if char in config.subs:
                char_to_print = config.subs[char]

            char_w = metric.width(char_to_print)

            if x_pos + char_w > img_width:
                x_pos = 0
                y_pos += line_height + config.y_margin

            if y_pos < 0:
                y_pos = 0

            if y_pos + line_height > MAX_HEIGHT:
                _LOGGER.warning(
                    "Ran out of vertical space. Generated font does not include all characters."
                )
                break

            game_font.font_data.data.append({
                'char': char,
                'x': x_pos,
                'y': y_pos,
                'w': char_w,
                'h': line_height,
                'y_shift': config.y_shift
            })

            path = QPainterPath()
            path.addText(x_pos + config.x_offset,
                         y_pos + metric.ascent() + config.y_offset, font,
                         char_to_print)
            painter.drawPath(path)

            if draw_outlines:
                painter.setBrush(outline_brush)
                painter.setPen(outline_pen)
                painter.setRenderHint(QPainter.Antialiasing, False)

                painter.drawRect(x_pos, y_pos, char_w, line_height)

                painter.setRenderHint(QPainter.Antialiasing, True)
                painter.setBrush(text_brush)
                painter.setPen(text_pen)

            x_pos += char_w + config.x_margin

    painter.end()

    painter = QPainter(game_font.opaque)
    painter.drawImage(game_font.opaque.rect(), game_font.trans,
                      game_font.trans.rect())
    painter.end()

    # Crop our images so they only take up as much space as they need.
    final_height = int(
        math.ceil(float(y_pos + line_height) / float(HEIGHT_FACTOR)) *
        HEIGHT_FACTOR)
    game_font.trans = game_font.trans.copy(0, 0, img_width, final_height)
    game_font.opaque = game_font.opaque.copy(0, 0, img_width, final_height)

    return game_font


# if __name__ == '__main__':

# app = QtGui.QApplication(sys.argv)

# chars = load_text(CHAR_LIST)
# We can't have dupes, and why not put them in order while we're at it?
# chars = sorted(make_unique(chars))

# game_font = gen_font(chars)
# game_font.save(SAVE_AS)

### EOF ###
Exemple #12
0
    def _setMinimumHeight(self):
        fnt = self.settings.value("pythonConsole/fontfamilytext", "Monospace")
        fntSize = self.settings.value("pythonConsole/fontsize", 10, type=int)
        fm = QFontMetrics(QFont(fnt, fntSize))

        self.setMinimumHeight(fm.height() + 10)
Exemple #13
0
    def paintEvent(self, event):
        page_bottom = self.edit.viewport().height()
        font_metrics = QFontMetrics(self.edit.document().defaultFont())
        current_block = self.edit.document().findBlock(
            self.edit.textCursor().position())
        pattern = self.pat if self.edit.lang == "python" else self.patNotPython

        painter = QPainter(self)
        background = resources.CUSTOM_SCHEME.get('sidebar-background',
            resources.COLOR_SCHEME['sidebar-background'])
        foreground = resources.CUSTOM_SCHEME.get('sidebar-foreground',
            resources.COLOR_SCHEME['sidebar-foreground'])
        pep8color = resources.CUSTOM_SCHEME.get('pep8-underline',
            resources.COLOR_SCHEME['pep8-underline'])
        errorcolor = resources.CUSTOM_SCHEME.get('error-underline',
            resources.COLOR_SCHEME['error-underline'])
        painter.fillRect(self.rect(), QColor(background))

        block = self.edit.firstVisibleBlock()
        viewport_offset = self.edit.contentOffset()
        line_count = block.blockNumber()
        painter.setFont(self.edit.document().defaultFont())
        while block.isValid():
            line_count += 1
            # The top left position of the block in the document
            position = self.edit.blockBoundingGeometry(block).topLeft() + \
                viewport_offset
            # Check if the position of the block is outside of the visible area
            if position.y() > page_bottom:
                break

            # Set the Painter Pen depending on special lines
            error = False
            if settings.CHECK_STYLE and \
               ((line_count - 1) in self._pep8Lines):
                painter.setPen(QColor(pep8color))
                font = painter.font()
                font.setItalic(True)
                font.setUnderline(True)
                painter.setFont(font)
                error = True
            elif settings.FIND_ERRORS and \
                 ((line_count - 1) in self._errorsLines):
                painter.setPen(QColor(errorcolor))
                font = painter.font()
                font.setItalic(True)
                font.setUnderline(True)
                painter.setFont(font)
                error = True
            else:
                painter.setPen(QColor(foreground))

            # We want the line number for the selected line to be bold.
            bold = False
            if block == current_block:
                bold = True
                font = painter.font()
                font.setBold(True)
                painter.setFont(font)

            # Draw the line number right justified at the y position of the
            # line. 3 is a magic padding number. drawText(x, y, text).
            if block.isVisible():
                painter.drawText(self.width() - self.foldArea -
                    font_metrics.width(str(line_count)) - 3,
                    round(position.y()) + font_metrics.ascent() +
                    font_metrics.descent() - 1,
                    str(line_count))

            # Remove the bold style if it was set previously.
            if bold:
                font = painter.font()
                font.setBold(False)
                painter.setFont(font)
            if error:
                font = painter.font()
                font.setItalic(False)
                font.setUnderline(False)
                painter.setFont(font)

            block = block.next()

        self.highest_line = line_count

        #Code Folding
        xofs = self.width() - self.foldArea
        painter.fillRect(xofs, 0, self.foldArea, self.height(),
                QColor(resources.CUSTOM_SCHEME.get('fold-area',
                resources.COLOR_SCHEME['fold-area'])))
        if self.foldArea != self.rightArrowIcon.width():
            polygon = QPolygonF()

            self.rightArrowIcon = QPixmap(self.foldArea, self.foldArea)
            self.rightArrowIcon.fill(Qt.transparent)
            self.downArrowIcon = QPixmap(self.foldArea, self.foldArea)
            self.downArrowIcon.fill(Qt.transparent)

            polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.25))
            polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.75))
            polygon.append(QPointF(self.foldArea * 0.8, self.foldArea * 0.5))
            iconPainter = QPainter(self.rightArrowIcon)
            iconPainter.setRenderHint(QPainter.Antialiasing)
            iconPainter.setPen(Qt.NoPen)
            iconPainter.setBrush(QColor(
                resources.CUSTOM_SCHEME.get('fold-arrow',
                resources.COLOR_SCHEME['fold-arrow'])))
            iconPainter.drawPolygon(polygon)

            polygon.clear()
            polygon.append(QPointF(self.foldArea * 0.25, self.foldArea * 0.4))
            polygon.append(QPointF(self.foldArea * 0.75, self.foldArea * 0.4))
            polygon.append(QPointF(self.foldArea * 0.5, self.foldArea * 0.8))
            iconPainter = QPainter(self.downArrowIcon)
            iconPainter.setRenderHint(QPainter.Antialiasing)
            iconPainter.setPen(Qt.NoPen)
            iconPainter.setBrush(QColor(
                resources.CUSTOM_SCHEME.get('fold-arrow',
                resources.COLOR_SCHEME['fold-arrow'])))
            iconPainter.drawPolygon(polygon)

        block = self.edit.firstVisibleBlock()
        while block.isValid():
            position = self.edit.blockBoundingGeometry(
                block).topLeft() + viewport_offset
            #Check if the position of the block is outside of the visible area
            if position.y() > page_bottom:
                break

            if pattern.match(block.text()) and block.isVisible():
                if block.blockNumber() in self._foldedBlocks:
                    painter.drawPixmap(xofs, round(position.y()),
                        self.rightArrowIcon)
                else:
                    painter.drawPixmap(xofs, round(position.y()),
                        self.downArrowIcon)
            #Add Bookmarks and Breakpoint
            elif block.blockNumber() in self._breakpoints:
                linear_gradient = QLinearGradient(
                    xofs, round(position.y()),
                    xofs + self.foldArea, round(position.y()) + self.foldArea)
                linear_gradient.setColorAt(0, QColor(255, 11, 11))
                linear_gradient.setColorAt(1, QColor(147, 9, 9))
                painter.setRenderHints(QPainter.Antialiasing, True)
                painter.setPen(Qt.NoPen)
                painter.setBrush(QBrush(linear_gradient))
                painter.drawEllipse(
                    xofs + 1,
                    round(position.y()) + 6,
                    self.foldArea - 1, self.foldArea - 1)
            elif block.blockNumber() in self._bookmarks:
                linear_gradient = QLinearGradient(
                    xofs, round(position.y()),
                    xofs + self.foldArea, round(position.y()) + self.foldArea)
                linear_gradient.setColorAt(0, QColor(13, 62, 243))
                linear_gradient.setColorAt(1, QColor(5, 27, 106))
                painter.setRenderHints(QPainter.Antialiasing, True)
                painter.setPen(Qt.NoPen)
                painter.setBrush(QBrush(linear_gradient))
                painter.drawRoundedRect(
                    xofs + 1,
                    round(position.y()) + 6,
                    self.foldArea - 2, self.foldArea - 1,
                    3, 3)

            block = block.next()

        painter.end()
        QWidget.paintEvent(self, event)
Exemple #14
0
def setElidedText(label, text):
    text = QFontMetrics(label.font()).elidedText(text, 1, label.width() - 2)
    label.setText(text)
    def setupTabs(self, elmerDefs, Section, ID):
        """Creates the tabs of the dynamic widget according to the elmerDefs

        Args:
        -----
        elmerDefs: QDomDocument
            contents of the Elmder efs files in xml-format
        Section: str
            Type of base layout
        ID: int
            ID of the dynamiceditor-instance        
        """
        self.ID = ID
        self.qhash.clear()

        layout = self.layout()
        if (layout is not None):
            item = layout.takeAt(0)
            while (item != 0):
                item = None
                if (self.tabWidget is not None):
                    self.tabWidget.clear()
                    self.tabWidget = None
                item = layout.takeAt(0)
            self.layout = None

        # get root element
        self._root = elmerDefs.documentElement()

        self.tabWidget = QtGui.QTabWidget()
        self.tabWidget.setUsesScrollButtons(True)
        self.tabWidget.setElideMode(QtCore.Qt.ElideNone)

        self._all_stuff = self._root.firstChildElement("ALL")
        self._element = self._root.firstChildElement("PDE")

        self.tabs = 0

        while (self._element.isNull() is False):
            self._name = self._element.firstChildElement("Name")
            grid = QtGui.QGridLayout()
            params = 0
            for x in range(0, 2):
                if (x == 0):
                    if (str(self._name.text()).strip() == "General"):
                        continue
                    self._section = self._all_stuff.firstChildElement(Section)
                else:
                    self._section = self._element.firstChildElement(Section)

                self._param = self._section.firstChildElement("Parameter")

                while (self._param.isNull() is False):
                    h = hash_entry_t()
                    # label
                    widget_type = self._param.attribute("Widget", "Edit")
                    widget_enabled = self._param.attribute("Enabled", "True")
                    widget_visible = self._param.attribute("Visible", "True")
                    paramType = str(
                        self._param.firstChildElement("Type").text()).strip()
                    labelName = str(
                        self._param.firstChildElement("Name").text()).strip()
                    sifName = str(
                        self._param.firstChildElement(
                            "SifName").text()).strip()
                    if (sifName == ""):
                        sifName = labelName
                    paramDefault = str(
                        self._param.firstChildElement(
                            "DefaultValue").text()).strip()
                    whatis = str(
                        self._param.firstChildElement(
                            "Whatis").text()).strip()
                    statusTip = str(
                        self._param.firstChildElement(
                            "StatusTip").text()).strip()
                    fullName = "/" + str(self._name.text()).strip() + "/"
                    fullName = fullName + Section + "/" + labelName + "/" + str(
                        ID)
                    h.widget = None
                    if (widget_type == "Edit"):
                        edit = DynLineEdit()
                        h.widget = edit.lineEdit
                        edit.lineEdit.setText(paramDefault)
                        edit.name = fullName
                        edit.lineEdit.returnPressed.connect(edit.editSlot)
                        edit.lineEdit.textChanged.connect(
                            self._textChangedSlot)

                    elif (widget_type == "TextEdit"):
                        textEdit = QtGui.QTextEdit()
                        currentFont = textEdit.currentFont()
                        fontMetrics = QFontMetrics(currentFont)
                        fontHeight = fontMetrics.height()
                        textEdit.setMinimumHeight(5 * fontHeight)
                        textEdit.setMaximumHeight(8 * fontHeight)
                        h.widget = textEdit

                    elif (widget_type == "Combo"):
                        combo = QtGui.QComboBox()
                        h.widget = combo
                        count = 0
                        active = 0
                        item = self._param.firstChildElement("Item")
                        while (item.isNull() is False):
                            itemType = item.attribute("Type", "")
                            if (itemType == "Active"):
                                active = count
                            itemName = item.firstChildElement("Name")
                            count += 1
                            combo.insertItem(count,
                                             str(itemName.text()).strip())
                            item = item.nextSiblingElement("Item")
                        combo.setCurrentIndex(active)
                        combo.currentIndexChanged.connect(self._comboSlot)

                    elif (widget_type == "CheckBox"):
                        l = QtGui.QCheckBox()
                        h.widget = l
                        l.setText("")
                        l.setChecked(False)
                        if (paramDefault == "True"):
                            l.setChecked(True)
                        l.stateChanged.connect(self._lSlot)

                    elif (widget_type == "Label"):
                        label = QtGui.QLabel()
                        font = QFont()
                        font.setBold(True)
                        font.setUnderline(True)
                        label.setFont(font)
                        label.setText(labelName)
                        h.widget = label

                    if (h.widget):
                        h.widget.setWhatsThis(whatis)
                        h.widget.setStatusTip(statusTip)
                        h.widget.setProperty("dom address", fullName)
                        h.elem = self._param
                        if (widget_enabled == "False"):
                            h.widget.setEnabled(False)
                        if (widget_type != "TextEdit"):
                            h.widget.setFixedHeight(18)
                        if (widget_type == "TextEdit"):
                            textEditLabel = QtGui.QLabel()
                            textEditLabel.setText(labelName)
                            h.label = textEditLabel
                            grid.addWidget(h.widget, params, 0, 1, 2)

                            if (widget_visible == "False"):
                                h.label.hide()
                                h.widget.hide()

                        elif (widget_type != "Label"):
                            label = QtGui.QLabel()
                            label.setText(labelName)
                            h.label = label
                            grid.addWidget(h.label, params, 0)
                            grid.addWidget(h.widget, params, 1)

                            if (widget_visible == "False"):
                                h.label.hide()
                                h.widget.hide()
                        else:
                            h.label = None
                            grid.addWidget(h.widget, params, 0)
                        self.qhash.update({fullName: h})

                    self._param = self._param.nextSiblingElement("Parameter")
                    params += 1

            dummyWidget = QtGui.QWidget()
            grid.addWidget(dummyWidget, params, 0)
            grid.setRowStretch(params, 1)

            frmWidget = QtGui.QWidget()
            frmWidget.setLayout(grid)

            src = QtGui.QScrollArea()
            src.setWidget(frmWidget)
            src.setMinimumHeight(300)
            src.setWidgetResizable(True)

            if (params > 0):
                self.tabWidget.addTab(src, str(self._name.text()).strip())

            self.tabs += 1
            self._element = self._element.nextSiblingElement("PDE")

        # Buttons:
        lbl = QtGui.QLabel()
        lbl.setText("Name:")
        self.nameEdit = QtGui.QLineEdit()
        self.nameEdit.setText(Section + " " + str(ID + 1))

        self.applyButton = QtGui.QPushButton("&Apply")
        # applyButton.setIcon(addIcon)
        self.applyButton.clicked.connect(self._applyButtonClicked)

        self.discardButton = QtGui.QPushButton("&Remove")
        # discardButton.setIcon(removeIcon)
        self.discardButton.clicked.connect(self._discardButtonClicked)

        self.okButton = QtGui.QPushButton("&OK")
        # okButton.setIcon(okIcon)
        self.okButton.clicked.connect(self._okButtonClicked)

        self.newButton = QtGui.QPushButton("&New")
        # self.newButton.setIcon(newIcon)
        self.newButton.clicked.connect(self._newButtonClicked)

        nameLayout = QtGui.QHBoxLayout()
        nameLayout.addWidget(lbl)
        nameLayout.addWidget(self.nameEdit)

        buttonLayout = QtGui.QHBoxLayout()
        buttonLayout.addWidget(self.newButton)
        buttonLayout.addWidget(self.applyButton)
        buttonLayout.addWidget(self.okButton)
        buttonLayout.addWidget(self.discardButton)

        spareButtonLayout = QtGui.QHBoxLayout()
        self.spareButton = QtGui.QPushButton("SpareButton")
        self.spareButton.setVisible(False)
        spareButtonLayout.addWidget(self.spareButton)
        self.spareButton.clicked.connect(self._spareButtonClicked)

        self.spareScroll = QtGui.QScrollArea()
        self.spareScroll.hide()

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.tabWidget)
        mainLayout.addWidget(self.spareScroll)
        mainLayout.addLayout(spareButtonLayout)
        mainLayout.addLayout(nameLayout)
        mainLayout.addLayout(buttonLayout)
        self.setLayout(mainLayout)

        self.setWindowTitle(Section)
Exemple #16
0
 def sizeHint(self):
     fm = QFontMetrics(self.font())
     return QSize(self._movieWidth + 6 + fm.width(self._text),
                  self._movieHeight)
Exemple #17
0
 def setBadgeFont( self, font ):
     " Sets the badge font "
     self.badgeFont = font
     self.badgeFontMetrics = QFontMetrics( self.badgeFont,
                                           self.__paintDevice )
     return
Exemple #18
0
    def __paintEventNoStyle(self):
        p = QPainter(self)
        opt = QStyleOptionToolButton()
        self.initStyleOption(opt)

        fm = QFontMetrics(opt.font)
        palette = opt.palette

        # highlight brush is used as the background for the icon and background
        # when the tab is expanded and as mouse hover color (lighter).
        brush_highlight = palette.highlight()
        if opt.state & QStyle.State_Sunken:
            # State 'down' pressed during a mouse press (slightly darker).
            background_brush = brush_darker(brush_highlight, 110)
        elif opt.state & QStyle.State_MouseOver:
            background_brush = brush_darker(brush_highlight, 95)
        elif opt.state & QStyle.State_On:
            background_brush = brush_highlight
        else:
            # The default button brush.
            background_brush = palette.button()

        rect = opt.rect
        icon = opt.icon
        icon_size = opt.iconSize

        # TODO: add shift for pressed as set by the style (PM_ButtonShift...)

        pm = None
        if not icon.isNull():
            if opt.state & QStyle.State_Enabled:
                mode = QIcon.Normal
            else:
                mode = QIcon.Disabled

            pm = opt.icon.pixmap(
                rect.size().boundedTo(icon_size), mode,
                QIcon.On if opt.state & QStyle.State_On else QIcon.Off)

        icon_area_rect = QRect(rect)
        icon_area_rect.setRight(int(icon_area_rect.height() * 1.26))

        text_rect = QRect(rect)
        text_rect.setLeft(icon_area_rect.right() + 10)

        # Background  (TODO: Should the tab button have native
        # toolbutton shape, drawn using PE_PanelButtonTool or even
        # QToolBox tab shape)

        # Default outline pen
        pen = QPen(palette.color(QPalette.Mid))

        p.save()
        p.setPen(Qt.NoPen)
        p.setBrush(QBrush(background_brush))
        p.drawRect(rect)

        # Draw the background behind the icon if the background_brush
        # is different.
        if not opt.state & QStyle.State_On:
            p.setBrush(brush_highlight)
            p.drawRect(icon_area_rect)
            # Line between the icon and text
            p.setPen(pen)
            p.drawLine(icon_area_rect.topRight(), icon_area_rect.bottomRight())

        if opt.state & QStyle.State_HasFocus:
            # Set the focus frame pen and draw the border
            pen = QPen(QColor(FOCUS_OUTLINE_COLOR))
            p.setPen(pen)
            p.setBrush(Qt.NoBrush)
            # Adjust for pen
            rect = rect.adjusted(0, 0, -1, -1)
            p.drawRect(rect)

        else:
            p.setPen(pen)
            # Draw the top/bottom border
            if self.position == QStyleOptionToolBoxV2.OnlyOneTab or \
                    self.position == QStyleOptionToolBoxV2.Beginning or \
                    self.selected & \
                        QStyleOptionToolBoxV2.PreviousIsSelected:

                p.drawLine(rect.topLeft(), rect.topRight())

            p.drawLine(rect.bottomLeft(), rect.bottomRight())

        p.restore()

        p.save()
        text = fm.elidedText(opt.text, Qt.ElideRight, text_rect.width())
        p.setPen(QPen(palette.color(QPalette.ButtonText)))
        p.setFont(opt.font)

        p.drawText(text_rect,
                   int(Qt.AlignVCenter | Qt.AlignLeft) | \
                   int(Qt.TextSingleLine),
                   text)
        if pm:
            pm_rect = QRect(QPoint(0, 0), pm.size())
            centered_rect = QRect(pm_rect)
            centered_rect.moveCenter(icon_area_rect.center())
            p.drawPixmap(centered_rect, pm, pm_rect)
        p.restore()
Exemple #19
0
 def setDisplayFontSize(self, size):
     self._font.setPointSize(size)
     self._square = max(24, QFontMetrics(self._font).xHeight() * 3)
     self.adjustSize()
     self.update()
Exemple #20
0
 def sizeHint(self):
     metrics = QFontMetrics(self.font())
     rect = metrics.boundingRect(self.text())
     size = QSize(rect.height() + self.margin(),
                  rect.width() + self.margin())
     return size
Exemple #21
0
def true_height(node=None):
    """Calculates the UI height for all node types, due to a bug in NUKE
    which evaluates to zero for height upon node creation or in non-UI
    modes. By convention, height and width are represented by h and w
    """
    node_class = node.Class()
    # ------------------- Size Determined by Prefs ------------------------- #
    # the UI Prefs determine the size of dots directly:
    if node_class in DOTS:
        return utils.pref('dot_node_scale') * 12
    # TileWidth is the driving preference for round "3D" nodes
    elif node_class in THREE_DS:
        tile_w = utils.pref('TileWidth')
        three_d_w = int(float(tile_w) * (3.0 / 4.0))
        three_d_h = three_d_w if three_d_w % 2 == 0 else (three_d_w + 1)
        return three_d_h

    # ------------------- Size Determined by Labels ------------------------ #
    # All other nodes can be determined via screenheight + labels
    screen_h = node.screenHeight()
    # If the node is a note-type, screenheight will suffice
    if node_class in NOTES:
        return screen_h
    # If the node is returning a value greater than the default, then we
    # assume that the call was made after node creation, unless the node
    # happens to be one of the classes which add a postage stamp
    # by default.
    tile_h = utils.pref('TileHeight')
    if screen_h - tile_h > 3 and node_class not in AUTO_POSTAGES:
        return screen_h
    # all other nodes, we need to do the work to add up the base height
    # to any labels that are included
    base_h = screen_h if screen_h else tile_h
    # each line of text in the label will have a height determined by:
    #    * font size in pixels
    #    * a one-pixel buffer
    try:
        font_size = node['note_font_size'].getValue()
    except NameError:
        font_size = utils.pref('UIFontSize')
    try:
        font_name = node['note_font'].value()
    except NameError:
        font_name = utils.pref('UIFont')
    else:
        # due to a bug in previous versions of NUKE, occassionally our
        # font names got corrupted by adding 'Bold' to the font name
        while font_name.endswith('Bold Bold'):
            font_name = ' '.join(font_name.split(' ')[-1])
    # because the node might use a font other than the default, we have
    # to get the font-size in pixels using PyQt
    font = QFont(font_name, font_size)
    ui_font_h = QFontMetrics(font).height()
    padding_per_line = ui_font_h + 1
    # the full label will include the user notes and any autolabel lines
    full_label = nuke.runIn(node.fullName(), 'nuke.autolabel()')
    lines = full_label.split('\n')
    added_h = padding_per_line * (len(lines) - 1)

    # ------------------- Postage Stamp Sizes ------------------------------ #
    # postage stamps add height in relation to the width of the node
    try:
        has_postage_stamp = node['postage_stamp'].value()
    except NameError:
        return base_h + added_h
    else:
        if not has_postage_stamp:
            return base_h + added_h
    # Only add the postage stamp size if it has been added manually
    if node_class not in AUTO_POSTAGES:
        tile_w = utils.pref('TileWidth')
        added_h += (int(float(tile_w) / sqrt(3)) + 2)
    return base_h + added_h
Exemple #22
0
    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
Exemple #23
0
    def update(self, zoom_only=False):
        self.update_ticks()
        line_color = self.plot.color(OWPalette.Axis)
        text_color = self.plot.color(OWPalette.Text)
        if not self.graph_line or not self.scene():
            return
        self.line_item.setLine(self.graph_line)
        self.line_item.setPen(line_color)
        if self.title:
            self.title_item.setHtml('<b>' + self.title + '</b>')
            self.title_item.setDefaultTextColor(text_color)
        if self.title_location == AxisMiddle:
            title_p = 0.5
        elif self.title_location == AxisEnd:
            title_p = 0.95
        else:
            title_p = 0.05
        title_pos = self.graph_line.pointAt(title_p)
        v = self.graph_line.normalVector().unitVector()

        dense_text = False
        if hasattr(self, 'title_margin'):
            offset = self.title_margin
        elif self._ticks:
            if self.should_be_expanded():
                offset = 55
                dense_text = True
            else:
                offset = 35
        else:
            offset = 10

        if self.title_above:
            title_pos = title_pos + (v.p2() - v.p1()) * (
                offset + QFontMetrics(self.title_item.font()).height())
        else:
            title_pos = title_pos - (v.p2() - v.p1()) * offset
        ## TODO: Move it according to self.label_pos
        self.title_item.setVisible(self.show_title)
        self.title_item.setRotation(-self.graph_line.angle())
        c = self.title_item.mapToParent(
            self.title_item.boundingRect().center())
        tl = self.title_item.mapToParent(
            self.title_item.boundingRect().topLeft())
        self.title_item.setPos(title_pos - c + tl)

        ## Arrows
        if not zoom_only:
            if self.start_arrow_item:
                self.scene().removeItem(self.start_arrow_item)
                self.start_arrow_item = None
            if self.end_arrow_item:
                self.scene().removeItem(self.end_arrow_item)
                self.end_arrow_item = None

        if self.arrows & AxisStart:
            if not zoom_only or not self.start_arrow_item:
                self.start_arrow_item = QGraphicsPathItem(
                    self.arrow_path, self)
            self.start_arrow_item.setPos(self.graph_line.p1())
            self.start_arrow_item.setRotation(-self.graph_line.angle() + 180)
            self.start_arrow_item.setBrush(line_color)
            self.start_arrow_item.setPen(line_color)
        if self.arrows & AxisEnd:
            if not zoom_only or not self.end_arrow_item:
                self.end_arrow_item = QGraphicsPathItem(self.arrow_path, self)
            self.end_arrow_item.setPos(self.graph_line.p2())
            self.end_arrow_item.setRotation(-self.graph_line.angle())
            self.end_arrow_item.setBrush(line_color)
            self.end_arrow_item.setPen(line_color)

        ## Labels

        n = len(self._ticks)
        resize_plot_item_list(self.label_items, n, QGraphicsTextItem, self)
        resize_plot_item_list(self.label_bg_items, n, QGraphicsRectItem, self)
        resize_plot_item_list(self.tick_items, n, QGraphicsLineItem, self)

        test_rect = QRectF(self.graph_line.p1(),
                           self.graph_line.p2()).normalized()
        test_rect.adjust(-1, -1, 1, 1)

        n_v = self.graph_line.normalVector().unitVector()
        if self.title_above:
            n_p = n_v.p2() - n_v.p1()
        else:
            n_p = n_v.p1() - n_v.p2()
        l_v = self.graph_line.unitVector()
        l_p = l_v.p2() - l_v.p1()
        for i in range(n):
            pos, text, size, step = self._ticks[i]
            hs = 0.5 * step
            tick_pos = self.map_to_graph(pos)
            if not test_rect.contains(tick_pos):
                self.tick_items[i].setVisible(False)
                self.label_items[i].setVisible(False)
                continue
            item = self.label_items[i]
            item.setVisible(True)
            if not zoom_only:
                if self.id in XAxes or getattr(self, 'is_horizontal', False):
                    item.setHtml('<center>' + Qt.escape(text.strip()) +
                                 '</center>')
                else:
                    item.setHtml(Qt.escape(text.strip()))

            item.setTextWidth(-1)
            text_angle = 0
            if dense_text:
                w = min(item.boundingRect().width(), self.max_text_width)
                item.setTextWidth(w)
                if self.title_above:
                    label_pos = tick_pos + n_p * (
                        w + self.text_margin
                    ) + l_p * item.boundingRect().height() / 2
                else:
                    label_pos = tick_pos + n_p * self.text_margin + l_p * item.boundingRect(
                    ).height() / 2
                text_angle = -90 if self.title_above else 90
            else:
                w = min(
                    item.boundingRect().width(),
                    QLineF(self.map_to_graph(pos - hs),
                           self.map_to_graph(pos + hs)).length())
                label_pos = tick_pos + n_p * self.text_margin - l_p * w / 2
                item.setTextWidth(w)

            if not self.always_horizontal_text:
                if self.title_above:
                    item.setRotation(-self.graph_line.angle() - text_angle)
                else:
                    item.setRotation(self.graph_line.angle() - text_angle)

            item.setPos(label_pos)
            item.setDefaultTextColor(text_color)

            self.label_bg_items[i].setRect(item.boundingRect())
            self.label_bg_items[i].setPen(QPen(Qt.NoPen))
            self.label_bg_items[i].setBrush(self.plot.color(OWPalette.Canvas))

            item = self.tick_items[i]
            item.setVisible(True)
            tick_line = QLineF(v)
            tick_line.translate(-tick_line.p1())
            tick_line.setLength(size)
            if self.title_above:
                tick_line.setAngle(tick_line.angle() + 180)
            item.setLine(tick_line)
            item.setPen(line_color)
            item.setPos(self.map_to_graph(pos))
Exemple #24
0
    def __init__( self, paintDevice ):

        # Visibility of the virtual cells (dotted outline)
        self.debug = False
        self.__paintDevice = paintDevice

        self.monoFont = buildFont( "Ubuntu mono,12,-1,5,50,0,0,0,0,0" )
        self.monoFontMetrics = QFontMetrics( self.monoFont, paintDevice )
        self.badgeFont = buildFont( "Ubuntu mono,9,-1,5,50,0,0,0,0,0" )
        self.badgeFontMetrics = QFontMetrics( self.badgeFont, paintDevice )

        self.hCellPadding = 8       # in pixels (left and right)
        self.vCellPadding = 8       # in pixels (top and bottom)
        self.hTextPadding = 5       # in pixels (left and right)
        self.vTextPadding = 5       # in pixels (top and bottom)

        self.hHeaderPadding = 5     # Scope header (file, decor, loops etc) paddings
        self.vHeaderPadding = 5

        self.vSpacer = 10

        self.rectRadius = 6         # Rounded rectangles radius for the scopes
        self.returnRectRadius = 16  # Rounded rectangles radius for the return-like statements
        self.minWidth = 100
        self.ifWidth = 10           # One if wing width
        self.commentCorner = 6      # Top right comment corner

        self.lineWidth = 1          # used for connections and box edges
        self.lineColor = QColor( 16, 16, 16, 255 )

        # Selection
        self.selectColor = QColor( 63, 81, 181, 255 )
        self.selectPenWidth = 3

        # Code blocks and other statements
        self.boxBGColor = QColor( 250, 250, 250, 255 )
        self.boxFGColor = QColor( 0, 0, 0, 255 )

        # Badges
        self.badgeBGColor = QColor( 230, 230, 230, 255 )
        self.badgeFGColor = QColor( 0, 0, 0, 255 )
        self.badgeLineWidth = 1
        self.badgeLineColor = QColor( 180, 180, 180, 255 )

        # Labels
        self.labelBGColor = QColor( 230, 230, 230, 255 )
        self.labelFGColor = QColor( 0, 0, 0, 255 )
        self.labelLineWidth = 1
        self.labelLineColor = QColor( 0, 0, 0, 255 )

        # Comments: leading, side & independent
        self.commentBGColor = QColor( 255, 255, 153, 255 )
        self.commentFGColor = QColor( 0, 0, 0, 255 )
        self.commentLineColor = QColor( 102, 102, 61, 255 )
        self.commentLineWidth = 1
        self.mainLine = 25

        self.fileScopeBGColor = QColor( 255, 255, 230, 255 )
        self.funcScopeBGColor = QColor( 230, 230, 255, 255 )
        self.decorScopeBGColor = QColor( 230, 255, 255, 255 )
        self.classScopeBGColor = QColor( 230, 255, 230, 255 )
        self.forScopeBGColor = QColor( 187, 222, 251, 255 )
        self.whileScopeBGColor = QColor( 187, 222, 251, 255 )
        self.elseScopeBGColor = QColor( 209, 196, 233, 255 )
        self.withScopeBGColor = QColor( 255, 255, 255, 255 )
        self.tryScopeBGColor = QColor( 255, 255, 255, 255 )
        self.exceptScopeBGColor = QColor( 255, 255, 255, 255 )
        self.finallyScopeBGColor = QColor( 192, 192, 192, 255 )
        self.breakBGColor = QColor( 144, 202, 249, 255 )
        self.continueBGColor = QColor( 144, 202, 249, 255 )
        self.ifBGColor = QColor( 255, 229, 127, 255 )
        return
Exemple #25
0
    def __init__(self, parent):
        QDialog.__init__(self, parent)
        self.ui = ui_settings_jack.Ui_JackSettingsW()
        self.ui.setupUi(self)

        # -------------------------------------------------------------
        # Check if we've got valid control interface

        global gJackctl

        if gJackctl is None:
            QTimer.singleShot(0, self, SLOT("slot_closeWithError()"))
            return

        # -------------------------------------------------------------
        # Align driver text and hide non available ones

        driverList = gJackctl.ReadContainer(["drivers"])[1]
        maxWidth   = 75

        for i in range(self.ui.obj_server_driver.rowCount()):
            self.ui.obj_server_driver.item(0, i).setTextAlignment(Qt.AlignCenter)

            itexText  = self.ui.obj_server_driver.item(0, i).text()
            itemWidth = QFontMetrics(self.ui.obj_server_driver.font()).width(itexText)+25

            if itemWidth > maxWidth:
                maxWidth = itemWidth

            if dbus.String(itexText.lower()) not in driverList:
                self.ui.obj_server_driver.hideRow(i)

        self.ui.obj_server_driver.setMinimumWidth(maxWidth)
        self.ui.obj_server_driver.setMaximumWidth(maxWidth)

        # -------------------------------------------------------------
        # Set-up connections

        self.connect(self, SIGNAL("accepted()"), SLOT("slot_saveJackSettings()"))
        self.connect(self.ui.buttonBox.button(QDialogButtonBox.Reset), SIGNAL("clicked()"), SLOT("slot_resetJackSettings()"))

        self.connect(self.ui.obj_driver_duplex, SIGNAL("clicked(bool)"), SLOT("slot_checkDuplexSelection(bool)"))
        self.connect(self.ui.obj_server_driver, SIGNAL("currentCellChanged(int, int, int, int)"), SLOT("slot_checkDriverSelection(int)"))

        self.connect(self.ui.obj_driver_capture, SIGNAL("currentIndexChanged(int)"), SLOT("slot_checkALSASelection()"))
        self.connect(self.ui.obj_driver_playback, SIGNAL("currentIndexChanged(int)"), SLOT("slot_checkALSASelection()"))

        # -------------------------------------------------------------
        # Load initial settings

        self.fDriverName = ""
        self.fBrokenServerClockSource = False

        self.checkEngine()
        self.loadServerSettings()
        self.loadDriverSettings(True) # reset because we'll change it below

        # -------------------------------------------------------------
        # Load selected JACK driver

        self.fDriverName = str(gJackctl.GetParameterValue(["engine", "driver"])[2])
        for i in range(self.ui.obj_server_driver.rowCount()):
            if self.ui.obj_server_driver.item(i, 0).text().lower() == self.fDriverName:
                self.ui.obj_server_driver.setCurrentCell(i, 0)
                break

        # Special ALSA check
        self.slot_checkALSASelection()

        # -------------------------------------------------------------
        # Load last GUI settings

        self.loadSettings()
Exemple #26
0
 def minimumSizeHint(self):
     fm = QFontMetrics(self.font())
     return QSize(fm.width("WWWW"), self.minimumHeight())
Exemple #27
0
 def update_position(self):
     font_size = QFontMetrics(self._parent.font()).height()
     height = self._parent.lines_count * font_size
     self.setFixedHeight(height)
     self.setFixedWidth(self._parent.width())
     self.__scroll_margins = (height, self._parent.height() - height)
Exemple #28
0
 def setMonoFont( self, font ):
     " Sets the mono font "
     self.monoFont = font
     self.monoFontMetrics = QFontMetrics( self.monoFont,
                                          self.__paintDevice )
     return
Exemple #29
0
    def __createLayout(self):
        """ Creates the dialog layout """

        self.resize(700, 300)
        self.setSizeGripEnabled(True)

        layout = QVBoxLayout(self)
        gridLayout = QGridLayout()

        # Columns
        colsLabel = QLabel("Columns")
        self.__colsEdit = QLineEdit()
        self.__colsEdit.setText(str(self.__settings.settings["COL_LIMIT"]))
        self.__colsEdit.setToolTip(self.__settings.getDescription("COL_LIMIT"))
        self.__colsEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(colsLabel, 0, 0, 1, 1)
        gridLayout.addWidget(self.__colsEdit, 0, 1, 1, 1)
        font = self.__colsEdit.font()
        font.setFamily(GlobalData().skin.baseMonoFontFace)
        self.__colsEdit.setFont(font)

        # Assignment
        assignmentLabel = QLabel("Assignment")
        self.__assignmentEdit = QLineEdit()
        self.__assignmentEdit.setText(self.__settings.settings["ASSIGNMENT"])
        self.__assignmentEdit.setToolTip(
            self.__settings.getDescription("ASSIGNMENT"))
        self.__assignmentEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(assignmentLabel, 0, 3, 1, 1)
        gridLayout.addWidget(self.__assignmentEdit, 0, 4, 1, 1)
        self.__assignmentEdit.setFont(font)

        # Function parameters assignment
        funcAssignLabel = QLabel("Function params\nassignment")
        self.__funcAssignEdit = QLineEdit()
        self.__funcAssignEdit.setText(
            self.__settings.settings["FUNCTION_PARAM_ASSIGNMENT"])
        self.__funcAssignEdit.setToolTip(
            self.__settings.getDescription("FUNCTION_PARAM_ASSIGNMENT"))
        self.__funcAssignEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(funcAssignLabel, 1, 0, 1, 1)
        gridLayout.addWidget(self.__funcAssignEdit, 1, 1, 1, 1)
        self.__funcAssignEdit.setFont(font)

        # Dictionary separator
        dictSepLabel = QLabel("Dictionary separator")
        self.__dictSepEdit = QLineEdit()
        self.__dictSepEdit.setText(self.__settings.settings["DICT_COLON"])
        self.__dictSepEdit.setToolTip(
            self.__settings.getDescription("DICT_COLON"))
        self.__dictSepEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(dictSepLabel, 1, 3, 1, 1)
        gridLayout.addWidget(self.__dictSepEdit, 1, 4, 1, 1)
        self.__dictSepEdit.setFont(font)

        # Slice separator
        sliceSepLabel = QLabel("Slice separator")
        self.__sliceSepEdit = QLineEdit()
        self.__sliceSepEdit.setText(self.__settings.settings["SLICE_COLON"])
        self.__sliceSepEdit.setToolTip(
            self.__settings.getDescription("SLICE_COLON"))
        self.__sliceSepEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(sliceSepLabel, 2, 0, 1, 1)
        gridLayout.addWidget(self.__sliceSepEdit, 2, 1, 1, 1)
        self.__sliceSepEdit.setFont(font)

        # Interpreter
        inLabel = QLabel("Interpreter")
        self.__inEdit = QLineEdit()
        self.__inEdit.setText(self.__settings.settings["SHEBANG"])
        self.__inEdit.setToolTip(self.__settings.getDescription("SHEBANG"))
        self.__inEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(inLabel, 2, 3, 1, 1)
        gridLayout.addWidget(self.__inEdit, 2, 4, 1, 1)
        self.__inEdit.setFont(font)

        # Coding spec
        codingLabel = QLabel("Output encoding")
        self.__outCodingEdit = QLineEdit()
        self.__outCodingEdit.setText(self.__settings.settings["CODING"])
        self.__outCodingEdit.setToolTip(
            self.__settings.getDescription("CODING"))
        self.__outCodingEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(codingLabel, 3, 0, 1, 1)
        gridLayout.addWidget(self.__outCodingEdit, 3, 1, 1, 1)
        self.__outCodingEdit.setFont(font)

        # Src coding comment
        srcCodingLabel = QLabel("File encoding\ncomment")
        self.__srcCodingEdit = QLineEdit()
        self.__srcCodingEdit.setText(self.__settings.settings["CODING_SPEC"])
        self.__srcCodingEdit.setToolTip(
            self.__settings.getDescription("CODING_SPEC"))
        self.__srcCodingEdit.textChanged.connect(self.__validate)
        gridLayout.addWidget(srcCodingLabel, 3, 3, 1, 1)
        gridLayout.addWidget(self.__srcCodingEdit, 3, 4, 1, 1)
        self.__srcCodingEdit.setFont(font)

        layout.addLayout(gridLayout)

        # Boilerplate
        boilLabel = QLabel("Boilerplate  ")
        boilLabel.setAlignment(Qt.AlignTop)
        self.__boilEdit = QTextEdit()
        self.__boilEdit.setPlainText(self.__settings.settings["BOILERPLATE"])
        self.__boilEdit.setToolTip(
            self.__settings.getDescription("BOILERPLATE"))
        self.__boilEdit.setTabChangesFocus(True)
        self.__boilEdit.setAcceptRichText(False)
        self.__boilEdit.setFont(font)
        self.__boilEdit.textChanged.connect(self.__validate)
        boilLayout = QHBoxLayout()
        boilLayout.addWidget(boilLabel)
        boilLayout.addWidget(self.__boilEdit)
        layout.addLayout(boilLayout)

        # Now check boxes and radio buttons
        cbGridLayout = QGridLayout()
        self.__keepBlanks = QCheckBox("Keep blank lines")
        self.__keepBlanks.setChecked(
            self.__settings.settings["KEEP_BLANK_LINES"])
        self.__keepBlanks.setToolTip(
            self.__settings.getDescription("KEEP_BLANK_LINES"))
        cbGridLayout.addWidget(self.__keepBlanks, 0, 0, 1, 1)

        self.__addBlanks = QCheckBox("Add blank lines around comments")
        self.__addBlanks.setChecked(
            self.__settings.settings["ADD_BLANK_LINES_AROUND_COMMENTS"])
        self.__addBlanks.setToolTip(
            self.__settings.getDescription("ADD_BLANK_LINES_AROUND_COMMENTS"))
        cbGridLayout.addWidget(self.__addBlanks, 0, 2, 1, 1)

        self.__justifyDoc = QCheckBox("Left justify doc strings")
        self.__justifyDoc.setChecked(
            self.__settings.settings["LEFTJUST_DOC_STRINGS"])
        self.__justifyDoc.setToolTip(
            self.__settings.getDescription("LEFTJUST_DOC_STRINGS"))
        cbGridLayout.addWidget(self.__justifyDoc, 1, 0, 1, 1)

        self.__wrapDoc = QCheckBox("Wrap long doc strings")
        self.__wrapDoc.setChecked(self.__settings.settings["WRAP_DOC_STRINGS"])
        self.__wrapDoc.setToolTip(
            self.__settings.getDescription("WRAP_DOC_STRINGS"))
        cbGridLayout.addWidget(self.__wrapDoc, 1, 2, 1, 1)

        self.__recodeStrings = QCheckBox("Try to decode strings")
        self.__recodeStrings.setChecked(
            self.__settings.settings["RECODE_STRINGS"])
        self.__recodeStrings.setToolTip(
            self.__settings.getDescription("RECODE_STRINGS"))
        cbGridLayout.addWidget(self.__recodeStrings, 2, 0, 1, 1)

        self.__splitStrings = QCheckBox("Split long strings")
        self.__splitStrings.setChecked(
            self.__settings.settings["CAN_SPLIT_STRINGS"])
        self.__splitStrings.setToolTip(
            self.__settings.getDescription("CAN_SPLIT_STRINGS"))
        cbGridLayout.addWidget(self.__splitStrings, 2, 2, 1, 1)

        self.__keepUnassignedConst = QCheckBox("Keep unassigned constants")
        self.__keepUnassignedConst.setChecked(
            self.__settings.settings["KEEP_UNASSIGNED_CONSTANTS"])
        self.__keepUnassignedConst.setToolTip(
            self.__settings.getDescription("KEEP_UNASSIGNED_CONSTANTS"))
        cbGridLayout.addWidget(self.__keepUnassignedConst, 3, 0, 1, 1)

        self.__parenTuple = QCheckBox("Parenthesize tuple display")
        self.__parenTuple.setChecked(
            self.__settings.settings["PARENTHESIZE_TUPLE_DISPLAY"])
        self.__parenTuple.setToolTip(
            self.__settings.getDescription("PARENTHESIZE_TUPLE_DISPLAY"))
        cbGridLayout.addWidget(self.__parenTuple, 3, 2, 1, 1)

        self.__javaListDedent = QCheckBox("Java style list dedent")
        self.__javaListDedent.setChecked(
            self.__settings.settings["JAVA_STYLE_LIST_DEDENT"])
        self.__javaListDedent.setToolTip(
            self.__settings.getDescription("JAVA_STYLE_LIST_DEDENT"))
        cbGridLayout.addWidget(self.__javaListDedent, 4, 0, 1, 1)

        layout.addLayout(cbGridLayout)

        # Quotes radio buttons
        quotesGroupbox = QGroupBox("Quotes")
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth( \
                        quotesGroupbox.sizePolicy().hasHeightForWidth() )
        quotesGroupbox.setSizePolicy(sizePolicy)

        layoutQG = QVBoxLayout(quotesGroupbox)
        self.__use1RButton = QRadioButton(
            "Use apostrophes instead of quotes for string literals",
            quotesGroupbox)
        layoutQG.addWidget(self.__use1RButton)
        self.__use2RButton = QRadioButton(
            "Use quotes instead of apostrophes for string literals",
            quotesGroupbox)
        layoutQG.addWidget(self.__use2RButton)
        self.__useAsIsRButton = QRadioButton("Do not make changes",
                                             quotesGroupbox)
        layoutQG.addWidget(self.__useAsIsRButton)
        use1 = self.__settings.settings["SINGLE_QUOTED_STRINGS"]
        use2 = self.__settings.settings["DOUBLE_QUOTED_STRINGS"]
        if use1:
            self.__use1RButton.setChecked(True)
        elif use2:
            self.__use2RButton.setChecked(True)
        else:
            self.__useAsIsRButton.setChecked(True)
        layout.addWidget(quotesGroupbox)

        fontMetrics = QFontMetrics(font)
        editWidth = fontMetrics.width("iso8859-10  ") + 20
        self.__colsEdit.setFixedWidth(editWidth)
        self.__funcAssignEdit.setFixedWidth(editWidth)
        self.__sliceSepEdit.setFixedWidth(editWidth)
        self.__outCodingEdit.setFixedWidth(editWidth)

        # Buttons at the bottom
        buttonBox = QDialogButtonBox(self)
        buttonBox.setOrientation(Qt.Horizontal)
        buttonBox.setStandardButtons(QDialogButtonBox.Cancel)
        self.__resetButton = buttonBox.addButton("Reset to Default",
                                                 QDialogButtonBox.ActionRole)
        self.__resetButton.setToolTip(
            "Mostly as recommended by PEP 8 / PEP 308")
        self.__resetButton.clicked.connect(self.__reset)
        self.__tidyButton = buttonBox.addButton("Tidy",
                                                QDialogButtonBox.ActionRole)
        self.__tidyButton.setToolTip("Save settings and run PythonTidy")
        self.__tidyButton.setDefault(True)
        self.__tidyButton.clicked.connect(self.__saveAndAccept)
        layout.addWidget(buttonBox)

        buttonBox.rejected.connect(self.close)
        return
Exemple #30
0
    def __createLayout(self, pathsToCommit, pathsToIgnore):
        " Creates the dialog layout "

        self.resize(640, 480)
        self.setSizeGripEnabled(True)

        vboxLayout = QVBoxLayout(self)

        # Paths to commit part
        commitHeaderFrame = QFrame()
        commitHeaderFrame.setFrameStyle(QFrame.StyledPanel)
        commitHeaderFrame.setAutoFillBackground(True)
        self.__setLightPalette(commitHeaderFrame)
        commitHeaderFrame.setFixedHeight(24)

        expandingCommitSpacer = QSpacerItem(10, 10, QSizePolicy.Expanding)

        self.__selectAllButton = QToolButton()
        self.__selectAllButton.setAutoRaise(True)
        self.__selectAllButton.setIcon(
            PixmapCache().getIcon(pluginHomeDir + 'svnselectall.png'))
        self.__selectAllButton.setFixedSize(20, 20)
        self.__selectAllButton.setToolTip("Select all")
        self.__selectAllButton.setFocusPolicy(Qt.NoFocus)
        self.__selectAllButton.clicked.connect(self.__onSelectAll)

        commitHeaderLayout = QHBoxLayout()
        commitHeaderLayout.setContentsMargins(3, 0, 0, 0)
        commitHeaderLayout.addWidget(
            QLabel("Paths to commit (total: " + str(len(pathsToCommit)) + ")"))
        commitHeaderLayout.addSpacerItem(expandingCommitSpacer)
        commitHeaderLayout.addWidget(self.__selectAllButton)
        commitHeaderFrame.setLayout(commitHeaderLayout)

        vboxLayout.addWidget(commitHeaderFrame)

        self.__pathToCommitView = QTreeWidget()
        self.__configTable(self.__pathToCommitView)

        self.__pathToCommitHeader = QTreeWidgetItem(["", "Path", "Status", ""])
        self.__pathToCommitView.setHeaderItem(self.__pathToCommitHeader)
        self.__pathToCommitView.header().setSortIndicator(
            PATH_COL, Qt.AscendingOrder)
        self.__pathToCommitView.itemChanged.connect(self.__onCommitPathChanged)
        vboxLayout.addWidget(self.__pathToCommitView)

        # Paths to ignore part
        headerFrame = QFrame()
        headerFrame.setFrameStyle(QFrame.StyledPanel)
        headerFrame.setAutoFillBackground(True)
        self.__setLightPalette(headerFrame)
        headerFrame.setFixedHeight(24)

        ignoreLabel = QLabel("Ignored paths (total: " +
                             str(len(pathsToIgnore)) + ")")
        expandingSpacer = QSpacerItem(10, 10, QSizePolicy.Expanding)

        self.__showHideIgnoredButton = QToolButton()
        self.__showHideIgnoredButton.setAutoRaise(True)
        self.__showHideIgnoredButton.setIcon(PixmapCache().getIcon('less.png'))
        self.__showHideIgnoredButton.setFixedSize(20, 20)
        self.__showHideIgnoredButton.setToolTip("Show ignored path list")
        self.__showHideIgnoredButton.setFocusPolicy(Qt.NoFocus)
        self.__showHideIgnoredButton.clicked.connect(self.__onShowHideIgnored)

        ignoredHeaderLayout = QHBoxLayout()
        ignoredHeaderLayout.setContentsMargins(3, 0, 0, 0)
        ignoredHeaderLayout.addWidget(ignoreLabel)
        ignoredHeaderLayout.addSpacerItem(expandingSpacer)
        ignoredHeaderLayout.addWidget(self.__showHideIgnoredButton)
        headerFrame.setLayout(ignoredHeaderLayout)

        vboxLayout.addWidget(headerFrame)

        self.__pathToIgnoreView = QTreeWidget()
        self.__configTable(self.__pathToIgnoreView)
        self.__pathToIgnoreView.setVisible(False)

        pathToIgnoreHeader = QTreeWidgetItem(["Path", "Status"])
        self.__pathToIgnoreView.setHeaderItem(pathToIgnoreHeader)
        self.__pathToIgnoreView.header().setSortIndicator(0, Qt.AscendingOrder)
        vboxLayout.addWidget(self.__pathToIgnoreView)

        # Message part
        vboxLayout.addWidget(QLabel("Message"))
        self.__message = QTextEdit()
        self.__message.setAcceptRichText(False)
        metrics = QFontMetrics(self.__message.font())
        rect = metrics.boundingRect("X")
        self.__message.setFixedHeight(rect.height() * 4 + 5)
        vboxLayout.addWidget(self.__message)

        # Diff part
        diffHeaderFrame = QFrame()
        diffHeaderFrame.setFrameStyle(QFrame.StyledPanel)
        diffHeaderFrame.setAutoFillBackground(True)
        self.__setLightPalette(diffHeaderFrame)
        diffHeaderFrame.setFixedHeight(24)

        diffLabel = QLabel("Diff")
        diffExpandingSpacer = QSpacerItem(10, 10, QSizePolicy.Expanding)

        self.__showHideDiffButton = QToolButton()
        self.__showHideDiffButton.setAutoRaise(True)
        self.__showHideDiffButton.setIcon(PixmapCache().getIcon('less.png'))
        self.__showHideDiffButton.setFixedSize(20, 20)
        self.__showHideDiffButton.setToolTip("Show diff")
        self.__showHideDiffButton.setFocusPolicy(Qt.NoFocus)
        self.__showHideDiffButton.clicked.connect(self.__onShowHideDiff)

        diffLayout = QHBoxLayout()
        diffLayout.setContentsMargins(3, 0, 0, 0)
        diffLayout.addWidget(diffLabel)
        diffLayout.addSpacerItem(diffExpandingSpacer)
        diffLayout.addWidget(self.__showHideDiffButton)
        diffHeaderFrame.setLayout(diffLayout)

        self.__diffViewer = DiffTabWidget()
        self.__diffViewer.setHTML(self.NODIFF)
        self.__diffViewer.setVisible(False)

        vboxLayout.addWidget(diffHeaderFrame)
        vboxLayout.addWidget(self.__diffViewer)

        # Buttons at the bottom
        buttonBox = QDialogButtonBox(self)
        buttonBox.setOrientation(Qt.Horizontal)
        buttonBox.setStandardButtons(QDialogButtonBox.Ok
                                     | QDialogButtonBox.Cancel)
        self.__OKButton = buttonBox.button(QDialogButtonBox.Ok)
        self.__OKButton.setText("Commit")
        buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
        buttonBox.accepted.connect(self.userAccept)
        buttonBox.rejected.connect(self.close)
        vboxLayout.addWidget(buttonBox)
        return