From 3422995521959e70c84e519df45867333d4ced2d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 28 Jan 2014 13:26:57 +0100 Subject: [PATCH] VCS editors: Fix revision markers Resets the revisions when setting the contents of text editor documents in general. Task-number: QTCREATORBUG-11356 Change-Id: I4069d629d8a612d42c7deae707300d50690e2db7 Reviewed-by: Orgad Shaneh Reviewed-by: Eike Ziller --- src/plugins/git/giteditor.cpp | 2 +- src/plugins/texteditor/basetextdocument.cpp | 34 ++++++++++++++++----- src/plugins/texteditor/basetextdocument.h | 1 + src/plugins/vcsbase/vcsbaseeditor.cpp | 12 ++------ src/plugins/vcsbase/vcsbaseeditor.h | 3 -- 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 8e979d8208b..5b4b05e7f1e 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -200,7 +200,7 @@ void GitEditor::setPlainTextFiltered(const QString &text) break; } - setPlainText(modText); + baseTextDocument()->setPlainText(modText); } void GitEditor::commandFinishedGotoLine(bool ok, int exitCode, const QVariant &v) diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index ae7b1ee70f7..1bffcb0499d 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -70,6 +70,7 @@ public: explicit BaseTextDocumentPrivate(BaseTextDocument *q); QTextCursor indentOrUnindent(const QTextCursor &textCursor, bool doIndent); + void resetRevisions(); QString m_defaultPath; QString m_suggestedFileName; @@ -150,6 +151,16 @@ QTextCursor BaseTextDocumentPrivate::indentOrUnindent(const QTextCursor &textCur return cursor; } +void BaseTextDocumentPrivate::resetRevisions() +{ + BaseTextDocumentLayout *documentLayout = qobject_cast(m_document->documentLayout()); + QTC_ASSERT(documentLayout, return); + documentLayout->lastSaveRevision = m_document->revision(); + + for (QTextBlock block = m_document->begin(); block.isValid(); block = block.next()) + block.setRevision(documentLayout->lastSaveRevision); +} + BaseTextDocument::BaseTextDocument() : d(new BaseTextDocumentPrivate(this)) { connect(d->m_document, SIGNAL(modificationChanged(bool)), this, SIGNAL(changed())); @@ -448,14 +459,7 @@ bool BaseTextDocument::save(QString *errorString, const QString &saveFileName, b bool BaseTextDocument::setContents(const QByteArray &contents) { - if (contents.size() > EditorManager::maxTextFileSize()) { - document()->setPlainText(BaseTextEditorWidget::msgTextTooLarge(contents.size())); - document()->setModified(false); - return false; - } - document()->setPlainText(QString::fromUtf8(contents)); - document()->setModified(false); - return true; + return setPlainText(QString::fromUtf8(contents)); } bool BaseTextDocument::shouldAutoSave() const @@ -566,6 +570,20 @@ bool BaseTextDocument::reload(QString *errorString) return success; } +bool BaseTextDocument::setPlainText(const QString &text) +{ + if (text.size() > EditorManager::maxTextFileSize()) { + document()->setPlainText(BaseTextEditorWidget::msgTextTooLarge(text.size())); + d->resetRevisions(); + document()->setModified(false); + return false; + } + document()->setPlainText(text); + d->resetRevisions(); + document()->setModified(false); + return true; +} + bool BaseTextDocument::reload(QString *errorString, ReloadFlag flag, ChangeType type) { if (flag == FlagIgnore) diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h index 546fcf89f2e..2e41cc370e9 100644 --- a/src/plugins/texteditor/basetextdocument.h +++ b/src/plugins/texteditor/basetextdocument.h @@ -105,6 +105,7 @@ public: virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName); virtual bool reload(QString *errorString); + bool setPlainText(const QString &text); QTextDocument *document() const; void setSyntaxHighlighter(SyntaxHighlighter *highlighter); SyntaxHighlighter *syntaxHighlighter() const; diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 57199771700..26899f57fb7 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -1184,21 +1184,13 @@ DiffChunk VcsBaseEditorWidget::diffChunk(QTextCursor cursor) const return rc; } -void VcsBaseEditorWidget::setPlainText(const QString &text) -{ - if (text.size() > Core::EditorManager::maxTextFileSize()) - TextEditor::BaseTextEditorWidget::setPlainText(msgTextTooLarge(text.size())); - else - TextEditor::BaseTextEditorWidget::setPlainText(text); -} - void VcsBaseEditorWidget::reportCommandFinished(bool ok, int exitCode, const QVariant &data) { Q_UNUSED(exitCode); Q_UNUSED(data); if (!ok) - setPlainText(tr("Failed to retrieve data.")); + baseTextDocument()->setPlainText(tr("Failed to retrieve data.")); } const VcsBaseEditorParameters *VcsBaseEditorWidget::findType(const VcsBaseEditorParameters *array, @@ -1596,7 +1588,7 @@ void VcsBase::VcsBaseEditorWidget::testLogResolving(QByteArray &data, const QByteArray &entry2) { init(); - setPlainText(QLatin1String(data)); + baseTextDocument()->setPlainText(QLatin1String(data)); QCOMPARE(d->entriesComboBox()->itemText(0), QString::fromLatin1(entry1)); QCOMPARE(d->entriesComboBox()->itemText(1), QString::fromLatin1(entry2)); } diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index db5fef8825c..22f7e32007e 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -209,9 +209,6 @@ signals: void diffChunkReverted(const VcsBase::DiffChunk &dc); public slots: - // Convenience slot to set data read from stdout, will use the - // documents' codec to decode - void setPlainText(const QString &text); void reportCommandFinished(bool ok, int exitCode, const QVariant &data); protected: