File indexing completed on 2024-04-28 04:34:26

0001 /*
0002  * Copyright 2015 Laszlo Kis-Adam <laszlo.kis-adam@kdemail.net>
0003  *
0004  * This program is free software; you can redistribute it and/or modify
0005  * it under the terms of the GNU Library General Public License as
0006  * published by the Free Software Foundation; either version 2 of the
0007  * License, or (at your option) any later version.
0008  *
0009  * This program is distributed in the hope that it will be useful,
0010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0012  * GNU General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU General Public
0015  * License along with this program; if not, write to the
0016  * Free Software Foundation, Inc.,
0017  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0018  */
0019 
0020 #include "./krazy2projectsettings.h"
0021 #include <QTabWidget>
0022 #include <QHBoxLayout>
0023 
0024 #include <kdevplatform/interfaces/iproject.h>
0025 #include <kdevplatform/interfaces/icore.h>
0026 #include <kdevplatform/interfaces/iruncontroller.h>
0027 
0028 #include "./selectcheckerswidget.h"
0029 #include "./selectpathswidget.h"
0030 #include "../checkerlistjob.h"
0031 #include "../checker.h"
0032 
0033 #include <QMessageBox>
0034 #include <KLocalizedString>
0035 #include <KConfigGroup>
0036 
0037 
0038 using namespace KDevelop;
0039 
0040 Krazy2ProjectSettings::Krazy2ProjectSettings(KDevelop::IProject *project, QList<const Checker*> *checkers, QWidget *parent)
0041     : ConfigPage(nullptr, nullptr, parent)
0042     , m_tabs(new QTabWidget(this))
0043     , m_project(project)
0044     , m_checkers(checkers)
0045 {
0046     Q_ASSERT(m_project != nullptr);
0047 
0048     auto l = new QHBoxLayout();
0049     l->addWidget(m_tabs);
0050     setLayout(l);
0051 
0052     m_pathsWidget = new SelectPathsWidget(QStringList(), m_tabs);
0053     m_checkersWidget = new SelectCheckersWidget(m_tabs);
0054 
0055     m_tabs->addTab(m_pathsWidget, "Paths");
0056     m_tabs->addTab(m_checkersWidget, "Checkers");
0057 
0058     connect(m_tabs, &QTabWidget::currentChanged, this, &Krazy2ProjectSettings::onTabChanged);
0059 }
0060 
0061 Krazy2ProjectSettings::~Krazy2ProjectSettings()
0062 {
0063 }
0064 
0065 QString Krazy2ProjectSettings::name() const
0066 {
0067     return QStringLiteral("Krazy2");
0068 }
0069 
0070 void Krazy2ProjectSettings::apply()
0071 {
0072     KSharedConfigPtr ptr = m_project->projectConfiguration();
0073     KConfigGroup group = ptr->group("Krazy2");
0074 
0075     group.writeEntry("SelectedPaths", m_pathsWidget->selectedFilesAndDirectories());
0076 
0077     // Save the selected checkers in the following format:
0078     // "filetype;name"
0079     //
0080     // Example:
0081     // "C++;endswithnewline"
0082     QStringList sl;
0083     QList<const Checker*> cl = m_checkersWidget->checkersToRun();
0084     foreach (const Checker *c, cl) {
0085         sl.push_back(c->fileType() + ';' +  c->name());
0086     }
0087 
0088     group.writeEntry("SelectedCheckers", sl);
0089 }
0090 
0091 void Krazy2ProjectSettings::defaults()
0092 {
0093     reset();
0094 }
0095 
0096 void Krazy2ProjectSettings::reset()
0097 {
0098     m_pathsWidget->clearPaths();
0099 
0100     KSharedConfigPtr ptr = m_project->projectConfiguration();
0101     KConfigGroup group = ptr->group("Krazy2");
0102 
0103     if (group.hasKey("SelectedPaths"))
0104         m_pathsWidget->addPaths(group.readEntry("SelectedPaths", QStringList()));
0105 
0106     if (m_checkers->count() > 0) {
0107         if (group.hasKey("SelectedCheckers")) {
0108             QList<const Checker*> cl;
0109             QStringList sl = group.readEntry("SelectedCheckers", QStringList());
0110 
0111             // Find the previously selected checkers
0112             foreach (const QString &s, sl) {
0113                 const Checker *c = findChecker(*m_checkers, s);
0114                 if (c)
0115                     cl.push_back(c);
0116             }
0117 
0118             m_checkersWidget->setCheckers(*m_checkers, cl);
0119         }
0120     }
0121 }
0122 
0123 void Krazy2ProjectSettings::onTabChanged(int idx)
0124 {
0125     if (m_tabs->widget(idx) != m_checkersWidget) {
0126         setCursor(Qt::ArrowCursor);
0127         return;
0128     }
0129 
0130     if (m_checkers->isEmpty()) {
0131         setCursor(Qt::WaitCursor);
0132         return;
0133     }
0134 
0135     setCursor(Qt::ArrowCursor);
0136 
0137     if (!m_checkersWidget->checkersToRun().isEmpty())
0138         return;
0139 
0140     QList<const Checker*> cl;
0141     foreach (const Checker *c, *m_checkers) {
0142         if (!c->isExtra())
0143             cl.push_back(c);
0144     }
0145 
0146     m_checkersWidget->setCheckers(*m_checkers, cl);
0147 }