forked from qt-creator/qt-creator
SettingsAccessor: Use optional as return value of findIssues
Change-Id: Ib7ef8ec408f812a71735939514d98cf8755d292b Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -397,27 +397,31 @@ SettingsAccessor::ProceedInfo SettingsAccessor::reportIssues(const QVariantMap &
|
|||||||
if (!path.exists())
|
if (!path.exists())
|
||||||
return Continue;
|
return Continue;
|
||||||
|
|
||||||
IssueInfo issue = findIssues(data, path);
|
const Utils::optional<IssueInfo> issue = findIssues(data, path);
|
||||||
QMessageBox::Icon icon = QMessageBox::Information;
|
if (!issue)
|
||||||
|
|
||||||
if (issue.buttons.count() > 1)
|
|
||||||
icon = QMessageBox::Question;
|
|
||||||
|
|
||||||
QMessageBox::StandardButtons buttons = QMessageBox::NoButton;
|
|
||||||
foreach (QMessageBox::StandardButton b, issue.buttons.keys())
|
|
||||||
buttons |= b;
|
|
||||||
|
|
||||||
if (buttons == QMessageBox::NoButton)
|
|
||||||
return Continue;
|
return Continue;
|
||||||
|
|
||||||
QMessageBox msgBox(icon, issue.title, issue.message, buttons, parent);
|
const IssueInfo &details = issue.value();
|
||||||
if (issue.defaultButton != QMessageBox::NoButton)
|
|
||||||
msgBox.setDefaultButton(issue.defaultButton);
|
const QMessageBox::Icon icon
|
||||||
if (issue.escapeButton != QMessageBox::NoButton)
|
= details.buttons.count() > 1 ? QMessageBox::Question : QMessageBox::Information;
|
||||||
msgBox.setEscapeButton(issue.escapeButton);
|
const QMessageBox::StandardButtons buttons = [&details]()
|
||||||
|
{
|
||||||
|
QMessageBox::StandardButtons buttons = QMessageBox::NoButton;
|
||||||
|
for (const QMessageBox::StandardButton &b : details.buttons.keys())
|
||||||
|
buttons |= b;
|
||||||
|
return buttons;
|
||||||
|
}();
|
||||||
|
QTC_ASSERT(buttons != QMessageBox::NoButton, return Continue);
|
||||||
|
|
||||||
|
QMessageBox msgBox(icon, details.title, details.message, buttons, parent);
|
||||||
|
if (details.defaultButton != QMessageBox::NoButton)
|
||||||
|
msgBox.setDefaultButton(details.defaultButton);
|
||||||
|
if (details.escapeButton != QMessageBox::NoButton)
|
||||||
|
msgBox.setEscapeButton(details.escapeButton);
|
||||||
|
|
||||||
int boxAction = msgBox.exec();
|
int boxAction = msgBox.exec();
|
||||||
return issue.buttons.value(static_cast<QMessageBox::StandardButton>(boxAction));
|
return details.buttons.value(static_cast<QMessageBox::StandardButton>(boxAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -425,14 +429,14 @@ SettingsAccessor::ProceedInfo SettingsAccessor::reportIssues(const QVariantMap &
|
|||||||
*
|
*
|
||||||
* Returns a IssueInfo object which is then used by reportIssues.
|
* Returns a IssueInfo object which is then used by reportIssues.
|
||||||
*/
|
*/
|
||||||
SettingsAccessor::IssueInfo SettingsAccessor::findIssues(const QVariantMap &data, const FileName &path) const
|
Utils::optional<SettingsAccessor::IssueInfo>
|
||||||
|
SettingsAccessor::findIssues(const QVariantMap &data, const FileName &path) const
|
||||||
{
|
{
|
||||||
SettingsAccessor::IssueInfo result;
|
|
||||||
|
|
||||||
const FileName defaultSettingsPath = userFilePath(d->m_baseFile, d->m_userSuffix);
|
const FileName defaultSettingsPath = userFilePath(d->m_baseFile, d->m_userSuffix);
|
||||||
|
|
||||||
int version = versionFromMap(data);
|
const int version = versionFromMap(data);
|
||||||
if (data.isEmpty() || version < firstSupportedVersion() || version > currentVersion()) {
|
if (data.isEmpty() || version < firstSupportedVersion() || version > currentVersion()) {
|
||||||
|
IssueInfo result;
|
||||||
result.title = QApplication::translate("Utils::SettingsAccessor", "No Valid Settings Found");
|
result.title = QApplication::translate("Utils::SettingsAccessor", "No Valid Settings Found");
|
||||||
result.message = QApplication::translate("Utils::SettingsAccessor",
|
result.message = QApplication::translate("Utils::SettingsAccessor",
|
||||||
"<p>No valid settings file could be found.</p>"
|
"<p>No valid settings file could be found.</p>"
|
||||||
@@ -440,7 +444,10 @@ SettingsAccessor::IssueInfo SettingsAccessor::findIssues(const QVariantMap &data
|
|||||||
"were either too new or too old to be read.</p>")
|
"were either too new or too old to be read.</p>")
|
||||||
.arg(path.toUserOutput());
|
.arg(path.toUserOutput());
|
||||||
result.buttons.insert(QMessageBox::Ok, DiscardAndContinue);
|
result.buttons.insert(QMessageBox::Ok, DiscardAndContinue);
|
||||||
} else if ((path != defaultSettingsPath) && (version < currentVersion())) {
|
return result;
|
||||||
|
}
|
||||||
|
if ((path != defaultSettingsPath) && (version < currentVersion())) {
|
||||||
|
IssueInfo result;
|
||||||
result.title = QApplication::translate("Utils::SettingsAccessor", "Using Old Settings");
|
result.title = QApplication::translate("Utils::SettingsAccessor", "Using Old Settings");
|
||||||
result.message = QApplication::translate("Utils::SettingsAccessor",
|
result.message = QApplication::translate("Utils::SettingsAccessor",
|
||||||
"<p>The versioned backup \"%1\" of the settings "
|
"<p>The versioned backup \"%1\" of the settings "
|
||||||
@@ -452,13 +459,12 @@ SettingsAccessor::IssueInfo SettingsAccessor::findIssues(const QVariantMap &data
|
|||||||
"the newer version.</p>").arg(path.toUserOutput())
|
"the newer version.</p>").arg(path.toUserOutput())
|
||||||
.arg(d->m_applicationDisplayName);
|
.arg(d->m_applicationDisplayName);
|
||||||
result.buttons.insert(QMessageBox::Ok, Continue);
|
result.buttons.insert(QMessageBox::Ok, Continue);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result.buttons.isEmpty())
|
const QByteArray readId = settingsIdFromMap(data);
|
||||||
return result;
|
|
||||||
|
|
||||||
QByteArray readId = settingsIdFromMap(data);
|
|
||||||
if (!readId.isEmpty() && readId != settingsId()) {
|
if (!readId.isEmpty() && readId != settingsId()) {
|
||||||
|
IssueInfo result;
|
||||||
result.title = differentEnvironmentMsg(d->m_displayName);
|
result.title = differentEnvironmentMsg(d->m_displayName);
|
||||||
result.message = QApplication::translate("Utils::EnvironmentIdAccessor",
|
result.message = QApplication::translate("Utils::EnvironmentIdAccessor",
|
||||||
"<p>No .user settings file created by this instance "
|
"<p>No .user settings file created by this instance "
|
||||||
@@ -472,8 +478,10 @@ SettingsAccessor::IssueInfo SettingsAccessor::findIssues(const QVariantMap &data
|
|||||||
result.escapeButton = QMessageBox::No;
|
result.escapeButton = QMessageBox::No;
|
||||||
result.buttons.insert(QMessageBox::Yes, SettingsAccessor::Continue);
|
result.buttons.insert(QMessageBox::Yes, SettingsAccessor::Continue);
|
||||||
result.buttons.insert(QMessageBox::No, SettingsAccessor::DiscardAndContinue);
|
result.buttons.insert(QMessageBox::No, SettingsAccessor::DiscardAndContinue);
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Utils::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsAccessor::storeSharedSettings(const QVariantMap &data) const
|
void SettingsAccessor::storeSharedSettings(const QVariantMap &data) const
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "utils_global.h"
|
#include "utils_global.h"
|
||||||
|
|
||||||
#include "fileutils.h"
|
#include "fileutils.h"
|
||||||
|
#include "optional.h"
|
||||||
|
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
@@ -80,35 +81,10 @@ public:
|
|||||||
typedef QHash<QMessageBox::StandardButton, ProceedInfo> ButtonMap;
|
typedef QHash<QMessageBox::StandardButton, ProceedInfo> ButtonMap;
|
||||||
class IssueInfo {
|
class IssueInfo {
|
||||||
public:
|
public:
|
||||||
IssueInfo() : defaultButton(QMessageBox::NoButton), escapeButton(QMessageBox::NoButton) { }
|
|
||||||
IssueInfo(const QString &t, const QString &m,
|
|
||||||
QMessageBox::StandardButton d = QMessageBox::NoButton,
|
|
||||||
QMessageBox::StandardButton e = QMessageBox::NoButton,
|
|
||||||
const ButtonMap &b = ButtonMap()) :
|
|
||||||
title(t), message(m), defaultButton(d), escapeButton(e), buttons(b)
|
|
||||||
{ }
|
|
||||||
IssueInfo(const IssueInfo &other) :
|
|
||||||
title(other.title),
|
|
||||||
message(other.message),
|
|
||||||
defaultButton(other.defaultButton),
|
|
||||||
escapeButton(other.escapeButton),
|
|
||||||
buttons(other.buttons)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
IssueInfo &operator = (const IssueInfo &other)
|
|
||||||
{
|
|
||||||
title = other.title;
|
|
||||||
message = other.message;
|
|
||||||
defaultButton = other.defaultButton;
|
|
||||||
escapeButton = other.escapeButton;
|
|
||||||
buttons = other.buttons;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString title;
|
QString title;
|
||||||
QString message;
|
QString message;
|
||||||
QMessageBox::StandardButton defaultButton;
|
QMessageBox::StandardButton defaultButton = QMessageBox::NoButton;
|
||||||
QMessageBox::StandardButton escapeButton;
|
QMessageBox::StandardButton escapeButton = QMessageBox::NoButton;
|
||||||
QHash<QMessageBox::StandardButton, ProceedInfo> buttons;
|
QHash<QMessageBox::StandardButton, ProceedInfo> buttons;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -130,7 +106,8 @@ protected:
|
|||||||
|
|
||||||
virtual Utils::FileName backupName(const QVariantMap &data) const;
|
virtual Utils::FileName backupName(const QVariantMap &data) const;
|
||||||
|
|
||||||
virtual IssueInfo findIssues(const QVariantMap &data, const Utils::FileName &path) const;
|
virtual Utils::optional<IssueInfo> findIssues(const QVariantMap &data,
|
||||||
|
const Utils::FileName &path) const;
|
||||||
|
|
||||||
virtual void storeSharedSettings(const QVariantMap &data) const;
|
virtual void storeSharedSettings(const QVariantMap &data) const;
|
||||||
virtual QVariant retrieveSharedSettings() const;
|
virtual QVariant retrieveSharedSettings() const;
|
||||||
|
@@ -473,11 +473,9 @@ void tst_SettingsAccessor::findIssues_ok()
|
|||||||
const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(info.title.isEmpty());
|
QVERIFY(!info);
|
||||||
QVERIFY(info.message.isEmpty());
|
|
||||||
QVERIFY(info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_SettingsAccessor::findIssues_emptyData()
|
void tst_SettingsAccessor::findIssues_emptyData()
|
||||||
@@ -486,11 +484,9 @@ void tst_SettingsAccessor::findIssues_emptyData()
|
|||||||
const QVariantMap data;
|
const QVariantMap data;
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(!info.title.isEmpty());
|
QVERIFY(info);
|
||||||
QVERIFY(!info.message.isEmpty());
|
|
||||||
QVERIFY(!info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_SettingsAccessor::findIssues_tooNew()
|
void tst_SettingsAccessor::findIssues_tooNew()
|
||||||
@@ -499,11 +495,9 @@ void tst_SettingsAccessor::findIssues_tooNew()
|
|||||||
const QVariantMap data = versionedMap(42, TESTACCESSOR_DEFAULT_ID);
|
const QVariantMap data = versionedMap(42, TESTACCESSOR_DEFAULT_ID);
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(!info.title.isEmpty());
|
QVERIFY(info);
|
||||||
QVERIFY(!info.message.isEmpty());
|
|
||||||
QVERIFY(!info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_SettingsAccessor::findIssues_tooOld()
|
void tst_SettingsAccessor::findIssues_tooOld()
|
||||||
@@ -512,11 +506,9 @@ void tst_SettingsAccessor::findIssues_tooOld()
|
|||||||
const QVariantMap data = versionedMap(2, TESTACCESSOR_DEFAULT_ID);
|
const QVariantMap data = versionedMap(2, TESTACCESSOR_DEFAULT_ID);
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(!info.title.isEmpty());
|
QVERIFY(info);
|
||||||
QVERIFY(!info.message.isEmpty());
|
|
||||||
QVERIFY(!info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_SettingsAccessor::findIssues_wrongId()
|
void tst_SettingsAccessor::findIssues_wrongId()
|
||||||
@@ -525,11 +517,9 @@ void tst_SettingsAccessor::findIssues_wrongId()
|
|||||||
const QVariantMap data = versionedMap(6, "foo");
|
const QVariantMap data = versionedMap(6, "foo");
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(!info.title.isEmpty());
|
QVERIFY(info);
|
||||||
QVERIFY(!info.message.isEmpty());
|
|
||||||
QVERIFY(!info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_SettingsAccessor::findIssues_nonDefaultPath()
|
void tst_SettingsAccessor::findIssues_nonDefaultPath()
|
||||||
@@ -538,11 +528,9 @@ void tst_SettingsAccessor::findIssues_nonDefaultPath()
|
|||||||
const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
||||||
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user.foobar");
|
const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user.foobar");
|
||||||
|
|
||||||
const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path);
|
const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
|
||||||
|
|
||||||
QVERIFY(!info.title.isEmpty());
|
QVERIFY(info);
|
||||||
QVERIFY(!info.message.isEmpty());
|
|
||||||
QVERIFY(!info.buttons.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_SettingsAccessor)
|
QTEST_MAIN(tst_SettingsAccessor)
|
||||||
|
Reference in New Issue
Block a user