aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gerrit/gerritoptionspage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/git/gerrit/gerritoptionspage.cpp')
-rw-r--r--src/plugins/git/gerrit/gerritoptionspage.cpp167
1 files changed, 74 insertions, 93 deletions
diff --git a/src/plugins/git/gerrit/gerritoptionspage.cpp b/src/plugins/git/gerrit/gerritoptionspage.cpp
index 61aa7047b7a..3d77c26aa46 100644
--- a/src/plugins/git/gerrit/gerritoptionspage.cpp
+++ b/src/plugins/git/gerrit/gerritoptionspage.cpp
@@ -7,6 +7,8 @@
#include "../gittr.h"
#include <coreplugin/icore.h>
+
+#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <vcsbase/vcsbaseconstants.h>
@@ -16,108 +18,87 @@
#include <QCheckBox>
#include <QFormLayout>
-namespace Gerrit {
-namespace Internal {
+namespace Gerrit::Internal {
-GerritOptionsPage::GerritOptionsPage(const QSharedPointer<GerritParameters> &p,
- QObject *parent)
- : Core::IOptionsPage(parent)
- , m_parameters(p)
+class GerritOptionsWidget : public Core::IOptionsPageWidget
{
- setId("Gerrit");
- setDisplayName(Git::Tr::tr("Gerrit"));
- setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY);
-}
+public:
+ GerritOptionsWidget(const QSharedPointer<GerritParameters> &p,
+ const std::function<void()> &onChanged)
+ : m_parameters(p)
+ {
+ auto hostLineEdit = new QLineEdit(p->server.host);
-GerritOptionsPage::~GerritOptionsPage()
-{
- delete m_widget;
-}
+ auto userLineEdit = new QLineEdit(p->server.user.userName);
-QWidget *GerritOptionsPage::widget()
-{
- if (!m_widget) {
- m_widget = new GerritOptionsWidget;
- m_widget->setParameters(*m_parameters);
- }
- return m_widget;
-}
+ auto sshChooser = new Utils::PathChooser;
+ sshChooser->setFilePath(p->ssh);
+ sshChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ sshChooser->setCommandVersionArguments({"-V"});
+ sshChooser->setHistoryCompleter("Git.SshCommand.History");
-void GerritOptionsPage::apply()
-{
- if (GerritOptionsWidget *w = m_widget.data()) {
- GerritParameters newParameters = w->parameters();
- if (newParameters != *m_parameters) {
- if (m_parameters->ssh == newParameters.ssh)
- newParameters.portFlag = m_parameters->portFlag;
- else
- newParameters.setPortFlagBySshType();
- *m_parameters = newParameters;
- m_parameters->toSettings(Core::ICore::settings());
- emit settingsChanged();
- }
- }
-}
+ auto curlChooser = new Utils::PathChooser;
+ curlChooser->setFilePath(p->curl);
+ curlChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ curlChooser->setCommandVersionArguments({"-V"});
-void GerritOptionsPage::finish()
-{
- delete m_widget;
-}
+ auto portSpinBox = new QSpinBox(this);
+ portSpinBox->setRange(1, 65535);
+ portSpinBox->setValue(p->server.port);
-GerritOptionsWidget::GerritOptionsWidget(QWidget *parent)
- : QWidget(parent)
- , m_hostLineEdit(new QLineEdit(this))
- , m_userLineEdit(new QLineEdit(this))
- , m_sshChooser(new Utils::PathChooser)
- , m_curlChooser(new Utils::PathChooser)
- , m_portSpinBox(new QSpinBox(this))
- , m_httpsCheckBox(new QCheckBox(Git::Tr::tr("HTTPS")))
-{
- auto formLayout = new QFormLayout(this);
- formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
- formLayout->addRow(Git::Tr::tr("&Host:"), m_hostLineEdit);
- formLayout->addRow(Git::Tr::tr("&User:"), m_userLineEdit);
- m_sshChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
- m_sshChooser->setCommandVersionArguments({"-V"});
- m_sshChooser->setHistoryCompleter("Git.SshCommand.History");
- formLayout->addRow(Git::Tr::tr("&ssh:"), m_sshChooser);
- m_curlChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
- m_curlChooser->setCommandVersionArguments({"-V"});
- formLayout->addRow(Git::Tr::tr("cur&l:"), m_curlChooser);
- m_portSpinBox->setMinimum(1);
- m_portSpinBox->setMaximum(65535);
- formLayout->addRow(Git::Tr::tr("SSH &Port:"), m_portSpinBox);
- formLayout->addRow(Git::Tr::tr("P&rotocol:"), m_httpsCheckBox);
- m_httpsCheckBox->setToolTip(Git::Tr::tr(
- "Determines the protocol used to form a URL in case\n"
- "\"canonicalWebUrl\" is not configured in the file\n"
- "\"gerrit.config\"."));
- setTabOrder(m_sshChooser, m_curlChooser);
- setTabOrder(m_curlChooser, m_portSpinBox);
-}
+ auto httpsCheckBox = new QCheckBox(Git::Tr::tr("HTTPS"));
+ httpsCheckBox->setChecked(p->https);
+ httpsCheckBox->setToolTip(Git::Tr::tr(
+ "Determines the protocol used to form a URL in case\n"
+ "\"canonicalWebUrl\" is not configured in the file\n"
+ "\"gerrit.config\"."));
-GerritParameters GerritOptionsWidget::parameters() const
-{
- GerritParameters result;
- result.server = GerritServer(m_hostLineEdit->text().trimmed(),
- static_cast<unsigned short>(m_portSpinBox->value()),
- m_userLineEdit->text().trimmed(),
- GerritServer::Ssh);
- result.ssh = m_sshChooser->filePath();
- result.curl = m_curlChooser->filePath();
- result.https = m_httpsCheckBox->isChecked();
- return result;
-}
+ using namespace Layouting;
+ Form {
+ Git::Tr::tr("&Host:"), hostLineEdit, br,
+ Git::Tr::tr("&User:"), userLineEdit, br,
+ Git::Tr::tr("&ssh:"), sshChooser, br,
+ Git::Tr::tr("cur&l:"), curlChooser, br,
+ Git::Tr::tr("SSH &Port:"), portSpinBox, br,
+ Git::Tr::tr("P&rotocol:"), httpsCheckBox
+ }.attachTo(this);
+
+ setOnApply([this, hostLineEdit, userLineEdit, sshChooser,
+ curlChooser, portSpinBox, httpsCheckBox, onChanged] {
+ GerritParameters newParameters;
+ newParameters.server = GerritServer(hostLineEdit->text().trimmed(),
+ static_cast<unsigned short>(portSpinBox->value()),
+ userLineEdit->text().trimmed(),
+ GerritServer::Ssh);
+ newParameters.ssh = sshChooser->filePath();
+ newParameters.curl = curlChooser->filePath();
+ newParameters.https = httpsCheckBox->isChecked();
+
+ if (newParameters != *m_parameters) {
+ if (m_parameters->ssh == newParameters.ssh)
+ newParameters.portFlag = m_parameters->portFlag;
+ else
+ newParameters.setPortFlagBySshType();
+ *m_parameters = newParameters;
+ m_parameters->toSettings(Core::ICore::settings());
+ emit onChanged();
+ }
+ });
+ }
+
+private:
+ const QSharedPointer<GerritParameters> &m_parameters;
+};
-void GerritOptionsWidget::setParameters(const GerritParameters &p)
+// GerritOptionsPage
+
+GerritOptionsPage::GerritOptionsPage(const QSharedPointer<GerritParameters> &p,
+ const std::function<void()> &onChanged)
{
- m_hostLineEdit->setText(p.server.host);
- m_userLineEdit->setText(p.server.user.userName);
- m_sshChooser->setFilePath(p.ssh);
- m_curlChooser->setFilePath(p.curl);
- m_portSpinBox->setValue(p.server.port);
- m_httpsCheckBox->setChecked(p.https);
+ setId("Gerrit");
+ setDisplayName(Git::Tr::tr("Gerrit"));
+ setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY);
+ setWidgetCreator([p, onChanged] { return new GerritOptionsWidget(p, onChanged); });
}
-} // namespace Internal
-} // namespace Gerrit
+} // Gerrit::Internal