ClangTools: Polish ClangDiagnosticConfigsWidget

* Improve distinction between built-in and custom configs by introducing
  corresponding parent nodes
* Add button to rename a config
* Make closing the dialog apply the selected config.
* Adapt also the related ClangDiagnosticConfigsSelectionWidget showing a
  combo box of the diagnostic configs and a "Manage..." button: Remove
  the combo box and show the current config as the button text.

Change-Id: Ic015df37f2532f84bd7da6cd20bfce07799a97b8
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-10-01 16:53:01 +02:00
parent 0a15b001dd
commit 3090e744c2
21 changed files with 312 additions and 335 deletions

View File

@@ -25,6 +25,9 @@
#include "clangprojectsettings.h"
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h>
#include <utils/qtcassert.h>
#include <utils/hostosinfo.h>
@@ -74,6 +77,9 @@ ClangProjectSettings::ClangProjectSettings(ProjectExplorer::Project *project)
Core::Id ClangProjectSettings::warningConfigId() const
{
const CppTools::ClangDiagnosticConfigsModel model = CppTools::diagnosticConfigsModel();
if (!model.hasConfigWithId(m_warningConfigId))
return CppTools::codeModelSettings()->defaultClangDiagnosticConfigId();
return m_warningConfigId;
}

View File

@@ -44,12 +44,7 @@ static Core::Id configIdForProject(ClangProjectSettings &projectSettings)
{
if (projectSettings.useGlobalConfig())
return CppTools::codeModelSettings()->clangDiagnosticConfigId();
Core::Id configId = projectSettings.warningConfigId();
if (!configId.isValid()) {
configId = CppTools::codeModelSettings()->clangDiagnosticConfigId();
projectSettings.setWarningConfigId(configId);
}
return configId;
return projectSettings.warningConfigId();
}
ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project)
@@ -62,19 +57,20 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
m_ui.delayedTemplateParseCheckBox->setVisible(Utils::HostOsInfo::isWindowsHost());
connect(m_ui.clangDiagnosticConfigsSelectionWidget,
&ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
this, &ClangProjectSettingsWidget::onCurrentWarningConfigChanged);
connect(m_ui.clangDiagnosticConfigsSelectionWidget,
&ClangDiagnosticConfigsSelectionWidget::diagnosticConfigsEdited,
this, [this](const ClangDiagnosticConfigs &configs){
QSharedPointer<CppCodeModelSettings> cmSettings = CppTools::codeModelSettings();
const ClangDiagnosticConfigsModel configsModel = CppTools::diagnosticConfigsModel(configs);
if (!configsModel.hasConfigWithId(cmSettings->clangDiagnosticConfigId()))
cmSettings->resetClangDiagnosticConfigId();
cmSettings->setClangCustomDiagnosticConfigs(configs);
cmSettings->toSettings(Core::ICore::settings());
refreshDiagnosticConfigsWidgetFromSettings();
});
&ClangDiagnosticConfigsSelectionWidget::changed,
this,
[this]() {
// Save project's config id
const Core::Id currentConfigId = m_ui.clangDiagnosticConfigsSelectionWidget
->currentConfigId();
m_projectSettings.setWarningConfigId(currentConfigId);
// Save global custom configs
const ClangDiagnosticConfigs configs = m_ui.clangDiagnosticConfigsSelectionWidget
->customConfigs();
CppTools::codeModelSettings()->setClangCustomDiagnosticConfigs(configs);
CppTools::codeModelSettings()->toSettings(Core::ICore::settings());
});
connect(m_ui.delayedTemplateParseCheckBox, &QCheckBox::toggled,
this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
@@ -92,14 +88,6 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
syncWidgets();
}
void ClangProjectSettingsWidget::onCurrentWarningConfigChanged(const Core::Id &currentConfigId)
{
// Don't save it when we reset the global config in code
if (m_projectSettings.useGlobalConfig())
return;
m_projectSettings.setWarningConfigId(currentConfigId);
}
void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked)
{
// Don't save it when we reset the global config in code
@@ -152,11 +140,6 @@ void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
widget->setEnabled(isCustom);
}
refreshDiagnosticConfigsWidgetFromSettings();
}
void ClangProjectSettingsWidget::refreshDiagnosticConfigsWidgetFromSettings()
{
m_ui.clangDiagnosticConfigsSelectionWidget->refresh(CppTools::diagnosticConfigsModel(),
configIdForProject(m_projectSettings),
/*showTidyClazyUi=*/false);

View File

@@ -44,7 +44,6 @@ public:
explicit ClangProjectSettingsWidget(ProjectExplorer::Project *project);
private:
void onCurrentWarningConfigChanged(const Core::Id &currentConfigId);
void onDelayedTemplateParseClicked(bool);
void onGlobalCustomChanged(int index);
void onAboutToSaveProjectSettings();
@@ -53,8 +52,6 @@ private:
void syncGlobalCustomComboBox();
void syncOtherWidgetsToComboBox();
void refreshDiagnosticConfigsWidgetFromSettings();
private:
Ui::ClangProjectSettingsWidget m_ui;
ClangProjectSettings &m_projectSettings;