Git: Aspectify settings

Change-Id: I87dfeba360967cc77cc230811bcd9f67b3ea6e38
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2021-03-16 06:00:25 +01:00
parent f2c34e51e9
commit aa69415ac7
19 changed files with 379 additions and 529 deletions

View File

@@ -73,11 +73,15 @@ static Core::IEditor *locateEditor(const char *property, const QString &entry)
namespace VcsBase {
VcsBaseClientImpl::VcsBaseClientImpl(VcsBaseClientSettings *settings) :
m_clientSettings(settings)
VcsBaseClientImpl::VcsBaseClientImpl(VcsBaseClientSettings *settings, VcsBaseSettings *baseSettings) :
m_clientSettings(settings), m_baseSettings(baseSettings)
{
m_defaultSettings = *m_clientSettings;
m_clientSettings->readSettings(Core::ICore::settings());
if (settings) {
m_defaultSettings = *m_clientSettings;
m_clientSettings->readSettings(Core::ICore::settings());
} else {
m_baseSettings->readSettings(Core::ICore::settings());
}
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
this, &VcsBaseClientImpl::saveSettings);
}
@@ -87,6 +91,11 @@ VcsBaseClientSettings &VcsBaseClientImpl::settings() const
return *m_clientSettings;
}
VcsBaseSettings &VcsBaseClientImpl::baseSettings() const
{
return *m_baseSettings;
}
FilePath VcsBaseClientImpl::vcsBinary() const
{
return settings().binaryPath();
@@ -215,7 +224,9 @@ SynchronousProcessResponse VcsBaseClientImpl::vcsSynchronousExec(const QString &
int VcsBaseClientImpl::vcsTimeoutS() const
{
return m_clientSettings->vcsTimeoutS();
if (m_clientSettings)
return m_clientSettings->vcsTimeoutS();
return m_baseSettings->timeout.value();
}
VcsBaseEditorWidget *VcsBaseClientImpl::createVcsEditor(Utils::Id kind, QString title,
@@ -250,7 +261,10 @@ VcsBaseEditorWidget *VcsBaseClientImpl::createVcsEditor(Utils::Id kind, QString
void VcsBaseClientImpl::saveSettings()
{
settings().writeSettings(Core::ICore::settings(), m_defaultSettings);
if (m_clientSettings)
m_clientSettings->writeSettings(Core::ICore::settings(), m_defaultSettings);
else
m_baseSettings->writeSettings(Core::ICore::settings());
}
VcsBaseClient::VcsBaseClient(VcsBaseClientSettings *settings) :

View File

@@ -58,10 +58,12 @@ class VCSBASE_EXPORT VcsBaseClientImpl : public QObject
Q_OBJECT
public:
explicit VcsBaseClientImpl(VcsBaseClientSettings *settings);
explicit VcsBaseClientImpl(VcsBaseClientSettings *settings,
VcsBaseSettings *baseSettings = nullptr);
~VcsBaseClientImpl() override = default;
VcsBaseClientSettings &settings() const;
VcsBaseClientSettings &settings() const; // FIXME: Phase out.
VcsBaseSettings &baseSettings() const; // FIXME: Rename into settings() when the original is gone.
virtual Utils::FilePath vcsBinary() const;
int vcsTimeoutS() const;
@@ -128,8 +130,9 @@ protected:
private:
void saveSettings();
VcsBaseClientSettings *m_clientSettings;
VcsBaseClientSettings *m_clientSettings; // "old" style.
VcsBaseClientSettings m_defaultSettings;
VcsBaseSettings *m_baseSettings = nullptr; // Aspect based.
};
class VCSBASE_EXPORT VcsBaseClient : public VcsBaseClientImpl

View File

@@ -397,4 +397,74 @@ QVariant VcsBaseClientSettings::keyDefaultValue(const QString &key) const
return QVariant(valueType(key));
}
// VcsBaseSettings
VcsBaseSettings::VcsBaseSettings()
{
setAutoApply(false);
registerAspect(&binaryPath);
binaryPath.setSettingsKey("BinaryPath");
registerAspect(&userName);
userName.setSettingsKey("Username");
registerAspect(&userEmail);
userEmail.setSettingsKey("UserEmail");
registerAspect(&logCount);
logCount.setSettingsKey("LogCount");
logCount.setRange(0, 1000 * 1000);
logCount.setDefaultValue(100);
logCount.setLabelText(tr("Log count:"));
registerAspect(&path);
path.setSettingsKey("Path");
registerAspect(&promptOnSubmit);
promptOnSubmit.setSettingsKey("PromptOnSubmit");
promptOnSubmit.setDefaultValue(true);
promptOnSubmit.setLabelText(tr("Prompt on submit"));
registerAspect(&timeout);
timeout.setSettingsKey("Timeout");
timeout.setRange(0, 3600 * 24 * 365);
timeout.setDefaultValue(30);
timeout.setLabelText(tr("Timeout:"));
timeout.setSuffix(tr("s"));
}
QStringList VcsBaseSettings::searchPathList() const
{
return path.value().split(HostOsInfo::pathListSeparator(), Qt::SkipEmptyParts);
}
void VcsBaseSettings::setSettingsGroup(const QString &key)
{
m_settingsGroup = key;
}
void VcsBaseSettings::writeSettings(QSettings *settings) const
{
QTC_ASSERT(!m_settingsGroup.isEmpty(), return);
settings->remove(m_settingsGroup);
settings->beginGroup(m_settingsGroup);
forEachAspect([settings](BaseAspect *aspect) {
QtcSettings::setValueWithDefault(settings, aspect->settingsKey(),
aspect->value(), aspect->defaultValue());
});
settings->endGroup();
}
void VcsBaseSettings::readSettings(const QSettings *settings)
{
const QString keyRoot = m_settingsGroup + '/';
forEachAspect([settings, keyRoot](BaseAspect *aspect) {
QString key = aspect->settingsKey();
const QVariant value = settings->value(keyRoot + key, aspect->defaultValue());
aspect->setValue(value);
});
}
} // namespace VcsBase

View File

@@ -27,19 +27,42 @@
#include "vcsbase_global.h"
#include <utils/aspects.h>
#include <QStringList>
#include <QVariant>
#include <QSharedDataPointer>
QT_BEGIN_NAMESPACE
class QSettings;
QT_END_NAMESPACE
namespace Utils { class FilePath; }
namespace VcsBase {
namespace Internal { class VcsBaseClientSettingsPrivate; }
class VCSBASE_EXPORT VcsBaseSettings : public Utils::AspectContainer
{
Q_DECLARE_TR_FUNCTIONS(VcsBase::VcsBaseSettings)
public:
VcsBaseSettings();
Utils::StringAspect binaryPath;
Utils::StringAspect userName;
Utils::StringAspect userEmail;
Utils::IntegerAspect logCount;
Utils::BoolAspect promptOnSubmit;
Utils::IntegerAspect timeout; // Seconds
Utils::StringAspect path;
QStringList searchPathList() const;
void writeSettings(QSettings *settings) const;
void readSettings(const QSettings *settings);
void setSettingsGroup(const QString &key);
private:
QString m_settingsGroup;
};
class VCSBASE_EXPORT VcsBaseClientSettings
{
public: