forked from qt-creator/qt-creator
Editors: Continue refactoring indenters out of the editors.
This is pretty much a complement of commit 3a684586fa,
which is an attempt to make editors and indenters a bit more decoupled.
Reviewed-by: Thorbjorn Lindeijer
This commit is contained in:
@@ -58,6 +58,7 @@
|
||||
#include <texteditor/texteditorconstants.h>
|
||||
#include <texteditor/tabsettings.h>
|
||||
#include <texteditor/texteditorsettings.h>
|
||||
#include <texteditor/indenter.h>
|
||||
|
||||
#include <find/findplugin.h>
|
||||
#include <find/textfindconstants.h>
|
||||
@@ -935,7 +936,7 @@ void FakeVimPluginPrivate::checkForElectricCharacter(bool *result, QChar c)
|
||||
if (!handler)
|
||||
return;
|
||||
if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(handler->widget()))
|
||||
*result = bt->isElectricCharacter(c);
|
||||
*result = bt->indenter()->isElectricCharacter(c);
|
||||
}
|
||||
|
||||
void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
|
||||
@@ -1132,7 +1133,7 @@ void FakeVimPluginPrivate::indentRegion(int beginLine, int endLine,
|
||||
while (!cursor.atBlockEnd())
|
||||
cursor.deleteChar();
|
||||
} else {
|
||||
bt->indentBlock(doc, block, typedChar);
|
||||
bt->indenter()->indentBlock(doc, block, typedChar, bt);
|
||||
}
|
||||
block = block.next();
|
||||
}
|
||||
|
||||
@@ -1344,7 +1344,7 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e)
|
||||
QChar electricChar;
|
||||
if (d->m_document->tabSettings().m_autoIndent) {
|
||||
foreach (QChar c, text) {
|
||||
if (isElectricCharacter(c)) {
|
||||
if (d->m_indenter->isElectricCharacter(c)) {
|
||||
electricChar = c;
|
||||
break;
|
||||
}
|
||||
@@ -1890,6 +1890,11 @@ void BaseTextEditor::setIndenter(Indenter *indenter)
|
||||
d->m_indenter.reset(indenter);
|
||||
}
|
||||
|
||||
Indenter *BaseTextEditor::indenter() const
|
||||
{
|
||||
return d->m_indenter.data();
|
||||
}
|
||||
|
||||
void BaseTextEditor::setAutoCompleter(AutoCompleter *autoCompleter)
|
||||
{
|
||||
d->m_autoCompleter.reset(autoCompleter);
|
||||
@@ -1949,7 +1954,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate()
|
||||
m_requestAutoCompletionPosition(0),
|
||||
m_requestAutoCompletionTimer(0),
|
||||
m_cursorBlockNumber(-1),
|
||||
m_autoCompleter(new AutoCompleter)
|
||||
m_autoCompleter(new AutoCompleter),
|
||||
m_indenter(new Indenter)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -4019,13 +4025,6 @@ void BaseTextEditor::zoomReset()
|
||||
emit requestZoomReset();
|
||||
}
|
||||
|
||||
bool BaseTextEditor::isElectricCharacter(QChar ch) const
|
||||
{
|
||||
if (!d->m_indenter.isNull())
|
||||
return d->m_indenter->isElectricCharacter(ch);
|
||||
return false;
|
||||
}
|
||||
|
||||
void BaseTextEditor::indentInsertedText(const QTextCursor &tc)
|
||||
{
|
||||
indent(tc.document(), tc, QChar::Null);
|
||||
@@ -4247,23 +4246,15 @@ int BaseTextEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void BaseTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar ch)
|
||||
{
|
||||
if (!d->m_indenter.isNull())
|
||||
d->m_indenter->indentBlock(doc, block, ch, this);
|
||||
}
|
||||
|
||||
void BaseTextEditor::indent(QTextDocument *doc, const QTextCursor &cursor, QChar typedChar)
|
||||
{
|
||||
maybeClearSomeExtraSelections(cursor);
|
||||
if (!d->m_indenter.isNull())
|
||||
d->m_indenter->indent(doc, cursor, typedChar, this);
|
||||
}
|
||||
|
||||
void BaseTextEditor::reindent(QTextDocument *doc, const QTextCursor &cursor)
|
||||
{
|
||||
maybeClearSomeExtraSelections(cursor);
|
||||
if (!d->m_indenter.isNull())
|
||||
d->m_indenter->reindent(doc, cursor, this);
|
||||
}
|
||||
|
||||
|
||||
@@ -225,6 +225,7 @@ public:
|
||||
QRegion translatedLineRegion(int lineStart, int lineEnd) const;
|
||||
|
||||
void setIndenter(Indenter *indenter);
|
||||
Indenter *indenter() const;
|
||||
|
||||
void setAutoCompleter(AutoCompleter *autoCompleter);
|
||||
AutoCompleter *autoCompleter() const;
|
||||
@@ -424,14 +425,8 @@ public:
|
||||
virtual int paragraphSeparatorAboutToBeInserted(QTextCursor &cursor);
|
||||
|
||||
void indentInsertedText(const QTextCursor &tc);
|
||||
// Returns true if key triggers an indent.
|
||||
virtual bool isElectricCharacter(QChar ch) const;
|
||||
// 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.
|
||||
virtual void indent(QTextDocument *doc, const QTextCursor &cursor, QChar typedChar);
|
||||
// Reindent at cursor. Selection will be adjusted according to the indentation change of the first block
|
||||
virtual void reindent(QTextDocument *doc, const QTextCursor &cursor);
|
||||
void indent(QTextDocument *doc, const QTextCursor &cursor, QChar typedChar);
|
||||
void reindent(QTextDocument *doc, const QTextCursor &cursor);
|
||||
|
||||
protected:
|
||||
static void countBracket(QChar open, QChar close, QChar c, int *errors, int *stillopen);
|
||||
|
||||
@@ -70,6 +70,17 @@ bool Indenter::doIsElectricalCharacter(const QChar &) const
|
||||
return false;
|
||||
}
|
||||
|
||||
void Indenter::doIndentBlock(QTextDocument *doc,
|
||||
const QTextBlock &block,
|
||||
const QChar &typedChar,
|
||||
BaseTextEditor *editor)
|
||||
{
|
||||
Q_UNUSED(doc);
|
||||
Q_UNUSED(block);
|
||||
Q_UNUSED(typedChar);
|
||||
Q_UNUSED(editor);
|
||||
}
|
||||
|
||||
void Indenter::doIndent(QTextDocument *doc, const QTextCursor &cursor, const QChar &typedChar, BaseTextEditor *editor)
|
||||
{
|
||||
if (cursor.hasSelection()) {
|
||||
|
||||
@@ -50,15 +50,20 @@ public:
|
||||
Indenter();
|
||||
virtual ~Indenter();
|
||||
|
||||
// Returns true if key triggers an indent.
|
||||
bool isElectricCharacter(const QChar &ch) const;
|
||||
// Indent a text block based on previous line. Default does nothing
|
||||
void indentBlock(QTextDocument *doc,
|
||||
const QTextBlock &block,
|
||||
const QChar &typedChar,
|
||||
BaseTextEditor *editor);
|
||||
// Indent at cursor. Calls indentBlock for selection or current line.
|
||||
void indent(QTextDocument *doc,
|
||||
const QTextCursor &cursor,
|
||||
const QChar &typedChar,
|
||||
BaseTextEditor *editor);
|
||||
// Reindent at cursor. Selection will be adjusted according to the indentation
|
||||
// change of the first block.
|
||||
void reindent(QTextDocument *doc, const QTextCursor &cursor, BaseTextEditor *editor);
|
||||
|
||||
private:
|
||||
@@ -66,7 +71,7 @@ private:
|
||||
virtual void doIndentBlock(QTextDocument *doc,
|
||||
const QTextBlock &block,
|
||||
const QChar &typedChar,
|
||||
BaseTextEditor *editor) = 0;
|
||||
BaseTextEditor *editor);
|
||||
virtual void doIndent(QTextDocument *doc,
|
||||
const QTextCursor &cursor,
|
||||
const QChar &typedChar,
|
||||
|
||||
Reference in New Issue
Block a user