Example #1
1
File: qt.py Project: P4ncake/weboob
    def paint(self, painter, option, index):
        option = QStyleOptionViewItem(option) # copy option
        self.initStyleOption(option, index)

        style = option.widget.style() if option.widget else QApplication.style()

        doc = QTextDocument()
        doc.setHtml(option.text)

        # painting item without text
        option.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, option, painter)

        ctx = QAbstractTextDocumentLayout.PaintContext()

        # Hilight text if item is selected
        if option.state & QStyle.State_Selected:
            ctx.palette.setColor(QPalette.Text, option.palette.color(QPalette.Active, QPalette.HighlightedText))

        textRect = style.subElementRect(QStyle.SE_ItemViewItemText, option)
        painter.save()
        painter.translate(textRect.topLeft())
        painter.setClipRect(textRect.translated(-textRect.topLeft()))
        doc.documentLayout().draw(painter, ctx)
        painter.restore()
    def paint(self, painter, option, index):
        options = QStyleOptionViewItem(option)
        item = index.data(Qt.UserRole)
        if isinstance(item, (CommentItem, ChangeItem)):
            options.decorationAlignment = Qt.AlignHCenter
        self.initStyleOption(options,index)

        if options.widget is None:
            style = QApplication.style()
        else:
            style = options.widget.style()
        
        doc = QTextDocument()
        doc.setHtml(options.text)
        
        options.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, options, painter)

        ctx = QAbstractTextDocumentLayout.PaintContext()

        # Highlighting text if item is selected
        #if (optionV4.state & QStyle::State_Selected)
            #ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText))

        textRect = style.subElementRect(QStyle.SE_ItemViewItemText, options)
        painter.save()
        painter.translate(textRect.topLeft())
        painter.setClipRect(textRect.translated(-textRect.topLeft()))
        doc.documentLayout().draw(painter, ctx)

        painter.restore()
Example #3
0
	def textDocument(self, title, htmltext):
		td = QTextDocument()
		td.setMetaInformation(QTextDocument.DocumentTitle, title)
		if self.ss:
			td.setDefaultStyleSheet(self.ss)
		td.setHtml(htmltext)
		td.setDefaultFont(globalSettings.font)
		return td
Example #4
0
    def __init__(self, page, *args, **kwargs):
        self.page = page

        super(TextViewer, self).__init__(*args, **kwargs)
        self._document = QTextDocument(self)
        self._document.setUseDesignMetrics(True)
        self._page_number = 0
        self.__offset_top = 0
Example #5
0
class DocumentWriter(AbsObserver):
    def __init__(self) -> None:
        self.document = QTextDocument()

    def update(self, value):
        message = "\n".join(reversed(value))

        self.document.setPlainText(message)
Example #6
0
    def initUI(self):
        self.documento = QTextDocument()

        # =================== WIDGETS QPUSHBUTTON ==================

        buttonBuscar = QPushButton("Buscar usuarios", self)
        buttonBuscar.setFixedSize(426, 26)
        buttonBuscar.move(20, 20)

        buttonLimpiar = QPushButton("Limpiar tabla", self)
        buttonLimpiar.setFixedSize(140, 26)
        buttonLimpiar.move(452, 20)

        # =================== WIDGET QTREEWIDGET ===================

        self.treeWidgetUsuarios = QTreeWidget(self)

        self.treeWidgetUsuarios.setFont(
            QFont(self.treeWidgetUsuarios.font().family(), 10, False))
        self.treeWidgetUsuarios.setRootIsDecorated(False)
        self.treeWidgetUsuarios.setHeaderLabels(
            ("D.N.I", "NOMBRE", "APELLIDO", "CORREO"))

        self.model = self.treeWidgetUsuarios.model()

        for indice, ancho in enumerate((110, 150, 150, 160), start=0):
            self.model.setHeaderData(indice, Qt.Horizontal, Qt.AlignCenter,
                                     Qt.TextAlignmentRole)
            self.treeWidgetUsuarios.setColumnWidth(indice, ancho)

        self.treeWidgetUsuarios.setAlternatingRowColors(True)

        self.treeWidgetUsuarios.setFixedSize(572, 300)
        self.treeWidgetUsuarios.move(20, 56)

        # =================== WIDGETS QPUSHBUTTON ==================

        buttonVistaPrevia = QPushButton("Vista previa", self)
        buttonVistaPrevia.setFixedSize(140, 26)
        buttonVistaPrevia.move(156, 364)

        buttonImprimir = QPushButton("Imprimir", self)
        buttonImprimir.setFixedSize(140, 26)
        buttonImprimir.move(304, 364)

        buttonExportarPDF = QPushButton("Exportar a PDF", self)
        buttonExportarPDF.setFixedSize(140, 26)
        buttonExportarPDF.move(452, 364)

        # =================== EVENTOS QPUSHBUTTON ==================

        buttonBuscar.clicked.connect(self.Buscar)
        buttonLimpiar.clicked.connect(self.limpiarTabla)

        buttonVistaPrevia.clicked.connect(self.vistaPrevia)
        buttonImprimir.clicked.connect(self.Imprimir)
        buttonExportarPDF.clicked.connect(self.exportarPDF)
Example #7
0
 def setDefaultFont(self):
     """Set the default font initially and based on an output font change.
     """
     self.defaultFont = QTextDocument().defaultFont()
     fontName = globalref.miscOptions['OutputFont']
     if fontName:
         self.defaultFont.fromString(fontName)
     if self.useDefaultFont:
         self.mainFont = self.defaultFont
Example #8
0
def htmlToPlainText(text):
    RICH_PREFIX = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" '\
                  '"http://www.w3.org/TR/REC-html40/strict.dtd">'
    if text.startswith(RICH_PREFIX):
        document = QTextDocument()
        document.setHtml(text)
        text = document.toPlainText()

    return text
Example #9
0
	def textDocument(self):
		td = QTextDocument()
		td.setMetaInformation(QTextDocument.DocumentTitle, self.getDocumentTitle())
		if self.ss:
			td.setDefaultStyleSheet(self.ss)
		td.setHtml(self.getHtml())
		if self.font:
			td.setDefaultFont(self.font)
		return td
Example #10
0
 def mousePressEvent(self, QMouseEvent):
     try:
         doc = QTextDocument()
         doc.setHtml(self.number_label.text())
         self.number_clicked_signal.emit(doc.toPlainText())
     except AttributeError:
         pass
     finally:
         QMouseEvent.accept()
