Ejemplo n.º 1
0
    def eventFilter(self, widget, event):
        """Using  the custom event filter to paint the background."""
        if event.type() == QtCore.QEvent.Paint:
            painter = QtGui.QPainter()
            painter.begin(self)
            font = common.font_db.secondary_font(
                font_size=common.MEDIUM_FONT_SIZE())[0]
            painter.setFont(font)
            painter.setRenderHints(QtGui.QPainter.Antialiasing)

            o = common.INDICATOR_WIDTH()
            rect = self.rect().marginsRemoved(QtCore.QMargins(o, o, o, o))
            painter.setBrush(QtGui.QColor(250, 250, 250, 255))
            painter.setPen(QtCore.Qt.NoPen)
            painter.drawRoundedRect(rect, o * 2, o * 2)

            center = rect.center()
            rect.setWidth(rect.width() - common.MARGIN())
            rect.setHeight(rect.height() - common.MARGIN())
            rect.moveCenter(center)

            text = u'Click the plus icon on the top to add a note'
            text = text if not len(self.todoeditors_widget.items) else u''
            common.draw_aliased_text(painter, font, rect, text,
                                     QtCore.Qt.AlignCenter,
                                     common.SECONDARY_BACKGROUND)
            painter.end()
        return False
Ejemplo n.º 2
0
    def __init__(self, text, color=common.TEXT, size=common.MEDIUM_FONT_SIZE(), parent=None):
        super(PaintedLabel, self).__init__(text, parent=parent)
        self._size = size
        self._color = color
        self._text = text

        self.update_size()
Ejemplo n.º 3
0
    def paintEvent(self, event):
        """The control button's paint method - shows the the set text and
        an underline if the tab is active."""
        if not self.stacked_widget():
            return

        rect = QtCore.QRect(self.rect())

        painter = QtGui.QPainter()
        painter.begin(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing, True)

        option = QtWidgets.QStyleOptionButton()
        option.initFrom(self)
        hover = option.state & QtWidgets.QStyle.State_MouseOver
        painter.setPen(QtCore.Qt.NoPen)

        if self.current_index() == self.index:
            color = common.TEXT_SELECTED if hover else common.TEXT
            painter.setBrush(color)
        else:
            color = common.TEXT if hover else common.BACKGROUND
            painter.setBrush(color)

        font, metrics = common.font_db.primary_font(common.MEDIUM_FONT_SIZE())

        if (metrics.width(self.text()) +
            (common.MARGIN() * 0.5)) < self.rect().width():
            text = metrics.elidedText(self.text(), QtCore.Qt.ElideRight,
                                      self.rect().width())
            width = metrics.width(text)

            x = (self.width() / 2.0) - (width / 2.0)
            y = self.rect().center().y() + (metrics.ascent() * 0.5)
            path = delegate.get_painter_path(x, y, font, text)
            painter.drawPath(path)
        else:
            pixmap = images.ImageCache.get_rsc_pixmap(self.icon, color,
                                                      common.MARGIN())
            # _rect = QtCore.QRect(self.rect())
            _rect = pixmap.rect()
            _rect.moveCenter(self.rect().center())
            painter.drawPixmap(_rect, pixmap, pixmap.rect())

        rect.setHeight(common.ROW_SEPARATOR() * 2.0)
        painter.setPen(QtCore.Qt.NoPen)
        rect.setWidth(self.rect().width())

        if self.current_index() == self.index:
            painter.setOpacity(0.9)
            color = common.TEXT if hover else common.REMOVE
        else:
            painter.setOpacity(0.3)
            color = common.TEXT if hover else common.FAVOURITE

        painter.setBrush(color)
        painter.drawRect(rect)
        painter.end()
