def focus_line(self, line_no): """ highlight the line""" line_no -= 1 cursor = QTextCursor(self.document().findBlockByLineNumber(line_no)) cursor.clearSelection() highlight = QTextEdit.ExtraSelection() highlight.cursor = cursor highlight.format.setProperty(QTextFormat.FullWidthSelection, True) highlight.format.setBackground(QBrush(QColor("#657b83"))) self.setExtraSelections([highlight]) self.setTextCursor(cursor)
def write(self, s): if self.echo: sys.__stdout__.write(s) doc = self.document() cursor = QTextCursor(doc) cursor.clearSelection() cursor.movePosition(QTextCursor.End, QTextCursor.MoveAnchor) cursor.insertText(s) cursor.movePosition(QTextCursor.End, QTextCursor.MoveAnchor) cursor.clearSelection() self.ensureCursorVisible() qApp.processEvents()
def __highlight(self, positions, color=None, cancel=False): cursor = QTextCursor(self.document()) modified = self.document().isModified() for position in positions: if position > self.get_position('eof'): return cursor.setPosition(position) cursor.movePosition( QTextCursor.NextCharacter, QTextCursor.KeepAnchor) charformat = cursor.charFormat() pen = QPen(Qt.NoPen) if cancel else QPen(color) charformat.setTextOutline(pen) cursor.setCharFormat(charformat) if cancel: charformat = QTextCharFormat() cursor.movePosition( QTextCursor.NextCharacter, QTextCursor.KeepAnchor) cursor.setCharFormat(charformat) cursor.clearSelection() self.setCurrentCharFormat(charformat) self.document().setModified(modified)
def __highlight(self, positions, color=None, cancel=False): cursor = QTextCursor(self.document()) modified = self.document().isModified() for position in positions: if position > self.get_position('eof'): return cursor.setPosition(position) cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor) charformat = cursor.charFormat() pen = QPen(Qt.NoPen) if cancel else QPen(color) charformat.setTextOutline(pen) cursor.setCharFormat(charformat) if cancel: charformat = QTextCharFormat() cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor) cursor.setCharFormat(charformat) cursor.clearSelection() self.setCurrentCharFormat(charformat) self.document().setModified(modified)
def __duplicate_line_or_selection(self, after_current_line=True): """Duplicate current line or selected text""" cursor = self.textCursor() cursor.beginEditBlock() start_pos, end_pos = self.__save_selection() if to_text_string(cursor.selectedText()): cursor.setPosition(end_pos) # Check if end_pos is at the start of a block: if so, starting # changes from the previous block cursor.movePosition(QTextCursor.StartOfBlock, QTextCursor.KeepAnchor) if not to_text_string(cursor.selectedText()): cursor.movePosition(QTextCursor.PreviousBlock) end_pos = cursor.position() cursor.setPosition(start_pos) cursor.movePosition(QTextCursor.StartOfBlock) while cursor.position() <= end_pos: cursor.movePosition(QTextCursor.EndOfBlock, QTextCursor.KeepAnchor) if cursor.atEnd(): cursor_temp = QTextCursor(cursor) cursor_temp.clearSelection() cursor_temp.insertText(self.get_line_separator()) break cursor.movePosition(QTextCursor.NextBlock, QTextCursor.KeepAnchor) text = cursor.selectedText() cursor.clearSelection() if not after_current_line: # Moving cursor before current line/selected text cursor.setPosition(start_pos) cursor.movePosition(QTextCursor.StartOfBlock) start_pos += len(text) end_pos += len(text) cursor.insertText(text) cursor.endEditBlock() self.setTextCursor(cursor) self.__restore_selection(start_pos, end_pos)