Example #11
0
 def searchtext(self):
     #QTextDocument.FindFlags()  cursorForward 
     #QTextDocument.FindBackward()
     flag = QTextDocument.FindFlags()   #反向搜索
     searchtextexpress= self.lineEdit_searchexpression.text()
     if searchtextexpress is not "":
         print(searchtextexpress)
         print(self.textBrowser_testcommand.cursor())
         self.textBrowser_testcommand.find(searchtextexpress,QTextDocument.FindFlag())
         print(self.textBrowser_testcommand.cursor())
Example #12
0
    def sizeHint(self, option, index):
        self.initStyleOption(option, index)

        doc = QTextDocument()
        if index.column() == HistoryTableModel.columns_types.index('pubkey'):
            doc.setHtml(option.text)
        else:
            doc.setPlainText("")
        doc.setTextWidth(-1)
        return QSize(doc.idealWidth(), doc.size().height())
Example #13
0
    def paint(self, painter, option, index):
        self.initStyleOption(option, index)

        foreground = index.data(Qt.ForegroundRole)
        font = index.data(Qt.FontRole)
        style = QApplication.style()

        doc = QTextDocument()
        if index.column() == HistoryTableModel.columns_types.index('pubkey'):
            doc.setHtml(option.text)
        else:
            doc.setPlainText(option.text)

        option.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, option, painter)

        ctx = QAbstractTextDocumentLayout.PaintContext()
        if foreground:
            if foreground.isValid():
                ctx.palette.setColor(QPalette.Text, foreground)
        if font:
            doc.setDefaultFont(font)
        text_rect = style.subElementRect(QStyle.SE_ItemViewItemText, option)
        painter.save()
        painter.translate(text_rect.topLeft())
        painter.setClipRect(text_rect.translated(-text_rect.topLeft()))
        doc.documentLayout().draw(painter, ctx)

        painter.restore()
Example #14
0
def pixmap(cursor, num_lines=6, scale=0.8):
    """Return a QPixmap displaying the selected lines of the document.
    
    If the cursor has no selection, num_lines are drawn.
    
    By default the text is drawn 0.8 * the normal font size. You can change
    that by supplying the scale parameter.
    
    """
    block = cursor.document().findBlock(cursor.selectionStart())
    c2 = QTextCursor(block)
    if cursor.hasSelection():
        c2.setPosition(cursor.selectionEnd(), QTextCursor.KeepAnchor)
        c2.movePosition(QTextCursor.EndOfBlock, QTextCursor.KeepAnchor)
    else:
        c2.movePosition(QTextCursor.NextBlock, QTextCursor.KeepAnchor,
                        num_lines)

    data = textformats.formatData('editor')
    doc = QTextDocument()
    font = QFont(data.font)
    font.setPointSizeF(font.pointSizeF() * scale)
    doc.setDefaultFont(font)
    doc.setPlainText(c2.selection().toPlainText())
    if metainfo.info(cursor.document()).highlighting:
        highlighter.highlight(doc, state=tokeniter.state(block))
    size = doc.size().toSize() + QSize(8, -4)
    pix = QPixmap(size)
    pix.fill(data.baseColors['background'])
    doc.drawContents(QPainter(pix))
    return pix
Example #15
0
class SuggestionsDelegate(QStyledItemDelegate):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self._doc = QTextDocument()
        self._translation_char_format = QTextCharFormat()
        self._strokes_char_format = QTextCharFormat()
        self._strokes_char_format.font().setStyleHint(QFont.Monospace)

    @property
    def text_font(self):
        return self._translation_char_format.font()

    @text_font.setter
    def text_font(self, font):
        self._translation_char_format.setFont(font)

    @property
    def strokes_font(self):
        return self._strokes_char_format.font()

    @strokes_font.setter
    def strokes_font(self, font):
        self._strokes_char_format.setFont(font)

    def _format_suggestion(self, index):
        suggestion = index.data(Qt.DisplayRole)
        self._doc.clear()
        cursor = QTextCursor(self._doc)
        cursor.setCharFormat(self._translation_char_format)
        cursor.insertText(escape_translation(suggestion.text) + ':')
        if not suggestion.steno_list:
            cursor.insertText(' ' + NO_SUGGESTIONS_STRING)
            return
        for strokes_list in suggestion.steno_list[:MAX_SUGGESTIONS_COUNT]:
            cursor.insertBlock()
            cursor.setCharFormat(self._strokes_char_format)
            cursor.insertText('   ' + '/'.join(strokes_list))

    def paint(self, painter, option, index):
        painter.save()
        if option.state & QStyle.State_Selected:
            painter.fillRect(option.rect, option.palette.highlight())
            text_color = option.palette.highlightedText()
        else:
            text_color = option.palette.text()
        self._translation_char_format.setForeground(text_color)
        self._strokes_char_format.setForeground(text_color)
        painter.translate(option.rect.topLeft())
        self._format_suggestion(index)
        self._doc.drawContents(painter)
        painter.restore()

    def sizeHint(self, option, index):
        self._format_suggestion(index)
        return self._doc.size().toSize()
Example #16
0
    def sizeHint(self, option, index):
        self.initStyleOption(option, index)

        doc = QTextDocument()
        if index.column() in (NetworkTableModel.columns_types.index('address'),
                              NetworkTableModel.columns_types.index('port')):
            doc.setHtml(option.text)
        else:
            doc.setPlainText("")
        doc.setTextWidth(option.rect.width())
        return QSize(doc.idealWidth(), doc.size().height())
Example #17
0
    def _copy_results_current(self, grid):
        """Copy cell results for the current cell"""

        current = grid.current
        data = grid.model.code_array[current]
        if data is None:
            return

        clipboard = QApplication.clipboard()

        # Get renderer for current cell
        renderer = grid.model.code_array.cell_attributes[current]["renderer"]

        if renderer == "text":
            clipboard.setText(repr(data))

        elif renderer == "image":
            if isinstance(data, BasicQImage):
                clipboard.setImage(data)
            else:
                # We may have an svg image here
                try:
                    svg_bytes = bytes(data)
                except TypeError:
                    svg_bytes = bytes(data, encoding='utf-8')
                if is_svg(svg_bytes):
                    mime_data = QMimeData()
                    mime_data.setData("image/svg+xml", svg_bytes)
                    clipboard.setMimeData(mime_data)

        elif renderer == "markup":
            mime_data = QMimeData()
            mime_data.setHtml(str(data))

            # Also copy data as plain text
            doc = QTextDocument()
            doc.setHtml(str(data))
            mime_data.setText(doc.toPlainText())

            clipboard.setMimeData(mime_data)

        elif renderer == "matplotlib" and isinstance(data,
                                                     matplotlib_figure.Figure):
            # We copy and svg to the clipboard
            svg_filelike = io.BytesIO()
            png_filelike = io.BytesIO()
            data.savefig(svg_filelike, format="svg")
            data.savefig(png_filelike, format="png")
            svg_bytes = (svg_filelike.getvalue())
            png_image = QImage().fromData(png_filelike.getvalue())
            mime_data = QMimeData()
            mime_data.setData("image/svg+xml", svg_bytes)
            mime_data.setImageData(png_image)
            clipboard.setMimeData(mime_data)
