void SpellCheckerCore::replaceWordsInCurrentEditor(const WordList &wordsToReplace, const QString &replacementWord) { if(wordsToReplace.count() == 0) { Q_ASSERT(wordsToReplace.count() != 0); return; } if(d->currentEditor == NULL) { Q_ASSERT(d->currentEditor != NULL); return; } TextEditor::TextEditorWidget* editorWidget = qobject_cast<TextEditor::TextEditorWidget*>(d->currentEditor->widget()); if(editorWidget == NULL) { Q_ASSERT(editorWidget != NULL); return; } QTextCursor cursor = editorWidget->textCursor(); /* Iterate the words and replace all one by one */ foreach(const Word& wordToReplace, wordsToReplace) { editorWidget->gotoLine(wordToReplace.lineNumber, wordToReplace.columnNumber - 1); int wordStartPos = editorWidget->textCursor().position(); editorWidget->gotoLine(wordToReplace.lineNumber, wordToReplace.columnNumber + wordToReplace.length - 1); int wordEndPos = editorWidget->textCursor().position(); cursor.beginEditBlock(); cursor.setPosition(wordStartPos); cursor.setPosition(wordEndPos, QTextCursor::KeepAnchor); cursor.removeSelectedText(); cursor.insertText(replacementWord); cursor.endEditBlock(); }
void ClangFormat::disableFormattingSelectedText() { TextEditor::TextEditorWidget *widget = TextEditor::TextEditorWidget::currentTextEditorWidget(); if (!widget) return; const QTextCursor tc = widget->textCursor(); if (!tc.hasSelection()) return; // Insert start marker const QTextBlock selectionStartBlock = tc.document()->findBlock(tc.selectionStart()); QTextCursor insertCursor(tc.document()); insertCursor.beginEditBlock(); insertCursor.setPosition(selectionStartBlock.position()); insertCursor.insertText("// clang-format off\n"); const int positionToRestore = tc.position(); // Insert end marker QTextBlock selectionEndBlock = tc.document()->findBlock(tc.selectionEnd()); insertCursor.setPosition(selectionEndBlock.position() + selectionEndBlock.length() - 1); insertCursor.insertText("\n// clang-format on"); insertCursor.endEditBlock(); // Reset the cursor position in order to clear the selection. QTextCursor restoreCursor(tc.document()); restoreCursor.setPosition(positionToRestore); widget->setTextCursor(restoreCursor); // The indentation of these markers might be undesired, so reformat. // This is not optimal because two undo steps will be needed to remove the markers. const int reformatTextLength = insertCursor.position() - selectionStartBlock.position(); BeautifierPlugin::formatCurrentFile(command(selectionStartBlock.position(), reformatTextLength)); }
void SpellCheckerCore::replaceWordsInCurrentEditor( const WordList& wordsToReplace, const QString& replacementWord ) { if( wordsToReplace.count() == 0 ) { Q_ASSERT( wordsToReplace.count() != 0 ); return; } if( d->currentEditor == nullptr ) { Q_ASSERT( d->currentEditor != nullptr ); return; } TextEditor::TextEditorWidget* editorWidget = qobject_cast<TextEditor::TextEditorWidget*>( d->currentEditor->widget() ); if( editorWidget == nullptr ) { Q_ASSERT( editorWidget != nullptr ); return; } QTextCursor cursor = editorWidget->textCursor(); /* Iterate the words and replace all one by one */ for( const Word& wordToReplace: wordsToReplace ) { editorWidget->gotoLine( int32_t( wordToReplace.lineNumber ), int32_t( wordToReplace.columnNumber ) - 1 ); int wordStartPos = editorWidget->textCursor().position(); editorWidget->gotoLine( int32_t( wordToReplace.lineNumber ), int32_t( wordToReplace.columnNumber ) + wordToReplace.length - 1 ); int wordEndPos = editorWidget->textCursor().position(); cursor.beginEditBlock(); cursor.setPosition( wordStartPos ); cursor.setPosition( wordEndPos, QTextCursor::KeepAnchor ); cursor.removeSelectedText(); cursor.insertText( replacementWord ); cursor.endEditBlock(); } /* If more than one suggestion was replaced, show a notification */ if( wordsToReplace.count() > 1 ) { Utils::FadingIndicator::showText( editorWidget, tr( "%1 occurrences replaced." ).arg( wordsToReplace.count() ), Utils::FadingIndicator::SmallText ); } }