Files
qt-creator/src/plugins/projectexplorer/session.h

137 lines
4.8 KiB
C
Raw Normal View History

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
2008-12-02 16:19:05 +01:00
#pragma once
2008-12-02 12:01:29 +01:00
#include "projectexplorer_export.h"
#include <utils/id.h>
#include <utils/persistentsettings.h>
#include <QDateTime>
#include <QString>
#include <QStringList>
namespace Core { class IEditor; }
2008-12-02 12:01:29 +01:00
namespace ProjectExplorer {
class Project;
class Target;
class BuildConfiguration;
class BuildSystem;
class DeployConfiguration;
class RunConfiguration;
enum class SetActive { Cascade, NoCascade };
2009-01-20 17:14:00 +01:00
class PROJECTEXPLORER_EXPORT SessionManager : public QObject
2008-12-02 12:01:29 +01:00
{
Q_OBJECT
public:
explicit SessionManager(QObject *parent = nullptr);
~SessionManager() override;
2008-12-02 12:01:29 +01:00
static SessionManager *instance();
2008-12-02 12:01:29 +01:00
// higher level session management
static QString activeSession();
static QString lastSession();
static QString startupSession();
static QStringList sessions();
static QDateTime sessionDateTime(const QString &session);
static QDateTime lastActiveTime(const QString &session);
2008-12-02 12:01:29 +01:00
static bool createSession(const QString &session);
2008-12-02 12:01:29 +01:00
static bool confirmSessionDelete(const QStringList &sessions);
static bool deleteSession(const QString &session);
static void deleteSessions(const QStringList &sessions);
2008-12-02 12:01:29 +01:00
static bool cloneSession(const QString &original, const QString &clone);
static bool renameSession(const QString &original, const QString &newName);
2008-12-02 12:01:29 +01:00
static bool loadSession(const QString &session, bool initial = false);
2008-12-02 12:01:29 +01:00
static bool save();
static void closeAllProjects();
2008-12-02 12:01:29 +01:00
static void addProject(Project *project);
static void removeProject(Project *project);
static void removeProjects(const QList<Project *> &remove);
2008-12-02 12:01:29 +01:00
static void setStartupProject(Project *startupProject);
2008-12-02 12:01:29 +01:00
static QList<Project *> dependencies(const Project *project);
static bool hasDependency(const Project *project, const Project *depProject);
static bool canAddDependency(const Project *project, const Project *depProject);
static bool addDependency(Project *project, Project *depProject);
static void removeDependency(Project *project, Project *depProject);
2008-12-02 12:01:29 +01:00
static bool isProjectConfigurationCascading();
static void setProjectConfigurationCascading(bool b);
static void setActiveTarget(Project *p, Target *t, SetActive cascade);
static void setActiveBuildConfiguration(Target *t, BuildConfiguration *bc, SetActive cascade);
static void setActiveDeployConfiguration(Target *t, DeployConfiguration *dc, SetActive cascade);
static Utils::FilePath sessionNameToFileName(const QString &session);
static Project *startupProject();
static Target *startupTarget();
static BuildSystem *startupBuildSystem();
static RunConfiguration *startupRunConfiguration();
2008-12-02 12:01:29 +01:00
static const QList<Project *> projects();
static bool hasProjects();
static bool hasProject(Project *p);
2008-12-02 12:01:29 +01:00
static bool isDefaultVirgin();
static bool isDefaultSession(const QString &session);
2008-12-02 12:01:29 +01:00
// Let other plugins store persistent values within the session file
static void setValue(const QString &name, const QVariant &value);
static QVariant value(const QString &name);
2008-12-02 12:01:29 +01:00
// NBS rewrite projectOrder (dependency management)
static QList<Project *> projectOrder(const Project *project = nullptr);
static Project *projectForFile(const Utils::FilePath &fileName);
static Project *projectWithProjectFilePath(const Utils::FilePath &filePath);
2008-12-02 12:01:29 +01:00
static Utils::FilePaths projectsForSessionName(const QString &session);
2008-12-02 12:01:29 +01:00
static void reportProjectLoadingProgress();
static bool loadingSession();
2008-12-02 12:01:29 +01:00
signals:
void targetAdded(ProjectExplorer::Target *target);
void targetRemoved(ProjectExplorer::Target *target);
void projectAdded(ProjectExplorer::Project *project);
void aboutToRemoveProject(ProjectExplorer::Project *project);
void projectDisplayNameChanged(ProjectExplorer::Project *project);
2008-12-02 12:01:29 +01:00
void projectRemoved(ProjectExplorer::Project *project);
void startupProjectChanged(ProjectExplorer::Project *project);
void aboutToUnloadSession(QString sessionName);
void aboutToLoadSession(QString sessionName);
void sessionLoaded(QString sessionName);
2008-12-02 12:01:29 +01:00
void aboutToSaveSession();
void dependencyChanged(ProjectExplorer::Project *a, ProjectExplorer::Project *b);
2008-12-02 12:01:29 +01:00
void sessionRenamed(const QString &oldName, const QString &newName);
void sessionRemoved(const QString &name);
// for tests only
void projectFinishedParsing(ProjectExplorer::Project *project);
private:
static void saveActiveMode(Utils::Id mode);
static void configureEditor(Core::IEditor *editor, const QString &fileName);
static void markSessionFileDirty();
static void configureEditors(Project *project);
2008-12-02 12:01:29 +01:00
};
} // namespace ProjectExplorer