File indexing completed on 2024-04-21 04:38:10

0001 /*
0002     SPDX-FileCopyrightText: 2018 Anton Anikin <anton@anikin.xyz>
0003     SPDX-FileCopyrightText: 2020 Friedrich W. H. Kossebau <kossebau@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "plugin.h"
0009 
0010 // plugin
0011 #include "checksdb.h"
0012 #include "globalsettings.h"
0013 #include "analyzer.h"
0014 #include "checksetselectionmanager.h"
0015 #include "debug.h"
0016 #include "config/globalconfigpage.h"
0017 #include "config/projectconfigpage.h"
0018 // KDevPlatform
0019 #include <interfaces/contextmenuextension.h>
0020 #include <project/projectconfigpage.h>
0021 // KF
0022 #include <KPluginFactory>
0023 // Qt
0024 #include <QApplication>
0025 
0026 
0027 K_PLUGIN_FACTORY_WITH_JSON(ClazyFactory, "kdevclazy.json",
0028                            registerPlugin<Clazy::Plugin>();)
0029 
0030 namespace Clazy
0031 {
0032 
0033 Plugin::Plugin(QObject* parent, const QVariantList&)
0034     : IPlugin(QStringLiteral("kdevclazy"), parent)
0035     , m_db(nullptr)
0036     , m_checkSetSelectionManager(new CheckSetSelectionManager)
0037 {
0038     setXMLFile(QStringLiteral("kdevclazy.rc"));
0039 
0040     // create after ui.rc file is set with action ids
0041     m_analyzer = new Analyzer(this, m_checkSetSelectionManager, this);
0042 }
0043 
0044 Plugin::~Plugin() = default;
0045 
0046 void Plugin::unload()
0047 {
0048     delete m_checkSetSelectionManager;
0049     m_checkSetSelectionManager = nullptr;
0050     delete m_analyzer;
0051     m_analyzer = nullptr;
0052 }
0053 
0054 KDevelop::ContextMenuExtension Plugin::contextMenuExtension(KDevelop::Context* context, QWidget* parent)
0055 {
0056     KDevelop::ContextMenuExtension extension = KDevelop::IPlugin::contextMenuExtension(context, parent);
0057 
0058     m_analyzer->fillContextMenuExtension(extension, context, parent);
0059 
0060     return extension;
0061 }
0062 
0063 KDevelop::ConfigPage* Plugin::perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options, QWidget* parent)
0064 {
0065     if (m_db.isNull()) {
0066         reloadDB();
0067     }
0068 
0069     return number ? nullptr : new ProjectConfigPage(this, options.project, m_checkSetSelectionManager, parent);
0070 }
0071 
0072 KDevelop::ConfigPage* Plugin::configPage(int number, QWidget* parent)
0073 {
0074     if (m_db.isNull()) {
0075         reloadDB();
0076     }
0077 
0078     return number ? nullptr : new GlobalConfigPage(m_checkSetSelectionManager, m_db, this, parent);
0079 }
0080 
0081 QSharedPointer<const ChecksDB> Plugin::checksDB() const
0082 {
0083     return m_db;
0084 }
0085 
0086 QSharedPointer<const ChecksDB> Plugin::loadedChecksDB()
0087 {
0088     if (m_db.isNull()) {
0089         reloadDB();
0090     }
0091 
0092     return m_db;
0093 }
0094 
0095 void Plugin::reloadDB()
0096 {
0097     m_db.reset(new ChecksDB(GlobalSettings::docsPath()));
0098     connect(GlobalSettings::self(), &GlobalSettings::docsPathChanged, this, &Plugin::reloadDB);
0099 }
0100 
0101 }
0102 
0103 #include "plugin.moc"
0104 #include "moc_plugin.cpp"