add errorString output argument to IFile::save()

this centralizes error reporting (in fact, in most cases it adds any in
the first place).

Task-number: QTCREATORBUG-1619
This commit is contained in:
Oswald Buddenhagen
2011-03-30 13:45:16 +02:00
parent 469199e7a5
commit f1f9904d35
36 changed files with 116 additions and 102 deletions

View File

@@ -55,6 +55,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <utils/qtcassert.h>
#include <utils/fileutils.h>
#include <utils/reloadpromptutils.h>
namespace {
@@ -362,7 +363,7 @@ ITextMarkable *BaseTextDocument::documentMarker() const
return d->m_documentMarker;
}
bool BaseTextDocument::save(const QString &fileName)
bool BaseTextDocument::save(QString *errorString, const QString &fileName)
{
QTextCursor cursor(d->m_document);
@@ -386,26 +387,24 @@ bool BaseTextDocument::save(const QString &fileName)
if (!fileName.isEmpty())
fName = fileName;
QFile file(fName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return false;
Utils::FileSaver saver(fName);
if (!saver.hasError()) {
QString plainText = d->m_document->toPlainText();
QString plainText = d->m_document->toPlainText();
if (d->m_lineTerminatorMode == BaseTextDocumentPrivate::CRLFLineTerminator)
plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n"));
if (d->m_lineTerminatorMode == BaseTextDocumentPrivate::CRLFLineTerminator)
plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n"));
if (d->m_codec->name() == "UTF-8"
&& (d->m_extraEncodingSettings.m_utf8BomSetting == ExtraEncodingSettings::AlwaysAdd
|| (d->m_extraEncodingSettings.m_utf8BomSetting == ExtraEncodingSettings::OnlyKeep
&& d->m_fileHasUtf8Bom))) {
saver.write("\xef\xbb\xbf", 3);
}
if (d->m_codec->name() == "UTF-8"
&& (d->m_extraEncodingSettings.m_utf8BomSetting == ExtraEncodingSettings::AlwaysAdd
|| (d->m_extraEncodingSettings.m_utf8BomSetting == ExtraEncodingSettings::OnlyKeep
&& d->m_fileHasUtf8Bom))) {
file.write("\xef\xbb\xbf", 3);
saver.write(d->m_codec->fromUnicode(plainText));
}
file.write(d->m_codec->fromUnicode(plainText));
if (!file.flush())
if (!saver.finalize(errorString))
return false;
file.close();
const QFileInfo fi(fName);
d->m_fileName = QDir::cleanPath(fi.absoluteFilePath());