forked from qt-creator/qt-creator
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:
@@ -59,7 +59,7 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
|
||||
|
||||
using namespace CppTools;
|
||||
|
||||
m_ui.generalConfigurationGroupBox->setVisible(Utils::HostOsInfo::isWindowsHost());
|
||||
m_ui.delayedTemplateParse->setVisible(Utils::HostOsInfo::isWindowsHost());
|
||||
|
||||
m_ui.clangSettings->setCurrentIndex(m_projectSettings.useGlobalConfig() ? 0 : 1);
|
||||
|
||||
@@ -78,8 +78,6 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
|
||||
connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed,
|
||||
this, &ClangProjectSettingsWidget::syncOtherWidgetsToComboBox);
|
||||
|
||||
connectToClangDiagnosticConfigsDialog(m_ui.manageButton);
|
||||
|
||||
syncOtherWidgetsToComboBox();
|
||||
}
|
||||
|
||||
@@ -124,9 +122,13 @@ void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
|
||||
options.contains(QLatin1String{ClangProjectSettings::DelayedTemplateParsing}));
|
||||
|
||||
const bool isCustom = !m_projectSettings.useGlobalConfig();
|
||||
m_ui.generalConfigurationGroupBox->setEnabled(isCustom);
|
||||
m_ui.clangDiagnosticsLabel->setEnabled(isCustom);
|
||||
m_ui.clangDiagnosticConfigsSelectionWidget->setEnabled(isCustom);
|
||||
m_ui.delayedTemplateParse->setEnabled(isCustom);
|
||||
|
||||
for (int i = 0; i < m_ui.clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
|
||||
QWidget *widget = m_ui.clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
|
||||
if (widget)
|
||||
widget->setEnabled(isCustom);
|
||||
}
|
||||
|
||||
refreshDiagnosticConfigsWidgetFromSettings();
|
||||
}
|
||||
|
||||
@@ -35,64 +35,18 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="generalConfigurationGroupBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>General</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="delayedTemplateParse">
|
||||
<property name="toolTip">
|
||||
<string>Parse templates in a MSVC-compliant way. This helps to parse headers for example from Active Template Library (ATL) or Windows Runtime Library (WRL).
|
||||
<widget class="QCheckBox" name="delayedTemplateParse">
|
||||
<property name="toolTip">
|
||||
<string>Parse templates in a MSVC-compliant way. This helps to parse headers for example from Active Template Library (ATL) or Windows Runtime Library (WRL).
|
||||
However, using the relaxed and extended rules means also that no highlighting/completion can be provided within template functions.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable MSVC-compliant template parsing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable MSVC-compliant template parsing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="clangDiagnosticsLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="clangDiagnosticsLabel">
|
||||
<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">
|
||||
<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">
|
||||
|
||||
@@ -62,8 +62,6 @@ ClangToolsConfigWidget::ClangToolsConfigWidget(
|
||||
|
||||
m_ui->clangDiagnosticConfigsSelectionWidget->refresh(settings->savedDiagnosticConfigId());
|
||||
|
||||
CppTools::connectToClangDiagnosticConfigsDialog(m_ui->manageButton);
|
||||
|
||||
connect(m_ui->clangDiagnosticConfigsSelectionWidget,
|
||||
&CppTools::ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
|
||||
this, [this](const Core::Id ¤tConfigId) {
|
||||
|
||||
@@ -62,38 +62,7 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="clangDiagnosticsLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="clangDiagnosticsLabel">
|
||||
<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">
|
||||
<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>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -119,6 +119,4 @@ private:
|
||||
int m_selectedConfigIndex = 0;
|
||||
};
|
||||
|
||||
CPPTOOLS_EXPORT void connectToClangDiagnosticConfigsDialog(QPushButton *button);
|
||||
|
||||
} // CppTools namespace
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user