Ejemplo n.º 4
0
    def paintEvent(self, event):
        """Drawing a rounded background help to identify that the widget
        is in standalone mode."""
        painter = QtGui.QPainter()
        painter.begin(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)

        rect = QtCore.QRect(self.rect())
        pen = QtGui.QPen(QtGui.QColor(35, 35, 35, 255))
        pen.setWidth(1.0)
        painter.setPen(pen)
        painter.setBrush(common.SEPARATOR.darker(110))

        if self._frameless is True:
            o = common.INDICATOR_WIDTH()
            rect = rect.marginsRemoved(QtCore.QMargins(o, o, o, o))
            painter.drawRoundedRect(rect, o * 3, o * 3)
        else:
            painter.drawRect(rect)

        if not self._initialized:
            font, metrics = common.font_db.primary_font(
                common.MEDIUM_FONT_SIZE())
            rect = QtCore.QRect(self.rect())
            align = QtCore.Qt.AlignCenter
            color = QtGui.QColor(255, 255, 255, 80)

            pixmaprect = QtCore.QRect(rect)
            center = pixmaprect.center()
            s = common.ASSET_ROW_HEIGHT() * 1.5
            o = common.MARGIN()

            pixmaprect.setWidth(s)
            pixmaprect.setHeight(s)
            pixmaprect.moveCenter(center)

            painter.setBrush(QtGui.QColor(0, 0, 0, 20))
            pen = QtGui.QPen(QtGui.QColor(0, 0, 0, 20))
            painter.setPen(pen)

            painter.drawRoundedRect(
                pixmaprect.marginsAdded(
                    QtCore.QMargins(o * 3, o * 3, o * 3, o * 3)), o, o)

            pixmap = images.ImageCache.get_rsc_pixmap(u'icon_bw', None, s)
            painter.setOpacity(0.5)
            painter.drawPixmap(pixmaprect, pixmap, pixmap.rect())
            painter.setOpacity(1.0)

            rect.setTop(pixmaprect.bottom() + (o * 0.5))
            rect.setHeight(metrics.height())
            common.draw_aliased_text(painter, font, rect, self.init_progress,
                                     align, color)

        painter.end()
Ejemplo n.º 5
0
 def _showEvent(parent, event):
     """Elides the action text to fit the size of the widget upon showing."""
     w = []
     for action in parent.actions():
         if not action.text():
             continue
         font, metrics = common.font_db.primary_font(
             common.MEDIUM_FONT_SIZE())
         width = metrics.width(action.text())
         width += (common.MARGIN() * 4)
         w.append(int(width))
     if w:
         parent.setFixedWidth(max(w))
Ejemplo n.º 6
0
    def paintEvent(self, event):
        """Paint event for smooth font display."""
        painter = QtGui.QPainter()
        painter.begin(self)

        option = QtWidgets.QStyleOption()
        option.initFrom(self)
        hover = option.state & QtWidgets.QStyle.State_MouseOver
        pressed = option.state & QtWidgets.QStyle.State_Sunken
        focus = option.state & QtWidgets.QStyle.State_HasFocus

        color = common.TEXT if self.isEnabled() else common.SECONDARY_TEXT
        color = common.TEXT_SELECTED if hover else color

        bg_color = common.SECONDARY_TEXT if self.isEnabled(
        ) else common.SECONDARY_BACKGROUND.darker(110)
        bg_color = common.TEXT if hover else bg_color
        bg_color = common.SEPARATOR if pressed else bg_color

        if focus:
            pen = QtGui.QPen(common.FAVOURITE)
        else:
            pen = QtGui.QPen(bg_color)
            pen.setWidthF(common.ROW_SEPARATOR())

        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setBrush(bg_color)
        painter.setPen(pen)
        o = common.ROW_SEPARATOR()
        rect = self.rect().marginsRemoved(QtCore.QMargins(o, o, o, o))
        o = common.INDICATOR_WIDTH() * 0.7
        painter.drawRoundedRect(rect, o, o)

        rect = QtCore.QRect(self.rect())
        center = rect.center()
        rect.setWidth(rect.width() - (common.INDICATOR_WIDTH() * 2))
        rect.moveCenter(center)
        common.draw_aliased_text(
            painter,
            common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0],
            rect,
            self.text(),
            QtCore.Qt.AlignCenter,
            color
        )

        painter.end()
