LanguageClient: improve inspector layout

Replace the list widget to switch between servers with a combo box on
top of the inspector to gain horizontal space for the actual
information.

Change-Id: Ic50d5dd6a44eeea43caa3d3f9cee621b58d44306
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2023-06-09 07:56:05 +02:00
parent 3381a6219a
commit 6eca1f5dc8

View File

@@ -18,6 +18,7 @@
#include <QAction> #include <QAction>
#include <QApplication> #include <QApplication>
#include <QComboBox>
#include <QDialog> #include <QDialog>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QElapsedTimer> #include <QElapsedTimer>
@@ -334,7 +335,7 @@ private:
QTabWidget * const m_tabWidget; QTabWidget * const m_tabWidget;
enum class TabIndex { Log, Capabilities, Custom }; enum class TabIndex { Log, Capabilities, Custom };
QListWidget *m_clients = nullptr; QComboBox *m_clients = nullptr;
}; };
void LspInspector::show(const QString &defaultClient) void LspInspector::show(const QString &defaultClient)
@@ -401,34 +402,34 @@ LspInspectorWidget::LspInspectorWidget(LspInspector *inspector)
this, &LspInspectorWidget::updateCapabilities); this, &LspInspectorWidget::updateCapabilities);
connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, this, &QWidget::close); connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, this, &QWidget::close);
m_clients = new QListWidget;
m_clients->addItems(inspector->clients());
m_clients->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding);
auto mainLayout = new QVBoxLayout; auto mainLayout = new QVBoxLayout;
auto mainSplitter = new Core::MiniSplitter;
mainSplitter->setOrientation(Qt::Horizontal); m_clients = new QComboBox;
mainSplitter->addWidget(m_clients); m_clients->addItem(Tr::tr("<Select>"));
mainSplitter->addWidget(m_tabWidget); m_clients->addItems(inspector->clients());
mainSplitter->setStretchFactor(0, 0); QHBoxLayout *hbox = new QHBoxLayout;
mainSplitter->setStretchFactor(1, 1); hbox->addWidget(new QLabel(Tr::tr("Language Server:")));
hbox->addWidget(m_clients);
hbox->addStretch();
mainLayout->addLayout(hbox);
m_tabWidget->addTab(new LspLogWidget, Tr::tr("Log")); m_tabWidget->addTab(new LspLogWidget, Tr::tr("Log"));
m_tabWidget->addTab(new LspCapabilitiesWidget, Tr::tr("Capabilities")); m_tabWidget->addTab(new LspCapabilitiesWidget, Tr::tr("Capabilities"));
mainLayout->addWidget(mainSplitter); mainLayout->addWidget(m_tabWidget);
auto buttonBox = new QDialogButtonBox(this); auto buttonBox = new QDialogButtonBox(this);
buttonBox->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Close); buttonBox->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Close);
const auto clearButton = buttonBox->addButton(Tr::tr("Clear"), QDialogButtonBox::ResetRole); const auto clearButton = buttonBox->addButton(Tr::tr("Clear"), QDialogButtonBox::ResetRole);
connect(clearButton, &QPushButton::clicked, this, [this] { connect(clearButton, &QPushButton::clicked, this, [this] {
m_inspector->clear(); m_inspector->clear();
if (m_clients->currentItem()) if (m_clients->currentIndex() != 0)
currentClientChanged(m_clients->currentItem()->text()); currentClientChanged(m_clients->currentText());
}); });
mainLayout->addWidget(buttonBox); mainLayout->addWidget(buttonBox);
setLayout(mainLayout); setLayout(mainLayout);
connect(m_clients, connect(m_clients,
&QListWidget::currentTextChanged, &QComboBox::currentTextChanged,
this, this,
&LspInspectorWidget::currentClientChanged); &LspInspectorWidget::currentClientChanged);
@@ -442,31 +443,26 @@ LspInspectorWidget::LspInspectorWidget(LspInspector *inspector)
void LspInspectorWidget::selectClient(const QString &clientName) void LspInspectorWidget::selectClient(const QString &clientName)
{ {
auto items = m_clients->findItems(clientName, Qt::MatchExactly); const int index = m_clients->findText(clientName, Qt::MatchExactly);
if (items.isEmpty()) if (index >= 0)
return; m_clients->setCurrentIndex(index);
m_clients->setCurrentItem(items.first());
} }
void LspInspectorWidget::addMessage(const QString &clientName, const LspLogMessage &message) void LspInspectorWidget::addMessage(const QString &clientName, const LspLogMessage &message)
{ {
if (m_clients->findItems(clientName, Qt::MatchExactly).isEmpty()) if (m_clients->findText(clientName, Qt::MatchExactly) < 0)
m_clients->addItem(clientName); m_clients->addItem(clientName);
if (const QListWidgetItem *currentItem = m_clients->currentItem(); if (m_clients->currentText() == clientName)
currentItem && currentItem->text() == clientName) {
log()->addMessage(message); log()->addMessage(message);
} }
}
void LspInspectorWidget::updateCapabilities(const QString &clientName) void LspInspectorWidget::updateCapabilities(const QString &clientName)
{ {
if (m_clients->findItems(clientName, Qt::MatchExactly).isEmpty()) if (m_clients->findText(clientName, Qt::MatchExactly) < 0)
m_clients->addItem(clientName); m_clients->addItem(clientName);
if (const QListWidgetItem *currentItem = m_clients->currentItem(); if (m_clients->currentText() == clientName)
currentItem && clientName == currentItem->text()) {
capabilities()->setCapabilities(m_inspector->capabilities(clientName)); capabilities()->setCapabilities(m_inspector->capabilities(clientName));
} }
}
void LspInspectorWidget::currentClientChanged(const QString &clientName) void LspInspectorWidget::currentClientChanged(const QString &clientName)
{ {