File indexing completed on 2024-05-19 04:40:44

0001 /*
0002     SPDX-FileCopyrightText: 2013 Christoph Thielecke <crissi99@gmx.de>
0003     SPDX-FileCopyrightText: 2016 Anton Anikin <anton.anikin@htower.ru>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "projectconfigpage.h"
0009 #include "ui_projectconfigpage.h"
0010 
0011 #include "projectsettings.h"
0012 
0013 #include <interfaces/iproject.h>
0014 
0015 #include <QFontDatabase>
0016 
0017 namespace cppcheck
0018 {
0019 
0020 ProjectConfigPage::ProjectConfigPage(KDevelop::IPlugin* plugin, KDevelop::IProject* project, QWidget* parent)
0021     : ConfigPage(plugin, new ProjectSettings, parent)
0022     , ui(new Ui::ProjectConfigPage)
0023     , m_parameters(new Parameters(project))
0024 {
0025     configSkeleton()->setSharedConfig(project->projectConfiguration());
0026     configSkeleton()->load();
0027 
0028     ui->setupUi(this);
0029 
0030     ui->commandLine->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
0031 
0032     connect(this, &ProjectConfigPage::changed, this, &ProjectConfigPage::updateCommandLine);
0033     connect(ui->commandLineFilter, &QLineEdit::textChanged, this, &ProjectConfigPage::updateCommandLine);
0034     connect(ui->commandLineBreaks, &QCheckBox::stateChanged, this, &ProjectConfigPage::updateCommandLine);
0035 }
0036 
0037 ProjectConfigPage::~ProjectConfigPage()
0038 {
0039 }
0040 
0041 QIcon ProjectConfigPage::icon() const
0042 {
0043    return QIcon::fromTheme(QStringLiteral("cppcheck"));
0044 }
0045 
0046 void ProjectConfigPage::defaults()
0047 {
0048     ConfigPage::defaults();
0049     updateCommandLine();
0050 }
0051 
0052 void ProjectConfigPage::reset()
0053 {
0054     ConfigPage::reset();
0055     updateCommandLine();
0056 }
0057 
0058 QString ProjectConfigPage::name() const
0059 {
0060     return i18nc("@title:tab", "Cppcheck");
0061 }
0062 
0063 void ProjectConfigPage::updateCommandLine()
0064 {
0065     m_parameters->checkStyle = ui->kcfg_checkStyle->isChecked();
0066     m_parameters->checkPerformance = ui->kcfg_checkPerformance->isChecked();
0067     m_parameters->checkPortability = ui->kcfg_checkPortability->isChecked();
0068     m_parameters->checkInformation = ui->kcfg_checkInformation->isChecked();
0069     m_parameters->checkUnusedFunction = ui->kcfg_checkUnusedFunction->isChecked();
0070     m_parameters->checkMissingInclude = ui->kcfg_checkMissingInclude->isChecked();
0071     m_parameters->inconclusiveAnalysis = ui->kcfg_inconclusiveAnalysis->isChecked();
0072     m_parameters->forceCheck = ui->kcfg_forceCheck->isChecked();
0073     m_parameters->checkConfig = ui->kcfg_checkConfig->isChecked();
0074     m_parameters->useProjectIncludes = ui->kcfg_useProjectIncludes->isChecked();
0075     m_parameters->useSystemIncludes = ui->kcfg_useSystemIncludes->isChecked();
0076     m_parameters->ignoredIncludes = ui->kcfg_ignoredIncludes->text();
0077     m_parameters->extraParameters = ui->kcfg_extraParameters->text().trimmed();
0078 
0079     QString message;
0080     QString commandLine = m_parameters->commandLine(message).join(QLatin1Char(' '));
0081 
0082     if (message.isEmpty()) {
0083         ui->messageWidget->hide();
0084     } else {
0085         ui->messageWidget->setText(message);
0086         ui->messageWidget->show();
0087     }
0088 
0089     if (!ui->commandLineBreaks->isChecked()) {
0090         ui->commandLine->setPlainText(commandLine);
0091         return;
0092     }
0093 
0094     commandLine.replace(QLatin1String(" -"), QLatin1String("\n-"));
0095     QString filterText = ui->commandLineFilter->text();
0096     if (filterText.isEmpty()) {
0097         ui->commandLine->setPlainText(commandLine);
0098         ui->commandLineBreaks->setEnabled(true);
0099         return;
0100     }
0101 
0102     QStringList lines = commandLine.split(QLatin1Char('\n'));
0103     QMutableStringListIterator i(lines);
0104 
0105     while (i.hasNext()) {
0106         if (!i.next().contains(filterText)) {
0107             i.remove();
0108         }
0109     }
0110 
0111     ui->commandLine->setPlainText(lines.join(QLatin1Char('\n')));
0112     ui->commandLineBreaks->setEnabled(false);
0113 }
0114 
0115 }
0116 
0117 #include "moc_projectconfigpage.cpp"