forked from qt-creator/qt-creator
Git: Aspectify settings
Change-Id: I87dfeba360967cc77cc230811bcd9f67b3ea6e38 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -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) :
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user