Ejemplo n.º 7
0
    def __init__(self, short_text, long_text, parent=None):
        global _message_box_instance
        _message_box_instance = self

        super(MessageBox, self).__init__(parent=parent)

        if parent is None:
            common.set_custom_stylesheet(self)

        self.short_text_label = QtWidgets.QLabel(short_text, parent=self)
        self.short_text_label.setWordWrap(True)
        self.long_text_label = QtWidgets.QLabel(long_text, parent=self)
        self.long_text_label.setWordWrap(True)

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setAttribute(QtCore.Qt.WA_NoSystemBackground)

        self.setWindowFlags(
            QtCore.Qt.Dialog |
            QtCore.Qt.FramelessWindowHint |
            QtCore.Qt.NoDropShadowWindowHint |
            QtCore.Qt.WindowStaysOnTopHint
        )
        self.installEventFilter(self)
        self.setSizePolicy(
            QtWidgets.QSizePolicy.Preferred,
            QtWidgets.QSizePolicy.Preferred
        )
        self._create_UI()

        self.setStyleSheet("""
QWidget {{
    color: rgba({TEXT});
    background-color: rgba({BG});
    font-family: "{FAMILY}";
    font-size: {SIZE}px;
}}
            """.format(
            SIZE=common.LARGE_FONT_SIZE(),
            FAMILY=common.font_db.primary_font(
                common.MEDIUM_FONT_SIZE())[0].family(),
            TEXT=common.rgb(self.secondary_color.darker(150)),
            BG=common.rgb(self.secondary_color)))

        self.ok_button.clicked.connect(
            lambda: self.done(QtWidgets.QDialog.Accepted))
Ejemplo n.º 8
0
 def paintEvent(self, event):
     """Paints the indicator area."""
     painter = QtGui.QPainter()
     painter.begin(self)
     pen = QtGui.QPen(common.FAVOURITE)
     pen.setWidth(common.INDICATOR_WIDTH())
     painter.setPen(pen)
     painter.setBrush(common.FAVOURITE)
     painter.setOpacity(0.35)
     painter.drawRect(self.rect())
     painter.setOpacity(1.0)
     common.draw_aliased_text(
         painter,
         common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0],
         self.rect(), u'Drop to add bookmark', QtCore.Qt.AlignCenter,
         common.FAVOURITE)
     painter.end()
Ejemplo n.º 9
0
    def __init__(self, pixmap, text, parent=None):
        super(DragPixmap, self).__init__(parent=parent)
        self._pixmap = pixmap
        self._text = text

        font, metrics = common.font_db.primary_font(common.MEDIUM_FONT_SIZE())
        self._text_width = metrics.width(text)

        width = self._text_width + common.MARGIN()
        width = common.WIDTH() + common.MARGIN() if width > common.WIDTH(
        ) else width

        self.setFixedHeight(pixmap.height())
        self.setFixedWidth(pixmap.width() + common.INDICATOR_WIDTH() + width +
                           common.INDICATOR_WIDTH())

        self.setAttribute(QtCore.Qt.WA_NoSystemBackground)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window)
        self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
        self.adjustSize()
Ejemplo n.º 10
0
    def paintEvent(self, event):
        painter = QtGui.QPainter()
        painter.begin(self)
        o = common.MARGIN()
        o = 0
        rect = self.rect().marginsRemoved(QtCore.QMargins(o, o, o, o))

        painter.setBrush(common.SEPARATOR)
        painter.setPen(QtCore.Qt.NoPen)

        painter.setOpacity(0.5)
        painter.drawRoundedRect(rect, common.INDICATOR_WIDTH(),
                                common.INDICATOR_WIDTH())
        painter.setOpacity(1.0)

        painter.setBrush(QtCore.Qt.NoBrush)
        painter.setPen(common.TEXT)
        painter.setFont(
            common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0])

        painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
        painter.end()
Ejemplo n.º 11
0
    def paintEvent(self, event):
        painter = QtGui.QPainter()
        painter.begin(self)

        painter.setPen(QtCore.Qt.NoPen)
        painter.setBrush(common.SECONDARY_BACKGROUND)
        painter.setOpacity(0.6)
        painter.drawRoundedRect(self.rect(), 4, 4)
        painter.setOpacity(1.0)

        pixmap_rect = QtCore.QRect(0, 0, self.height(), self.height())
        painter.drawPixmap(pixmap_rect, self._pixmap, self._pixmap.rect())

        width = self._text_width + common.INDICATOR_WIDTH()
        width = 640 if width > 640 else width
        rect = QtCore.QRect(
            self._pixmap.rect().width() + common.INDICATOR_WIDTH(), 0, width,
            self.height())
        common.draw_aliased_text(
            painter,
            common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0], rect,
            self._text, QtCore.Qt.AlignCenter, common.TEXT_SELECTED)
        painter.end()
