forked from qt-creator/qt-creator
CppTools: Split diagnostic settings and selection
Now selection is only consists of combobox and a "Manage" button to diagnostic configurations. Diagnostic configurations are moved to the modal dialog which is shown by clicking the mentioned "Manage" button. Change-Id: I607fb923c97e8730448548708f3aaf32ce1983c8 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -24,32 +24,39 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "clangdiagnosticconfigswidget.h"
|
||||
|
||||
#include "cppcodemodelsettings.h"
|
||||
#include "cpptoolsreuse.h"
|
||||
#include "ui_clangdiagnosticconfigswidget.h"
|
||||
#include "ui_clangbasechecks.h"
|
||||
#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>
|
||||
|
||||
namespace CppTools {
|
||||
|
||||
ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget(
|
||||
const ClangDiagnosticConfigsModel &diagnosticConfigsModel,
|
||||
const Core::Id &configToSelect,
|
||||
QWidget *parent)
|
||||
ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_ui(new Ui::ClangDiagnosticConfigsWidget)
|
||||
, m_diagnosticConfigsModel(diagnosticConfigsModel)
|
||||
, m_diagnosticConfigsModel(codeModelSettings()->clangCustomDiagnosticConfigs())
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
setupTabs();
|
||||
|
||||
m_selectedConfigIndex = m_diagnosticConfigsModel.indexOfConfig(
|
||||
codeModelSettings()->clangDiagnosticConfigId());
|
||||
|
||||
connectConfigChooserCurrentIndex();
|
||||
connect(m_ui->copyButton, &QPushButton::clicked,
|
||||
this, &ClangDiagnosticConfigsWidget::onCopyButtonClicked);
|
||||
@@ -57,7 +64,7 @@ ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget(
|
||||
this, &ClangDiagnosticConfigsWidget::onRemoveButtonClicked);
|
||||
connectDiagnosticOptionsChanged();
|
||||
|
||||
syncWidgetsToModel(configToSelect);
|
||||
syncWidgetsToModel();
|
||||
}
|
||||
|
||||
ClangDiagnosticConfigsWidget::~ClangDiagnosticConfigsWidget()
|
||||
@@ -65,11 +72,10 @@ ClangDiagnosticConfigsWidget::~ClangDiagnosticConfigsWidget()
|
||||
delete m_ui;
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::onCurrentConfigChanged(int)
|
||||
void ClangDiagnosticConfigsWidget::onCurrentConfigChanged(int index)
|
||||
{
|
||||
m_selectedConfigIndex = index;
|
||||
syncOtherWidgetsToComboBox();
|
||||
|
||||
emit currentConfigChanged(currentConfigId());
|
||||
}
|
||||
|
||||
static ClangDiagnosticConfig createCustomConfig(const ClangDiagnosticConfig &config,
|
||||
@@ -85,7 +91,7 @@ static ClangDiagnosticConfig createCustomConfig(const ClangDiagnosticConfig &con
|
||||
|
||||
void ClangDiagnosticConfigsWidget::onCopyButtonClicked()
|
||||
{
|
||||
const ClangDiagnosticConfig &config = currentConfig();
|
||||
const ClangDiagnosticConfig &config = selectedConfig();
|
||||
|
||||
bool diaglogAccepted = false;
|
||||
const QString newName = QInputDialog::getText(this,
|
||||
@@ -104,9 +110,19 @@ void ClangDiagnosticConfigsWidget::onCopyButtonClicked()
|
||||
}
|
||||
}
|
||||
|
||||
const ClangDiagnosticConfig &ClangDiagnosticConfigsWidget::selectedConfig() const
|
||||
{
|
||||
return m_diagnosticConfigsModel.at(m_selectedConfigIndex);
|
||||
}
|
||||
|
||||
Core::Id ClangDiagnosticConfigsWidget::selectedConfigId() const
|
||||
{
|
||||
return selectedConfig().id();
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::onRemoveButtonClicked()
|
||||
{
|
||||
m_diagnosticConfigsModel.removeConfigWithId(currentConfigId());
|
||||
m_diagnosticConfigsModel.removeConfigWithId(selectedConfigId());
|
||||
emit customConfigsChanged(customConfigs());
|
||||
|
||||
syncConfigChooserToModel();
|
||||
@@ -114,7 +130,7 @@ void ClangDiagnosticConfigsWidget::onRemoveButtonClicked()
|
||||
|
||||
void ClangDiagnosticConfigsWidget::onClangTidyModeChanged(int index)
|
||||
{
|
||||
ClangDiagnosticConfig config = currentConfig();
|
||||
ClangDiagnosticConfig config = selectedConfig();
|
||||
config.setClangTidyMode(static_cast<ClangDiagnosticConfig::TidyMode>(index));
|
||||
updateConfig(config);
|
||||
syncClangTidyWidgets(config);
|
||||
@@ -123,7 +139,7 @@ void ClangDiagnosticConfigsWidget::onClangTidyModeChanged(int index)
|
||||
void ClangDiagnosticConfigsWidget::onClangTidyItemChanged(QListWidgetItem *item)
|
||||
{
|
||||
const QString prefix = item->text();
|
||||
ClangDiagnosticConfig config = currentConfig();
|
||||
ClangDiagnosticConfig config = selectedConfig();
|
||||
QString checks = config.clangTidyChecksPrefixes();
|
||||
item->checkState() == Qt::Checked
|
||||
? checks.append(',' + prefix)
|
||||
@@ -134,7 +150,7 @@ void ClangDiagnosticConfigsWidget::onClangTidyItemChanged(QListWidgetItem *item)
|
||||
|
||||
void ClangDiagnosticConfigsWidget::onClangTidyLineEdited(const QString &text)
|
||||
{
|
||||
ClangDiagnosticConfig config = currentConfig();
|
||||
ClangDiagnosticConfig config = selectedConfig();
|
||||
config.setClangTidyChecksString(text);
|
||||
updateConfig(config);
|
||||
}
|
||||
@@ -156,7 +172,7 @@ void ClangDiagnosticConfigsWidget::onClazyRadioButtonChanged(bool checked)
|
||||
else if (m_clazyChecks->clazyRadioLevel3->isChecked())
|
||||
checks = "level3";
|
||||
|
||||
ClangDiagnosticConfig config = currentConfig();
|
||||
ClangDiagnosticConfig config = selectedConfig();
|
||||
config.setClazyChecks(checks);
|
||||
updateConfig(config);
|
||||
}
|
||||
@@ -209,13 +225,13 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited()
|
||||
updateValidityWidgets(errorMessage);
|
||||
if (!errorMessage.isEmpty()) {
|
||||
// Remember the entered options in case the user will switch back.
|
||||
m_notAcceptedOptions.insert(currentConfigId(), diagnosticOptions);
|
||||
m_notAcceptedOptions.insert(selectedConfigId(), diagnosticOptions);
|
||||
return;
|
||||
}
|
||||
m_notAcceptedOptions.remove(currentConfigId());
|
||||
m_notAcceptedOptions.remove(selectedConfigId());
|
||||
|
||||
// Commit valid changes
|
||||
ClangDiagnosticConfig updatedConfig = currentConfig();
|
||||
ClangDiagnosticConfig updatedConfig = selectedConfig();
|
||||
updatedConfig.setClangOptions(normalizedOptions);
|
||||
updateConfig(updatedConfig);
|
||||
}
|
||||
@@ -230,9 +246,10 @@ void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &conf
|
||||
{
|
||||
disconnectConfigChooserCurrentIndex();
|
||||
|
||||
const int previousCurrentIndex = m_ui->configChooserComboBox->currentIndex();
|
||||
m_ui->configChooserComboBox->clear();
|
||||
int configToSelectIndex = -1;
|
||||
m_selectedConfigIndex = std::max(std::min(m_selectedConfigIndex,
|
||||
m_diagnosticConfigsModel.size() - 1),
|
||||
0);
|
||||
|
||||
const int size = m_diagnosticConfigsModel.size();
|
||||
for (int i = 0; i < size; ++i) {
|
||||
@@ -242,17 +259,12 @@ void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &conf
|
||||
m_ui->configChooserComboBox->addItem(displayName, config.id().toSetting());
|
||||
|
||||
if (configToSelect == config.id())
|
||||
configToSelectIndex = i;
|
||||
m_selectedConfigIndex = i;
|
||||
}
|
||||
|
||||
connectConfigChooserCurrentIndex();
|
||||
|
||||
if (configToSelectIndex != -1) {
|
||||
m_ui->configChooserComboBox->setCurrentIndex(configToSelectIndex);
|
||||
} else if (previousCurrentIndex != m_ui->configChooserComboBox->currentIndex()) {
|
||||
syncOtherWidgetsToComboBox();
|
||||
emit currentConfigChanged(currentConfigId());
|
||||
}
|
||||
m_ui->configChooserComboBox->setCurrentIndex(m_selectedConfigIndex);
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox()
|
||||
@@ -260,7 +272,7 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox()
|
||||
if (isConfigChooserEmpty())
|
||||
return;
|
||||
|
||||
const ClangDiagnosticConfig &config = currentConfig();
|
||||
const ClangDiagnosticConfig &config = selectedConfig();
|
||||
|
||||
// Update main button row
|
||||
m_ui->removeButton->setEnabled(!config.isReadOnly());
|
||||
@@ -363,11 +375,6 @@ bool ClangDiagnosticConfigsWidget::isConfigChooserEmpty() const
|
||||
return m_ui->configChooserComboBox->count() == 0;
|
||||
}
|
||||
|
||||
const ClangDiagnosticConfig &ClangDiagnosticConfigsWidget::currentConfig() const
|
||||
{
|
||||
return m_diagnosticConfigsModel.configWithId(currentConfigId());
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::setDiagnosticOptions(const QString &options)
|
||||
{
|
||||
if (options != m_clangBaseChecks->diagnosticOptionsTextEdit->document()->toPlainText()) {
|
||||
@@ -464,11 +471,6 @@ void ClangDiagnosticConfigsWidget::disconnectDiagnosticOptionsChanged()
|
||||
&ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited);
|
||||
}
|
||||
|
||||
Core::Id ClangDiagnosticConfigsWidget::currentConfigId() const
|
||||
{
|
||||
return Core::Id::fromSetting(m_ui->configChooserComboBox->currentData());
|
||||
}
|
||||
|
||||
ClangDiagnosticConfigs ClangDiagnosticConfigsWidget::customConfigs() const
|
||||
{
|
||||
const ClangDiagnosticConfigs allConfigs = m_diagnosticConfigsModel.configs();
|
||||
@@ -478,14 +480,6 @@ ClangDiagnosticConfigs ClangDiagnosticConfigsWidget::customConfigs() const
|
||||
});
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::refresh(
|
||||
const ClangDiagnosticConfigsModel &diagnosticConfigsModel,
|
||||
const Core::Id &configToSelect)
|
||||
{
|
||||
m_diagnosticConfigsModel = diagnosticConfigsModel;
|
||||
syncWidgetsToModel(configToSelect);
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsWidget::setupTabs()
|
||||
{
|
||||
m_clangBaseChecks.reset(new CppTools::Ui::ClangBaseChecks);
|
||||
@@ -513,4 +507,33 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user