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"