Ejemplo n.º 12
0
    def paintEvent(self, event):
        """Indicating the visibility of the TaskFolderWidget."""
        if not self.view().isHidden():
            painter = QtGui.QPainter()
            painter.begin(self)

            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)
            painter.setPen(QtCore.Qt.NoPen)
            painter.setBrush(QtGui.QColor(0, 0, 0, 30))
            painter.drawRect(self.rect())

            rect = self.rect()
            rect.setHeight(common.ROW_SEPARATOR() * 2.0)
            painter.setBrush(common.ADD)
            painter.drawRect(rect)

            common.draw_aliased_text(
                painter,
                common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0],
                self.rect(), u'...', QtCore.Qt.AlignCenter, common.BACKGROUND)
            painter.end()
        else:
            super(FilesTabButton, self).paintEvent(event)
Ejemplo n.º 13
0
    def _create_UI(self):
        o = common.INDICATOR_WIDTH()
        self.setMinimumWidth(common.WIDTH() * 0.5)
        height = common.ROW_HEIGHT() * 0.8

        widget = QtWidgets.QWidget(parent=self)
        QtWidgets.QVBoxLayout(widget)
        widget.layout().setAlignment(QtCore.Qt.AlignCenter)
        widget.layout().setContentsMargins(0, 0, 0, 0)
        widget.layout().setSpacing(o * 2)
        self.setWidget(widget)

        # Main group
        grpA = common_ui.get_group(parent=widget)

        # GROUP
        grp = common_ui.get_group(parent=grpA)

        numvalidator = QtGui.QRegExpValidator(parent=self)
        numvalidator.setRegExp(QtCore.QRegExp(ur'[0-9]+[\.]?[0-9]*'))
        textvalidator = QtGui.QRegExpValidator(parent=self)
        textvalidator.setRegExp(QtCore.QRegExp(ur'[a-zA-Z0-9]+'))

        #   ROW1
        self.rectangles_widget = RectanglesWidget(parent=self)
        grp.layout().addWidget(self.rectangles_widget, 1)

        #   ROW
        row = common_ui.add_row(u'Resolution', parent=grp, height=height)
        self.width_editor = common_ui.LineEdit(parent=self)
        self.width_editor.setPlaceholderText(u'Width...')
        self.width_editor.setValidator(numvalidator)
        row.layout().addWidget(self.width_editor, 0)
        self.height_editor = common_ui.LineEdit(parent=self)
        self.height_editor.setPlaceholderText(u'Height...')
        self.height_editor.setValidator(numvalidator)
        row.layout().addWidget(self.height_editor, 0)

        #   ROW
        row = common_ui.add_row(u'Frame rate', parent=grp, height=height)
        self.framerate_editor = common_ui.LineEdit(parent=self)
        self.framerate_editor.setPlaceholderText(u'Frame rate...')
        self.framerate_editor.setValidator(numvalidator)
        row.layout().addWidget(self.framerate_editor, 0)

        # ********************************************
        grp = common_ui.get_group(parent=grpA)
        row = common_ui.add_row(u'Bookmark Prefix', parent=grp, height=height)
        self.prefix_editor = common_ui.LineEdit(parent=self)
        self.prefix_editor.setPlaceholderText(u'Prefix (eg. \'MYJOB\')...')
        self.prefix_editor.setValidator(textvalidator)

        self.suggest_prefix_button = common_ui.PaintedButton(u'Suggest')
        self.suggest_prefix_button.setFixedHeight(height * 0.7)
        row.layout().addWidget(self.prefix_editor, 0)
        row.layout().addWidget(self.suggest_prefix_button, 0)

        # ********************************************
        grp = common_ui.get_group(parent=grpA)

        row = common_ui.add_row(u'Start Frame', parent=grp, height=height)
        self.startframe_editor = common_ui.LineEdit(parent=self)
        self.startframe_editor.setPlaceholderText(u'Start Frame...')
        self.startframe_editor.setValidator(numvalidator)
        row.layout().addWidget(self.startframe_editor, 0)

        row = common_ui.add_row(u'Duration', parent=grp, height=height)
        self.duration_editor = common_ui.LineEdit(parent=self)
        self.duration_editor.setPlaceholderText(u'Duration...')
        self.duration_editor.setValidator(numvalidator)
        row.layout().addWidget(self.duration_editor, 0)
        # ********************************************
        grp = common_ui.get_group(parent=widget)
        row = common_ui.add_row(u'Asset Identifier', parent=grp)
        self.identifier_editor = common_ui.LineEdit(parent=row)
        self.identifier_editor.setPlaceholderText(
            u'Asset identifier, eg. \'workspace.mel\'')
        row.layout().addWidget(self.identifier_editor, 0)

        text = u'Only folders containing this file will be treated as assets.<br>\
Using the default Maya Workspace the identifier normally is \
<span style="text-decoration: underline;">workspace.mel</span>, but \
any other file can be used as long it is present in the root of \
the asset.<br>If not set, all folders inside the Bookmark \
will be read as assets.'.format(common.PRODUCT)
        common_ui.add_description(text, label='Hint', parent=grp)
        # ********************************************
        grpA = common_ui.get_group(parent=widget)

        # Slack API token
        label = common_ui.PaintedLabel(u'Slack Settings',
                                       size=common.MEDIUM_FONT_SIZE() * 1.2)
        grpA.layout().addWidget(label, 0)
        grpA.layout().addSpacing(o * 2)

        grp = common_ui.get_group(parent=grpA)

        row = common_ui.add_row(u'Slack API Token', parent=grp, height=height)
        self.slacktoken_editor = common_ui.LineEdit(parent=self)
        self.slacktoken_editor.setPlaceholderText(
            u'xoxb-01234567890-0123456...')
        button = common_ui.PaintedButton(u'Test Token')
        button.setFixedHeight(height * 0.7)
        button.clicked.connect(self.test_slack_token)
        row.layout().addWidget(self.slacktoken_editor, 0)
        row.layout().addWidget(button)
        text = u'{p} can send messages to team-members using Slack.<br><br>\
To get started, create a new app and install it for your workspace. \
Paste the generated <span style="{h}">OAuth</span> token, usually starting with "xoxb-0123..." above.<br> \
See <a href="http://api.slack.com/apps">http://api.slack.com/apps</a> for more information.<br><br> \
The Slack app needs to have the <span style="{h}">users:read</span> and \
<span style="{h}">chat:write</span> scopes enabled. To send messages to channels \
the bot is not part of, add <span style="{h}">chat:write.public</span>. \
Scopes <span style="{h}">channels:read</span> and <span style="{h}">groups:read</span> are needed to list available \
Slack Channels.<br><br>'.format(p=common.PRODUCT,
                                h='color: rgba({});'.format(
                                    common.rgb(common.ADD)))
        common_ui.add_description(text, label=u'Slack API Hint', parent=grp)
        # ********************************************
        self.widget().layout().addStretch(1)