Example #18
0
	def textDocument(self, title, htmltext):
		td = QTextDocument()
		td.setMetaInformation(QTextDocument.DocumentTitle, title)
		if self.ss:
			td.setDefaultStyleSheet(self.ss)
		td.setHtml(htmltext)
		td.setDefaultFont(globalSettings.font)
		return td
Example #19
0
	def textDocument(self):
		td = QTextDocument()
		td.setMetaInformation(QTextDocument.DocumentTitle, self.getDocumentTitle())
		if self.ss:
			td.setDefaultStyleSheet(self.ss)
		td.setHtml(self.getHtml())
		td.setDefaultFont(globalSettings.font)
		return td
Example #20
0
    def add_defaults(self):
        """Add default table entries."""
        if not self.get_race_property(self.NAME):
            self.set_race_property(self.NAME, defaults.RACE_NAME)

        if not self.get_race_property(self.DATE):
            self.set_date(QDateTime.currentDateTime().date())

        if not self.get_race_property(self.NOTES):
            document = QTextDocument()
            document.setDocumentLayout(QPlainTextDocumentLayout(document))
            self.set_notes(document)
Example #21
0
    def __init__(self,
                 connection: Connection,
                 base: Path,
                 *args,
                 obj=None,
                 **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)
        self.connection = connection
        self.base_path = base
        self.base_path.mkdir(parents=True, exist_ok=True)
        self.last_start = None
        self.status = None
        self.cost = None
        self.using_db = None
        self.current_page = -1
        self.results = []
        self.tasks = []
        self.tables: Dict[str, Set[str]] = {}

        self.tree_file.setModel(QStandardItemModel())
        self.update_tree_file()

        self.timer = QTimer(self)
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.update_cost)

        self.mutex = QMutex()
        self.wait_condition = QWaitCondition()
        self.queue = Queue(1)
        self.worker = Worker(connection, self.mutex, self.wait_condition,
                             self.queue)
        self.worker.executed.connect(self.worker_execute)
        self.worker.finished.connect(self.worker_finish)
        self.worker.start()

        self.document = QTextDocument(self)
        self.processing_highlight = False
        self.document.setDefaultStyleSheet(SQLHighlighter.style())
        self.text_code.setDocument(self.document)
        self.text_code.setFocus()

        self.set_status(Status.Waiting)
        self.set_result_report()
        self.change_page()
        self.update_buttons()
        self.change_db(None)

        self.page_changed.connect(self.change_page)
        self.page_changed.connect(self.show_result)
        self.page_changed.connect(self.update_buttons)
        self.sql_finished.connect(self.update_tree_file)
Example #22
0
 def save_consent(self):
     formats = "Text (*.txt)"
     filename, extension = QFileDialog.getSaveFileName(
         self, 'Save File', path_str(Path('~').expanduser() / 'my_consent.txt'), formats)
     if filename != '':
         with open(filename, 'w', encoding='utf8') as file:
             consent_txt = (self.ui.welcomelabel.text() +
                            self.ui.consentbox.text() +
                            self.ui.reblabel.text())
             doc = QTextDocument()
             doc.setHtml(consent_txt)
             consent_plaintext = doc.toPlainText()
             file.write(consent_plaintext)
Example #23
0
    def sizeHint(self, option, index):
        """QStyledItemDelegate.sizeHint implementation
        """
        options = QStyleOptionViewItem(option)
        self.initStyleOption(options, index)

        doc = QTextDocument()
        if self._font is not None:
            doc.setDefaultFont(self._font)
        doc.setDocumentMargin(1)
        #  bad long (multiline) strings processing doc.setTextWidth(options.rect.width())
        doc.setHtml(options.text)
        return QSize(doc.idealWidth(), doc.size().height())
Example #24
0
class Task(object):
    font = QFont('Decorative', 10)
    labelW, labelH = 20, 20
    pen = QPen(Qt.black, 0.5, Qt.DashLine)
    dotSize = 18

    def __init__(self, tid, taskInfo, drawingInputs):
        self.tid = tid
        #
        self.plabel, self.dlabel = QTextDocument(), QTextDocument()
        self.plabel.setHtml("%d<sup>+</sup>" % self.tid)
        self.dlabel.setHtml("%d<sup>-</sup>" % self.tid)
        self.plabel.setDefaultFont(Task.font)
        self.dlabel.setDefaultFont(Task.font)
        #
        pLocXY, dLocXY, pTW_Xs, dTW_Xs, self.coX4GC, self.oriY_GC, self.yUnit = drawingInputs
        self.ppX, self.ppY = pLocXY
        self.dpX, self.dpY = dLocXY
        self.pTW_rect = self.get_twRect(pTW_Xs, isPickupTW=True)
        self.dTW_rect = self.get_twRect(dTW_Xs, isPickupTW=False)

    def get_twRect(self, tw, isPickupTW=False):
        a, b = tw
        return QRectF(
            a, self.oriY_GC if isPickupTW else self.oriY_GC + self.yUnit,
            b - a, self.yUnit)

    def draw(self, qp):
        for cx, cy, label in [(self.ppX, self.ppY, self.plabel),
                              (self.dpX, self.dpY, self.dlabel)]:
            drawLabel(qp, label, cx, cy, Task.labelW, Task.labelH)

        qp.setPen(Task.pen)
        qp.setBrush(Qt.NoBrush)
        for f, (p0, p1) in [(qp.drawEllipse, (self.ppX, self.ppY)),
                            (qp.drawRect, (self.dpX, self.dpY))]:
            f(p0 - Task.dotSize / 2, p1 - Task.dotSize / 2, Task.dotSize,
              Task.dotSize)
        #
        pen = QPen(Qt.black, 1, Qt.SolidLine)
        qp.setPen(pen)
        qp.setBrush(Qt.NoBrush)
        for cx, cy, label in [
            (self.coX4GC - hMargin * 2.0, vMargin * 3 + self.oriY_GC,
             self.plabel),
            (self.coX4GC - hMargin * 2.0,
             vMargin * 3 + self.oriY_GC + self.yUnit, self.dlabel)
        ]:
            drawLabel(qp, label, cx, cy, Task.labelW, Task.labelH)
        qp.drawRect(self.pTW_rect)
        qp.drawRect(self.dTW_rect)
