CppTools: Merge diagnostic selection widgets together

QComboBox, QLabel and QPushButton are always used
together. Therefore it makes sense to put them in one
custom widget.

Change-Id: Ie21675530fbadd7071f2a362567dadb6f09bb68d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2018-05-14 10:30:09 +02:00
parent f46fb39f3c
commit 53d7906061
10 changed files with 88 additions and 177 deletions

View File

@@ -25,14 +25,63 @@
#include "clangdiagnosticconfigsselectionwidget.h"
#include "clangdiagnosticconfigswidget.h"
#include "cppcodemodelsettings.h"
#include "cpptoolsreuse.h"
#include <coreplugin/icore.h>
#include <QComboBox>
#include <QDialog>
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QPushButton>
namespace CppTools {
ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWidget *parent)
: QComboBox(parent)
static void connectToClangDiagnosticConfigsDialog(QPushButton *button)
{
QObject::connect(button, &QPushButton::clicked, []() {
ClangDiagnosticConfigsWidget *widget = new ClangDiagnosticConfigsWidget;
widget->layout()->setMargin(0);
QDialog dialog;
dialog.setWindowTitle(widget->tr("Diagnostic Configurations"));
dialog.setLayout(new QVBoxLayout);
dialog.layout()->addWidget(widget);
auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog.layout()->addWidget(buttonsBox);
QObject::connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
QObject::connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
QObject::connect(&dialog, &QDialog::accepted, [widget]() {
QSharedPointer<CppCodeModelSettings> settings = codeModelSettings();
const ClangDiagnosticConfigs oldDiagnosticConfigs
= settings->clangCustomDiagnosticConfigs();
const ClangDiagnosticConfigs currentDiagnosticConfigs = widget->customConfigs();
if (oldDiagnosticConfigs != currentDiagnosticConfigs) {
settings->setClangCustomDiagnosticConfigs(currentDiagnosticConfigs);
settings->toSettings(Core::ICore::settings());
}
});
dialog.exec();
});
}
ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWidget *parent)
: QWidget(parent)
, m_selectionComboBox(new QComboBox(this))
{
auto *layout = new QHBoxLayout(this);
layout->setMargin(0);
setLayout(layout);
layout->addWidget(new QLabel(tr("Diagnostic Configuration:"), this));
layout->addWidget(m_selectionComboBox);
auto *manageButton = new QPushButton(tr("Manage..."), this);
layout->addWidget(manageButton);
layout->addStretch();
connectToClangDiagnosticConfigsDialog(manageButton);
refresh(codeModelSettings()->clangDiagnosticConfigId());
connectToCurrentIndexChanged();
@@ -40,13 +89,13 @@ ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWi
Core::Id ClangDiagnosticConfigsSelectionWidget::currentConfigId() const
{
return Core::Id::fromSetting(currentData());
return Core::Id::fromSetting(m_selectionComboBox->currentData());
}
void ClangDiagnosticConfigsSelectionWidget::connectToCurrentIndexChanged()
{
m_currentIndexChangedConnection
= connect(this,
= connect(m_selectionComboBox,
static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
this,
[this]() { emit currentConfigChanged(currentConfigId()); });
@@ -62,7 +111,7 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id)
disconnectFromCurrentIndexChanged();
int configToSelectIndex = -1;
clear();
m_selectionComboBox->clear();
m_diagnosticConfigsModel = ClangDiagnosticConfigsModel(
codeModelSettings()->clangCustomDiagnosticConfigs());
const int size = m_diagnosticConfigsModel.size();
@@ -70,14 +119,14 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id)
const ClangDiagnosticConfig &config = m_diagnosticConfigsModel.at(i);
const QString displayName
= ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
addItem(displayName, config.id().toSetting());
m_selectionComboBox->addItem(displayName, config.id().toSetting());
if (id == config.id())
configToSelectIndex = i;
}
if (configToSelectIndex != -1)
setCurrentIndex(configToSelectIndex);
m_selectionComboBox->setCurrentIndex(configToSelectIndex);
else
emit currentConfigChanged(currentConfigId());

View File

