File indexing completed on 2024-05-12 04:39:39
0001 /* 0002 SPDX-FileCopyrightText: 2014 Sergey Kalinichev <kalinichev.so.0@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #ifndef COMPILERPROVIDER_H 0008 #define COMPILERPROVIDER_H 0009 0010 #include "icompilerfactory.h" 0011 0012 #include <QVector> 0013 0014 class SettingsManager; 0015 0016 class CompilerProvider : public QObject, public KDevelop::IDefinesAndIncludesManager::Provider 0017 { 0018 Q_OBJECT 0019 0020 public: 0021 explicit CompilerProvider( SettingsManager* settings, QObject* parent = nullptr ); 0022 ~CompilerProvider() override; 0023 0024 KDevelop::Defines defines( const QString& path ) const override; 0025 KDevelop::Defines defines( KDevelop::ProjectBaseItem* item ) const override; 0026 KDevelop::Path::List includes( const QString& path ) const override; 0027 KDevelop::Path::List includes( KDevelop::ProjectBaseItem* item ) const override; 0028 KDevelop::Path::List frameworkDirectories( const QString& path ) const override; 0029 KDevelop::Path::List frameworkDirectories( KDevelop::ProjectBaseItem* item ) const override; 0030 KDevelop::IDefinesAndIncludesManager::Type type() const override; 0031 0032 /// @return current compiler for the @p item 0033 CompilerPointer compilerForItem( KDevelop::ProjectBaseItem* item ) const; 0034 0035 /// @return list of all available compilers 0036 QVector<CompilerPointer> compilers() const; 0037 /** 0038 * Adds compiler to the list of available compilers 0039 * @return true on success (if there is no compiler with the same name registered). 0040 */ 0041 bool registerCompiler(const CompilerPointer& compiler); 0042 /// Removes compiler from the list of available compilers 0043 void unregisterCompiler( const CompilerPointer& compiler ); 0044 0045 /// @return All available factories 0046 QVector<CompilerFactoryPointer> compilerFactories() const; 0047 0048 /// @returns a default compiler 0049 CompilerPointer defaultCompiler() const; 0050 0051 private Q_SLOTS: 0052 void retrieveUserDefinedCompilers(); 0053 void projectChanged(KDevelop::IProject* p); 0054 0055 private: 0056 mutable CompilerPointer m_defaultProvider; 0057 0058 QVector<CompilerPointer> m_compilers; 0059 QVector<CompilerFactoryPointer> m_factories; 0060 0061 SettingsManager* m_settings; 0062 }; 0063 0064 #endif // COMPILERSPROVIDER_H