Example #25
0
    def initUI(self):
    #----------------------Widgets-----------------------------
        
        #Objeto document
        self.document=QTextDocument()

        #Qpusbutton
        button_data=QPushButton("Mostrar datos", self)
        button1=QPushButton("Vista Previa", self)
        button2=QPushButton("Imprimir", self)
        button3=QPushButton("Exportar", self)
        button4=QPushButton("Limpiar", self)

        #-------Objeto: QTreWidget-------------------
        self.table_user=QTreeWidget()
        self.table_user.setHeaderLabels(("Id_Usuario", "Mes", "Nombre", "Estatus", "Fecha de alta"))
        
        #Formato
        self.model=self.table_user.model()

        for indice, ancho in enumerate((110, 150, 150, 160), start=0):
                self.model.setHeaderData(indice, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole)
                self.table_user.setColumnWidth(indice, ancho)

        self.table_user.setAlternatingRowColors(True)


        #----------Objeto Layout vertical para QPushButton--------
        horizontal_layout=QHBoxLayout()
        horizontal_layout.addWidget(button_data)
        horizontal_layout.addWidget(button1)
        horizontal_layout.addWidget(button2)
        horizontal_layout.addWidget(button3)
        horizontal_layout.addWidget(button4)
        horizontal_layout.addStretch()

        #---------Objeto - Layout-----------------
        gridLayout1=QGridLayout()
        #Agregar al gridlayout1
        gridLayout1.addLayout(horizontal_layout, 0, 1, 1, 1)
        gridLayout1.addWidget(self.table_user,   1, 1, 1, 1)#widget 

        #Asignar al layout clase widget
        self.setLayout(gridLayout1)

        #--------------Eventos qpushbutton----------------------------------------
        button_data.clicked.connect(self.data)          #data
        button1.clicked.connect(self.view)              #var_view previa
        button2.clicked.connect(self.print_document)    #imprimir
        button3.clicked.connect(self.pdf_export)        #exportar
        button4.clicked.connect(self.clear)             #limpiar
    def __init__(self, post):
        super(RSSArticleItem, self).__init__()

        self.post_id = post.id
        self.post_link = post.link

        date = ""
        try:
            date = "[%d-%02d-%02d]" % (post.published_parsed.tm_year,
                                       post.published_parsed.tm_mon,
                                       post.published_parsed.tm_mday)
        except Exception:
            pass

        layout = QVBoxLayout()
        layout.setSpacing(0)
        layout.setContentsMargins(10, 10, 0, 0)

        post_info_widget = QWidget()
        post_box = QHBoxLayout()
        post_box.setSpacing(10)
        post_box.setContentsMargins(0, 0, 0, 0)

        date_label = QLabel(date)
        date_label.setFont(QFont('Arial', 18))
        post_box.addWidget(date_label)

        title_label = QLabel(post.title)
        title_label.setFont(QFont('Arial', 18))
        post_box.addWidget(title_label)

        author_label = QLabel("(" + post.author + ")")
        author_label.setFont(QFont('Arial', 16))
        post_box.addWidget(author_label)

        post_box.addStretch(1)

        post_info_widget.setLayout(post_box)

        description_doc = QTextDocument()
        description_doc.setHtml(post.description)
        description_label = QLabel(
            self.truncate_description(description_doc.toPlainText()))
        description_label.setWordWrap(True)
        description_label.setStyleSheet("color: #333")
        description_label.setFont(QFont("Arial", 16))

        layout.addWidget(post_info_widget)
        layout.addWidget(description_label)

        self.setLayout(layout)
Example #27
0
    def _get_textdoc(self, index):
        """Create the QTextDocument of an item.

        Args:
            index: The QModelIndex of the item to draw.
        """
        # FIXME we probably should do eliding here. See
        # qcommonstyle.cpp:viewItemDrawText
        # https://github.com/qutebrowser/qutebrowser/issues/118
        text_option = QTextOption()
        if self._opt.features & QStyleOptionViewItem.WrapText:
            text_option.setWrapMode(QTextOption.WordWrap)
        else:
            text_option.setWrapMode(QTextOption.ManualWrap)
        text_option.setTextDirection(self._opt.direction)
        text_option.setAlignment(QStyle.visualAlignment(
            self._opt.direction, self._opt.displayAlignment))

        if self._doc is not None:
            self._doc.deleteLater()
        self._doc = QTextDocument(self)
        self._doc.setDefaultFont(self._opt.font)
        self._doc.setDefaultTextOption(text_option)
        self._doc.setDocumentMargin(2)

        stylesheet = """
            .highlight {
                color: {{ conf.colors.completion.match.fg }};
            }
        """
        with jinja.environment.no_autoescape():
            template = jinja.environment.from_string(stylesheet)
        self._doc.setDefaultStyleSheet(template.render(conf=config.val))

        if index.parent().isValid():
            view = self.parent()
            pattern = view.pattern
            columns_to_filter = index.model().columns_to_filter(index)
            if index.column() in columns_to_filter and pattern:
                repl = r'<span class="highlight">\g<0></span>'
                text = re.sub(re.escape(pattern).replace(r'\ ', r'|'),
                              repl, self._opt.text, flags=re.IGNORECASE)
                self._doc.setHtml(text)
            else:
                self._doc.setPlainText(self._opt.text)
        else:
            self._doc.setHtml(
                '<span style="font: {};">{}</span>'.format(
                    html.escape(config.val.fonts.completion.category),
                    html.escape(self._opt.text)))
