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
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()
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()
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()
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))
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()
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))
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()
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()
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()
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()
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)
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)
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)
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)
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
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)
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)) ) )
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)