File indexing completed on 2024-04-28 04:38:28

0001 /*
0002     SPDX-FileCopyrightText: 2014 Sergey Kalinichev <kalinichev.so.0@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef CUSTOMDEFINESANDINCLUDESMANAGER_H
0008 #define CUSTOMDEFINESANDINCLUDESMANAGER_H
0009 
0010 #include <QVariantList>
0011 #include <QVector>
0012 #include <QScopedPointer>
0013 
0014 #include <interfaces/iplugin.h>
0015 
0016 #include "idefinesandincludesmanager.h"
0017 
0018 #include "compilerprovider/settingsmanager.h"
0019 
0020 class CompilerProvider;
0021 class NoProjectIncludePathsManager;
0022 
0023 /// @brief: Class for retrieving custom defines and includes.
0024 class DefinesAndIncludesManager : public KDevelop::IPlugin, public KDevelop::IDefinesAndIncludesManager
0025 {
0026     Q_OBJECT
0027     Q_INTERFACES( KDevelop::IDefinesAndIncludesManager )
0028 
0029 public:
0030     explicit DefinesAndIncludesManager( QObject* parent, const QVariantList& args = QVariantList() );
0031     ~DefinesAndIncludesManager() override;
0032 
0033     ///@return list of all custom defines for @p item
0034     KDevelop::Defines defines( KDevelop::ProjectBaseItem* item, Type type ) const override;
0035     ///@return list of all custom includes for @p item
0036     KDevelop::Path::List includes( KDevelop::ProjectBaseItem* item, Type type  ) const override;
0037     ///@return list of all custom framework directories for @p item
0038     KDevelop::Path::List frameworkDirectories( KDevelop::ProjectBaseItem* item, Type type ) const override;
0039 
0040     KDevelop::Defines defines( const QString& path, Type type = All ) const override;
0041     KDevelop::Path::List includes( const QString& path, Type type = All ) const override;
0042     KDevelop::Path::List frameworkDirectories(const QString& path, Type type = All) const override;
0043 
0044     void registerProvider( Provider* provider ) override;
0045     bool unregisterProvider( Provider* provider ) override;
0046 
0047     KDevelop::Path::List includesInBackground( const QString& path ) const override;
0048     KDevelop::Path::List frameworkDirectoriesInBackground( const QString& path ) const override;
0049     KDevelop::Defines definesInBackground(const QString& path) const override;
0050 
0051     void registerBackgroundProvider(BackgroundProvider* provider) override;
0052     bool unregisterBackgroundProvider(BackgroundProvider* provider) override;
0053 
0054     QString parserArguments(KDevelop::ProjectBaseItem* item) const override;
0055     QString parserArguments(const QString& path) const override;
0056     QString parserArgumentsInBackground(const QString& path) const override;
0057 
0058     void openConfigurationDialog( const QString& pathToFile ) override;
0059     int perProjectConfigPages() const override;
0060     KDevelop::ConfigPage* perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options,
0061                                                        QWidget* parent) override;
0062 
0063     KDevelop::ConfigPage* configPage(int number, QWidget *parent) override;
0064     int configPages() const override;
0065 
0066 private:
0067     QVector<Provider*> m_providers;
0068     QVector<BackgroundProvider*> m_backgroundProviders;
0069     SettingsManager* m_settings;
0070     QScopedPointer<NoProjectIncludePathsManager> m_noProjectIPM;
0071     KDevelop::Path::List m_defaultFrameworkDirectories;
0072 };
0073 
0074 #endif // CUSTOMDEFINESANDINCLUDESMANAGER_H