forked from qt-creator/qt-creator
SettingsAccessor: Remember last saved state
Remember last saved data and do not save it again if nothing had changed. Change-Id: I093859ff5edc8d1d6e7b17ecd97985ca6fb0e579 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -443,6 +443,12 @@ bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) co
|
|||||||
FileName PersistentSettingsWriter::fileName() const
|
FileName PersistentSettingsWriter::fileName() const
|
||||||
{ return m_fileName; }
|
{ return m_fileName; }
|
||||||
|
|
||||||
|
//** * @brief Set contents of file (e.g. from data read from it). */
|
||||||
|
void PersistentSettingsWriter::setContents(const QVariantMap &data)
|
||||||
|
{
|
||||||
|
m_savedData = data;
|
||||||
|
}
|
||||||
|
|
||||||
bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const
|
bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const
|
||||||
{
|
{
|
||||||
QDir tmp;
|
QDir tmp;
|
||||||
@@ -472,10 +478,12 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri
|
|||||||
saver.setResult(&w);
|
saver.setResult(&w);
|
||||||
}
|
}
|
||||||
bool ok = saver.finalize();
|
bool ok = saver.finalize();
|
||||||
if (ok)
|
if (ok) {
|
||||||
m_savedData = data;
|
m_savedData = data;
|
||||||
else if (errorString)
|
} else if (errorString) {
|
||||||
|
m_savedData.clear();
|
||||||
*errorString = saver.errorString();
|
*errorString = saver.errorString();
|
||||||
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ public:
|
|||||||
|
|
||||||
FileName fileName() const;
|
FileName fileName() const;
|
||||||
|
|
||||||
|
void setContents(const QVariantMap &data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool write(const QVariantMap &data, QString *errorString) const;
|
bool write(const QVariantMap &data, QString *errorString) const;
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
|
|||||||
QTC_ASSERT(!m_baseFilePath.isEmpty(), return QVariantMap());
|
QTC_ASSERT(!m_baseFilePath.isEmpty(), return QVariantMap());
|
||||||
|
|
||||||
const RestoreData result = readData(m_baseFilePath, parent);
|
const RestoreData result = readData(m_baseFilePath, parent);
|
||||||
|
|
||||||
const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent) : ProceedInfo::Continue;
|
const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent) : ProceedInfo::Continue;
|
||||||
return pi == ProceedInfo::DiscardAndContinue ? QVariantMap() : result.data;
|
return pi == ProceedInfo::DiscardAndContinue ? QVariantMap() : result.data;
|
||||||
}
|
}
|
||||||
@@ -92,6 +93,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
|
|||||||
bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const
|
bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const
|
||||||
{
|
{
|
||||||
const optional<Issue> result = writeData(m_baseFilePath, data, parent);
|
const optional<Issue> result = writeData(m_baseFilePath, data, parent);
|
||||||
|
|
||||||
const ProceedInfo pi = result ? reportIssues(result.value(), m_baseFilePath, parent) : ProceedInfo::Continue;
|
const ProceedInfo pi = result ? reportIssues(result.value(), m_baseFilePath, parent) : ProceedInfo::Continue;
|
||||||
return pi == ProceedInfo::Continue;
|
return pi == ProceedInfo::Continue;
|
||||||
}
|
}
|
||||||
@@ -132,7 +134,14 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FileName &path) c
|
|||||||
.arg(path.toUserOutput()), Issue::Type::ERROR));
|
.arg(path.toUserOutput()), Issue::Type::ERROR));
|
||||||
}
|
}
|
||||||
|
|
||||||
return RestoreData(path, reader.restoreValues());
|
const QVariantMap data = reader.restoreValues();
|
||||||
|
if (path == m_baseFilePath) {
|
||||||
|
if (!m_writer)
|
||||||
|
m_writer = std::make_unique<PersistentSettingsWriter>(m_baseFilePath, docType);
|
||||||
|
m_writer->setContents(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RestoreData(path, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
Reference in New Issue
Block a user