Example #28
0
    def printReciept(self, htmltext):
        dialog = QPrintDialog(self.printer, self)
        if dialog.exec_():
            document = QTextDocument()
            # print(self.printer.logicalDpiX())
            # print(self.printer.logicalDpiX() * (210 / 25.4))
            # print(self.printer.logicalDpiY())
            # print(self.printer.logicalDpiY() * (297 / 25.4))
            #A4
            # document.setPageSize(QSizeF(self.printer.logicalDpiX() * (210 / 25.4),self.printer.logicalDpiY() * (297 / 25.4)));
            #小票
            qsizeF = QSizeF(self.printer.logicalDpiX() * (257 / 25.4),
                            self.printer.logicalDpiY() * (125 / 25.4))
            # qsizeF = QSizeF(self.printer.logicalDpiX() * (215.90 / 25.4), self.printer.logicalDpiY() * (127.00 / 25.4));
            # qsizeF = QSizeF(self.printer.logicalDpiY() * (125 / 25.4),self.printer.logicalDpiX() * (257 / 25.4));
            self.printer.setPageSize(QPrinter.Custom)
            self.printer.setPaperName("小票2")
            paperSize = QSizeF(257, 125)
            self.printer.setPaperSize(paperSize, QPrinter.Millimeter)
            # self.printer.setPageSizeMM(qsizeF)

            document.setPageSize(qsizeF)
            # font = QFont();
            # font.setPointSize(6)
            # document.setDefaultFont(font);
            document.setHtml(htmltext)
            document.print_(self.printer)
Example #29
0
    def drawContents(self, painter):
        """
        Reimplementation of drawContents to limit the drawing
        inside `textRext`.

        """
        painter.setPen(self.__color)
        painter.setFont(self.font())

        if self.__textRect:
            rect = self.__textRect
        else:
            rect = self.rect().adjusted(5, 5, -5, -5)
        if Qt.mightBeRichText(self.__message):
            doc = QTextDocument()
            doc.setHtml(self.__message)
            doc.setTextWidth(rect.width())
            cursor = QTextCursor(doc)
            cursor.select(QTextCursor.Document)
            fmt = QTextBlockFormat()
            fmt.setAlignment(self.__alignment)
            cursor.mergeBlockFormat(fmt)
            painter.save()
            painter.translate(rect.topLeft())
            doc.drawContents(painter)
            painter.restore()
        else:
            painter.drawText(rect, self.__alignment, self.__message)
Example #30
0
 def __init__(self, tid, taskInfo, drawingInputs):
     self.tid = tid
     #
     self.plabel, self.dlabel = QTextDocument(), QTextDocument()
     self.plabel.setHtml("%d<sup>+</sup>" % self.tid)
     self.dlabel.setHtml("%d<sup>-</sup>" % self.tid)
     self.plabel.setDefaultFont(Task.font)
     self.dlabel.setDefaultFont(Task.font)
     #
     pLocXY, dLocXY, pTW_Xs, dTW_Xs, self.coX4GC, self.oriY_GC, self.yUnit = drawingInputs
     self.ppX, self.ppY = pLocXY
     self.dpX, self.dpY = dLocXY
     self.pTW_rect = self.get_twRect(pTW_Xs, isPickupTW=True)
     self.dTW_rect = self.get_twRect(dTW_Xs, isPickupTW=False)
Example #31
0
def pixmap(cursor, num_lines=6, scale=0.8):
    """Return a QPixmap displaying the selected lines of the document.

    If the cursor has no selection, num_lines are drawn.

    By default the text is drawn 0.8 * the normal font size. You can change
    that by supplying the scale parameter.

    """
    block = cursor.document().findBlock(cursor.selectionStart())
    c2 = QTextCursor(block)
    if cursor.hasSelection():
        c2.setPosition(cursor.selectionEnd(), QTextCursor.KeepAnchor)
        c2.movePosition(QTextCursor.EndOfBlock, QTextCursor.KeepAnchor)
    else:
        c2.movePosition(QTextCursor.NextBlock, QTextCursor.KeepAnchor, num_lines)

    data = textformats.formatData('editor')
    doc = QTextDocument()
    font = QFont(data.font)
    font.setPointSizeF(font.pointSizeF() * scale)
    doc.setDefaultFont(font)
    doc.setPlainText(c2.selection().toPlainText())
    if metainfo.info(cursor.document()).highlighting:
        highlighter.highlight(doc, state=tokeniter.state(block))
    size = doc.size().toSize() + QSize(8, -4)
    pix = QPixmap(size)
    pix.fill(data.baseColors['background'])
    doc.drawContents(QPainter(pix))
    return pix
Example #32
0
    def paint(self, painter, option, index):
        self.initStyleOption(option, index)

        style = QApplication.style()

        doc = QTextDocument()
        if index.column() in (NetworkTableModel.columns_types.index('address'),
                              NetworkTableModel.columns_types.index('port'),
                              NetworkTableModel.columns_types.index('api')):
            doc.setHtml(option.text)
        else:
            doc.setPlainText(option.text)

        option.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, option, painter)

        ctx = QAbstractTextDocumentLayout.PaintContext()

        text_rect = style.subElementRect(QStyle.SE_ItemViewItemText, option)
        painter.save()
        painter.translate(text_rect.topLeft())
        painter.setClipRect(text_rect.translated(-text_rect.topLeft()))
        doc.documentLayout().draw(painter, ctx)

        painter.restore()
Example #33
0
    def sizeHint(self, option, index):
        self.initStyleOption(option, index)

        doc = QTextDocument()
        doc.setHtml(option.text)
        doc.setTextWidth(option.rect.width())

        return QSize(doc.idealWidth(), max(doc.size().height(), option.decorationSize.height()))
Example #34
0
    def open_file(self):
        """Loads a file into the PlainTextEdit Qwidget"""
        file_name, j = QFileDialog.getOpenFileName(self, 'Select Text file',
                                                   '/home')
        if file_name.endswith('rtxt'):
            file = pickle.load(open(file_name, 'rb'))
            self.new_doc = QTextDocument()
            self.new_doc.setHtml(file)
            self.plainTextEdit.setDocument(self.new_doc)

        elif file_name is None:  # happens when use cancels dialog
            self.display_message('No file', 'No file selected')
        else:
            self.display_message(
                'Error', 'Wrong format selected . please Choose txt files')
Example #35
0
def color_json(obj):
    doc = QTextDocument()
    doc.setDefaultStyleSheet(open('stylesheet/json_style.css').read())
    if isinstance(obj, str):
        doc.setHtml(string_to_html(obj))
    else:
        doc.setHtml(json_to_html(obj))
    return doc