Ejemplo n.º 14
0
 def get_width(self):
     o = common.INDICATOR_WIDTH() * 3
     font, metrics = common.font_db.primary_font(common.MEDIUM_FONT_SIZE())
     return metrics.width(self.text()) + (o * 2)
Ejemplo n.º 15
0
    def paint_name(self, *args):
        """Paints the name and the number of files available for the given data-key."""
        rectangles, painter, option, index, selected, focused, active, archived, favourite, hover, font, metrics, cursor_position = args
        if not index.data(QtCore.Qt.DisplayRole):
            return

        if index.data(common.TodoCountRole):
            color = common.TEXT_SELECTED if hover else common.TEXT
        else:
            color = common.TEXT if hover else common.BACKGROUND_SELECTED
        color = common.TEXT_SELECTED if selected else color

        font = common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0]

        o = common.MARGIN()
        rect = QtCore.QRect(option.rect)
        if selected:
            pixmap = images.ImageCache.get_rsc_pixmap(u'check', common.ADD, o)
            _rect = QtCore.QRect(option.rect)
            _rect.setSize(pixmap.size())
            _rect.moveCenter(option.rect.center())
            _rect.moveLeft(option.rect.left() +
                           ((o + common.INDICATOR_WIDTH()) * 0.5))
            painter.drawPixmap(_rect, pixmap, pixmap.rect())
            rect = rect.marginsRemoved(QtCore.QMargins(o * 2, 0, o, 0))
        else:
            rect = rect.marginsRemoved(QtCore.QMargins(o, 0, o, 0))

        text = index.data(QtCore.Qt.DisplayRole).upper()
        width = 0
        width = common.draw_aliased_text(
            painter, font, rect, text,
            QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft, color)
        rect.setLeft(rect.left() + width)

        items = []
        # Adding an indicator for the number of items in the folder
        if index.data(common.TodoCountRole):
            if index.data(common.TodoCountRole) >= 999:
                text = u'999+ items'
            else:
                text = u'{} items'.format(index.data(common.TodoCountRole))
            color = common.TEXT_SELECTED if selected else common.FAVOURITE
            color = common.TEXT_SELECTED if hover else color
            items.append((text, color))
        else:
            color = common.TEXT if selected else common.BACKGROUND
            color = common.TEXT if hover else color
            items.append((u'n/a', color))

        if index.data(QtCore.Qt.ToolTipRole):
            color = common.TEXT_SELECTED if selected else common.TEXT
            color = common.TEXT_SELECTED if hover else color
            items.append((index.data(QtCore.Qt.ToolTipRole), color))

        for idx, val in enumerate(items):
            text, color = val
            if idx == 0:
                align = QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft
            else:
                align = QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight

            width = common.draw_aliased_text(
                painter,
                common.font_db.secondary_font(common.SMALL_FONT_SIZE())[0],
                rect, u'    |    ', align, common.SEPARATOR)
            rect.setLeft(rect.left() + width)

            width = common.draw_aliased_text(
                painter,
                common.font_db.primary_font(common.MEDIUM_FONT_SIZE())[0],
                rect, text, align, color)
            rect.setLeft(rect.left() + width)
