#pragma once #include #include #include #include #include class ProjectManager : public QObject { Q_OBJECT public: explicit ProjectManager(QObject *parent = nullptr); ~ProjectManager(); bool openProject(const QString &projectPath); void closeProject(); QString projectPath() const; QString projectName() const; bool hasProject() const; bool isCMakeProject() const; bool isQMakeProject() const; void buildProject(); void cleanProject(); void configureProject(); void runProject(); QString buildDirectory() const; QString sourceDirectory() const; signals: void projectOpened(const QString &projectPath); void projectClosed(); void buildStarted(); void buildFinished(bool success); void buildOutput(const QString &output); private slots: void onBuildProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); void onBuildProcessError(QProcess::ProcessError error); void onBuildOutput(); private: void detectProjectType(); void setupBuildDirectory(); QString findCMakeListsFile(const QString &directory) const; QString findQMakeFile(const QString &directory) const; QString m_projectPath; QString m_projectName; QString m_buildDirectory; enum ProjectType { Unknown, CMake, QMake }; ProjectType m_projectType; QProcess *m_buildProcess; bool m_isBuilding; };