Example #36
0
 def __init__(self, my_book, parent=None):
     super().__init__(parent)
     self.book = my_book
     # Where we store the last-sought-for find string
     self.find_text = None
     # Register to read and write metadata
     my_book.get_meta_manager().register( C.MD_NO, self.read_meta, self.save_meta )
     # Set our only font (we don't care about the general font, only mono)
     # n.b. this gets the Book's default size as it hasn't loaded a document
     # yet.
     self.setFont(fonts.get_fixed(my_book.get_font_size()))
     # hook up to be notified of a change in font choice
     fonts.notify_me(self.font_change)
     # Set up our document not using the default one
     a_document = QTextDocument()
     a_document.setDocumentLayout(QPlainTextDocumentLayout(a_document))
     self.setDocument(a_document)
     # Turn off linewrap mode
     self.setLineWrapMode(QPlainTextEdit.NoWrap)
     # The following kludge allows us to get the correct highlight
     # color on focus-in. For unknown reasons Qt makes us use the
     # "Inactive" color group even after focus-in. See focusInEvent()
     # and focusOutEvent() below.
     self.palette_active = QPalette(self.palette())
     self.palette_inactive = QPalette(self.palette())
     b = self.palette().brush(QPalette.Active,QPalette.Highlight)
     self.palette_active.setBrush(QPalette.Inactive,QPalette.Highlight,b)
     # Set the cursor shape to IBeam -- no idea why this supposed default
     # inherited from QTextEdit, doesn't happen. But it doesn't.
     self.viewport().setCursor(Qt.IBeamCursor)
     # Hook up a slot to notice that the document has changed its
     # modification state.
     self.document().modificationChanged.connect(self.yikes)
     # Create our edit menu and stow it in the menu bar. Disable it.
     ed_menu = QMenu(C.ED_MENU_EDIT,self)
     ed_menu.addAction(C.ED_MENU_UNDO,self.undo,QKeySequence.Undo)
     ed_menu.addAction(C.ED_MENU_REDO,self.redo,QKeySequence.Redo)
     ed_menu.addSeparator()
     ed_menu.addAction(C.ED_MENU_CUT,self.cut,QKeySequence.Cut)
     ed_menu.addAction(C.ED_MENU_COPY,self.copy,QKeySequence.Copy)
     ed_menu.addAction(C.ED_MENU_PASTE,self.paste,QKeySequence.Paste)
     ed_menu.addSeparator()
     ed_menu.addAction(C.ED_MENU_FIND,self.find_action,QKeySequence.Find)
     ed_menu.addAction(C.ED_MENU_NEXT,self.find_next_action,QKeySequence.FindNext)
     self.edit_menu = mainwindow.get_menu_bar().addMenu(ed_menu)
     self.edit_menu.setVisible(False)
     # In order to get focus events, we need to set focus policy
     self.setFocusPolicy(Qt.StrongFocus)
Example #37
0
    def sizeHint(self, option, index):
        self.initStyleOption(option, index)

        doc = QTextDocument()
        if index.column() in (NetworkTableModel.columns_types.index('address'),
                              NetworkTableModel.columns_types.index('port'),
                              NetworkTableModel.columns_types.index('api')):
            doc.setHtml(option.text)
        else:
            doc.setPlainText("")
        doc.setTextWidth(option.rect.width())
        return QSize(doc.idealWidth(), doc.size().height())
Example #38
0
 def searchPrev(self, txt, caseSensitive, wholeWord, regexp):
     """
     Public method to search the previous occurrence of the given text.
     
     @param txt text to search for
     @type str
     @param caseSensitive flag indicating to perform a case sensitive
         search
     @type bool
     @param wholeWord flag indicating to search for whole words
         only
     @type bool
     @param regexp flag indicating a regular expression search
     @type bool
     """
     self.__lastSearch = (txt, caseSensitive, wholeWord, regexp)
     flags = QTextDocument.FindFlags(QTextDocument.FindBackward)
     if caseSensitive:
         flags |= QTextDocument.FindCaseSensitively
     if wholeWord:
         flags |= QTextDocument.FindWholeWords
     if regexp:
         ok = self.find(
             QRegExp(
                 txt,
                 Qt.CaseSensitive if caseSensitive else Qt.CaseInsensitive),
             flags)
     else:
         ok = self.find(txt, flags)
     self.searchStringFound.emit(ok)
Example #39
0
    def sizeHint(self, option, index):
        """QStyledItemDelegate.sizeHint implementation
        """
        options = QStyleOptionViewItem(option)
        self.initStyleOption(options, index)

        doc = QTextDocument()
        if self._font is not None:
            doc.setDefaultFont(self._font)
        doc.setDocumentMargin(1)
        #  bad long (multiline) strings processing doc.setTextWidth(options.rect.width())
        doc.setHtml(options.text)
        return QSize(doc.idealWidth(), doc.size().height())
Example #40
0
 def sizeHint(self, option, index):
     text = index.model().data(index)
     doc = QTextDocument()
     doc.setHtml(text)
     width = index.model().data(index, Qt.UserRole + 1337)
     doc.setTextWidth(width)
     return QSize(doc.idealWidth(), doc.size().height())
Example #41
0
    def formatText(self, text, _type):

        if not text:
            return text

            # if _type == "t2t":
            # text = self.runT2T(text)

            # elif _type == "txt":
            # text = text.replace("\n", "<br>")

        elif _type == "html":
            doc = QTextDocument()
            doc.setHtml(text)
            text = doc.toPlainText()
            # text = self.htmlBody(text)

        return text
    def sizeHint(self, option, index):
        options = QStyleOptionViewItem(option)
        self.initStyleOption(options,index)

        doc = QTextDocument()
        doc.setHtml(options.text)
        doc.setTextWidth(options.rect.width())
        return QSize(doc.idealWidth(), doc.size().height())
def test_highlighted(qtbot):
    """Make sure highlighting works.

    Note that with Qt 5.11.3 and > 5.12.1 we need to call setPlainText *after*
    creating the highlighter for highlighting to work. Ideally, we'd test
    whether CompletionItemDelegate._get_textdoc() works properly, but testing
    that is kind of hard, so we just test it in isolation here.
    """
    doc = QTextDocument()
    completiondelegate._Highlighter(doc, 'Hello', Qt.red)
    doc.setPlainText('Hello World')

    # Needed so the highlighting actually works.
    edit = QTextEdit()
    qtbot.addWidget(edit)
    edit.setDocument(doc)

    colors = [f.foreground().color() for f in doc.allFormats()]
    assert QColor('red') in colors
