From 4a2a0f1037797884ecac7bf5aed75e800b75fc15 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 19 Mar 2021 14:12:25 +0100 Subject: [PATCH] Mercurial: Aspectify settings Change-Id: I689ce9a52124043e07472a1c95a3672f856232c3 Reviewed-by: Orgad Shaneh --- src/plugins/mercurial/CMakeLists.txt | 1 - src/plugins/mercurial/mercurial.pro | 4 +- src/plugins/mercurial/mercurial.qbs | 3 - src/plugins/mercurial/mercurialclient.cpp | 6 +- src/plugins/mercurial/mercurialplugin.cpp | 14 +- src/plugins/mercurial/mercurialsettings.cpp | 107 +++++++++++- src/plugins/mercurial/mercurialsettings.h | 14 +- src/plugins/mercurial/optionspage.cpp | 98 ----------- src/plugins/mercurial/optionspage.h | 42 ----- src/plugins/mercurial/optionspage.ui | 182 -------------------- 10 files changed, 120 insertions(+), 351 deletions(-) delete mode 100644 src/plugins/mercurial/optionspage.cpp delete mode 100644 src/plugins/mercurial/optionspage.h delete mode 100644 src/plugins/mercurial/optionspage.ui diff --git a/src/plugins/mercurial/CMakeLists.txt b/src/plugins/mercurial/CMakeLists.txt index e81b3e3eaf2..915b9a8cdf0 100644 --- a/src/plugins/mercurial/CMakeLists.txt +++ b/src/plugins/mercurial/CMakeLists.txt @@ -11,7 +11,6 @@ add_qtc_plugin(Mercurial mercurialeditor.cpp mercurialeditor.h mercurialplugin.cpp mercurialplugin.h mercurialsettings.cpp mercurialsettings.h - optionspage.cpp optionspage.h optionspage.ui revertdialog.cpp revertdialog.h revertdialog.ui srcdestdialog.cpp srcdestdialog.h srcdestdialog.ui ) diff --git a/src/plugins/mercurial/mercurial.pro b/src/plugins/mercurial/mercurial.pro index 9057e0fcc03..a36edc1e157 100644 --- a/src/plugins/mercurial/mercurial.pro +++ b/src/plugins/mercurial/mercurial.pro @@ -1,6 +1,5 @@ include(../../qtcreatorplugin.pri) SOURCES += mercurialplugin.cpp \ - optionspage.cpp \ mercurialclient.cpp \ annotationhighlighter.cpp \ mercurialeditor.cpp \ @@ -12,7 +11,6 @@ SOURCES += mercurialplugin.cpp \ authenticationdialog.cpp HEADERS += mercurialplugin.h \ constants.h \ - optionspage.h \ mercurialclient.h \ annotationhighlighter.h \ mercurialeditor.h \ @@ -22,7 +20,7 @@ HEADERS += mercurialplugin.h \ commiteditor.h \ mercurialsettings.h \ authenticationdialog.h -FORMS += optionspage.ui \ +FORMS += \ revertdialog.ui \ srcdestdialog.ui \ mercurialcommitpanel.ui \ diff --git a/src/plugins/mercurial/mercurial.qbs b/src/plugins/mercurial/mercurial.qbs index 43a3c68598e..0f8b5613bf1 100644 --- a/src/plugins/mercurial/mercurial.qbs +++ b/src/plugins/mercurial/mercurial.qbs @@ -31,9 +31,6 @@ QtcPlugin { "mercurialplugin.h", "mercurialsettings.cpp", "mercurialsettings.h", - "optionspage.cpp", - "optionspage.h", - "optionspage.ui", "revertdialog.cpp", "revertdialog.h", "revertdialog.ui", diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index 3c426178719..38313f5827e 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -86,7 +86,7 @@ QStringList MercurialDiffEditorController::addConfigurationArguments(const QStri ///////////////////////////////////////////////////////////// -MercurialClient::MercurialClient(MercurialSettings *settings) : VcsBaseClient(settings) +MercurialClient::MercurialClient(MercurialSettings *settings) : VcsBaseClient(nullptr, settings) { } @@ -458,8 +458,8 @@ void MercurialClient::requestReload(const QString &documentId, const QString &so controller->setReloader([controller, args] { controller->runCommand({controller->addConfigurationArguments(args)}); }); - controller->setVcsBinary(settings().binaryPath()); - controller->setVcsTimeoutS(settings().vcsTimeoutS()); + controller->setVcsBinary(baseSettings().binaryPath.filePath()); + controller->setVcsTimeoutS(baseSettings().timeout.value()); controller->setProcessEnvironment(processEnvironment()); controller->setWorkingDirectory(workingDirectory); diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index db5391b6742..8140bebeede 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -24,14 +24,14 @@ ****************************************************************************/ #include "mercurialplugin.h" -#include "optionspage.h" + +#include "commiteditor.h" #include "constants.h" #include "mercurialclient.h" #include "mercurialeditor.h" +#include "mercurialsettings.h" #include "revertdialog.h" #include "srcdestdialog.h" -#include "commiteditor.h" -#include "mercurialsettings.h" #include #include @@ -662,8 +662,8 @@ void MercurialPluginPrivate::showCommitWidget(const QListsetFields(QFileInfo(m_submitRepository), branch, - m_settings.stringValue(MercurialSettings::userNameKey), - m_settings.stringValue(MercurialSettings::userEmailKey), status); + m_settings.userName.value(), + m_settings.userEmail.value(), status); } void MercurialPluginPrivate::diffFromEditorSelected(const QStringList &files) @@ -767,7 +767,7 @@ bool MercurialPluginPrivate::managesFile(const QString &workingDirectory, const bool MercurialPluginPrivate::isConfigured() const { - const Utils::FilePath binary = m_settings.binaryPath(); + const FilePath binary = m_settings.binaryPath.filePath(); if (binary.isEmpty()) return false; QFileInfo fi = binary.toFileInfo(); @@ -839,7 +839,7 @@ Core::ShellCommand *MercurialPluginPrivate::createInitialCheckoutCommand(const Q args << QLatin1String("clone") << extraArgs << url << localName; auto command = new VcsBase::VcsCommand(baseDirectory.toString(), m_client.processEnvironment()); - command->addJob({m_settings.binaryPath(), args}, -1); + command->addJob({m_settings.binaryPath.filePath(), args}, -1); return command; } diff --git a/src/plugins/mercurial/mercurialsettings.cpp b/src/plugins/mercurial/mercurialsettings.cpp index 4bc2184634a..7176c6c7cef 100644 --- a/src/plugins/mercurial/mercurialsettings.cpp +++ b/src/plugins/mercurial/mercurialsettings.cpp @@ -24,23 +24,112 @@ ****************************************************************************/ #include "mercurialsettings.h" + #include "constants.h" -#include +#include + +#include + +using namespace Utils; namespace Mercurial { namespace Internal { -const QLatin1String MercurialSettings::diffIgnoreWhiteSpaceKey("diffIgnoreWhiteSpace"); -const QLatin1String MercurialSettings::diffIgnoreBlankLinesKey("diffIgnoreBlankLines"); - MercurialSettings::MercurialSettings() { - setSettingsGroup(QLatin1String("Mercurial")); - // Override default binary path - declareKey(binaryPathKey, QLatin1String(Constants::MERCURIALDEFAULT)); - declareKey(diffIgnoreWhiteSpaceKey, false); - declareKey(diffIgnoreBlankLinesKey, false); + setSettingsGroup("Mercurial"); + setAutoApply(false); + + registerAspect(&binaryPath); + binaryPath.setDisplayStyle(StringAspect::PathChooserDisplay); + binaryPath.setExpectedKind(PathChooser::ExistingCommand); + binaryPath.setDefaultValue(Constants::MERCURIALDEFAULT); + binaryPath.setDisplayName(tr("Mercurial Command")); + binaryPath.setHistoryCompleter("Bazaar.Command.History"); + binaryPath.setLabelText(tr("Command:")); + + registerAspect(&userName); + userName.setDisplayStyle(StringAspect::LineEditDisplay); + userName.setLabelText(tr("Default username:")); + userName.setToolTip(tr("Username to use by default on commit.")); + + registerAspect(&userEmail); + userEmail.setDisplayStyle(StringAspect::LineEditDisplay); + userEmail.setLabelText(tr("Default email:")); + userEmail.setToolTip(tr("Email to use by default on commit.")); + + registerAspect(&diffIgnoreWhiteSpace); + diffIgnoreWhiteSpace.setSettingsKey("diffIgnoreWhiteSpace"); + + registerAspect(&diffIgnoreBlankLines); + diffIgnoreBlankLines.setSettingsKey("diffIgnoreBlankLines"); +} + +// Optionpage + +class OptionsPageWidget final : public Core::IOptionsPageWidget +{ + Q_DECLARE_TR_FUNCTIONS(Mercurial::Internal::OptionsPageWidget) + +public: + OptionsPageWidget(const std::function &onApply, MercurialSettings *settings); + void apply() final; + +private: + std::function m_onApply; + MercurialSettings *m_settings; +}; + +OptionsPageWidget::OptionsPageWidget(const std::function &onApply, MercurialSettings *settings) + : m_onApply(onApply), m_settings(settings) +{ + MercurialSettings &s = *settings; + + using namespace Layouting; + const Break nl; + + Column { + Group { + Title(tr("Configuration")), + Row { s.binaryPath } + }, + + Group { + Title(tr("User")), + Form { + s.userName, nl, + s.userEmail + } + }, + + Group { + Title(tr("Miscellaneous")), + Row { + s.logCount, + s.timeout, + Stretch() + } + }, + Stretch() + + }.attachTo(this); +} + +void OptionsPageWidget::apply() +{ + if (!m_settings->isDirty()) + return; + m_settings->apply(); + m_onApply(); +} + +OptionsPage::OptionsPage(const std::function &onApply, MercurialSettings *settings) +{ + setId(VcsBase::Constants::VCS_ID_MERCURIAL); + setDisplayName(OptionsPageWidget::tr("Mercurial")); + setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY); + setWidgetCreator([onApply, settings] { return new OptionsPageWidget(onApply, settings); }); } } // namespace Internal diff --git a/src/plugins/mercurial/mercurialsettings.h b/src/plugins/mercurial/mercurialsettings.h index 4310589eca1..5dd17832952 100644 --- a/src/plugins/mercurial/mercurialsettings.h +++ b/src/plugins/mercurial/mercurialsettings.h @@ -25,19 +25,27 @@ #pragma once +#include + #include namespace Mercurial { namespace Internal { -class MercurialSettings : public VcsBase::VcsBaseClientSettings +class MercurialSettings : public VcsBase::VcsBaseSettings { public: - static const QLatin1String diffIgnoreWhiteSpaceKey; - static const QLatin1String diffIgnoreBlankLinesKey; + Utils::StringAspect diffIgnoreWhiteSpace; + Utils::StringAspect diffIgnoreBlankLines; MercurialSettings(); }; +class OptionsPage final : public Core::IOptionsPage +{ +public: + OptionsPage(const std::function &onApply, MercurialSettings *settings); +}; + } // namespace Internal } // namespace Mercurial diff --git a/src/plugins/mercurial/optionspage.cpp b/src/plugins/mercurial/optionspage.cpp deleted file mode 100644 index a9c267bf9e2..00000000000 --- a/src/plugins/mercurial/optionspage.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Brian McGillion -** 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 "mercurialclient.h" -#include "mercurialsettings.h" -#include "mercurialplugin.h" -#include "ui_optionspage.h" -#include "ui_optionspage.h" - -#include -#include -#include - -using namespace VcsBase; - -namespace Mercurial { -namespace Internal { - -class OptionsPageWidget final : public Core::IOptionsPageWidget -{ - Q_DECLARE_TR_FUNCTIONS(Mercurial::Internal::OptionsPageWidget) - -public: - OptionsPageWidget(const std::function &onApply, MercurialSettings *settings); - void apply() final; - -private: - Ui::OptionsPage m_ui; - std::function m_onApply; - MercurialSettings *m_settings; -}; - -OptionsPageWidget::OptionsPageWidget(const std::function &onApply, MercurialSettings *settings) - : m_onApply(onApply), m_settings(settings) -{ - m_ui.setupUi(this); - m_ui.commandChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); - m_ui.commandChooser->setHistoryCompleter(QLatin1String("Mercurial.Command.History")); - m_ui.commandChooser->setPromptDialogTitle(tr("Mercurial Command")); - - const VcsBaseClientSettings &s = *settings; - - m_ui.commandChooser->setPath(s.stringValue(MercurialSettings::binaryPathKey)); - m_ui.defaultUsernameLineEdit->setText(s.stringValue(MercurialSettings::userNameKey)); - m_ui.defaultEmailLineEdit->setText(s.stringValue(MercurialSettings::userEmailKey)); - m_ui.logEntriesCount->setValue(s.intValue(MercurialSettings::logCountKey)); - m_ui.timeout->setValue(s.intValue(MercurialSettings::timeoutKey)); -} - -void OptionsPageWidget::apply() -{ - MercurialSettings ms; - ms.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->rawPath()); - ms.setValue(MercurialSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed()); - ms.setValue(MercurialSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed()); - ms.setValue(MercurialSettings::logCountKey, m_ui.logEntriesCount->value()); - ms.setValue(MercurialSettings::timeoutKey, m_ui.timeout->value()); - - if (*m_settings != ms) { - *m_settings = ms; - m_onApply(); - } -} - -OptionsPage::OptionsPage(const std::function &onApply, MercurialSettings *settings) -{ - setId(VcsBase::Constants::VCS_ID_MERCURIAL); - setDisplayName(OptionsPageWidget::tr("Mercurial")); - setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY); - setWidgetCreator([onApply, settings] { return new OptionsPageWidget(onApply, settings); }); -} - -} // namespace Internal -} // namespace Mercurial diff --git a/src/plugins/mercurial/optionspage.h b/src/plugins/mercurial/optionspage.h deleted file mode 100644 index 8279a7d3925..00000000000 --- a/src/plugins/mercurial/optionspage.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Brian McGillion -** 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 - -namespace Mercurial { -namespace Internal { - -class MercurialSettings; - -class OptionsPage final : public Core::IOptionsPage -{ -public: - OptionsPage(const std::function &onApply, MercurialSettings *settings); -}; - -} // namespace Internal -} // namespace Mercurial diff --git a/src/plugins/mercurial/optionspage.ui b/src/plugins/mercurial/optionspage.ui deleted file mode 100644 index cf13d326da0..00000000000 --- a/src/plugins/mercurial/optionspage.ui +++ /dev/null @@ -1,182 +0,0 @@ - - - Mercurial::Internal::OptionsPage - - - - 0 - 0 - 617 - 268 - - - - - - - - - - Configuration - - - - QFormLayout::ExpandingFieldsGrow - - - - - Command: - - - - - - - - - - - - - User - - - - QFormLayout::ExpandingFieldsGrow - - - - - Username to use by default on commit. - - - Default username: - - - - - - - Username to use by default on commit. - - - - - - - Email to use by default on commit. - - - Default email: - - - - - - - Email to use by default on commit. - - - - - - - - - - Miscellaneous - - - - - - Timeout: - - - - - - - s - - - 360 - - - 30 - - - - - - - Qt::Horizontal - - - - 217 - 20 - - - - - - - - The number of recent commit logs to show, choose 0 to see all entries. - - - 100 - - - 100 - - - - - - - Log count: - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Utils::PathChooser - QWidget -
utils/pathchooser.h
- 1 - - editingFinished() - browsingFinished() - -
-
- - defaultUsernameLineEdit - defaultEmailLineEdit - logEntriesCount - timeout - - - -