Ejemplo n.º 16
0
 def get_maxHeight(self):
     """Returns the desired minimum height of the editor."""
     font, metrics = common.font_db.primary_font(common.MEDIUM_FONT_SIZE())
     line_height = (metrics.lineSpacing()) * 35  # Lines tall
     return line_height
Ejemplo n.º 17
0
    def highlightBlock(self, text):
        """The highlighting cases are defined in the common module.
        In general we're tying to replicate the ``Markdown`` syntax rendering.

        Args:
            case (str): HIGHLIGHT_RULES dicy key.
            text (str): The text to assess.

        Returns:
            tuple: int, int, int

        """
        font = self.document().defaultFont()
        font.setPixelSize(common.MEDIUM_FONT_SIZE())

        char_format = QtGui.QTextCharFormat()
        char_format.setFont(font)
        char_format.setFontWeight(QtGui.QFont.Normal)
        self.setFormat(0, len(text), char_format)

        _font = char_format.font()
        _foreground = char_format.foreground()
        _weight = char_format.fontWeight()

        flag = NoHighlightFlag
        for case in HIGHLIGHT_RULES.itervalues():
            flag = flag | case[u'flag']

            if case[u'flag'] == HeadingHighlight:
                match = case[u're'].match(text)
                if match:
                    n = 3 - len(match.group(0))
                    font.setPixelSize(font.pixelSize() + (n * 4))
                    char_format.setFont(font)
                    self.setFormat(0, len(text), char_format)

                    char_format.setForeground(QtGui.QColor(0, 0, 0, 80))
                    self.setFormat(match.start(0), len(match.group(0)),
                                   char_format)

            if case[u'flag'] == PathHighlight:
                it = case[u're'].finditer(text)
                for match in it:
                    groups = match.groups()
                    if groups:
                        grp = match.group(0)
                        if grp:
                            char_format.setAnchor(True)
                            char_format.setForeground(common.ADD)
                            char_format.setAnchorHref(grp)
                            self.setFormat(match.start(0), len(grp),
                                           char_format)

            if case[u'flag'] == QuoteHighlight:
                it = case[u're'].finditer(text)
                for match in it:
                    groups = match.groups()
                    if groups:
                        if match.group(1) in (u'\'', u'\"'):
                            grp = match.group(2)
                            if grp:
                                char_format.setAnchor(True)
                                char_format.setForeground(common.ADD)
                                char_format.setAnchorHref(grp)
                                self.setFormat(match.start(2), len(grp),
                                               char_format)

                                char_format.setForeground(
                                    QtGui.QColor(0, 0, 0, 40))
                                self.setFormat(
                                    match.start(2) - 1, 1, char_format)
                                self.setFormat(
                                    match.start(2) + len(grp), 1, char_format)

            if case[u'flag'] == ItalicsHighlight:
                it = case[u're'].finditer(text)
                for match in it:
                    groups = match.groups()
                    if groups:
                        if match.group(1) in u'_':
                            grp = match.group(2)
                            if grp:
                                flag == flag | ItalicsHighlight
                                char_format.setFontItalic(True)
                                self.setFormat(match.start(2), len(grp),
                                               char_format)

                                char_format.setForeground(
                                    QtGui.QColor(0, 0, 0, 20))
                                self.setFormat(
                                    match.start(2) - 1, 1, char_format)
                                self.setFormat(
                                    match.start(2) + len(grp), 1, char_format)

            if case[u'flag'] == BoldHighlight:
                it = case[u're'].finditer(text)
                for match in it:
                    groups = match.groups()
                    if groups:
                        if match.group(1) in u'*':
                            grp = match.group(2)
                            if grp:
                                char_format.setFontWeight(QtGui.QFont.Bold)
                                self.setFormat(match.start(2), len(grp),
                                               char_format)

                                char_format.setForeground(
                                    QtGui.QColor(0, 0, 0, 20))
                                self.setFormat(
                                    match.start(2) - 1, 1, char_format)
                                self.setFormat(
                                    match.start(2) + len(grp), 1, char_format)

            char_format.setFont(_font)
            char_format.setForeground(_foreground)
            char_format.setFontWeight(_weight)
