diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index 5b15c7c218d..b6545dae022 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -104,17 +104,39 @@ private: QList m_removed; }; -class LanguageClientSettingsPageWidget : public QWidget +class LanguageClientSettingsPageWidget : public Core::IOptionsPageWidget { public: - LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings); + LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings, + QSet &changedSettings); + void currentChanged(const QModelIndex &index); int currentRow() const; void resetCurrentSettings(int row); void applyCurrentSettings(); + void apply() final + { + applyCurrentSettings(); + LanguageClientManager::applySettings(); + + for (BaseSettings *setting : m_model.removed()) { + for (Client *client : LanguageClientManager::clientsForSetting(setting)) + LanguageClientManager::shutdownClient(client); + } + + int row = currentRow(); + m_model.reset(LanguageClientManager::currentSettings()); + resetCurrentSettings(row); + } + + void finish() + { + m_settings.reset(LanguageClientManager::currentSettings()); + m_changedSettings.clear(); + } + private: - LanguageClientSettingsModel &m_settings; QTreeView *m_view = nullptr; struct CurrentSettings { BaseSettings *setting = nullptr; @@ -123,30 +145,10 @@ private: void addItem(const Utils::Id &clientTypeId); void deleteItem(); -}; -class LanguageClientSettingsPage : public Core::IOptionsPage -{ -public: - LanguageClientSettingsPage(); - ~LanguageClientSettingsPage() override; - - void init(); - - // IOptionsPage interface - QWidget *widget() override; - void apply() override; - void finish() override; - - QList settings() const; - QList changedSettings() const; - void addSettings(BaseSettings *settings); - void enableSettings(const QString &id, bool enable = true); - -private: + LanguageClientSettingsModel &m_settings; + QSet &m_changedSettings; LanguageClientSettingsModel m_model; - QSet m_changedSettings; - QPointer m_widget; }; QMap &clientTypes() @@ -155,9 +157,11 @@ QMap &clientTypes() return types; } -LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings) - : m_settings(settings) - , m_view(new QTreeView()) +LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings, + QSet &changedSettings) + : m_view(new QTreeView()) + , m_settings(settings) + , m_changedSettings(changedSettings) { auto mainLayout = new QVBoxLayout(); auto layout = new QHBoxLayout(); @@ -264,6 +268,23 @@ void LanguageClientSettingsPageWidget::deleteItem() m_settings.removeRows(index.row()); } +class LanguageClientSettingsPage : public Core::IOptionsPage +{ +public: + LanguageClientSettingsPage(); + + void init(); + + QList settings() const; + QList changedSettings() const; + void addSettings(BaseSettings *settings); + void enableSettings(const QString &id, bool enable = true); + +private: + LanguageClientSettingsModel m_model; + QSet m_changedSettings; +}; + LanguageClientSettingsPage::LanguageClientSettingsPage() { setId(Constants::LANGUAGECLIENT_SETTINGS_PAGE); @@ -271,18 +292,13 @@ LanguageClientSettingsPage::LanguageClientSettingsPage() setCategory(Constants::LANGUAGECLIENT_SETTINGS_CATEGORY); setDisplayCategory(Tr::tr(Constants::LANGUAGECLIENT_SETTINGS_TR)); setCategoryIconPath(":/languageclient/images/settingscategory_languageclient.png"); + setWidgetCreator([this] { return new LanguageClientSettingsPageWidget(m_model, m_changedSettings); }); connect(&m_model, &LanguageClientSettingsModel::dataChanged, [this](const QModelIndex &index) { if (BaseSettings *setting = m_model.settingForIndex(index)) m_changedSettings << setting->m_id; }); } -LanguageClientSettingsPage::~LanguageClientSettingsPage() -{ - if (m_widget) - delete m_widget; -} - void LanguageClientSettingsPage::init() { m_model.reset(LanguageClientSettings::fromSettings(Core::ICore::settings())); @@ -290,39 +306,6 @@ void LanguageClientSettingsPage::init() finish(); } -QWidget *LanguageClientSettingsPage::widget() -{ - if (!m_widget) - m_widget = new LanguageClientSettingsPageWidget(m_model); - return m_widget; -} - -void LanguageClientSettingsPage::apply() -{ - if (m_widget) - m_widget->applyCurrentSettings(); - LanguageClientManager::applySettings(); - - for (BaseSettings *setting : m_model.removed()) { - for (Client *client : LanguageClientManager::clientsForSetting(setting)) - LanguageClientManager::shutdownClient(client); - } - - if (m_widget) { - int row = m_widget->currentRow(); - m_model.reset(LanguageClientManager::currentSettings()); - m_widget->resetCurrentSettings(row); - } else { - m_model.reset(LanguageClientManager::currentSettings()); - } -} - -void LanguageClientSettingsPage::finish() -{ - m_model.reset(LanguageClientManager::currentSettings()); - m_changedSettings.clear(); -} - QList LanguageClientSettingsPage::settings() const { return m_model.settings();