Example #44
0
 def exportSource(self):
     """
     Public method performing the export.
     """
     filename = self._getFileName(self.tr("ODT Files (*.odt)"))
     if not filename:
         return
     
     QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
     QApplication.processEvents()
     
     tabSize = Preferences.getEditor("TabWidth")
     if tabSize == 0:
         tabSize = 4
     wysiwyg = Preferences.getEditorExporter("ODT/WYSIWYG")
     onlyStylesUsed = Preferences.getEditorExporter("ODT/OnlyStylesUsed")
     tabs = Preferences.getEditorExporter("ODT/UseTabs")
     
     # generate HTML of the source
     generator = HTMLGenerator(self.editor)
     html = generator.generate(
         tabSize=tabSize,
         useTabs=tabs,
         wysiwyg=wysiwyg,
         folding=False,
         onlyStylesUsed=onlyStylesUsed,
         titleFullPath=False
     )
     
     # convert HTML to ODT
     doc = QTextDocument()
     doc.setHtml(html)
     writer = QTextDocumentWriter(filename)
     ok = writer.write(doc)
     QApplication.restoreOverrideCursor()
     if not ok:
         E5MessageBox.critical(
             self.editor,
             self.tr("Export source"),
             self.tr(
                 """<p>The source could not be exported to"""
                 """ <b>{0}</b>.</p>""").format(filename))
Example #45
0
 def paint(self, painter, option, index):
     text = index.data()
     doc = QTextDocument()
     doc.setHtml(text)
     doc.setTextWidth(option.rect.width())
     painter.save()
     painter.translate(option.rect.x(), option.rect.y())
     doc.drawContents(painter)
     painter.restore()
     index.model().setData(index, option.rect.width(), Qt.UserRole + 1337)
 def paint(self, painter, option, index):
     text = index.model().data(index, Qt.DisplayRole)
     palette = QApplication.palette()
     document = QTextDocument()
     # if option.state & QStyle.State_Selected:
     #     document.setHtml("<p <center <font color={}>{}</font></center></p>".format(
     #         palette.highlightedText().color().name(), text))
     # else:
     document.setPlainText(text)
     if index.column() == 1:
         document.setTextWidth(350)
     elif index.column() == 2:
         document.setTextWidth(150)
     to = QTextOption()
     painter.save()
     painter.translate(option.rect.x(), option.rect.y())
     document.drawContents(painter)
     painter.restore()
Example #47
0
    def savePdf(self,fileName):
        pt = QPdfWriter(fileName)
        # pt.logicalDpiX
        pt.setPageSize(QPagedPaintDevice.A4)
        # print('resolution',pt.resolution())
        pt.setResolution(10000)
        # print('resolution',pt.resolution())

        textDocument = QTextDocument()
        textDocument.setHtml(self.pcontext.thtmlGet())
        textDocument.print_(pt)
        textDocument.end()
        print('pdf creat = ',fileName)
 def paint(self, painter, option, index):
     text = index.model().data(index, Qt.DisplayRole)
     palette = QApplication.palette()
     document = QTextDocument()
     if option.state & QStyle.State_Selected:
         document.setHtml("<p <center <font size={} font color={}>{}"
                          "</font></center></p>".format(
             "5", palette.highlightedText().color().name(), text))
     else:
         document.setPlainText(text)
     painter.save()
     painter.translate(option.rect.x(), option.rect.y())
     document.drawContents(painter)
     painter.restore()
Example #49
0
 def sizeHint(self, option, index):
     fm = option.fontMetrics
     if index.column() == residNum:
         return QSize(fm.width("9,999,999"), fm.height())
     if index.column() == residName:
         text = index.model().data(index)
         document = QTextDocument()
         document.setDefaultFont(option.font)
         document.setHtml(text)
         return QSize(document.idealWidth() + 5, fm.height())
     return QStyledItemDelegate.sizeHint(self, option, index)
Example #50
0
    def __init__(self, fft_mainWindow,parent=None, screenDim=None):

        super(ReportDialog, self).__init__(parent)
        self.fft_mainWindow=fft_mainWindow
        self.dataList = []
        self.setupUi(self, screenDim)
        self.screenDim = screenDim
        self.document = QTextDocument()
        #list that keeps track of only selected images
        self.list = []
        #list that contains all of the stored images
        self.wholeList = OrderedSet()
        self.savedfiles = None
        self.currentModel = None
        # settings
        self.uCut = 0
        self.lCut = 0
        self.angleInc = 0
        self.radStep = 0
        #  states
        """
        0 -> single
        1 -> multiple
        2 -> append
        """
        self.isReport = True
        self.isSummary = False
        self.reportOption = 2
        self.merger = merger()
        # printer
        self.printer = QPrinter(QPrinter.PrinterResolution)
        # Signals and slots:
        self.do_excel.connect(self.exportExcel)
        self.webView = QtWebKitWidgets.QWebView()

        # self.checkBox_report.stateChanged.connect(self.topLogicHandler)
        self.checkBox_summary.stateChanged.connect(self.topLogicHandler)

        self.radio_multiple.toggled.connect(self.toggleHandler)
        self.radio_single.toggled.connect(self.toggleHandler)
        self.radio_append.toggled.connect(self.toggleHandler)

        self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.exportHandler)
        self.do_print.connect(self.print)
        self.rejected.connect(self.resetOptions)
        self.topLogicHandler()
Example #51
0
    def paint(self, painter, option, index):
        """QStyledItemDelegate.paint implementation
        """
        option.state &= ~QStyle.State_HasFocus  # never draw focus rect

        option.state |= QStyle.State_Active  # draw fuzzy-open completion as focused, even if focus is on the line edit

        options = QStyleOptionViewItem(option)
        self.initStyleOption(options, index)

        style = QApplication.style() if options.widget is None else options.widget.style()

        doc = QTextDocument()
        if self._font is not None:
            doc.setDefaultFont(self._font)

        doc.setDocumentMargin(1)
        doc.setHtml(options.text)
        #  bad long (multiline) strings processing doc.setTextWidth(options.rect.width())

        options.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, options, painter)

        ctx = QAbstractTextDocumentLayout.PaintContext()

        # Highlighting text if item is selected
        if option.state & QStyle.State_Selected:
            ctx.palette.setColor(QPalette.Text, option.palette.color(QPalette.Active, QPalette.Text))

        textRect = style.subElementRect(QStyle.SE_ItemViewItemText, options)
        painter.save()
        painter.translate(textRect.topLeft())
        painter.setClipRect(textRect.translated(-textRect.topLeft()))
        doc.documentLayout().draw(painter, ctx)

        painter.restore()
