diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index 72b05bc4d3f..fe66ed5c7df 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -124,6 +124,28 @@ void ClangDiagnosticConfigsWidget::onClangTidyItemChanged(QListWidgetItem *item) updateConfig(config); } +void ClangDiagnosticConfigsWidget::onClazyRadioButtonChanged(bool checked) +{ + if (!checked) + return; + + QString checks; + if (m_clazyChecks->clazyRadioDisabled->isChecked()) + checks = QString(); + else if (m_clazyChecks->clazyRadioLevel0->isChecked()) + checks = "level0"; + else if (m_clazyChecks->clazyRadioLevel1->isChecked()) + checks = "level1"; + else if (m_clazyChecks->clazyRadioLevel2->isChecked()) + checks = "level2"; + else if (m_clazyChecks->clazyRadioLevel3->isChecked()) + checks = "level3"; + + ClangDiagnosticConfig config = currentConfig(); + config.setClazyChecks(checks); + updateConfig(config); +} + static bool isAcceptedWarningOption(const QString &option) { return option == "-w" @@ -267,31 +289,23 @@ void ClangDiagnosticConfigsWidget::syncClangTidyWidgets(const ClangDiagnosticCon void ClangDiagnosticConfigsWidget::syncClazyWidgets(const ClangDiagnosticConfig &config) { const QString clazyChecks = config.clazyChecks(); + + QRadioButton *button = m_clazyChecks->clazyRadioDisabled; if (clazyChecks.isEmpty()) - m_clazyChecks->clazyLevel->setCurrentIndex(0); - else - m_clazyChecks->clazyLevel->setCurrentText(clazyChecks); + button = m_clazyChecks->clazyRadioDisabled; + else if (clazyChecks == "level0") + button = m_clazyChecks->clazyRadioLevel0; + else if (clazyChecks == "level1") + button = m_clazyChecks->clazyRadioLevel1; + else if (clazyChecks == "level2") + button = m_clazyChecks->clazyRadioLevel2; + else if (clazyChecks == "level3") + button = m_clazyChecks->clazyRadioLevel3; + + button->setChecked(true); m_clazyChecksWidget->setEnabled(!config.isReadOnly()); } -void ClangDiagnosticConfigsWidget::setClazyLevelDescription(int index) -{ - // Levels descriptions are taken from https://github.com/KDE/clazy - static const QString levelDescriptions[] { - QString(), - tr("Very stable checks, 99.99% safe, no false-positives."), - tr("Similar to level 0, but sometimes (rarely) there might be\n" - "some false-positives."), - tr("Sometimes has false-positives (20-30%)."), - tr("Not always correct, possibly very noisy, might require\n" - "a knowledgeable developer to review, might have a very big\n" - "rate of false-positives, might have bugs.") - }; - - QTC_ASSERT(m_clazyChecks, return); - m_clazyChecks->levelDescription->setText(levelDescriptions[static_cast(index)]); -} - void ClangDiagnosticConfigsWidget::updateConfig(const ClangDiagnosticConfig &config) { m_diagnosticConfigsModel.appendOrUpdate(config); @@ -353,6 +367,14 @@ void ClangDiagnosticConfigsWidget::disconnectClangTidyItemChanged() this, &ClangDiagnosticConfigsWidget::onClangTidyItemChanged); } +void ClangDiagnosticConfigsWidget::connectClazyRadioButtonClicked(QRadioButton *button) +{ + connect(button, + &QRadioButton::clicked, + this, + &ClangDiagnosticConfigsWidget::onClazyRadioButtonChanged); +} + void ClangDiagnosticConfigsWidget::connectConfigChooserCurrentIndex() { connect(m_ui->configChooserComboBox, @@ -416,17 +438,12 @@ void ClangDiagnosticConfigsWidget::setupTabs() m_clazyChecks.reset(new CppTools::Ui::ClazyChecks); m_clazyChecksWidget = new QWidget(); m_clazyChecks->setupUi(m_clazyChecksWidget); - connect(m_clazyChecks->clazyLevel, - static_cast(&QComboBox::currentIndexChanged), - [this](int index) { - setClazyLevelDescription(index); - ClangDiagnosticConfig config = currentConfig(); - if (index == 0) - config.setClazyChecks(QString()); - else - config.setClazyChecks(m_clazyChecks->clazyLevel->itemText(index)); - updateConfig(config); - }); + + connectClazyRadioButtonClicked(m_clazyChecks->clazyRadioDisabled); + connectClazyRadioButtonClicked(m_clazyChecks->clazyRadioLevel0); + connectClazyRadioButtonClicked(m_clazyChecks->clazyRadioLevel1); + connectClazyRadioButtonClicked(m_clazyChecks->clazyRadioLevel2); + connectClazyRadioButtonClicked(m_clazyChecks->clazyRadioLevel3); m_tidyChecks.reset(new CppTools::Ui::TidyChecks); m_tidyChecksWidget = new QWidget(); diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.h b/src/plugins/cpptools/clangdiagnosticconfigswidget.h index 184885ab3d0..1d57797a561 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.h @@ -35,7 +35,10 @@ #include -QT_FORWARD_DECLARE_CLASS(QListWidgetItem) +QT_BEGIN_NAMESPACE +class QListWidgetItem; +class QRadioButton; +QT_END_NAMESPACE namespace CppTools { @@ -74,6 +77,7 @@ private: void onCopyButtonClicked(); void onRemoveButtonClicked(); void onClangTidyItemChanged(QListWidgetItem *item); + void onClazyRadioButtonChanged(bool checked); void onDiagnosticOptionsEdited(); @@ -83,7 +87,6 @@ private: void syncClangTidyWidgets(const ClangDiagnosticConfig &config); void syncClazyWidgets(const ClangDiagnosticConfig &config); - void setClazyLevelDescription(int index); void updateConfig(const CppTools::ClangDiagnosticConfig &config); bool isConfigChooserEmpty() const; @@ -95,6 +98,8 @@ private: void connectClangTidyItemChanged(); void disconnectClangTidyItemChanged(); + void connectClazyRadioButtonClicked(QRadioButton *button); + void connectConfigChooserCurrentIndex(); void disconnectConfigChooserCurrentIndex(); void connectDiagnosticOptionsChanged(); diff --git a/src/plugins/cpptools/clazychecks.ui b/src/plugins/cpptools/clazychecks.ui index 86a3e049abf..6917cebbfa4 100644 --- a/src/plugins/cpptools/clazychecks.ui +++ b/src/plugins/cpptools/clazychecks.ui @@ -6,8 +6,8 @@ 0 0 - 503 - 73 + 609 + 220 @@ -19,92 +19,73 @@ Form - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - + - - - - 0 - 0 - + + + Each level adds checks to the previous level. For more information, see <a href="https://github.com/KDE/clazy">clazy's homepage</a>. - - 0 + + true - - - Disable - - - - - level0 - - - - - level1 - - - - - level2 - - - - - level3 - - - - - 10 + + + Disabled - - - - - 0 - 0 - - - - - - - - + - - - Qt::Horizontal + + + - - QSizePolicy::Expanding + + Level 0: No false positives + + + + + + + + + + Level 1: Very few false positives + + + + + + + + + + Level 2: More false positives + + + + + + + Not always correct, possibly very noisy, might require a knowledgeable developer to review, might have a very big rate of false-positives, might have bugs. + + + Level 3: Experimental checks + + + + + + + Qt::Vertical - 10 - 20 + 20 + 34