Exemplo n.º 1
0
 def paint(self, painter, option, index):
     QStyledItemDelegate.paint(self, painter, option, index)
     pal = option.palette
     color = pal.color(pal.HighlightedText if option.state & QStyle.State_Selected else pal.Text).name()
     text = '<div style="color:%s">%s</div>' % (color, index.data(RENDER_ROLE))
     st = QStaticText(text)
     st.setTextWidth(option.rect.width())
     painter.drawStaticText(option.rect.left() + self.MARGIN // 2, option.rect.top() + self.MARGIN // 2, st)
Exemplo n.º 2
0
 def sizeHint(self, option, index):
     st = QStaticText(index.data(RENDER_ROLE))
     st.prepare(font=self.parent().font())
     width = max(option.rect.width(), self.parent().width() - 50)
     if width and width != st.textWidth():
         st.setTextWidth(width)
     br = st.size()
     return QSize(br.width(), br.height() + self.MARGIN)
Exemplo n.º 3
0
 def sizeHint(self, option, index):
     st = QStaticText(index.data(RENDER_ROLE))
     st.prepare(font=self.parent().font())
     width = max(option.rect.width(), self.parent().width() - 50)
     if width and width != st.textWidth():
         st.setTextWidth(width)
     br = st.size()
     return QSize(br.width(), br.height() + self.MARGIN)
Exemplo n.º 4
0
 def paint(self, painter, option, index):
     QStyledItemDelegate.paint(self, painter, option, index)
     pal = option.palette
     color = pal.color(pal.HighlightedText if option.state & QStyle.State_Selected else pal.Text).name()
     text = '<div style="color:%s">%s</div>' % (color, index.data(RENDER_ROLE))
     st = QStaticText(text)
     st.setTextWidth(option.rect.width())
     painter.drawStaticText(option.rect.left() + self.MARGIN // 2, option.rect.top() + self.MARGIN // 2, st)
Exemplo n.º 5
0
class Message(QWidget):
    def __init__(self, parent, sb_background):
        QWidget.__init__(self, parent)
        self.is_permanent = False
        self.is_address = False
        self.is_secure = False
        self.static_text = None
        self.current_key = None
        self.setFocusPolicy(Qt.NoFocus)
        self.sb_background = QColor(
            color(sb_background,
                  self.palette().color(QPalette.Window)))

    def set_message(self, text, color_, bold=False, is_permanent=False):
        from vise.view import certificate_error_domains
        key = (text, color_.name(), bold, is_permanent)
        if key == self.current_key:
            return
        self.current_key = key
        self.is_permanent = is_permanent
        prefix = text.partition(':')[0]
        self.is_address = self.is_permanent and prefix.lower() in {
            'http', 'https', 'vise', 'file'
        }
        self.is_secure = prefix.lower() in {'https', 'vise', 'file'}
        color_ = color_ or self.palette().color(self.palette().WindowText)
        if self.is_address:
            qurl = QUrl(text)
            if self.is_secure and qurl.host() in certificate_error_domains:
                self.is_secure = False
            if qurl.scheme() in {'vise', 'file'}:
                host = qurl.path()
                rest = ''
                sep = ':'
            else:
                host = qurl.host()
                rest = qurl.toDisplayString(QUrl.PrettyDecoded
                                            | QUrl.RemoveScheme
                                            | QUrl.RemoveAuthority)
                sep = '://'
            self.static_text = QStaticText(
                '<span style="white-space:nowrap; color: {fg}">'
                '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>'
                '<span style="color:{fg}">{host}</span>'
                '<span style="color:{dull}">{rest}</span>'.format(
                    fg=color_.name(),
                    emph='green' if self.is_secure else 'red',
                    scheme=escape(qurl.scheme()),
                    host=escape(host),
                    dull=color('status bar dull foreground', 'gray'),
                    sep=sep,
                    rest=escape(rest)))
        else:
            self.static_text = QStaticText(
                '<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>'
                .format(color_.name(), ('bold' if bold else 'normal'),
                        escape(text)))
        to = QTextOption(Qt.AlignLeft | Qt.AlignTop)
        to.setWrapMode(to.NoWrap)
        self.static_text.setTextOption(to)
        self.static_text.prepare(font=self.font())
        self.update()

    def paintEvent(self, ev):
        if not self.static_text or not self.static_text.text():
            return
        p = QPainter(self)
        p.setRenderHint(p.TextAntialiasing)
        # If text is too long too fit, fade it out at the end
        self.static_text.setTextWidth(self.rect().width())
        sz = self.static_text.size()
        r = self.rect()
        p.drawStaticText(0, (r.height() - sz.height()) // 2, self.static_text)
        if sz.width() > r.width():
            g = QLinearGradient(self.rect().topLeft(), self.rect().topRight())
            c = QColor(self.sb_background)
            c.setAlpha(0)
            g.setColorAt(0, c)
            g.setColorAt(0.8, c)
            g.setColorAt(1.0, self.sb_background)
            p.fillRect(self.rect(), QBrush(g))
        p.end()
Exemplo n.º 6
0
class Message(QWidget):

    def __init__(self, parent, sb_background):
        QWidget.__init__(self, parent)
        self.is_permanent = False
        self.is_address = False
        self.is_secure = False
        self.static_text = None
        self.current_key = None
        self.setFocusPolicy(Qt.NoFocus)
        self.sb_background = QColor(color(sb_background, self.palette().color(QPalette.Window)))

    def set_message(self, text, color_, bold=False, is_permanent=False):
        from vise.view import certificate_error_domains
        key = (text, color_.name(), bold, is_permanent)
        if key == self.current_key:
            return
        self.current_key = key
        self.is_permanent = is_permanent
        prefix = text.partition(':')[0]
        self.is_address = self.is_permanent and prefix.lower() in {'http', 'https', 'vise'}
        self.is_secure = prefix.lower() in {'https', 'vise'}
        color_ = color_ or self.palette().color(self.palette().WindowText)
        if self.is_address:
            qurl = QUrl(text)
            if self.is_secure and qurl.host() in certificate_error_domains:
                self.is_secure = False
            if qurl.scheme() == 'vise':
                host = qurl.path()
                rest = ''
                sep = ':'
            else:
                host = qurl.host()
                rest = qurl.toDisplayString(QUrl.PrettyDecoded | QUrl.RemoveScheme | QUrl.RemoveAuthority)
                sep = '://'
            self.static_text = QStaticText(
                '<span style="white-space:nowrap; color: {fg}">'
                '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>'
                '<span style="color:{fg}">{host}</span>'
                '<span style="color:{dull}">{rest}</span>'.format(
                    fg=color_.name(), emph='green' if self.is_secure else 'red', scheme=escape(qurl.scheme()),
                    host=escape(host), dull=color('status bar dull foreground', 'gray'), sep=sep,
                    rest=escape(rest)
                ))
        else:
            self.static_text = QStaticText('<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>'.format(
                color_.name(), ('bold' if bold else 'normal'), escape(text)))
        to = QTextOption(Qt.AlignLeft | Qt.AlignTop)
        to.setWrapMode(to.NoWrap)
        self.static_text.setTextOption(to)
        self.static_text.prepare(font=self.font())
        self.update()

    def paintEvent(self, ev):
        if not self.static_text or not self.static_text.text():
            return
        p = QPainter(self)
        p.setRenderHint(p.TextAntialiasing)
        # If text is too long too fit, fade it out at the end
        self.static_text.setTextWidth(self.rect().width())
        sz = self.static_text.size()
        r = self.rect()
        p.drawStaticText(0, (r.height() - sz.height()) // 2, self.static_text)
        if sz.width() > r.width():
            g = QLinearGradient(self.rect().topLeft(), self.rect().topRight())
            c = QColor(self.sb_background)
            c.setAlpha(0)
            g.setColorAt(0, c)
            g.setColorAt(0.8, c)
            g.setColorAt(1.0, self.sb_background)
            p.fillRect(self.rect(), QBrush(g))
        p.end()