diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2019-01-28 08:11:20 +0100 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2019-01-31 10:25:18 +0000 |
commit | 1dee275f58e9f9df2e2719325157cfdec42fe1cf (patch) | |
tree | b5d3480d9484a9d0347de6d3d8219f31d70b602e /src/plugins/texteditor | |
parent | 80fb0178fdd9ee82acfb22aa512c7514868e89d1 (diff) |
ClangFormat: Add cursor position to the indenter interface
Sometimes it's imnportant where the cursor currently is
to properly format the code without affecting the current line.
Change-Id: I8b1fb11d2303adb5f960c7cb80a0ed2e6e45010f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r-- | src/plugins/texteditor/indenter.h | 27 | ||||
-rw-r--r-- | src/plugins/texteditor/normalindenter.cpp | 5 | ||||
-rw-r--r-- | src/plugins/texteditor/normalindenter.h | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.cpp | 8 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.h | 6 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/textindenter.cpp | 13 | ||||
-rw-r--r-- | src/plugins/texteditor/textindenter.h | 14 |
8 files changed, 53 insertions, 28 deletions
diff --git a/src/plugins/texteditor/indenter.h b/src/plugins/texteditor/indenter.h index a9fb5de7cd..bb23c9d7ac 100644 --- a/src/plugins/texteditor/indenter.h +++ b/src/plugins/texteditor/indenter.h @@ -76,47 +76,56 @@ public: virtual void invalidateCache() {} - virtual int indentFor(const QTextBlock & /*block*/, const TabSettings & /*tabSettings*/) + virtual int indentFor(const QTextBlock & /*block*/, + const TabSettings & /*tabSettings*/, + int /*cursorPositionInEditor*/ = -1) { return -1; } virtual void formatOrIndent(const QTextCursor &cursor, const TabSettings &tabSettings, - int /*cursorPositionInEditor*/ = -1) + int cursorPositionInEditor = -1) { - indent(cursor, QChar::Null, tabSettings); + indent(cursor, QChar::Null, tabSettings, cursorPositionInEditor); } // By default just calls indent with default settings. virtual Replacements format(const QTextCursor &cursor, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) { - indent(cursor, QChar::Null, tabSettings); + indent(cursor, QChar::Null, tabSettings, cursorPositionInEditor); return Replacements(); } // Expects a list of blocks in order of occurrence in the document. virtual IndentationForBlock indentationForBlocks(const QVector<QTextBlock> &blocks, - const TabSettings & /*tabSettings*/) + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) = 0; virtual Utils::optional<TabSettings> tabSettings() const = 0; // Indent a text block based on previous line. Default does nothing virtual void indentBlock(const QTextBlock &block, const QChar &typedChar, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) = 0; // Indent at cursor. Calls indentBlock for selection or current line. virtual void indent(const QTextCursor &cursor, const QChar &typedChar, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) = 0; // Reindent at cursor. Selection will be adjusted according to the indentation // change of the first block. - virtual void reindent(const QTextCursor &cursor, const TabSettings &tabSettings) = 0; + virtual void reindent(const QTextCursor &cursor, + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) + = 0; protected: QTextDocument *m_doc; diff --git a/src/plugins/texteditor/normalindenter.cpp b/src/plugins/texteditor/normalindenter.cpp index 7faea84c48..c6cb0febd1 100644 --- a/src/plugins/texteditor/normalindenter.cpp +++ b/src/plugins/texteditor/normalindenter.cpp @@ -54,9 +54,12 @@ NormalIndenter::NormalIndenter(QTextDocument *doc) : TextIndenter(doc) {} -int NormalIndenter::indentFor(const QTextBlock &block, const TabSettings &tabSettings) +int NormalIndenter::indentFor(const QTextBlock &block, + const TabSettings &tabSettings, + int cursorPositionInEditor) { Q_UNUSED(tabSettings); + Q_UNUSED(cursorPositionInEditor); QTextBlock previous = block.previous(); if (!previous.isValid()) diff --git a/src/plugins/texteditor/normalindenter.h b/src/plugins/texteditor/normalindenter.h index ece41fa52d..5a53caa4a3 100644 --- a/src/plugins/texteditor/normalindenter.h +++ b/src/plugins/texteditor/normalindenter.h @@ -35,7 +35,9 @@ public: explicit NormalIndenter(QTextDocument *doc); ~NormalIndenter() override = default; - int indentFor(const QTextBlock &block, const TabSettings &tabSettings) override; + int indentFor(const QTextBlock &block, + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) override; }; } // namespace TextEditor diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index d96b463cd4..98096daee9 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -412,14 +412,14 @@ void TextDocument::setExtraEncodingSettings(const ExtraEncodingSettings &extraEn d->m_extraEncodingSettings = extraEncodingSettings; } -void TextDocument::autoIndent(const QTextCursor &cursor, QChar typedChar) +void TextDocument::autoIndent(const QTextCursor &cursor, QChar typedChar, int currentCursorPosition) { - d->m_indenter->indent(cursor, typedChar, tabSettings()); + d->m_indenter->indent(cursor, typedChar, tabSettings(), currentCursorPosition); } -void TextDocument::autoReindent(const QTextCursor &cursor) +void TextDocument::autoReindent(const QTextCursor &cursor, int currentCursorPosition) { - d->m_indenter->reindent(cursor, tabSettings()); + d->m_indenter->reindent(cursor, tabSettings(), currentCursorPosition); } void TextDocument::autoFormatOrIndent(const QTextCursor &cursor) diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index f71922f2d2..b7c771e748 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -87,8 +87,10 @@ public: void setIndenter(Indenter *indenter); Indenter *indenter() const; - void autoIndent(const QTextCursor &cursor, QChar typedChar = QChar::Null); - void autoReindent(const QTextCursor &cursor); + void autoIndent(const QTextCursor &cursor, + QChar typedChar = QChar::Null, + int currentCursorPosition = -1); + void autoReindent(const QTextCursor &cursor, int currentCursorPosition = -1); void autoFormatOrIndent(const QTextCursor &cursor); QTextCursor indent(const QTextCursor &cursor, bool blockSelection = false, int column = 0, int *offset = nullptr); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 7907259306..4e9de84f10 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -2491,7 +2491,7 @@ void TextEditorWidget::keyPressEvent(QKeyEvent *e) --extraBlocks; ensureVisible.movePosition(QTextCursor::NextBlock); if (tps.m_autoIndent) - d->m_document->autoIndent(ensureVisible); + d->m_document->autoIndent(ensureVisible, QChar::Null, cursorPosition); else if (!previousIndentationString.isEmpty()) ensureVisible.insertText(previousIndentationString); if (d->m_animateAutoComplete || d->m_highlightAutoComplete) { @@ -2773,7 +2773,7 @@ void TextEditorWidget::keyPressEvent(QKeyEvent *e) cursor.setPosition(pos, QTextCursor::KeepAnchor); } if (!electricChar.isNull() && d->m_autoCompleter->contextAllowsElectricCharacters(cursor)) - d->m_document->autoIndent(cursor, electricChar); + d->m_document->autoIndent(cursor, electricChar, cursor.position()); if (!autoText.isEmpty()) cursor.setPosition(autoText.length() == 1 ? cursor.position() : cursor.anchor()); diff --git a/src/plugins/texteditor/textindenter.cpp b/src/plugins/texteditor/textindenter.cpp index 53801fabfa..3dab3e2c48 100644 --- a/src/plugins/texteditor/textindenter.cpp +++ b/src/plugins/texteditor/textindenter.cpp @@ -37,7 +37,8 @@ TextIndenter::TextIndenter(QTextDocument *doc) TextIndenter::~TextIndenter() = default; IndentationForBlock TextIndenter::indentationForBlocks(const QVector<QTextBlock> &blocks, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int /*cursorPositionInEditor*/) { IndentationForBlock ret; for (QTextBlock block : blocks) @@ -47,7 +48,8 @@ IndentationForBlock TextIndenter::indentationForBlocks(const QVector<QTextBlock> void TextIndenter::indentBlock(const QTextBlock &block, const QChar &typedChar, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int /*cursorPositionInEditor*/) { Q_UNUSED(typedChar); const int indent = indentFor(block, tabSettings); @@ -58,7 +60,8 @@ void TextIndenter::indentBlock(const QTextBlock &block, void TextIndenter::indent(const QTextCursor &cursor, const QChar &typedChar, - const TabSettings &tabSettings) + const TabSettings &tabSettings, + int /*cursorPositionInEditor*/) { if (cursor.hasSelection()) { QTextBlock block = m_doc->findBlock(cursor.selectionStart()); @@ -72,7 +75,9 @@ void TextIndenter::indent(const QTextCursor &cursor, } } -void TextIndenter::reindent(const QTextCursor &cursor, const TabSettings &tabSettings) +void TextIndenter::reindent(const QTextCursor &cursor, + const TabSettings &tabSettings, + int /*cursorPositionInEditor*/) { if (cursor.hasSelection()) { QTextBlock block = m_doc->findBlock(cursor.selectionStart()); diff --git a/src/plugins/texteditor/textindenter.h b/src/plugins/texteditor/textindenter.h index 51be65f409..d361713074 100644 --- a/src/plugins/texteditor/textindenter.h +++ b/src/plugins/texteditor/textindenter.h @@ -45,17 +45,21 @@ public: ~TextIndenter() override; IndentationForBlock indentationForBlocks(const QVector<QTextBlock> &blocks, - const TabSettings &tabSettings) override; + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) override; void indentBlock(const QTextBlock &block, const QChar &typedChar, - const TabSettings &tabSettings) override; + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) override; void indent(const QTextCursor &cursor, const QChar &typedChar, - const TabSettings &tabSettings) override; + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) override; - - void reindent(const QTextCursor &cursor, const TabSettings &tabSettings) override; + void reindent(const QTextCursor &cursor, + const TabSettings &tabSettings, + int cursorPositionInEditor = -1) override; Utils::optional<TabSettings> tabSettings() const override; }; |