@@ -29,11 +29,15 @@
#include "clangdiagnosticconfigsmodel.h"
#include <QComboBox>
#include <QWidget>
QT_BEGIN_NAMESPACE
class QComboBox;
QT_END_NAMESPACE
namespace CppTools {
class CPPTOOLS_EXPORT ClangDiagnosticConfigsSelectionWidget : public QComboBox
class CPPTOOLS_EXPORT ClangDiagnosticConfigsSelectionWidget : public QWidget
{
Q_OBJECT
@@ -53,6 +57,8 @@ private:
QMetaObject::Connection m_currentIndexChangedConnection;
ClangDiagnosticConfigsModel m_diagnosticConfigsModel;
QComboBox *m_selectionComboBox = nullptr;
};
} // CppTools namespace

View File

@@ -32,14 +32,11 @@
#include "ui_clazychecks.h"
#include "ui_tidychecks.h"
#include <coreplugin/icore.h>
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <utils/utilsicons.h>
#include <QDebug>
#include <QDialogButtonBox>
#include <QInputDialog>
#include <QPushButton>
#include <QUuid>
@@ -441,14 +438,14 @@ void ClangDiagnosticConfigsWidget::connectClazyRadioButtonClicked(QRadioButton *
void ClangDiagnosticConfigsWidget::connectConfigChooserCurrentIndex()
{
connect(m_ui->configChooserList, &QListWidget::currentRowChanged, this,
&ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
connect(m_ui->configChooserList, &QListWidget::currentRowChanged,
this, &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
}
void ClangDiagnosticConfigsWidget::disconnectConfigChooserCurrentIndex()
{
disconnect(m_ui->configChooserList, &QListWidget::currentRowChanged, this,
&ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
disconnect(m_ui->configChooserList, &QListWidget::currentRowChanged,
this, &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
}
void ClangDiagnosticConfigsWidget::connectDiagnosticOptionsChanged()
@@ -503,33 +500,4 @@ void ClangDiagnosticConfigsWidget::setupTabs()
m_ui->tabWidget->setCurrentIndex(0);
}
void connectToClangDiagnosticConfigsDialog(QPushButton *button)
{
QObject::connect(button, &QPushButton::clicked, []() {
ClangDiagnosticConfigsWidget *widget = new ClangDiagnosticConfigsWidget;
QDialog dialog;
dialog.setWindowTitle(widget->tr("Diagnostic Configurations"));
dialog.setLayout(new QVBoxLayout);
dialog.layout()->setMargin(0);
dialog.layout()->setSpacing(0);
dialog.layout()->addWidget(widget);
auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog.layout()->addWidget(buttonsBox);
QObject::connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
QObject::connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
QObject::connect(&dialog, &QDialog::accepted, [widget]() {
QSharedPointer<CppCodeModelSettings> settings = codeModelSettings();
const ClangDiagnosticConfigs oldDiagnosticConfigs
= settings->clangCustomDiagnosticConfigs();
const ClangDiagnosticConfigs currentDiagnosticConfigs = widget->customConfigs();
if (oldDiagnosticConfigs != currentDiagnosticConfigs) {
settings->setClangCustomDiagnosticConfigs(currentDiagnosticConfigs);
settings->toSettings(Core::ICore::settings());
}
});
dialog.exec();
});
}
} // CppTools namespace

View File

@@ -119,6 +119,4 @@ private:
int m_selectedConfigIndex = 0;
};
CPPTOOLS_EXPORT void connectToClangDiagnosticConfigsDialog(QPushButton *button);
} // CppTools namespace

View File

@@ -75,14 +75,12 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets()
m_ui->clangCodeModelIsDisabledHint->setVisible(!isClangActive);
m_ui->clangCodeModelIsEnabledHint->setVisible(isClangActive);
for (int i = 0; i < m_ui->clangDiagnosticsLayout->count(); ++i) {
QWidget *widget = m_ui->clangDiagnosticsLayout->itemAt(i)->widget();
for (int i = 0; i < m_ui->clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
QWidget *widget = m_ui->clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
if (widget)
widget->setEnabled(isClangActive);
}
connectToClangDiagnosticConfigsDialog(m_ui->manageButton);
connect(m_settings.data(), &CppCodeModelSettings::changed,
this, [this]() {
m_ui->clangDiagnosticConfigsSelectionWidget->refresh(

View File

@@ -98,38 +98,7 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="clangDiagnosticsLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Diagnostic Configuration:</string>
</property>
</widget>
</item>
<item>
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
</item>
<item>
<widget class="QPushButton" name="manageButton">
<property name="text">
<string>Manage...</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
</item>
<item>
<spacer name="verticalSpacer">