diff options
Diffstat (limited to 'src/plugins/git/gerrit/gerritoptionspage.cpp')
-rw-r--r-- | src/plugins/git/gerrit/gerritoptionspage.cpp | 167 |
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 |