diff options
author | jkobus <jaroslaw.kobus@digia.com> | 2014-02-13 16:43:28 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@digia.com> | 2014-06-06 12:33:59 +0200 |
commit | 8cad94534f97849081bd595da458670d168d6b63 (patch) | |
tree | 5575aab843ad47d38a30d5bbc38f1449254eaf4e /src/plugins/diffeditor/diffeditorcontroller.cpp | |
parent | 8cb25f9e3e1afcc1ccfa17966cdcc31a95c02289 (diff) | |
download | qt-creator-8cad94534f97849081bd595da458670d168d6b63.tar.gz |
Implement unified diff editor
Change-Id: I93e0bfd71a8a650afbe2ca9e0f1f3dbfc9d57db0
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
Diffstat (limited to 'src/plugins/diffeditor/diffeditorcontroller.cpp')
-rw-r--r-- | src/plugins/diffeditor/diffeditorcontroller.cpp | 105 |
1 files changed, 98 insertions, 7 deletions
diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp index fae78efbcb..b815961cf1 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorcontroller.cpp @@ -29,12 +29,28 @@ #include "diffeditorcontroller.h" +#include <coreplugin/icore.h> + +static const char settingsGroupC[] = "DiffEditor"; +static const char contextLineNumbersKeyC[] = "ContextLineNumbers"; +static const char ignoreWhitespaceKeyC[] = "IgnoreWhitespace"; + namespace DiffEditor { DiffEditorController::DiffEditorController(QObject *parent) : QObject(parent), - m_descriptionEnabled(false) + m_descriptionEnabled(false), + m_contextLinesNumber(3), + m_ignoreWhitespace(true) { + QSettings *s = Core::ICore::settings(); + s->beginGroup(QLatin1String(settingsGroupC)); + m_contextLinesNumber = s->value(QLatin1String(contextLineNumbersKeyC), + m_contextLinesNumber).toInt(); + m_ignoreWhitespace = s->value(QLatin1String(ignoreWhitespaceKeyC), + m_ignoreWhitespace).toBool(); + s->endGroup(); + clear(); } @@ -48,9 +64,9 @@ QString DiffEditorController::clearMessage() const return m_clearMessage; } -QList<DiffEditorController::DiffFilesContents> DiffEditorController::diffContents() const +QList<FileData> DiffEditorController::diffFiles() const { - return m_diffFileList; + return m_diffFiles; } QString DiffEditorController::workingDirectory() const @@ -68,6 +84,43 @@ bool DiffEditorController::isDescriptionEnabled() const return m_descriptionEnabled; } +int DiffEditorController::contextLinesNumber() const +{ + return m_contextLinesNumber; +} + +bool DiffEditorController::isIgnoreWhitespace() const +{ + return m_ignoreWhitespace; +} + +QString DiffEditorController::makePatch(int diffFileIndex, + int chunkIndex, + bool revert) const +{ + if (diffFileIndex < 0 || chunkIndex < 0) + return QString(); + + if (diffFileIndex >= m_diffFiles.count()) + return QString(); + + const FileData fileData = m_diffFiles.at(diffFileIndex); + if (chunkIndex >= fileData.chunks.count()) + return QString(); + + const ChunkData chunkData = fileData.chunks.at(chunkIndex); + const bool lastChunk = (chunkIndex == fileData.chunks.count() - 1); + + const QString fileName = revert + ? fileData.rightFileInfo.fileName + : fileData.leftFileInfo.fileName; + + return DiffUtils::makePatch(chunkData, + fileName, + fileName, + lastChunk && fileData.lastChunkAtTheEndOfFile); +} + void DiffEditorController::clear() { clear(tr("No difference")); @@ -75,16 +128,18 @@ void DiffEditorController::clear() void DiffEditorController::clear(const QString &message) { + setDescription(QString()); + setDiffFiles(QList<FileData>()); m_clearMessage = message; emit cleared(message); } -void DiffEditorController::setDiffContents(const QList<DiffFilesContents> &diffFileList, - const QString &workingDirectory) +void DiffEditorController::setDiffFiles(const QList<FileData> &diffFileList, + const QString &workingDirectory) { - m_diffFileList = diffFileList; + m_diffFiles = diffFileList; m_workingDirectory = workingDirectory; - emit diffContentsChanged(diffFileList, workingDirectory); + emit diffFilesChanged(diffFileList, workingDirectory); } void DiffEditorController::setDescription(const QString &description) @@ -105,4 +160,40 @@ void DiffEditorController::setDescriptionEnabled(bool on) emit descriptionEnablementChanged(on); } +void DiffEditorController::setContextLinesNumber(int lines) +{ + const int l = qMax(lines, 1); + if (m_contextLinesNumber == l) + return; + + m_contextLinesNumber = l; + + QSettings *s = Core::ICore::settings(); + s->beginGroup(QLatin1String(settingsGroupC)); + s->setValue(QLatin1String(contextLineNumbersKeyC), m_contextLinesNumber); + s->endGroup(); + + emit contextLinesNumberChanged(l); +} + +void DiffEditorController::setIgnoreWhitespace(bool ignore) +{ + if (m_ignoreWhitespace == ignore) + return; + + m_ignoreWhitespace = ignore; + + QSettings *s = Core::ICore::settings(); + s->beginGroup(QLatin1String(settingsGroupC)); + s->setValue(QLatin1String(ignoreWhitespaceKeyC), m_ignoreWhitespace); + s->endGroup(); + + emit ignoreWhitespaceChanged(ignore); +} + +void DiffEditorController::requestReload() +{ + emit reloadRequested(); +} + } // namespace DiffEditor |