def cursors(self): """Cursors for rectangular selection. 1 cursor for every line """ cursors = [] if self._start is not None: startLine, startVisibleCol = self._start currentLine, currentCol = self._qpart.cursorPosition if abs(startLine - currentLine) > self._MAX_SIZE or \ abs(startVisibleCol - currentCol) > self._MAX_SIZE: # Too big rectangular selection freezes the GUI self._qpart.userWarning.emit('Rectangular selection area is too big') self._start = None return [] currentBlockText = self._qpart.textCursor().block().text() currentVisibleCol = self._realToVisibleColumn(currentBlockText, currentCol) for lineNumber in range(min(startLine, currentLine), max(startLine, currentLine) + 1): block = self._qpart.document().findBlockByNumber(lineNumber) cursor = QTextCursor(block) realStartCol = self._visibleToRealColumn(block.text(), startVisibleCol) realCurrentCol = self._visibleToRealColumn(block.text(), currentVisibleCol) if realStartCol is None: realStartCol = block.length() # out of range value if realCurrentCol is None: realCurrentCol = block.length() # out of range value cursor.setPositionInBlock(min(realStartCol, block.length() - 1)) cursor.setPositionInBlock(min(realCurrentCol, block.length() - 1), QTextCursor.KeepAnchor) cursors.append(cursor) return cursors
def selectedPosition(self, pos): anchorPos, cursorPos = pos anchorLine, anchorCol = anchorPos cursorLine, cursorCol = cursorPos anchorCursor = QTextCursor(self.document().findBlockByNumber(anchorLine)) anchorCursor.setPositionInBlock(anchorCol) # just get absolute position cursor = QTextCursor(self.document().findBlockByNumber(cursorLine)) cursor.setPositionInBlock(cursorCol) anchorCursor.setPosition(cursor.position(), QTextCursor.KeepAnchor) self.setTextCursor(anchorCursor)
def cursorPosition(self, pos): line, col = pos line = min(line, len(self.lines) - 1) lineText = self.lines[line] if col is not None: col = min(col, len(lineText)) else: col = len(lineText) - len(lineText.lstrip()) cursor = QTextCursor(self.document().findBlockByNumber(line)) cursor.setPositionInBlock(col) self.setTextCursor(cursor)
def cursorAtSpaceEnd(block): cursor = QTextCursor(block) cursor.setPositionInBlock(len(blockIndentation(block))) return cursor
def cursorRect(block, column, offset): cursor = QTextCursor(block) cursor.setPositionInBlock(column) return self.cursorRect(cursor).translated(offset, 0)