diff options
author | mae <qt-info@nokia.com> | 2009-09-17 12:47:16 +0200 |
---|---|---|
committer | mae <qt-info@nokia.com> | 2009-09-17 12:47:16 +0200 |
commit | 554f4fe6799182bd07e62996abac6a6ca7c66037 (patch) | |
tree | 6a28c5bd556e224335b53dace074c17c65ba5880 /src/plugins | |
parent | 061865efa4f8299e391cc09c4751b5543a12ba62 (diff) | |
download | qt-creator-554f4fe6799182bd07e62996abac6a6ca7c66037.tar.gz |
ensure visibility for extra blocks that are auto inserted
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 8 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppeditor.h | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/basetexteditor.cpp | 17 | ||||
-rw-r--r-- | src/plugins/texteditor/basetexteditor.h | 4 |
4 files changed, 22 insertions, 9 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index ec75b63269..9ea95cc405 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1356,13 +1356,13 @@ bool CPPEditor::autoBackspace(QTextCursor &cursor) return false; } -void CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) +int CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) { if (characterAt(cursor.position()-1) != QLatin1Char('{')) - return; + return 0; if (!contextAllowsAutoParentheses(cursor)) - return; + return 0; // verify that we indeed do have an extra opening brace in the document @@ -1387,7 +1387,9 @@ void CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) } cursor.setPosition(pos); m_allowSkippingOfBlockEnd = true; + return 1; } + return 0; } bool CPPEditor::contextAllowsAutoParentheses(const QTextCursor &cursor) const diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index cb2f0d303a..90c39a1ab7 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -215,7 +215,7 @@ protected: bool isElectricCharacter(const QChar &ch) const; QString autoComplete(QTextCursor &cursor, const QString &text) const; bool autoBackspace(QTextCursor &cursor); - void paragraphSeparatorAboutToBeInserted(QTextCursor &cursor); + int paragraphSeparatorAboutToBeInserted(QTextCursor &cursor); bool contextAllowsAutoParentheses(const QTextCursor &cursor) const; diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 930039bbcc..39408ae0ff 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -890,7 +890,7 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) const TabSettings &ts = d->m_document->tabSettings(); cursor.beginEditBlock(); - paragraphSeparatorAboutToBeInserted(cursor); // virtual + int extraBlocks = paragraphSeparatorAboutToBeInserted(cursor); // virtual if (ts.m_autoIndent) { cursor.insertBlock(); @@ -902,6 +902,16 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) } cursor.endEditBlock(); e->accept(); + + if (extraBlocks > 0) { + QTextCursor ensureVisible = cursor; + while (extraBlocks > 0) { + --extraBlocks; + ensureVisible.movePosition(QTextCursor::NextBlock); + } + setTextCursor(ensureVisible); + } + setTextCursor(cursor); return; } else if (!ro @@ -3279,9 +3289,10 @@ bool BaseTextEditor::autoBackspace(QTextCursor &cursor) return false; } -void BaseTextEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) +int BaseTextEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) { - Q_UNUSED(cursor) + Q_UNUSED(cursor); + return 0; } void BaseTextEditor::indentBlock(QTextDocument *, QTextBlock, QChar) diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 595b55865d..2015a10fcb 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -509,8 +509,8 @@ protected: virtual QString autoComplete(QTextCursor &cursor, const QString &text) const; // Handles backspace. When returning true, backspace processing is stopped virtual bool autoBackspace(QTextCursor &cursor); - // Hook to insert special characters on enter - virtual void paragraphSeparatorAboutToBeInserted(QTextCursor &cursor); + // Hook to insert special characters on enter. Returns the number of extra blocks inserted. + virtual int paragraphSeparatorAboutToBeInserted(QTextCursor &cursor); // Indent a text block based on previous line. Default does nothing virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar); // Indent at cursor. Calls indentBlock for selection or current line. |