Example #52
0
    def paint(self, painter, option, index):
        """QStyledItemDelegate.paint implementation
        """
        option.state &= ~QStyle.State_HasFocus  # never draw focus rect

        options = QStyleOptionViewItem(option)
        self.initStyleOption(options,index)

        style = QApplication.style() if options.widget is None else options.widget.style()

        doc = QTextDocument()
        doc.setDocumentMargin(1)
        doc.setHtml(options.text)
        if options.widget is not None:
            doc.setDefaultFont(options.widget.font())
        #  bad long (multiline) strings processing doc.setTextWidth(options.rect.width())

        options.text = ""
        style.drawControl(QStyle.CE_ItemViewItem, options, painter);

        ctx = QAbstractTextDocumentLayout.PaintContext()

        # Highlighting text if item is selected
        if option.state & QStyle.State_Selected:
            ctx.palette.setColor(QPalette.Text, option.palette.color(QPalette.Active, QPalette.HighlightedText))

        textRect = style.subElementRect(QStyle.SE_ItemViewItemText, options)
        painter.save()
        painter.translate(textRect.topLeft())
        """Original example contained line
            painter.setClipRect(textRect.translated(-textRect.topLeft()))
        but text is drawn clipped with it on kubuntu 12.04
        """
        doc.documentLayout().draw(painter, ctx)

        painter.restore()
Example #53
0
    def _get_textdoc(self, index):
        """Create the QTextDocument of an item.

        Args:
            index: The QModelIndex of the item to draw.
        """
        # FIXME we probably should do eliding here. See
        # qcommonstyle.cpp:viewItemDrawText
        text_option = QTextOption()
        if self._opt.features & QStyleOptionViewItem.WrapText:
            text_option.setWrapMode(QTextOption.WordWrap)
        else:
            text_option.setWrapMode(QTextOption.ManualWrap)
        text_option.setTextDirection(self._opt.direction)
        text_option.setAlignment(QStyle.visualAlignment(
            self._opt.direction, self._opt.displayAlignment))

        self._doc = QTextDocument(self)
        if index.parent().isValid():
            self._doc.setPlainText(self._opt.text)
        else:
            self._doc.setHtml('<b>{}</b>'.format(html.escape(self._opt.text)))
        self._doc.setDefaultFont(self._opt.font)
        self._doc.setDefaultTextOption(text_option)
        self._doc.setDefaultStyleSheet(style.get_stylesheet("""
            .highlight {
                {{ color['completion.match.fg'] }}
            }
        """))
        self._doc.setDocumentMargin(2)

        if index.column() == 0:
            marks = index.data(basecompletion.Role.marks)
            if marks is None:
                return
            for mark in marks:
                cur = QTextCursor(self._doc)
                cur.setPosition(mark[0])
                cur.setPosition(mark[1], QTextCursor.KeepAnchor)
                txt = cur.selectedText()
                cur.removeSelectedText()
                cur.insertHtml('<span class="highlight">{}</span>'.format(
                    html.escape(txt)))
    def _get_textdoc(self, index):
        """Create the QTextDocument of an item.

        Args:
            index: The QModelIndex of the item to draw.
        """
        # FIXME we probably should do eliding here. See
        # qcommonstyle.cpp:viewItemDrawText
        # https://github.com/qutebrowser/qutebrowser/issues/118
        text_option = QTextOption()
        if self._opt.features & QStyleOptionViewItem.WrapText:
            text_option.setWrapMode(QTextOption.WordWrap)
        else:
            text_option.setWrapMode(QTextOption.ManualWrap)
        text_option.setTextDirection(self._opt.direction)
        text_option.setAlignment(QStyle.visualAlignment(
            self._opt.direction, self._opt.displayAlignment))

        if self._doc is not None:
            self._doc.deleteLater()
        self._doc = QTextDocument(self)
        self._doc.setDefaultFont(self._opt.font)
        self._doc.setDefaultTextOption(text_option)
        self._doc.setDocumentMargin(2)

        if index.parent().isValid():
            view = self.parent()
            pattern = view.pattern
            columns_to_filter = index.model().columns_to_filter(index)
            if index.column() in columns_to_filter and pattern:
                pat = re.escape(pattern).replace(r'\ ', r'|')
                if self._opt.state & QStyle.State_Selected:
                    color = config.val.colors.completion.item.selected.match.fg
                else:
                    color = config.val.colors.completion.match.fg
                _Highlighter(self._doc, pat, color)
            self._doc.setPlainText(self._opt.text)
        else:
            self._doc.setHtml(
                '<span style="font: {};">{}</span>'.format(
                    html.escape(config.val.fonts.completion.category),
                    html.escape(self._opt.text)))
Example #55
0
    def _get_textdoc(self, index):
        """Create the QTextDocument of an item.

        Args:
            index: The QModelIndex of the item to draw.
        """
        # FIXME we probably should do eliding here. See
        # qcommonstyle.cpp:viewItemDrawText
        # https://github.com/The-Compiler/qutebrowser/issues/118
        text_option = QTextOption()
        if self._opt.features & QStyleOptionViewItem.WrapText:
            text_option.setWrapMode(QTextOption.WordWrap)
        else:
            text_option.setWrapMode(QTextOption.ManualWrap)
        text_option.setTextDirection(self._opt.direction)
        text_option.setAlignment(QStyle.visualAlignment(
            self._opt.direction, self._opt.displayAlignment))

        if self._doc is not None:
            self._doc.deleteLater()
        self._doc = QTextDocument(self)
        self._doc.setDefaultFont(self._opt.font)
        self._doc.setDefaultTextOption(text_option)
        self._doc.setDefaultStyleSheet(style.get_stylesheet("""
            .highlight {
                color: {{ color['completion.match.fg'] }};
            }
        """))
        self._doc.setDocumentMargin(2)

        if index.parent().isValid():
            pattern = index.model().pattern
            columns_to_filter = index.model().srcmodel.columns_to_filter
            if index.column() in columns_to_filter and pattern:
                repl = r'<span class="highlight">\g<0></span>'
                text = re.sub(re.escape(pattern).replace(r'\ ', r'.*'),
                              repl, self._opt.text, flags=re.IGNORECASE)
                self._doc.setHtml(text)
            else:
                self._doc.setPlainText(self._opt.text)
        else:
            self._doc.setHtml('<b>{}</b>'.format(html.escape(self._opt.text)))