Fossil: Aspectify settings

Change-Id: I090cf3c63cd705220abb09e5d58eef89e9b55147
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2021-03-19 16:07:25 +01:00
parent c973fae866
commit ea431eede1
14 changed files with 227 additions and 473 deletions

View File

@@ -23,7 +23,6 @@ add_qtc_plugin(Fossil
fossileditor.cpp fossileditor.h
fossilplugin.cpp fossilplugin.h
fossilsettings.cpp fossilsettings.h
optionspage.cpp optionspage.h optionspage.ui
pullorpushdialog.cpp pullorpushdialog.h pullorpushdialog.ui
revertdialog.ui
revisioninfo.cpp revisioninfo.h

View File

@@ -8,7 +8,6 @@ include($$IDE_SOURCE_TREE/src/qtcreatorplugin.pri)
SOURCES += \
fossilclient.cpp \
fossilplugin.cpp \
optionspage.cpp \
fossilsettings.cpp \
commiteditor.cpp \
fossilcommitwidget.cpp \
@@ -23,7 +22,6 @@ HEADERS += \
fossilclient.h \
constants.h \
fossilplugin.h \
optionspage.h \
fossilsettings.h \
commiteditor.h \
fossilcommitwidget.h \
@@ -35,7 +33,6 @@ HEADERS += \
revisioninfo.h \
wizard/fossiljsextension.h
FORMS += \
optionspage.ui \
revertdialog.ui \
fossilcommitpanel.ui \
pullorpushdialog.ui \

View File

@@ -15,7 +15,6 @@ QtcPlugin {
"constants.h",
"fossilclient.cpp", "fossilclient.h",
"fossilplugin.cpp", "fossilplugin.h",
"optionspage.cpp", "optionspage.h", "optionspage.ui",
"fossilsettings.cpp", "fossilsettings.h",
"commiteditor.cpp", "commiteditor.h",
"fossilcommitwidget.cpp", "fossilcommitwidget.h",

View File

@@ -36,9 +36,7 @@
#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/id.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/utilsicons.h>
#include <QSyntaxHighlighter>
@@ -67,15 +65,14 @@ public:
{
QTC_ASSERT(client, return);
VcsBase::VcsBaseClientSettings &settings = client->settings();
FossilClient::SupportedFeatures features = client->supportedFeatures();
addReloadButton();
if (features.testFlag(FossilClient::DiffIgnoreWhiteSpaceFeature)) {
mapSetting(addToggleButton("-w", tr("Ignore All Whitespace")),
settings.boolPointer(FossilSettings::diffIgnoreAllWhiteSpaceKey));
&client->settings().diffIgnoreAllWhiteSpace);
mapSetting(addToggleButton("--strip-trailing-cr", tr("Strip Trailing CR")),
settings.boolPointer(FossilSettings::diffStripTrailingCRKey));
&client->settings().diffStripTrailingCR);
}
}
};
@@ -91,20 +88,20 @@ public:
{
QTC_ASSERT(client, return);
VcsBase::VcsBaseClientSettings &settings = client->settings();
FossilSettings &settings = client->settings();
FossilClient::SupportedFeatures features = client->supportedFeatures();
if (features.testFlag(FossilClient::AnnotateBlameFeature)) {
mapSetting(addToggleButton("|BLAME|", tr("Show Committers")),
settings.boolPointer(FossilSettings::annotateShowCommittersKey));
&settings.annotateShowCommitters);
}
// Force listVersions setting to false by default.
// This way the annotated line number would not get offset by the version list.
settings.setValue(FossilSettings::annotateListVersionsKey, false);
settings.annotateListVersions.setValue(false);
mapSetting(addToggleButton("--log", tr("List Versions")),
settings.boolPointer(FossilSettings::annotateListVersionsKey));
&settings.annotateListVersions);
}
};
@@ -141,7 +138,7 @@ public:
void addLineageComboBox()
{
VcsBase::VcsBaseClientSettings &settings = m_client->settings();
FossilSettings &settings = m_client->settings();
// ancestors/descendants filter
// This is a positional argument not an option.
@@ -156,22 +153,22 @@ public:
ChoiceItem(tr("Unfiltered"), "")
};
mapSetting(addChoices(tr("Lineage"), QStringList("|LINEAGE|%1|current"), lineageFilterChoices),
settings.stringPointer(FossilSettings::timelineLineageFilterKey));
&settings.timelineLineageFilter);
}
void addVerboseToggleButton()
{
VcsBase::VcsBaseClientSettings &settings = m_client->settings();
FossilSettings &settings = m_client->settings();
// show files
mapSetting(addToggleButton("-showfiles", tr("Verbose"),
tr("Show files changed in each revision")),
settings.boolPointer(FossilSettings::timelineVerboseKey));
&settings.timelineVerbose);
}
void addItemTypeComboBox()
{
VcsBase::VcsBaseClientSettings &settings = m_client->settings();
FossilSettings &settings = m_client->settings();
// option: -t <val>
const QList<ChoiceItem> itemTypeChoices = {
@@ -188,7 +185,7 @@ public:
// Fossil expects separate arguments for option and value ( i.e. "-t" "all")
// so we need to handle the splitting explicitly in arguments().
mapSetting(addChoices(tr("Item Types"), QStringList("-t %1"), itemTypeChoices),
settings.stringPointer(FossilSettings::timelineItemTypeKey));
&settings.timelineItemType);
}
QStringList arguments() const final
@@ -244,16 +241,22 @@ QString FossilClient::makeVersionString(unsigned version)
.arg(versionPart(version));
}
FossilClient::FossilClient(FossilSettings *settings) : VcsBase::VcsBaseClient(settings)
FossilClient::FossilClient(FossilSettings *settings)
: VcsBase::VcsBaseClient(settings), m_settings(settings)
{
setDiffConfigCreator([this](QToolBar *toolBar) {
return new FossilDiffConfig(this, toolBar);
});
}
FossilSettings &FossilClient::settings() const
{
return *m_settings;
}
unsigned int FossilClient::synchronousBinaryVersion() const
{
if (settings().binaryPath().isEmpty())
if (settings().binaryPath.value().isEmpty())
return 0;
QStringList args("version");
@@ -282,7 +285,7 @@ QList<BranchInfo> FossilClient::branchListFromOutput(const QString &output, cons
// Branch list format:
// " branch-name"
// "* current-branch"
return Utils::transform(output.split('\n', Utils::SkipEmptyParts), [=](const QString& l) {
return Utils::transform(output.split('\n', Qt::SkipEmptyParts), [=](const QString &l) {
const QString &name = l.mid(2);
QTC_ASSERT(!name.isEmpty(), return BranchInfo());
const BranchInfo::BranchFlags flags = (l.startsWith("* ") ? defaultFlags | BranchInfo::Current : defaultFlags);
@@ -395,9 +398,9 @@ RevisionInfo FossilClient::synchronousRevisionQuery(const QString &workingDirect
const QString hashToken =
QString::fromUtf8(supportedFeatures().testFlag(InfoHashFeature) ? "hash: " : "uuid: ");
for (const QString &l : output.split('\n', Utils::SkipEmptyParts)) {
for (const QString &l : output.split('\n', Qt::SkipEmptyParts)) {
if (l.startsWith("checkout: ", Qt::CaseInsensitive)
|| l.startsWith(hashToken, Qt::CaseInsensitive)) {
|| l.startsWith("uuid: ", Qt::CaseInsensitive)) {
const QRegularExpressionMatch idMatch = idRx.match(l);
QTC_ASSERT(idMatch.hasMatch(), return RevisionInfo());
revisionId = idMatch.captured(1);
@@ -446,7 +449,7 @@ QStringList FossilClient::synchronousTagQuery(const QString &workingDirectory, c
const QString output = sanitizeFossilOutput(response.stdOut());
return output.split('\n', Utils::SkipEmptyParts);
return output.split('\n', Qt::SkipEmptyParts);
}
RepositorySettings FossilClient::synchronousSettingsQuery(const QString &workingDirectory)
@@ -458,7 +461,7 @@ RepositorySettings FossilClient::synchronousSettingsQuery(const QString &working
repoSettings.user = synchronousUserDefaultQuery(workingDirectory);
if (repoSettings.user.isEmpty())
repoSettings.user = settings().stringValue(FossilSettings::userNameKey);
repoSettings.user = settings().userName.value();
const QStringList args("settings");
@@ -468,12 +471,12 @@ RepositorySettings FossilClient::synchronousSettingsQuery(const QString &working
const QString output = sanitizeFossilOutput(response.stdOut());
for (const QString &line : output.split('\n', Utils::SkipEmptyParts)) {
for (const QString &line : output.split('\n', Qt::SkipEmptyParts)) {
// parse settings line:
// <property> <(local|global)> <value>
// Fossil properties are case-insensitive; force them to lower-case.
// Values may be in mixed-case; force lower-case for fixed values.
const QStringList fields = line.split(' ', Utils::SkipEmptyParts);
const QStringList fields = line.split(' ', Qt::SkipEmptyParts);
const QString property = fields.at(0).toLower();
const QString value = (fields.size() >= 3 ? fields.at(2) : QString());
@@ -636,8 +639,8 @@ bool FossilClient::synchronousCreateRepository(const QString &workingDirectory,
// use the configured default user for admin
const QString repoName = QDir(workingDirectory).dirName().simplified();
const QString repoPath = settings().stringValue(FossilSettings::defaultRepoPathKey);
const QString adminUser = settings().stringValue(FossilSettings::userNameKey);
const QString repoPath = settings().defaultRepoPath.value();
const QString adminUser = settings().userName.value();
if (repoName.isEmpty() || repoPath.isEmpty())
return false;
@@ -855,7 +858,7 @@ unsigned int FossilClient::binaryVersion() const
static unsigned int cachedBinaryVersion = 0;
static QString cachedBinaryPath;
const QString currentBinaryPath = settings().binaryPath().toString();
const QString currentBinaryPath = settings().binaryPath.value();
if (currentBinaryPath.isEmpty())
return 0;

View File

@@ -64,6 +64,7 @@ public:
static QString makeVersionString(unsigned version);
explicit FossilClient(FossilSettings *settings);
FossilSettings &settings() const;
unsigned int synchronousBinaryVersion() const;
BranchInfo synchronousCurrentBranch(const QString &workingDirectory);
@@ -130,6 +131,7 @@ private:
VcsBase::VcsBaseEditorConfig *createLogEditor(VcsBase::VcsBaseEditorWidget *editor);
friend class FossilPluginPrivate;
FossilSettings *m_settings = nullptr;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(FossilClient::SupportedFeatures)

View File

@@ -32,7 +32,6 @@
#include <utils/completingtextedit.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <QSyntaxHighlighter>
#include <QTextEdit>
@@ -123,7 +122,7 @@ QStringList FossilCommitWidget::tags() const
return QStringList();
tagsText.replace(',', ' ');
const QStringList tags = tagsText.split(' ', Utils::SkipEmptyParts);
const QStringList tags = tagsText.split(' ', Qt::SkipEmptyParts);
return tags;
}

View File

@@ -26,7 +26,6 @@
#include "fossilplugin.h"
#include "constants.h"
#include "fossilclient.h"
#include "optionspage.h"
#include "fossilcommitwidget.h"
#include "fossileditor.h"
#include "pullorpushdialog.h"
@@ -54,10 +53,8 @@
#include <projectexplorer/project.h>
#include <projectexplorer/jsonwizard/jsonwizardfactory.h>
#include <utils/id.h>
#include <utils/parameteraction.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/basevcssubmiteditorfactory.h>
@@ -437,10 +434,10 @@ void FossilPluginPrivate::logCurrentFile()
QTC_ASSERT(state.hasFile(), return);
FossilClient::SupportedFeatures features = m_client.supportedFeatures();
QStringList extraOptions;
extraOptions << "-n" << QString::number(m_client.settings().intValue(FossilSettings::logCountKey));
extraOptions << "-n" << QString::number(m_client.settings().logCount.value());
if (features.testFlag(FossilClient::TimelineWidthFeature))
extraOptions << "-W" << QString::number(m_client.settings().intValue(FossilSettings::timelineWidthKey));
extraOptions << "-W" << QString::number(m_client.settings().timelineWidth.value());
// disable annotate context menu for older client versions, used to be supported for current revision only
bool enableAnnotationContextMenu = features.testFlag(FossilClient::AnnotateRevisionFeature);
@@ -520,10 +517,10 @@ void FossilPluginPrivate::logRepository()
QTC_ASSERT(state.hasTopLevel(), return);
FossilClient::SupportedFeatures features = m_client.supportedFeatures();
QStringList extraOptions;
extraOptions << "-n" << QString::number(m_client.settings().intValue(FossilSettings::logCountKey));
extraOptions << "-n" << QString::number(m_client.settings().logCount.value());
if (features.testFlag(FossilClient::TimelineWidthFeature))
extraOptions << "-W" << QString::number(m_client.settings().intValue(FossilSettings::timelineWidthKey));
extraOptions << "-W" << QString::number(m_client.settings().timelineWidth.value());
m_client.log(state.topLevel(), QStringList(), extraOptions);
}
@@ -616,7 +613,7 @@ bool FossilPluginPrivate::pullOrPush(FossilPluginPrivate::SyncMode mode)
QTC_ASSERT(state.hasTopLevel(), return false);
PullOrPushDialog dialog(pullOrPushMode, Core::ICore::dialogParent());
dialog.setLocalBaseDirectory(m_client.settings().stringValue(FossilSettings::defaultRepoPathKey));
dialog.setLocalBaseDirectory(m_client.settings().defaultRepoPath.value());
const QString defaultURL(m_client.synchronousGetRepositoryURL(state.topLevel()));
dialog.setDefaultRemoteLocation(defaultURL);
if (dialog.exec() != QDialog::Accepted)
@@ -835,7 +832,7 @@ bool FossilPluginPrivate::submitEditorAboutToClose()
//rewrite entries of the form 'file => newfile' to 'newfile' because
//this would mess the commit command
for (QStringList::iterator iFile = files.begin(); iFile != files.end(); ++iFile) {
const QStringList parts = iFile->split(" => ", Utils::SkipEmptyParts);
const QStringList parts = iFile->split(" => ", Qt::SkipEmptyParts);
if (!parts.isEmpty())
*iFile = parts.last();
}
@@ -932,7 +929,7 @@ bool FossilPluginPrivate::isConfigured() const
return false;
// Local repositories default path must be set and exist
const QString repoPath = m_client.settings().stringValue(FossilSettings::defaultRepoPathKey);
const QString repoPath = m_client.settings().defaultRepoPath.value();
if (repoPath.isEmpty())
return false;

View File

@@ -31,17 +31,10 @@
#include <vcsbase/vcsbaseplugin.h>
#include <coreplugin/icontext.h>
namespace Core {
class ActionContainer;
class CommandLocator;
} // namespace Core
namespace Fossil {
namespace Internal {
class OptionsPage;
class FossilClient;
class FossilEditorWidget;
class FossilPlugin final : public ExtensionSystem::IPlugin
{

View File

@@ -24,47 +24,179 @@
****************************************************************************/
#include "fossilsettings.h"
#include "constants.h"
#include <QSettings>
#include "constants.h"
#include "fossilclient.h"
#include <coreplugin/icore.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <vcsbase/vcsbaseconstants.h>
using namespace Utils;
namespace Fossil {
namespace Internal {
const QString FossilSettings::defaultRepoPathKey("defaultRepoPath");
const QString FossilSettings::sslIdentityFileKey("sslIdentityFile");
const QString FossilSettings::diffIgnoreAllWhiteSpaceKey("diffIgnoreAllWhiteSpace");
const QString FossilSettings::diffStripTrailingCRKey("diffStripTrailingCR");
const QString FossilSettings::annotateShowCommittersKey("annotateShowCommitters");
const QString FossilSettings::annotateListVersionsKey("annotateListVersions");
const QString FossilSettings::timelineWidthKey("timelineWidth");
const QString FossilSettings::timelineLineageFilterKey("timelineLineageFilter");
const QString FossilSettings::timelineVerboseKey("timelineVerbose");
const QString FossilSettings::timelineItemTypeKey("timelineItemType");
const QString FossilSettings::disableAutosyncKey("disableAutosync");
FossilSettings::FossilSettings()
{
setSettingsGroup(Constants::FOSSIL);
// Override default binary path
declareKey(binaryPathKey, Constants::FOSSILDEFAULT);
declareKey(defaultRepoPathKey, "");
declareKey(sslIdentityFileKey, "");
declareKey(diffIgnoreAllWhiteSpaceKey, false);
declareKey(diffStripTrailingCRKey, false);
declareKey(annotateShowCommittersKey, false);
declareKey(annotateListVersionsKey, false);
declareKey(timelineWidthKey, 0);
declareKey(timelineLineageFilterKey, "");
declareKey(timelineVerboseKey, false);
declareKey(timelineItemTypeKey, "all");
declareKey(disableAutosyncKey, true);
}
setAutoApply(false);
registerAspect(&binaryPath);
binaryPath.setDisplayStyle(StringAspect::PathChooserDisplay);
binaryPath.setExpectedKind(PathChooser::ExistingCommand);
binaryPath.setDefaultValue(Constants::FOSSILDEFAULT);
binaryPath.setDisplayName(tr("Fossil Command"));
binaryPath.setHistoryCompleter("Fossil.Command.History");
binaryPath.setLabelText(tr("Command:"));
registerAspect(&defaultRepoPath);
defaultRepoPath.setSettingsKey("defaultRepoPath");
defaultRepoPath.setDisplayStyle(StringAspect::PathChooserDisplay);
defaultRepoPath.setExpectedKind(PathChooser::Directory);
defaultRepoPath.setDisplayName(tr("Fossil Repositories"));
defaultRepoPath.setLabelText(tr("Default path:"));
defaultRepoPath.setToolTip(tr("Directory to store local repositories by default."));
registerAspect(&userName);
userName.setDisplayStyle(StringAspect::LineEditDisplay);
userName.setLabelText(tr("Default user:"));
userName.setToolTip(tr("Existing user to become an author of changes made to the repository."));
registerAspect(&sslIdentityFile);
sslIdentityFile.setSettingsKey("sslIdentityFile");
sslIdentityFile.setDisplayStyle(StringAspect::PathChooserDisplay);
sslIdentityFile.setExpectedKind(PathChooser::File);
sslIdentityFile.setDisplayName(tr("SSL/TLS Identity Key"));
sslIdentityFile.setLabelText(tr("SSL/TLS identity:"));
sslIdentityFile.setToolTip(tr("SSL/TLS client identity key to use if requested by the server."));
registerAspect(&diffIgnoreAllWhiteSpace);
diffIgnoreAllWhiteSpace.setSettingsKey("diffIgnoreAllWhiteSpace");
registerAspect(&diffStripTrailingCR);
diffStripTrailingCR.setSettingsKey("diffStripTrailingCR");
registerAspect(&annotateShowCommitters);
annotateShowCommitters.setSettingsKey("annotateShowCommitters");
registerAspect(&annotateListVersions);
annotateListVersions.setSettingsKey("annotateListVersions");
registerAspect(&timelineWidth);
timelineWidth.setSettingsKey("timelineWidth");
timelineWidth.setLabelText(tr("Log width:"));
timelineWidth.setToolTip(tr("The width of log entry line (>20). "
"Choose 0 to see a single line per entry."));
registerAspect(&timelineLineageFilter);
timelineLineageFilter.setSettingsKey("timelineLineageFilter");
registerAspect(&timelineVerbose);
timelineVerbose.setSettingsKey("timelineVerbose");
registerAspect(&timelineItemType);
timelineItemType.setDefaultValue("all");
timelineItemType.setSettingsKey("timelineItemType");
registerAspect(&disableAutosync);
disableAutosync.setSettingsKey("disableAutosync");
disableAutosync.setDefaultValue(true);
disableAutosync.setLabelText(tr("Disable auto-sync"));
disableAutosync.setToolTip(tr("Disable automatic pull prior to commit or update and "
"automatic push after commit or tag or branch creation."));
registerAspect(&timeout);
timeout.setLabelText(tr("Timeout:"));
timeout.setSuffix(tr("s"));
registerAspect(&logCount);
logCount.setLabelText(tr("Log count:"));
logCount.setToolTip(tr("The number of recent commit log entries to show. "
"Choose 0 to see all entries."));
};
RepositorySettings::RepositorySettings()
: autosync(AutosyncOn)
{
}
} // namespace Internal
} // namespace Fossil
// OptionsPage
class OptionsPageWidget final : public Core::IOptionsPageWidget
{
Q_DECLARE_TR_FUNCTIONS(Fossil::Internal::OptionsPageWidget)
public:
OptionsPageWidget(const std::function<void()> &onApply, FossilSettings *settings);
void apply() final;
private:
const std::function<void()> m_onApply;
FossilSettings *m_settings;
};
void OptionsPageWidget::apply()
{
if (!m_settings->isDirty())
return;
m_settings->apply();
m_onApply();
}
OptionsPageWidget::OptionsPageWidget(const std::function<void()> &onApply, FossilSettings *settings) :
m_onApply(onApply),
m_settings(settings)
{
FossilSettings &s = *m_settings;
using namespace Layouting;
const Break nl;
Column {
Group {
Title(tr("Configuration")),
Row { s.binaryPath }
},
Group {
Title(tr("Local Repositories")),
Row { s.defaultRepoPath }
},
Group {
Title(tr("User")),
Form {
s.userName, nl,
s.sslIdentityFile
}
},
Group {
Title(tr("Miscellaneous")),
Row {
s.logCount,
s.timelineWidth,
s.timeout,
Stretch()
},
s.disableAutosync
},
Stretch()
}.attachTo(this);
}
OptionsPage::OptionsPage(const std::function<void()> &onApply, FossilSettings *settings)
{
setId(Constants::VCS_ID_FOSSIL);
setDisplayName(OptionsPageWidget::tr("Fossil"));
setWidgetCreator([onApply, settings]() { return new OptionsPageWidget(onApply, settings); });
setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY);
}
} // Internal
} // Fossil

View File

@@ -25,25 +25,26 @@
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
#include <vcsbase/vcsbaseclientsettings.h>
namespace Fossil {
namespace Internal {
class FossilSettings : public VcsBase::VcsBaseClientSettings
class FossilSettings : public VcsBase::VcsBaseSettings
{
public:
static const QString defaultRepoPathKey;
static const QString sslIdentityFileKey;
static const QString diffIgnoreAllWhiteSpaceKey;
static const QString diffStripTrailingCRKey;
static const QString annotateShowCommittersKey;
static const QString annotateListVersionsKey;
static const QString timelineWidthKey;
static const QString timelineLineageFilterKey;
static const QString timelineVerboseKey;
static const QString timelineItemTypeKey;
static const QString disableAutosyncKey;
Utils::StringAspect defaultRepoPath;
Utils::StringAspect sslIdentityFile;
Utils::BoolAspect diffIgnoreAllWhiteSpace;
Utils::BoolAspect diffStripTrailingCR;
Utils::BoolAspect annotateShowCommitters;
Utils::BoolAspect annotateListVersions;
Utils::IntegerAspect timelineWidth;
Utils::StringAspect timelineLineageFilter;
Utils::BoolAspect timelineVerbose;
Utils::StringAspect timelineItemType;
Utils::BoolAspect disableAutosync;
FossilSettings();
};
@@ -66,5 +67,11 @@ inline bool operator== (const RepositorySettings &lh, const RepositorySettings &
&& lh.sslIdentityFile == rh.sslIdentityFile);
}
class OptionsPage : public Core::IOptionsPage
{
public:
OptionsPage(const std::function<void()> &onApply, FossilSettings *settings);
};
} // namespace Internal
} // namespace Fossil

View File

@@ -1,103 +0,0 @@
/****************************************************************************
**
** Copyright (c) 2018 Artur Shepilko
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "optionspage.h"
#include "constants.h"
#include "fossilclient.h"
#include "fossilsettings.h"
#include "fossilplugin.h"
#include "ui_optionspage.h"
#include <coreplugin/icore.h>
#include <utils/pathchooser.h>
#include <vcsbase/vcsbaseconstants.h>
namespace Fossil {
namespace Internal {
class OptionsPageWidget final : public Core::IOptionsPageWidget
{
Q_DECLARE_TR_FUNCTIONS(Fossil::Internal::OptionsPageWidget)
public:
OptionsPageWidget(const std::function<void()> &onApply, FossilSettings *settings);
void apply() final;
private:
Ui::OptionsPage m_ui;
const std::function<void()> m_onApply;
FossilSettings *m_settings;
};
void OptionsPageWidget::apply()
{
FossilSettings s = *m_settings;
s.setValue(FossilSettings::binaryPathKey, m_ui.commandChooser->rawPath());
s.setValue(FossilSettings::defaultRepoPathKey, m_ui.defaultRepoPathChooser->path());
s.setValue(FossilSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed());
s.setValue(FossilSettings::sslIdentityFileKey, m_ui.sslIdentityFilePathChooser->path());
s.setValue(FossilSettings::logCountKey, m_ui.logEntriesCount->value());
s.setValue(FossilSettings::timelineWidthKey, m_ui.logEntriesWidth->value());
s.setValue(FossilSettings::timeoutKey, m_ui.timeout->value());
s.setValue(FossilSettings::disableAutosyncKey, m_ui.disableAutosyncCheckBox->isChecked());
if (*m_settings == s)
return;
*m_settings = s;
m_onApply();
}
OptionsPageWidget::OptionsPageWidget(const std::function<void()> &onApply, FossilSettings *settings) :
m_onApply(onApply),
m_settings(settings)
{
m_ui.setupUi(this);
m_ui.commandChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
m_ui.commandChooser->setPromptDialogTitle(tr("Fossil Command"));
m_ui.commandChooser->setHistoryCompleter("Fossil.Command.History");
m_ui.commandChooser->setPath(m_settings->stringValue(FossilSettings::binaryPathKey));
m_ui.defaultRepoPathChooser->setExpectedKind(Utils::PathChooser::ExistingDirectory);
m_ui.defaultRepoPathChooser->setPromptDialogTitle(tr("Fossil Repositories"));
m_ui.defaultRepoPathChooser->setPath(m_settings->stringValue(FossilSettings::defaultRepoPathKey));
m_ui.sslIdentityFilePathChooser->setExpectedKind(Utils::PathChooser::File);
m_ui.sslIdentityFilePathChooser->setPromptDialogTitle(tr("SSL/TLS Identity Key"));
m_ui.sslIdentityFilePathChooser->setPath(m_settings->stringValue(FossilSettings::sslIdentityFileKey));
m_ui.defaultUsernameLineEdit->setText(m_settings->stringValue(FossilSettings::userNameKey));
m_ui.logEntriesCount->setValue(m_settings->intValue(FossilSettings::logCountKey));
m_ui.logEntriesWidth->setValue(m_settings->intValue(FossilSettings::timelineWidthKey));
m_ui.timeout->setValue(m_settings->intValue(FossilSettings::timeoutKey));
m_ui.disableAutosyncCheckBox->setChecked(m_settings->boolValue(FossilSettings::disableAutosyncKey));
}
OptionsPage::OptionsPage(const std::function<void()> &onApply, FossilSettings *settings)
{
setId(Constants::VCS_ID_FOSSIL);
setDisplayName(OptionsPageWidget::tr("Fossil"));
setWidgetCreator([onApply, settings]() { return new OptionsPageWidget(onApply, settings); });
setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY);
}
} // Internal
} // Fossil

View File

@@ -1,42 +0,0 @@
/****************************************************************************
**
** Copyright (c) 2018 Artur Shepilko
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
namespace Fossil {
namespace Internal {
class FossilSettings;
class OptionsPage : public Core::IOptionsPage
{
public:
OptionsPage(const std::function<void()> &onApply, FossilSettings *settings);
};
} // namespace Internal
} // namespace Fossil

View File

@@ -1,229 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Fossil::Internal::OptionsPage</class>
<widget class="QWidget" name="Fossil::Internal::OptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>649</width>
<height>336</height>
</rect>
</property>
<property name="windowTitle">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="configGroupBox">
<property name="title">
<string>Configuration</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="commandLabel">
<property name="text">
<string>Command:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Utils::PathChooser" name="commandChooser" native="true"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="repoGroupBox">
<property name="title">
<string>Local Repositories</string>
</property>
<layout class="QFormLayout" name="formLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="defaultRepoPathLabel">
<property name="toolTip">
<string>Directory to store local repositories by default.</string>
</property>
<property name="text">
<string>Default path:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Utils::PathChooser" name="defaultRepoPathChooser" native="true">
<property name="toolTip">
<string>Directory to store local repositories by default.</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="userGroupBox">
<property name="title">
<string>User</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="defaultUsernameLabel">
<property name="text">
<string>Default user:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="defaultUsernameLineEdit">
<property name="toolTip">
<string>Existing user to become an author of changes made to the repository.</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="sslIdentityFileLabel">
<property name="text">
<string>SSL/TLS identity:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="Utils::PathChooser" name="sslIdentityFilePathChooser" native="true">
<property name="toolTip">
<string>SSL/TLS client identity key to use if requested by the server.</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="miscGroupBox">
<property name="title">
<string>Miscellaneous</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="showLogEntriesLabel">
<property name="text">
<string>Log count:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="logEntriesCount">
<property name="toolTip">
<string>The number of recent commit log entries to show. Choose 0 to see all entries.</string>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>300</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="logEntriesWidthLabel">
<property name="text">
<string>Log width:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QSpinBox" name="logEntriesWidth">
<property name="toolTip">
<string>The width of log entry line (&gt;20). Choose 0 to see a single line per entry.</string>
</property>
<property name="maximum">
<number>300</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="timeoutSecondsLabel">
<property name="text">
<string>Timeout:</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QSpinBox" name="timeout">
<property name="suffix">
<string>s</string>
</property>
<property name="maximum">
<number>360</number>
</property>
<property name="value">
<number>30</number>
</property>
</widget>
</item>
<item row="0" column="6">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>213</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0" colspan="5">
<widget class="QCheckBox" name="disableAutosyncCheckBox">
<property name="toolTip">
<string>Disable automatic pull prior to commit or update and automatic push after commit or tag or branch creation.</string>
</property>
<property name="text">
<string>Disable auto-sync</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Utils::PathChooser</class>
<extends>QWidget</extends>
<header location="global">utils/pathchooser.h</header>
<container>1</container>
<slots>
<signal>editingFinished()</signal>
<signal>browsingFinished()</signal>
</slots>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@@ -48,7 +48,7 @@ public:
}
Utils::Id m_vscId;
VcsBase::VcsBaseClientSettings *m_settings;
FossilSettings *m_settings;
};
@@ -59,7 +59,7 @@ void FossilJsExtension::parseArgOptions(const QStringList &args, QMap<QString, Q
foreach (const QString &arg, args) {
if (arg.isEmpty()) continue;
QStringList opt = arg.split('|'); //keep empty parts
QStringList opt = arg.split('|', Qt::KeepEmptyParts);
options.insert(opt[0], opt.size() > 1 ? opt[1] : QString());
}
}
@@ -90,7 +90,7 @@ QString FossilJsExtension::defaultAdminUser() const
if (!isConfigured())
return QString();
return d->m_settings->stringValue(FossilSettings::userNameKey);
return d->m_settings->userName.value();
}
QString FossilJsExtension::defaultSslIdentityFile() const
@@ -98,7 +98,7 @@ QString FossilJsExtension::defaultSslIdentityFile() const
if (!isConfigured())
return QString();
return d->m_settings->stringValue(FossilSettings::sslIdentityFileKey);
return d->m_settings->sslIdentityFile.value();
}
QString FossilJsExtension::defaultLocalRepoPath() const
@@ -106,7 +106,7 @@ QString FossilJsExtension::defaultLocalRepoPath() const
if (!isConfigured())
return QString();
return d->m_settings->stringValue(FossilSettings::defaultRepoPathKey);
return d->m_settings->defaultRepoPath.value();
}
bool FossilJsExtension::defaultDisableAutosync() const
@@ -114,7 +114,7 @@ bool FossilJsExtension::defaultDisableAutosync() const
if (!isConfigured())
return false;
return d->m_settings->boolValue(FossilSettings::disableAutosyncKey);
return d->m_settings->disableAutosync.value();
}
} // namespace Internal