File indexing completed on 2024-05-05 04:40:21
0001 /* 0002 SPDX-FileCopyrightText: 2006 Andreas Pakulat <apaku@gmx.de> 0003 SPDX-FileCopyrightText: 2010 Milian Wolff <mail@milianw.de> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef QMAKEMANAGER_H 0009 #define QMAKEMANAGER_H 0010 0011 #include <project/interfaces/ibuildsystemmanager.h> 0012 #include <project/abstractfilemanagerplugin.h> 0013 0014 class QMakeFolderItem; 0015 class IQMakeBuilder; 0016 class QMakeCache; 0017 class QMakeProjectFile; 0018 0019 class QMakeProjectManager : public KDevelop::AbstractFileManagerPlugin, public KDevelop::IBuildSystemManager 0020 { 0021 Q_OBJECT 0022 Q_INTERFACES( KDevelop::IBuildSystemManager ) 0023 0024 public: 0025 explicit QMakeProjectManager( QObject* parent = nullptr, const QVariantList& args = QVariantList() ); 0026 0027 ~QMakeProjectManager() override; 0028 0029 KDevelop::ContextMenuExtension contextMenuExtension(KDevelop::Context* context, QWidget* parent) override; 0030 0031 //BEGIN AbstractFileManager 0032 KDevelop::ProjectFolderItem* import( KDevelop::IProject* project ) override; 0033 KDevelop::ProjectFolderItem* createFolderItem( KDevelop::IProject* project, const KDevelop::Path& path, 0034 KDevelop::ProjectBaseItem* parent = nullptr ) override; 0035 Features features() const override; 0036 bool isValid( const KDevelop::Path& path, const bool isFolder, KDevelop::IProject* project ) const override; 0037 //END AbstractFileManager 0038 0039 //BEGIN IBuildSystemManager 0040 //TODO 0041 KDevelop::IProjectBuilder* builder() const override; 0042 KDevelop::Path buildDirectory(KDevelop::ProjectBaseItem*) const override; 0043 KDevelop::Path::List collectDirectories(KDevelop::ProjectBaseItem*, const bool collectIncludes=true) const; 0044 KDevelop::Path::List includeDirectories(KDevelop::ProjectBaseItem*) const override; 0045 KDevelop::Path::List frameworkDirectories(KDevelop::ProjectBaseItem* item) const override; 0046 QHash<QString,QString> defines(KDevelop::ProjectBaseItem*) const override; 0047 QString extraArguments(KDevelop::ProjectBaseItem *item) const override; 0048 bool hasBuildInfo(KDevelop::ProjectBaseItem*) const override; 0049 0050 KDevelop::ProjectTargetItem* createTarget( const QString&, KDevelop::ProjectFolderItem* ) override 0051 { 0052 return nullptr; 0053 } 0054 0055 bool addFilesToTarget(const QList<KDevelop::ProjectFileItem*>&, KDevelop::ProjectTargetItem*) override 0056 { 0057 return false; 0058 } 0059 0060 bool removeTarget( KDevelop::ProjectTargetItem* ) override 0061 { 0062 return false; 0063 } 0064 0065 bool removeFilesFromTargets(const QList<KDevelop::ProjectFileItem*>&) override 0066 { 0067 return false; 0068 } 0069 0070 QList<KDevelop::ProjectTargetItem*> targets(KDevelop::ProjectFolderItem*) const override; 0071 0072 KDevelop::Path compiler(KDevelop::ProjectTargetItem* item) const override; 0073 //END IBuildSystemManager 0074 0075 private Q_SLOTS: 0076 void slotFolderAdded( KDevelop::ProjectFolderItem* folder ); 0077 void slotRunQMake(); 0078 void slotDirty(const QString& path); 0079 0080 private: 0081 KDevelop::ProjectFolderItem* projectRootItem( KDevelop::IProject* project, const KDevelop::Path& path ); 0082 KDevelop::ProjectFolderItem* buildFolderItem( KDevelop::IProject* project, const KDevelop::Path& path, 0083 KDevelop::ProjectBaseItem* parent ); 0084 QMakeCache* findQMakeCache( KDevelop::IProject* project, const KDevelop::Path &path = {} ) const; 0085 0086 IQMakeBuilder* m_builder = nullptr; 0087 mutable QString m_qtIncludeDir; 0088 QAction* m_runQMake = nullptr; 0089 QMakeFolderItem* m_actionItem; 0090 }; 0091 0092 #endif 0093