diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/bazaar/bazaarplugin.cpp | 8 | ||||
-rw-r--r-- | src/plugins/bazaar/optionspage.cpp | 28 | ||||
-rw-r--r-- | src/plugins/bazaar/optionspage.h | 16 | ||||
-rw-r--r-- | src/plugins/cvs/cvsplugin.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cvs/settingspage.cpp | 32 | ||||
-rw-r--r-- | src/plugins/cvs/settingspage.h | 16 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 5 | ||||
-rw-r--r-- | src/plugins/git/settingspage.cpp | 44 | ||||
-rw-r--r-- | src/plugins/git/settingspage.h | 21 | ||||
-rw-r--r-- | src/plugins/mercurial/mercurialplugin.cpp | 3 | ||||
-rw-r--r-- | src/plugins/mercurial/optionspage.cpp | 35 | ||||
-rw-r--r-- | src/plugins/mercurial/optionspage.h | 16 | ||||
-rw-r--r-- | src/plugins/subversion/settingspage.cpp | 33 | ||||
-rw-r--r-- | src/plugins/subversion/settingspage.h | 20 | ||||
-rw-r--r-- | src/plugins/subversion/subversionplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseoptionspage.cpp | 56 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseoptionspage.h | 46 |
17 files changed, 153 insertions, 233 deletions
diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index a8b81eea9f..65280ec98c 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -168,14 +168,10 @@ bool BazaarPlugin::initialize(const QStringList &arguments, QString *errorMessag m_client = new BazaarClient; auto vcsCtrl = new BazaarControl(m_client); initializeVcs(vcsCtrl, context); - - auto options = new OptionsPage; - connect(options, &OptionsPage::settingsChanged, - vcsCtrl, &Core::IVersionControl::configurationChanged); - addAutoReleasedObject(options); - connect(m_client, &VcsBaseClient::changed, vcsCtrl, &BazaarControl::changed); + addAutoReleasedObject(new OptionsPage(vcsCtrl)); + static const char *describeSlot = SLOT(view(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(VcsBaseEditorParameters); const auto widgetCreator = []() { return new BazaarEditorWidget; }; diff --git a/src/plugins/bazaar/optionspage.cpp b/src/plugins/bazaar/optionspage.cpp index 883e7d0e50..844cabc78b 100644 --- a/src/plugins/bazaar/optionspage.cpp +++ b/src/plugins/bazaar/optionspage.cpp @@ -41,8 +41,7 @@ using namespace Bazaar::Internal; using namespace Bazaar; using namespace VcsBase; -OptionsPageWidget::OptionsPageWidget(QWidget *parent) - : QWidget(parent) +OptionsPageWidget::OptionsPageWidget(QWidget *parent) : VcsClientOptionsPageWidget(parent) { m_ui.setupUi(this); m_ui.commandChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); @@ -70,29 +69,10 @@ void OptionsPageWidget::setSettings(const VcsBaseClientSettings &s) m_ui.timeout->setValue(s.intValue(BazaarSettings::timeoutKey)); } -OptionsPage::OptionsPage() +OptionsPage::OptionsPage(Core::IVersionControl *control) : + VcsClientOptionsPage(control, BazaarPlugin::instance()->client()) { setId(VcsBase::Constants::VCS_ID_BAZAAR); setDisplayName(tr("Bazaar")); -} - -QWidget *OptionsPage::widget() -{ - if (!m_optionsPageWidget) - m_optionsPageWidget = new OptionsPageWidget; - m_optionsPageWidget->setSettings(BazaarPlugin::instance()->client()->settings()); - return m_optionsPageWidget; -} - -void OptionsPage::apply() -{ - if (!m_optionsPageWidget) - return; - BazaarPlugin *plugin = BazaarPlugin::instance(); - const VcsBaseClientSettings newSettings = m_optionsPageWidget->settings(); - VcsBaseClientSettings &s = plugin->client()->settings(); - if (newSettings != s) { - s = newSettings; - emit settingsChanged(); - } + setWidgetFactory([]() { return new OptionsPageWidget; }); } diff --git a/src/plugins/bazaar/optionspage.h b/src/plugins/bazaar/optionspage.h index ddec710dbf..2711b3c4a4 100644 --- a/src/plugins/bazaar/optionspage.h +++ b/src/plugins/bazaar/optionspage.h @@ -44,7 +44,7 @@ class VcsBaseClientSettings; namespace Bazaar { namespace Internal { -class OptionsPageWidget : public QWidget +class OptionsPageWidget : public VcsBase::VcsClientOptionsPageWidget { Q_OBJECT @@ -59,22 +59,12 @@ private: }; -class OptionsPage : public VcsBase::VcsBaseOptionsPage +class OptionsPage : public VcsBase::VcsClientOptionsPage { Q_OBJECT public: - OptionsPage(); - - QWidget *widget(); - void apply(); - void finish() { } - -signals: - void settingsChanged(); - -private: - QPointer<OptionsPageWidget> m_optionsPageWidget; + OptionsPage(Core::IVersionControl *control); }; } // namespace Internal diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index f139b2763e..3fbc418f1b 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -254,10 +254,7 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) m_client = new CvsClient; - auto options = new SettingsPage; - connect(options, &SettingsPage::settingsChanged, - versionControl(), &IVersionControl::configurationChanged); - addAutoReleasedObject(new SettingsPage); + addAutoReleasedObject(new SettingsPage(versionControl())); addAutoReleasedObject(new VcsSubmitEditorFactory(&submitParameters, []() { return new CvsSubmitEditor(&submitParameters); })); diff --git a/src/plugins/cvs/settingspage.cpp b/src/plugins/cvs/settingspage.cpp index 7c76f20342..d0ee1f6d95 100644 --- a/src/plugins/cvs/settingspage.cpp +++ b/src/plugins/cvs/settingspage.cpp @@ -47,8 +47,7 @@ using namespace Cvs::Internal; using namespace Utils; using namespace VcsBase; -SettingsPageWidget::SettingsPageWidget(QWidget *parent) : - QWidget(parent) +SettingsPageWidget::SettingsPageWidget(QWidget *parent) : VcsClientOptionsPageWidget(parent) { m_ui.setupUi(this); m_ui.commandPathChooser->setExpectedKind(PathChooser::ExistingCommand); @@ -78,33 +77,10 @@ void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s) m_ui.describeByCommitIdCheckBox->setChecked(s.boolValue(CvsSettings::describeByCommitIdKey)); } -SettingsPage::SettingsPage() +SettingsPage::SettingsPage(Core::IVersionControl *control) : + VcsClientOptionsPage(control, CvsPlugin::instance()->client()) { setId(VcsBase::Constants::VCS_ID_CVS); setDisplayName(tr("CVS")); -} - -QWidget *SettingsPage::widget() -{ - if (!m_widget) { - m_widget = new SettingsPageWidget; - m_widget->setSettings(CvsPlugin::instance()->client()->settings()); - } - return m_widget; -} - -void SettingsPage::apply() -{ - VcsBaseClientSettings &s = CvsPlugin::instance()->client()->settings(); - const VcsBaseClientSettings newSettings = m_widget->settings(); - if (s != newSettings) { - s = newSettings; - s.writeSettings(Core::ICore::settings()); - emit settingsChanged(); - } -} - -void SettingsPage::finish() -{ - delete m_widget; + setWidgetFactory([]() { return new SettingsPageWidget; }); } diff --git a/src/plugins/cvs/settingspage.h b/src/plugins/cvs/settingspage.h index 6c0a3bc11a..18ec0906db 100644 --- a/src/plugins/cvs/settingspage.h +++ b/src/plugins/cvs/settingspage.h @@ -50,7 +50,7 @@ class VcsBaseClientSettings; namespace Cvs { namespace Internal { -class SettingsPageWidget : public QWidget +class SettingsPageWidget : public VcsBase::VcsClientOptionsPageWidget { Q_OBJECT @@ -65,22 +65,12 @@ private: }; -class SettingsPage : public VcsBase::VcsBaseOptionsPage +class SettingsPage : public VcsBase::VcsClientOptionsPage { Q_OBJECT public: - SettingsPage(); - - QWidget *widget(); - void apply(); - void finish(); - -signals: - void settingsChanged(); - -private: - QPointer<SettingsPageWidget> m_widget; + SettingsPage(Core::IVersionControl *control); }; } // namespace Cvs diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 8aa5bf3a71..78041d3913 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -279,10 +279,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) initializeVcs(new GitVersionControl(m_gitClient), context); // Create the settings Page - SettingsPage *options = new SettingsPage; - connect(options, &SettingsPage::settingsChanged, - versionControl(), &IVersionControl::configurationChanged); - addAutoReleasedObject(options); + addAutoReleasedObject(new SettingsPage(versionControl())); static const char *describeSlot = SLOT(show(QString,QString)); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp index 2a0b5ca21d..8e12718709 100644 --- a/src/plugins/git/settingspage.cpp +++ b/src/plugins/git/settingspage.cpp @@ -47,8 +47,7 @@ using namespace VcsBase; namespace Git { namespace Internal { -SettingsPageWidget::SettingsPageWidget(QWidget *parent) : - QWidget(parent) +SettingsPageWidget::SettingsPageWidget(QWidget *parent) : VcsClientOptionsPageWidget(parent) { m_ui.setupUi(this); if (Utils::HostOsInfo::isWindowsHost()) { @@ -80,6 +79,7 @@ VcsBaseClientSettings SettingsPageWidget::settings() const rc.setValue(GitSettings::winSetHomeEnvironmentKey, m_ui.winHomeCheckBox->isChecked()); rc.setValue(GitSettings::gitkOptionsKey, m_ui.gitkOptionsLineEdit->text().trimmed()); rc.setValue(GitSettings::repositoryBrowserCmd, m_ui.repBrowserCommandPathChooser->path().trimmed()); + return rc; } @@ -96,46 +96,28 @@ void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s) } // -------- SettingsPage -SettingsPage::SettingsPage() : - m_widget(0) +SettingsPage::SettingsPage(Core::IVersionControl *control) : + VcsClientOptionsPage(control, GitPlugin::instance()->client()) { setId(VcsBase::Constants::VCS_ID_GIT); setDisplayName(tr("Git")); -} - -QWidget *SettingsPage::widget() -{ - if (!m_widget) { - m_widget = new SettingsPageWidget; - m_widget->setSettings(GitPlugin::instance()->client()->settings()); - } - return m_widget; + setWidgetFactory([]() { return new SettingsPageWidget; }); } void SettingsPage::apply() { - // Warn if git cannot be found in path if the widget is on top - const VcsBaseClientSettings newSettings = m_widget->settings(); - if (m_widget->isVisible()) { + VcsClientOptionsPage::apply(); + + if (widget()->isVisible()) { + const VcsBaseClientSettings settings = widget()->settings(); + const GitSettings *rc = static_cast<const GitSettings *>(&settings); bool gitFoundOk; QString errorMessage; - static_cast<const GitSettings &>(newSettings).gitExecutable(&gitFoundOk, &errorMessage); + rc->gitExecutable(&gitFoundOk, &errorMessage); if (!gitFoundOk) Core::AsynchronousMessageBox::warning(tr("Git Settings"), errorMessage); } - - VcsBaseClientSettings &s = GitPlugin::instance()->client()->settings(); - if (s != newSettings) { - s = newSettings; - s.writeSettings(Core::ICore::settings()); - emit settingsChanged(); - } -} - -void SettingsPage::finish() -{ - delete m_widget; } -} -} +} // namespace Internal +} // namespace Git diff --git a/src/plugins/git/settingspage.h b/src/plugins/git/settingspage.h index e73fd4b0d2..8ac00a8ac9 100644 --- a/src/plugins/git/settingspage.h +++ b/src/plugins/git/settingspage.h @@ -49,34 +49,25 @@ class VcsBaseClientSettings; namespace Git { namespace Internal { -class SettingsPageWidget : public QWidget { +class SettingsPageWidget : public VcsBase::VcsClientOptionsPageWidget { Q_OBJECT public: explicit SettingsPageWidget(QWidget *parent = 0); - VcsBase::VcsBaseClientSettings settings() const; - void setSettings(const VcsBase::VcsBaseClientSettings &s); + VcsBase::VcsBaseClientSettings settings() const override; + void setSettings(const VcsBase::VcsBaseClientSettings &s) override; private: Ui::SettingsPage m_ui; }; -class SettingsPage : public VcsBase::VcsBaseOptionsPage +class SettingsPage : public VcsBase::VcsClientOptionsPage { Q_OBJECT public: - SettingsPage(); - - QWidget *widget(); - void apply(); - void finish(); - -signals: - void settingsChanged(); - -private: - QPointer<SettingsPageWidget> m_widget; + SettingsPage(Core::IVersionControl *control); + void apply() override; }; } // namespace Internal diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 4f0799407a..dd13a0f2a9 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -139,8 +139,7 @@ bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString * m_client = new MercurialClient; initializeVcs(new MercurialControl(m_client), context); - optionsPage = new OptionsPage(); - addAutoReleasedObject(optionsPage); + addAutoReleasedObject(new OptionsPage(versionControl())); connect(m_client, SIGNAL(changed(QVariant)), versionControl(), SLOT(changed(QVariant))); connect(m_client, SIGNAL(needUpdate()), this, SLOT(update())); diff --git a/src/plugins/mercurial/optionspage.cpp b/src/plugins/mercurial/optionspage.cpp index 924ea2a03a..bd28db736c 100644 --- a/src/plugins/mercurial/optionspage.cpp +++ b/src/plugins/mercurial/optionspage.cpp @@ -45,8 +45,7 @@ using namespace VcsBase; namespace Mercurial { namespace Internal { -OptionsPageWidget::OptionsPageWidget(QWidget *parent) : - QWidget(parent) +OptionsPageWidget::OptionsPageWidget(QWidget *parent) : VcsClientOptionsPageWidget(parent) { m_ui.setupUi(this); m_ui.commandChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); @@ -74,38 +73,12 @@ void OptionsPageWidget::setSettings(const VcsBaseClientSettings &s) m_ui.timeout->setValue(s.intValue(MercurialSettings::timeoutKey)); } -OptionsPage::OptionsPage() +OptionsPage::OptionsPage(Core::IVersionControl *control) : + VcsClientOptionsPage(control, MercurialPlugin::client()) { setId(VcsBase::Constants::VCS_ID_MERCURIAL); setDisplayName(tr("Mercurial")); -} - -QWidget *OptionsPage::widget() -{ - if (!optionsPageWidget) - optionsPageWidget = new OptionsPageWidget; - optionsPageWidget->setSettings(MercurialPlugin::client()->settings()); - return optionsPageWidget; -} - -void OptionsPage::apply() -{ - if (!optionsPageWidget) - return; - - const VcsBaseClientSettings newSettings = optionsPageWidget->settings(); - VcsBaseClientSettings &s = MercurialPlugin::instance()->client()->settings(); - if (s != newSettings) { - s = newSettings; - s.writeSettings(Core::ICore::settings()); - emit settingsChanged(); - } - -} - -void OptionsPage::finish() -{ - delete optionsPageWidget; + setWidgetFactory([]() { return new OptionsPageWidget; }); } } // namespace Internal diff --git a/src/plugins/mercurial/optionspage.h b/src/plugins/mercurial/optionspage.h index 24dcac25dd..5b7e0876bb 100644 --- a/src/plugins/mercurial/optionspage.h +++ b/src/plugins/mercurial/optionspage.h @@ -45,7 +45,7 @@ class VcsBaseClientSettings; namespace Mercurial { namespace Internal { -class OptionsPageWidget : public QWidget +class OptionsPageWidget : public VcsBase::VcsClientOptionsPageWidget { Q_OBJECT @@ -60,22 +60,12 @@ private: }; -class OptionsPage : public VcsBase::VcsBaseOptionsPage +class OptionsPage : public VcsBase::VcsClientOptionsPage { Q_OBJECT public: - OptionsPage(); - - QWidget *widget(); - void apply(); - void finish(); - -signals: - void settingsChanged(); - -private: - QPointer<OptionsPageWidget> optionsPageWidget; + OptionsPage(Core::IVersionControl *control); }; } // namespace Internal diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp index 851f8ae2c9..548212d744 100644 --- a/src/plugins/subversion/settingspage.cpp +++ b/src/plugins/subversion/settingspage.cpp @@ -47,8 +47,7 @@ using namespace Subversion::Internal; using namespace Utils; using namespace VcsBase; -SettingsPageWidget::SettingsPageWidget(QWidget *parent) : - QWidget(parent) +SettingsPageWidget::SettingsPageWidget(QWidget *parent) : VcsClientOptionsPageWidget(parent) { m_ui.setupUi(this); m_ui.pathChooser->setExpectedKind(PathChooser::ExistingCommand); @@ -86,34 +85,10 @@ void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s) m_ui.logCountSpinBox->setValue(s.intValue(SubversionSettings::logCountKey)); } -SettingsPage::SettingsPage() : - m_widget(0) +SettingsPage::SettingsPage(Core::IVersionControl *control) : + VcsClientOptionsPage(control, SubversionPlugin::instance()->client()) { setId(VcsBase::Constants::VCS_ID_SUBVERSION); setDisplayName(tr("Subversion")); -} - -QWidget *SettingsPage::widget() -{ - if (!m_widget) { - m_widget = new SettingsPageWidget; - m_widget->setSettings(SubversionPlugin::instance()->client()->settings()); - } - return m_widget; -} - -void SettingsPage::apply() -{ - const VcsBaseClientSettings newSettings = m_widget->settings(); - VcsBaseClientSettings &s = SubversionPlugin::instance()->client()->settings(); - if (s != newSettings) { - s = newSettings; - s.writeSettings(Core::ICore::settings()); - emit settingsChanged(); - } -} - -void SettingsPage::finish() -{ - delete m_widget; + setWidgetFactory([]() { return new SettingsPageWidget; }); } diff --git a/src/plugins/subversion/settingspage.h b/src/plugins/subversion/settingspage.h index dc9ab2b8d0..068cb8591c 100644 --- a/src/plugins/subversion/settingspage.h +++ b/src/plugins/subversion/settingspage.h @@ -43,14 +43,10 @@ QT_BEGIN_NAMESPACE class QSettings; QT_END_NAMESPACE -namespace VcsBase { -class VcsBaseClientSettings; -} // namespace VcsBa - namespace Subversion { namespace Internal { -class SettingsPageWidget : public QWidget +class SettingsPageWidget : public VcsBase::VcsClientOptionsPageWidget { Q_OBJECT @@ -65,22 +61,12 @@ private: }; -class SettingsPage : public VcsBase::VcsBaseOptionsPage +class SettingsPage : public VcsBase::VcsClientOptionsPage { Q_OBJECT public: - SettingsPage(); - - QWidget *widget(); - void apply(); - void finish(); - -signals: - void settingsChanged(); - -private: - QPointer<SettingsPageWidget> m_widget; + SettingsPage(Core::IVersionControl *control); }; } // namespace Subversion diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index aaef47b008..51480d5f28 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -249,7 +249,7 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e m_client = new SubversionClient; - addAutoReleasedObject(new SettingsPage); + addAutoReleasedObject(new SettingsPage(versionControl())); addAutoReleasedObject(new VcsSubmitEditorFactory(&submitParameters, []() { return new SubversionSubmitEditor(&submitParameters); })); diff --git a/src/plugins/vcsbase/vcsbaseoptionspage.cpp b/src/plugins/vcsbase/vcsbaseoptionspage.cpp index 7920cbf588..9f67c7d3af 100644 --- a/src/plugins/vcsbase/vcsbaseoptionspage.cpp +++ b/src/plugins/vcsbase/vcsbaseoptionspage.cpp @@ -30,8 +30,14 @@ #include "vcsbaseoptionspage.h" +#include "vcsbaseclient.h" #include "vcsbaseconstants.h" +#include <coreplugin/icore.h> +#include <coreplugin/iversioncontrol.h> + +#include <utils/qtcassert.h> + #include <QCoreApplication> /*! @@ -43,12 +49,58 @@ namespace VcsBase { -VcsBaseOptionsPage::VcsBaseOptionsPage(QObject *parent) : - Core::IOptionsPage(parent) +VcsBaseOptionsPage::VcsBaseOptionsPage(QObject *parent) : Core::IOptionsPage(parent) { setCategory(Constants::VCS_SETTINGS_CATEGORY); setDisplayCategory(QCoreApplication::translate("VcsBase", Constants::VCS_SETTINGS_TR_CATEGORY)); setCategoryIcon(QLatin1String(Constants::SETTINGS_CATEGORY_VCS_ICON)); } +VcsClientOptionsPageWidget::VcsClientOptionsPageWidget(QWidget *parent) : QWidget(parent) +{ } + +VcsClientOptionsPage::VcsClientOptionsPage(Core::IVersionControl *control, VcsBaseClientImpl *client, + QObject *parent) : + VcsBaseOptionsPage(parent), + m_widget(0), + m_client(client) +{ + QTC_CHECK(m_client); + connect(this, &VcsClientOptionsPage::settingsChanged, + control, &Core::IVersionControl::configurationChanged); +} + +void VcsClientOptionsPage::setWidgetFactory(VcsClientOptionsPage::WidgetFactory factory) +{ + QTC_ASSERT(!m_factory, return); + m_factory = factory; +} + +VcsClientOptionsPageWidget *VcsClientOptionsPage::widget() +{ + QTC_ASSERT(m_factory, return 0); + if (!m_widget) + m_widget = m_factory(); + QTC_ASSERT(m_widget, return 0); + m_widget->setSettings(m_client->settings()); + return m_widget; +} + +void VcsClientOptionsPage::apply() +{ + QTC_ASSERT(m_widget, return); + const VcsBaseClientSettings newSettings = m_widget->settings(); + VcsBaseClientSettings &s = m_client->settings(); + if (s != newSettings) { + s = newSettings; + emit settingsChanged(); + } +} + +void VcsClientOptionsPage::finish() +{ + delete m_widget; + m_widget = 0; +} + } // namespace VcsBase diff --git a/src/plugins/vcsbase/vcsbaseoptionspage.h b/src/plugins/vcsbase/vcsbaseoptionspage.h index e1c867d6ec..d0587ae1a5 100644 --- a/src/plugins/vcsbase/vcsbaseoptionspage.h +++ b/src/plugins/vcsbase/vcsbaseoptionspage.h @@ -33,8 +33,16 @@ #include "vcsbase_global.h" +#include "vcsbaseclientsettings.h" + #include <coreplugin/dialogs/ioptionspage.h> +#include <QWidget> + +#include <functional> + +namespace Core { class IVersionControl; } + namespace VcsBase { class VCSBASE_EXPORT VcsBaseOptionsPage : public Core::IOptionsPage @@ -43,6 +51,44 @@ public: explicit VcsBaseOptionsPage(QObject *parent = 0); }; +class VcsBaseClientImpl; + +class VCSBASE_EXPORT VcsClientOptionsPageWidget : public QWidget +{ + Q_OBJECT + +public: + VcsClientOptionsPageWidget(QWidget *parent = 0); + + virtual void setSettings(const VcsBaseClientSettings &s) = 0; + virtual VcsBaseClientSettings settings() const = 0; +}; + +class VCSBASE_EXPORT VcsClientOptionsPage : public VcsBaseOptionsPage +{ + Q_OBJECT + +public: + using WidgetFactory = std::function<VcsClientOptionsPageWidget *()>; + + explicit VcsClientOptionsPage(Core::IVersionControl *control, VcsBaseClientImpl *client, QObject *parent = 0); + + VcsClientOptionsPageWidget *widget(); + virtual void apply(); + virtual void finish(); + +signals: + void settingsChanged(); + +protected: + void setWidgetFactory(WidgetFactory factory); + +private: + WidgetFactory m_factory; + VcsClientOptionsPageWidget *m_widget; + VcsBaseClientImpl *const m_client; +}; + } // namespace VcsBase #endif // VCSBASEOPTIONSPAGE_H |