diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-05-14 10:30:09 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-05-14 09:05:37 +0000 |
commit | 53d790606132989c25514879ac3f9e2b8264b46b (patch) | |
tree | ce4d235bb2d0c0717f43fc14e0aea14085950579 /src | |
parent | f46fb39f3c77cb50701ee1fb1dc992c466cef300 (diff) |
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>
Diffstat (limited to 'src')
10 files changed, 86 insertions, 175 deletions
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp index 6b25d99ecf..f8fcd68bab 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp @@ -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(); } diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui index 00a0fe4332..88177c235f 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui @@ -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> + <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="title"> - <string>General</string> + <property name="text"> + <string>Enable MSVC-compliant template parsing</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). -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> </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"> diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.cpp b/src/plugins/clangtools/clangtoolsconfigwidget.cpp index 45e7b4041c..313c343194 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.cpp +++ b/src/plugins/clangtools/clangtoolsconfigwidget.cpp @@ -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) { diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.ui b/src/plugins/clangtools/clangtoolsconfigwidget.ui index 6d78aad6f4..1119a74532 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.ui +++ b/src/plugins/clangtools/clangtoolsconfigwidget.ui @@ -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> diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp index e3038d3aa3..d4efc67f5a 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp @@ -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 { +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) - : QComboBox(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()); diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h index 597f11918a..abcdacf365 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h @@ -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 diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index 6da9616e43..54acaa8304 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -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 diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.h b/src/plugins/cpptools/clangdiagnosticconfigswidget.h index 4fbdd2ec40..545f9cdebb 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.h @@ -119,6 +119,4 @@ private: int m_selectedConfigIndex = 0; }; -CPPTOOLS_EXPORT void connectToClangDiagnosticConfigsDialog(QPushButton *button); - } // CppTools namespace diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index 91706470fd..c404c433d0 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -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( diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui index e706fba256..4330ac268a 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.ui +++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui @@ -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"> |