summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorcontroller.cpp
diff options
context:
space:
mode:
authorjkobus <jaroslaw.kobus@digia.com>2014-02-13 16:43:28 +0100
committerJarek Kobus <jaroslaw.kobus@digia.com>2014-06-06 12:33:59 +0200
commit8cad94534f97849081bd595da458670d168d6b63 (patch)
tree5575aab843ad47d38a30d5bbc38f1449254eaf4e /src/plugins/diffeditor/diffeditorcontroller.cpp
parent8cb25f9e3e1afcc1ccfa17966cdcc31a95c02289 (diff)
downloadqt-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.cpp105
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