diff --git a/src/plugins/languageclient/languageclientplugin.cpp b/src/plugins/languageclient/languageclientplugin.cpp index 18e0eca21eb..2143d0c3115 100644 --- a/src/plugins/languageclient/languageclientplugin.cpp +++ b/src/plugins/languageclient/languageclientplugin.cpp @@ -11,8 +11,6 @@ #include #include -#include - #include #include @@ -40,12 +38,7 @@ void LanguageClientPlugin::initialize() { using namespace Core; - auto panelFactory = new ProjectExplorer::ProjectPanelFactory; - panelFactory->setPriority(35); - panelFactory->setDisplayName(Tr::tr("Language Server")); - panelFactory->setCreateWidgetFunction( - [](ProjectExplorer::Project *project) { return new ProjectSettingsWidget(project); }); - ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory); + setupLanguageClientProjectPanel(); LanguageClientManager::init(); LanguageClientSettings::registerClientType({Constants::LANGUAGECLIENT_STDIO_SETTINGS_ID, diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index 95a33eff352..0aeb2fc8d4b 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -15,6 +15,8 @@ #include #include +#include +#include #include #include @@ -66,6 +68,7 @@ constexpr char typedClientsKey[] = "typedClients"; constexpr char outlineSortedKey[] = "outlineSorted"; constexpr char mimeType[] = "application/language.client.setting"; +using namespace ProjectExplorer; using namespace Utils; namespace LanguageClient { @@ -1105,30 +1108,56 @@ void ProjectSettings::setJson(const QByteArray &json) LanguageClientManager::updateWorkspaceConfiguration(m_project, newConfig); } -ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project) - : m_settings(project) +class LanguageClientProjectSettingsWidget : public ProjectSettingsWidget { - setUseGlobalSettingsCheckBoxVisible(false); - setGlobalSettingsId(Constants::LANGUAGECLIENT_SETTINGS_PAGE); - setExpanding(true); +public: + explicit LanguageClientProjectSettingsWidget(Project *project) + : m_settings(project) + { + setUseGlobalSettingsCheckBoxVisible(false); + setGlobalSettingsId(Constants::LANGUAGECLIENT_SETTINGS_PAGE); + setExpanding(true); - TextEditor::BaseTextEditor *editor = jsonEditor(); - editor->document()->setContents(m_settings.json()); + TextEditor::BaseTextEditor *editor = jsonEditor(); + editor->document()->setContents(m_settings.json()); - auto layout = new QVBoxLayout; - setLayout(layout); - auto group = new QGroupBox(Tr::tr("Workspace Configuration")); - group->setLayout(new QVBoxLayout); - group->layout()->addWidget(new QLabel(Tr::tr( - "Additional JSON configuration sent to all running language servers for this project.\n" - "See the documentation of the specific language server for valid settings."))); - group->layout()->addWidget(editor->widget()); - layout->addWidget(group); + auto layout = new QVBoxLayout; + setLayout(layout); + auto group = new QGroupBox(Tr::tr("Workspace Configuration")); + group->setLayout(new QVBoxLayout); + group->layout()->addWidget(new QLabel(Tr::tr( + "Additional JSON configuration sent to all running language servers for this project.\n" + "See the documentation of the specific language server for valid settings."))); + group->layout()->addWidget(editor->widget()); + layout->addWidget(group); - connect(editor->editorWidget()->textDocument(), - &TextEditor::TextDocument::contentsChanged, - this, - [=]() { m_settings.setJson(editor->document()->contents()); }); + connect(editor->editorWidget()->textDocument(), + &TextEditor::TextDocument::contentsChanged, + this, + [=]() { m_settings.setJson(editor->document()->contents()); }); + } + +private: + ProjectSettings m_settings; +}; + +class LanguageClientProjectPanelFactory : public ProjectPanelFactory +{ +public: + LanguageClientProjectPanelFactory() + { + setPriority(35); + setDisplayName(Tr::tr("Language Server")); + setCreateWidgetFunction([](Project *project) { + return new LanguageClientProjectSettingsWidget(project); + }); + ProjectPanelFactory::registerFactory(this); + } +}; + +void setupLanguageClientProjectPanel() +{ + static LanguageClientProjectPanelFactory theLanguageClientProjectPanelFactory; } } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientsettings.h b/src/plugins/languageclient/languageclientsettings.h index 7c33fedad1a..51109a05c9e 100644 --- a/src/plugins/languageclient/languageclientsettings.h +++ b/src/plugins/languageclient/languageclientsettings.h @@ -7,8 +7,6 @@ #include -#include - #include #include #include @@ -208,15 +206,8 @@ private: QByteArray m_json; }; -class ProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget -{ -public: - explicit ProjectSettingsWidget(ProjectExplorer::Project *project); - -private: - ProjectSettings m_settings; -}; - LANGUAGECLIENT_EXPORT TextEditor::BaseTextEditor *jsonEditor(); +void setupLanguageClientProjectPanel(); + } // namespace LanguageClient