forked from qt-creator/qt-creator
LSP: Visualize server capabilities in settings page
Change-Id: Ib83b8580e9758313285a6145b0925e051268f34b Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -34,9 +34,8 @@
|
|||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/delegates.h>
|
#include <utils/delegates.h>
|
||||||
#include <utils/fancylineedit.h>
|
#include <utils/fancylineedit.h>
|
||||||
#include <utils/qtcprocess.h>
|
|
||||||
#include <utils/mimetypes/mimedatabase.h>
|
#include <utils/mimetypes/mimedatabase.h>
|
||||||
#include <languageserverprotocol/lsptypes.h>
|
#include <utils/jsontreeitem.h>
|
||||||
|
|
||||||
#include <QBoxLayout>
|
#include <QBoxLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
@@ -150,7 +149,6 @@ LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClien
|
|||||||
connect(addButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::addItem);
|
connect(addButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::addItem);
|
||||||
auto deleteButton = new QPushButton(LanguageClientSettingsPage::tr("&Delete"));
|
auto deleteButton = new QPushButton(LanguageClientSettingsPage::tr("&Delete"));
|
||||||
connect(deleteButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::deleteItem);
|
connect(deleteButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::deleteItem);
|
||||||
|
|
||||||
mainLayout->addLayout(layout);
|
mainLayout->addLayout(layout);
|
||||||
setLayout(mainLayout);
|
setLayout(mainLayout);
|
||||||
layout->addWidget(m_view);
|
layout->addWidget(m_view);
|
||||||
@@ -505,6 +503,24 @@ BaseClientInterface *StdIOSettings::createInterface() const
|
|||||||
return new StdIOClientInterface(m_executable, m_arguments);
|
return new StdIOClientInterface(m_executable, m_arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QWidget *createCapabilitiesView(
|
||||||
|
const LanguageServerProtocol::ServerCapabilities &capabilities)
|
||||||
|
{
|
||||||
|
auto root = new Utils::JsonTreeItem("Capabilities", QJsonValue(capabilities));
|
||||||
|
if (root->canFetchMore())
|
||||||
|
root->fetchMore();
|
||||||
|
|
||||||
|
auto capabilitiesModel = new Utils::TreeModel<Utils::JsonTreeItem>(root);
|
||||||
|
capabilitiesModel->setHeader({BaseSettingsWidget::tr("Name"),
|
||||||
|
BaseSettingsWidget::tr("Value"),
|
||||||
|
BaseSettingsWidget::tr("Type")});
|
||||||
|
auto capabilitiesView = new QTreeView();
|
||||||
|
capabilitiesView->setModel(capabilitiesModel);
|
||||||
|
capabilitiesView->setAlternatingRowColors(true);
|
||||||
|
capabilitiesView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
|
return capabilitiesView;
|
||||||
|
}
|
||||||
|
|
||||||
BaseSettingsWidget::BaseSettingsWidget(const BaseSettings *settings, QWidget *parent)
|
BaseSettingsWidget::BaseSettingsWidget(const BaseSettings *settings, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_name(new QLineEdit(settings->m_name, this))
|
, m_name(new QLineEdit(settings->m_name, this))
|
||||||
@@ -528,6 +544,30 @@ BaseSettingsWidget::BaseSettingsWidget(const BaseSettings *settings, QWidget *pa
|
|||||||
connect(addMimeTypeButton, &QPushButton::pressed,
|
connect(addMimeTypeButton, &QPushButton::pressed,
|
||||||
this, &BaseSettingsWidget::showAddMimeTypeDialog);
|
this, &BaseSettingsWidget::showAddMimeTypeDialog);
|
||||||
|
|
||||||
|
auto createInfoLabel = []() {
|
||||||
|
return new QLabel(tr("Available after server was initialized"));
|
||||||
|
};
|
||||||
|
|
||||||
|
mainLayout->addWidget(new QLabel(tr("Capabilities:")), ++row, 0, Qt::AlignTop);
|
||||||
|
if (Client *client = settings->m_client.data()) {
|
||||||
|
if (client->state() == Client::Initialized)
|
||||||
|
mainLayout->addWidget(createCapabilitiesView(client->capabilities()));
|
||||||
|
else
|
||||||
|
mainLayout->addWidget(createInfoLabel(), row, 1);
|
||||||
|
connect(client, &Client::finished, mainLayout, [mainLayout, row, createInfoLabel]() {
|
||||||
|
delete mainLayout->itemAtPosition(row, 1)->widget();
|
||||||
|
mainLayout->addWidget(createInfoLabel(), row, 1);
|
||||||
|
});
|
||||||
|
connect(client, &Client::initialized, mainLayout,
|
||||||
|
[mainLayout, row](
|
||||||
|
const LanguageServerProtocol::ServerCapabilities &capabilities) {
|
||||||
|
delete mainLayout->itemAtPosition(row, 1)->widget();
|
||||||
|
mainLayout->addWidget(createCapabilitiesView(capabilities), row, 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
mainLayout->addWidget(createInfoLabel());
|
||||||
|
}
|
||||||
|
|
||||||
setLayout(mainLayout);
|
setLayout(mainLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user