File indexing completed on 2024-05-12 04:39:22

0001 /*
0002     SPDX-FileCopyrightText: 2018 Friedrich W. H. Kossebau <kossebau@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "config/clangtidyprojectconfigpage.h"
0008 
0009 // plugin
0010 #include "checksetselectionmanager.h"
0011 #include <debug.h>
0012 #include <checkset.h>
0013 #include <clangtidyprojectconfig.h>
0014 // KDevPlatform
0015 #include <interfaces/iproject.h>
0016 
0017 namespace ClangTidy
0018 {
0019 
0020 ProjectConfigPage::ProjectConfigPage(KDevelop::IPlugin* plugin,
0021                                      KDevelop::IProject* project,
0022                                      CheckSetSelectionManager* checkSetSelectionManager,
0023                                      const CheckSet* checkSet,
0024                                      QWidget* parent)
0025     : KDevelop::ConfigPage(plugin, nullptr, parent)
0026     , m_project(project)
0027     , m_checkSetSelections(checkSetSelectionManager->checkSetSelections())
0028     , m_defaultCheckSetSelectionId(checkSetSelectionManager->defaultCheckSetSelectionId())
0029 {
0030     m_settings = new ClangTidyProjectSettings;
0031     m_settings->setSharedConfig(project->projectConfiguration());
0032     m_settings->load();
0033     setConfigSkeleton(m_settings);
0034 
0035     m_ui.setupUi(this);
0036 
0037     m_ui.kcfg_checkSetSelection->setCheckSetSelections(m_checkSetSelections, m_defaultCheckSetSelectionId);
0038     m_ui.enabledChecks->setCheckSet(checkSet);
0039 
0040     connect(m_ui.kcfg_checkSetSelection, &CheckSetSelectionComboBox::selectionChanged,
0041             this, &ProjectConfigPage::onSelectionChanged);
0042     connect(m_ui.enabledChecks, &CheckSelection::checksChanged,
0043             this, &ProjectConfigPage::onChecksChanged);
0044 }
0045 
0046 ProjectConfigPage::~ProjectConfigPage() = default;
0047 
0048 KDevelop::ConfigPage::ConfigPageType ProjectConfigPage::configPageType() const
0049 {
0050     return ConfigPage::AnalyzerConfigPage;
0051 }
0052 
0053 QString ProjectConfigPage::name() const
0054 {
0055     return i18nc("@title:tab", "Clang-Tidy");
0056 }
0057 
0058 QIcon ProjectConfigPage::icon() const
0059 {
0060     return QIcon::fromTheme(QStringLiteral("dialog-ok"));
0061 }
0062 
0063 void ProjectConfigPage::defaults()
0064 {
0065     ConfigPage::defaults();
0066 
0067     onSelectionChanged(m_ui.kcfg_checkSetSelection->selection());
0068 }
0069 
0070 void ProjectConfigPage::reset()
0071 {
0072     ConfigPage::reset();
0073 
0074     onSelectionChanged(m_ui.kcfg_checkSetSelection->selection());
0075 }
0076 
0077 void ProjectConfigPage::apply()
0078 {
0079     ConfigPage::apply();
0080 }
0081 
0082 void ProjectConfigPage::onSelectionChanged(const QString& selectionId)
0083 {
0084     QString checks;
0085     bool editable = false;
0086     if (selectionId.isEmpty()) {
0087         checks = m_ui.kcfg_enabledChecks->checks();
0088         editable = true;
0089     } else {
0090         const  QString effectiveSelectionId = (selectionId == QLatin1String("Default")) ? m_defaultCheckSetSelectionId : selectionId;
0091         for (auto& selection : m_checkSetSelections) {
0092             if (selection.id() == effectiveSelectionId) {
0093                 checks = selection.selectionAsString();
0094                 break;
0095             }
0096         }
0097     }
0098 
0099     m_ui.enabledChecks->setEditable(editable);
0100     m_ui.enabledChecks->setChecks(checks);
0101 }
0102 
0103 void ProjectConfigPage::onChecksChanged(const QString& checks)
0104 {
0105     const bool isCustomSelected =  m_ui.kcfg_checkSetSelection->selection().isEmpty();
0106     if (!isCustomSelected) {
0107         return;
0108     }
0109 
0110     m_ui.kcfg_enabledChecks->setChecks(checks);
0111 }
0112 
0113 } // namespace ClangTidy
0114 
0115 #include "moc_clangtidyprojectconfigpage.cpp"