Ejemplo n.º 18
0
    def _create_UI(self):
        def get_row(vertical=False, parent=None):
            row = QtWidgets.QWidget(parent=parent)
            if vertical:
                QtWidgets.QVBoxLayout(row)
            else:
                QtWidgets.QHBoxLayout(row)
            row.layout().setContentsMargins(0, 0, 0, 0)
            row.layout().setSpacing(0)
            row.setSizePolicy(
                QtWidgets.QSizePolicy.Expanding,
                QtWidgets.QSizePolicy.Expanding,
            )
            parent.layout().addWidget(row)
            return row

        QtWidgets.QHBoxLayout(self)
        o = 0
        self.layout().setContentsMargins(o, o, o, o)
        self.layout().setSpacing(o)

        main_row = get_row(parent=self)
        main_row.layout().setContentsMargins(0, 0, 0, 0)
        main_row.layout().setSpacing(0)

        columns = get_row(vertical=True, parent=main_row)
        columns.layout().setContentsMargins(0, 0, 0, 0)
        columns.layout().setSpacing(0)

        short_text_row = get_row(parent=columns)

        columns.layout().addWidget(short_text_row, 1)
        long_text_row = get_row(parent=columns)

        pixmap = images.ImageCache.get_rsc_pixmap(
            self.icon, self.secondary_color.lighter(150), common.ROW_HEIGHT())
        label = QtWidgets.QLabel(parent=self)
        label.setPixmap(pixmap)
        label.setSizePolicy(
            QtWidgets.QSizePolicy.Minimum,
            QtWidgets.QSizePolicy.Expanding,
        )
        label.setStyleSheet(
            u'padding: {}px; background-color: rgba({});'.format(
                common.MEDIUM_FONT_SIZE(),
                common.rgb(self.primary_color)
            )
        )

        main_row.layout().insertWidget(0, label)

        short_text_row.layout().addWidget(self.short_text_label)
        self.short_text_label.setStyleSheet(
            u'padding:{m}px {s}px {m}px {s}px; background-color: rgba({c}); font-size: {s}px;'.format(
                m=common.MARGIN(),
                c=common.rgb(self.secondary_color.lighter(125)),
                s=common.MEDIUM_FONT_SIZE()
            ))
        self.short_text_label.setAlignment(QtCore.Qt.AlignLeft)

        long_text_row.layout().addWidget(self.long_text_label)
        self.long_text_label.setStyleSheet(
            u'padding:{m}px;background-color: rgba({c}); font-size:{s}px;'.format(
                m=common.MARGIN(),
                c=common.rgb(self.secondary_color),
                s=common.SMALL_FONT_SIZE()
            ))
        self.long_text_label.setAlignment(QtCore.Qt.AlignLeft)

        buttons_row = get_row(parent=columns)
        buttons_row.setStyleSheet(
            u'background-color: rgba({});'.format(common.rgb(self.secondary_color)))
        self.ok_button = QtWidgets.QPushButton(u'Ok', parent=self)
        buttons_row.layout().addWidget(self.ok_button)

        self.ok_button.setStyleSheet(
            """
        QPushButton {{
            font-size: {px}px;
            color: rgba(255,255,255,150);
            border-radius: {i}px;
            border: {s}px solid {c};
            margin: {i}px;
            padding: {i}px;
            background-color: rgba({p});
        }}
        QPushButton:hover {{
            color: white;
            background-color: rgba({pl});
        }}
        QPushButton:pressed {{
            color: rgba(255,255,255,150);
            background-color: rgba({pd});
        }}
        """.format(
                px=common.SMALL_FONT_SIZE(),
                i=common.INDICATOR_WIDTH(),
                s=common.ROW_SEPARATOR(),
                c=common.rgb(self.secondary_color.lighter(150)),
                p=common.rgb(self.primary_color),
                pl=common.rgb(self.primary_color.lighter(120)),
                pd=common.rgb(self.primary_color.darker(120))
            )
        )
