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

150 lines
5.4 KiB
C
Raw Normal View History

/****************************************************************************
2008-12-02 12:01:29 +01:00
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
2008-12-02 12:01:29 +01:00
**
** This file is part of Qt Creator.
2008-12-02 12:01:29 +01:00
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
2010-12-17 16:01:08 +01:00
**
****************************************************************************/
2008-12-02 16:19:05 +01:00
#pragma once
2008-12-02 12:01:29 +01:00
#include "projectexplorer_export.h"
#include <coreplugin/id.h>
#include <utils/persistentsettings.h>
#include <QString>
#include <QStringList>
#include <QDateTime>
namespace Core { class IEditor; }
2008-12-02 12:01:29 +01:00
namespace ProjectExplorer {
class Project;
class Target;
class BuildConfiguration;
class DeployConfiguration;
2008-12-02 12:01:29 +01:00
class Node;
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 QStringList sessions();
static QDateTime sessionDateTime(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 QString &session);
static bool deleteSession(const QString &session);
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);
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(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::FileName sessionNameToFileName(const QString &session);
static Project *startupProject();
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 = 0);
static Project *projectForNode(Node *node);
static Node *nodeForFile(const Utils::FileName &fileName);
static Project *projectForFile(const Utils::FileName &fileName);
static bool projectContainsFile(Project *p, const Utils::FileName &fileName);
2008-12-02 12:01:29 +01:00
static QStringList 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 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
signals: // for tests only
void projectFinishedParsing(ProjectExplorer::Project *project);
private:
static void saveActiveMode(Core::Id mode);
void clearProjectFileCache();
static void configureEditor(Core::IEditor *editor, const QString &fileName);
static void markSessionFileDirty(bool makeDefaultVirginDirty = true);
static void configureEditors(Project *project);
2008-12-02 12:01:29 +01:00
};
} // namespace ProjectExplorer