project.h 6.42 KB
Newer Older
1
/**************************************************************************
con's avatar
con committed
2 3 4
**
** This file is part of Qt Creator
**
5
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
con's avatar
con committed
6 7 8
**
** Contact:  Qt Software Information (qt-info@nokia.com)
**
9
** Commercial Usage
10
**
11 12 13 14
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
15
**
16
** GNU Lesser General Public License Usage
17
**
18 19 20 21 22 23
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
**
25 26
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
con's avatar
con committed
27
**
28
**************************************************************************/
hjk's avatar
hjk committed
29

con's avatar
con committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
#ifndef PROJECT_H
#define PROJECT_H

#include "persistentsettings.h"
#include "projectexplorer_export.h"
#include "buildconfiguration.h"
#include "environment.h"
#include "projectnodes.h"

#include <QtCore/QSharedPointer>
#include <QtCore/QObject>
#include <QtCore/QModelIndex>
#include <QtCore/QFileInfo>
#include <QtGui/QFileSystemModel>
#include <QtGui/QMenu>
#include <QtGui/QIcon>

namespace Core {
48
class IFile;
con's avatar
con committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
}

namespace ProjectExplorer {

class BuildManager;
class BuildStep;
class BuildStepConfigWidget;
class IProjectManager;
class RunConfiguration;
class EditorConfiguration;

class PROJECTEXPLORER_EXPORT Project
    : public QObject
{
    Q_OBJECT

public:
66
    // Roles to be implemented by all models that are exported via model()
con's avatar
con committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
    enum ModelRoles {
        // Absolute file path
        FilePathRole = QFileSystemModel::FilePathRole
    };

    Project();
    virtual ~Project();

    virtual QString name() const = 0;
    virtual Core::IFile *file() const = 0;
    virtual IProjectManager *projectManager() const = 0;

    virtual QList<Project *> dependsOn() = 0; //NBS TODO implement dependsOn

    virtual bool isApplication() const = 0;

83
    // Build/Clean Step functions
con's avatar
con committed
84 85 86 87 88 89 90 91 92
    QList<BuildStep *> buildSteps() const;
    void insertBuildStep(int position, BuildStep *step);
    void removeBuildStep(int position);
    void moveBuildStepUp(int position);

    QList<BuildStep *> cleanSteps() const;
    void insertCleanStep(int position, BuildStep *step);
    void removeCleanStep(int position);

93
    // Build configuration
con's avatar
con committed
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
    void addBuildConfiguration(const QString &name);
    void removeBuildConfiguration(const QString  &name);
    void copyBuildConfiguration(const QString &source, const QString &dest);
    QStringList buildConfigurations() const;
    QString displayNameFor(const QString &buildConfiguration);
    void setDisplayNameFor(const QString &buildConfiguration, const QString &displayName);

    QString activeBuildConfiguration() const;
    void setActiveBuildConfiguration(const QString& config);

    void setValue(const QString &name, const QVariant &value);
    QVariant value(const QString &name) const;

    void setValue(const QString &buildConfiguration, const QString &name, const QVariant &value);
    QVariant value(const QString &buildConfiguration, const QString &name) const;

    // Running
    QList<QSharedPointer<RunConfiguration> > runConfigurations() const;
    void addRunConfiguration(QSharedPointer<RunConfiguration> runConfiguration);
    void removeRunConfiguration(QSharedPointer<RunConfiguration> runConfiguration);

    QSharedPointer<RunConfiguration> activeRunConfiguration() const;
    void setActiveRunConfiguration(QSharedPointer<RunConfiguration> runConfiguration);

    EditorConfiguration *editorConfiguration() const;

    virtual Environment environment(const QString &buildConfiguration) const = 0;
    virtual QString buildDirectory(const QString &buildConfiguration) const = 0;

    void saveSettings();
    void restoreSettings();

    virtual BuildStepConfigWidget *createConfigWidget() = 0;
    virtual QList<BuildStepConfigWidget*> subConfigWidgets();

129 130 131
    /* This method is called for new build configurations. You should probably
     * set some default values in this method.
     */
con's avatar
con committed
132 133 134 135 136 137 138 139 140 141 142
    virtual void newBuildConfiguration(const QString &buildConfiguration) = 0;

    virtual ProjectNode *rootProjectNode() const = 0;

    enum FilesMode { AllFiles, ExcludeGeneratedFiles };
    virtual QStringList files(FilesMode fileMode) const = 0;

signals:
    void fileListChanged();
    void activeBuildConfigurationChanged();
    void activeRunConfigurationChanged();
143 144
    void removedRunConfiguration(const QString &name);
    void addedRunConfiguration(const QString &name);
con's avatar
con committed
145 146 147 148
    // This signal is jut there for updating the tree list in the buildsettings wizard
    void buildConfigurationDisplayNameChanged(const QString &buildConfiguraiton);

protected:
149 150 151 152 153 154 155
    /* This method is called when the project .user file is saved. Simply call
     * writer.saveValue() for each value you want to save. Make sure to always
     * call your base class implementation.
     *
     * Note: All the values from the project/buildsteps and buildconfigurations
     * are automatically stored.
     */
con's avatar
con committed
156 157
    virtual void saveSettingsImpl(PersistentSettingsWriter &writer);

158 159 160 161 162 163 164
    /* This method is called when the project is opened. You can retrieve all
     * the values you saved in saveSettingsImpl() in this method.
     *
     * Note: This function is also called if there is no .user file. You should
     * probably add some default build and run settings to the project so that
     * it can be build and run.
     */
con's avatar
con committed
165 166 167
    virtual void restoreSettingsImpl(PersistentSettingsReader &reader);

private:
168
    Internal::BuildConfiguration *getBuildConfiguration(const QString & name) const;
con's avatar
con committed
169 170 171 172 173

    QList<BuildStep *> m_buildSteps;
    QList<BuildStep *> m_cleanSteps;
    QStringList m_buildConfigurations;
    QMap<QString, QVariant> m_values;
174
    QList<Internal::BuildConfiguration *> m_buildConfigurationValues;
con's avatar
con committed
175 176 177 178 179 180
    QString m_activeBuildConfiguration;
    QList<QSharedPointer<RunConfiguration> > m_runConfigurations;
    QSharedPointer<RunConfiguration> m_activeRunConfiguration;
    EditorConfiguration *m_editorConfiguration;
};

hjk's avatar
hjk committed
181
} // namespace ProjectExplorer
con's avatar
con committed
182

183
#endif // PROJECT_H