Ejemplo n.º 19
0
    def highlightBlock(self, text):
        font = QtGui.QFont()
        font.setStyleHint(QtGui.QFont.System)

        char_format = QtGui.QTextCharFormat()
        char_format.setFont(font)
        char_format.setForeground(QtGui.QColor(0, 0, 0, 0))

        block_format = QtGui.QTextBlockFormat()
        block_format.setLineHeight(
            150, QtGui.QTextBlockFormat.ProportionalHeight)
        self.setFormat(0, len(text), char_format)

        _font = char_format.font()
        _foreground = char_format.foreground()
        _weight = char_format.fontWeight()
        _psize = char_format.font().pixelSize()

        flag = 0

        position = self.currentBlock().position()
        cursor = QtGui.QTextCursor(self.currentBlock())
        cursor.mergeBlockFormat(block_format)
        cursor = QtGui.QTextCursor(self.document())

        for k in self.HIGHLIGHT_RULES:
            if k == OKGREEN[0]:
                it = self.HIGHLIGHT_RULES[k].finditer(text)
                for match in it:
                    flag = flag | k
                    font.setPixelSize(common.MEDIUM_FONT_SIZE())
                    char_format.setFont(font)

                    char_format.setForeground(QtGui.QColor(80, 230, 80, 255))

                    self.setFormat(match.start(1), len(
                        match.group(1)), char_format)
                    cursor = self.document().find(match.group(1), position)
                    cursor.mergeCharFormat(char_format)

                    char_format.setForeground(QtGui.QColor(157, 165, 180, 255))

                    self.setFormat(match.start(2), len(
                        match.group(2)), char_format)
                    cursor = self.document().find(match.group(2), position)
                    cursor.mergeCharFormat(char_format)

            if k == OKBLUE[0]:
                it = self.HIGHLIGHT_RULES[k].finditer(text)
                for match in it:
                    flag = flag | k
                    font.setPixelSize(common.MEDIUM_FONT_SIZE())
                    char_format.setFont(font)
                    char_format.setForeground(QtGui.QColor(85, 85, 255, 255))

                    self.setFormat(match.start(1), len(
                        match.group(1)), char_format)
                    cursor = self.document().find(match.group(1), position)
                    cursor.mergeCharFormat(char_format)

                    char_format.setForeground(QtGui.QColor(157, 165, 180, 255))

                    self.setFormat(match.start(2), len(
                        match.group(2)), char_format)
                    cursor = self.document().find(match.group(2), position)
                    cursor.mergeCharFormat(char_format)

            if k == FAIL[0]:
                match = self.HIGHLIGHT_RULES[k].match(text)
                if match:
                    flag = flag | k
                    font.setPixelSize(common.MEDIUM_FONT_SIZE())
                    char_format.setFont(font)
                    char_format.setForeground(QtGui.QColor(230, 80, 80, 255))
                    char_format.setFontUnderline(True)

                    self.setFormat(match.start(1), len(
                        match.group(1)), char_format)
                    cursor = self.document().find(match.group(1), position)
                    cursor.mergeCharFormat(char_format)

                    char_format.setForeground(QtGui.QColor(157, 165, 180, 255))

                    self.setFormat(match.start(2), len(
                        match.group(2)), char_format)
                    cursor = self.document().find(match.group(2), position)
                    cursor.mergeCharFormat(char_format)

            if k == FAIL_SUB[0]:
                # continue
                it = self.HIGHLIGHT_RULES[k].finditer(text)
                for match in it:
                    if flag & FAIL[0]:
                        continue
                    char_format.setFontUnderline(False)
                    font.setPixelSize(common.MEDIUM_FONT_SIZE())
                    char_format.setFont(font)
                    char_format.setForeground(QtGui.QColor(230, 80, 80, 255))

                    self.setFormat(match.start(1), len(
                        match.group(1)), char_format)
                    cursor = self.document().find(match.group(1), position)
                    cursor.mergeCharFormat(char_format)

            char_format.setFont(_font)
            char_format.setForeground(_foreground)
            char_format.setFontWeight(_weight)