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 }