forked from qt-creator/qt-creator
LanguageServer: Use IOptionPage::setWidgetCreator() for settings
Change-Id: I6d05e739bc1348f09f3df7ab3ae8a701ce137b3c Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -104,17 +104,39 @@ private:
|
||||
QList<BaseSettings *> m_removed;
|
||||
};
|
||||
|
||||
class LanguageClientSettingsPageWidget : public QWidget
|
||||
class LanguageClientSettingsPageWidget : public Core::IOptionsPageWidget
|
||||
{
|
||||
public:
|
||||
LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings);
|
||||
LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings,
|
||||
QSet<QString> &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<BaseSettings *> settings() const;
|
||||
QList<BaseSettings *> changedSettings() const;
|
||||
void addSettings(BaseSettings *settings);
|
||||
void enableSettings(const QString &id, bool enable = true);
|
||||
|
||||
private:
|
||||
LanguageClientSettingsModel &m_settings;
|
||||
QSet<QString> &m_changedSettings;
|
||||
LanguageClientSettingsModel m_model;
|
||||
QSet<QString> m_changedSettings;
|
||||
QPointer<LanguageClientSettingsPageWidget> m_widget;
|
||||
};
|
||||
|
||||
QMap<Utils::Id, ClientType> &clientTypes()
|
||||
@@ -155,9 +157,11 @@ QMap<Utils::Id, ClientType> &clientTypes()
|
||||
return types;
|
||||
}
|
||||
|
||||
LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings)
|
||||
: m_settings(settings)
|
||||
, m_view(new QTreeView())
|
||||
LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClientSettingsModel &settings,
|
||||
QSet<QString> &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<BaseSettings *> settings() const;
|
||||
QList<BaseSettings *> changedSettings() const;
|
||||
void addSettings(BaseSettings *settings);
|
||||
void enableSettings(const QString &id, bool enable = true);
|
||||
|
||||
private:
|
||||
LanguageClientSettingsModel m_model;
|
||||
QSet<QString> 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<BaseSettings *> LanguageClientSettingsPage::settings() const
|
||||
{
|
||||
return m_model.settings();
|
||||
|
Reference in New Issue
Block a user