2009-02-25 09:15:00 +01:00
|
|
|
/**************************************************************************
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-06-17 00:01:27 +10:00
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Commercial Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** 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.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** GNU Lesser General Public License Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** 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.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** If you are unsure which license is appropriate for your use, please
|
2009-06-17 00:01:27 +10:00
|
|
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
**************************************************************************/
|
2008-12-02 16:19:05 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#ifndef QT4PROJECT_H
|
|
|
|
|
#define QT4PROJECT_H
|
|
|
|
|
|
|
|
|
|
#include "qt4nodes.h"
|
|
|
|
|
#include "qmakestep.h"
|
|
|
|
|
#include "makestep.h"
|
2009-04-28 12:43:04 +02:00
|
|
|
#include "qtversionmanager.h"
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include <coreplugin/ifile.h>
|
|
|
|
|
#include <projectexplorer/applicationrunconfiguration.h>
|
|
|
|
|
#include <projectexplorer/projectnodes.h>
|
2009-02-10 15:34:25 +01:00
|
|
|
#include <projectexplorer/toolchain.h>
|
2009-05-04 18:22:40 +02:00
|
|
|
#include <cpptools/cppmodelmanagerinterface.h>
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include <QtCore/QObject>
|
|
|
|
|
#include <QtCore/QList>
|
|
|
|
|
#include <QtCore/QStringList>
|
|
|
|
|
#include <QtCore/QPointer>
|
|
|
|
|
#include <QtGui/QDirModel>
|
|
|
|
|
#include "qtextended_integration.h"
|
|
|
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
|
class IWizard;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace CppTools {
|
|
|
|
|
class ICppCodeModel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
|
class ProFile;
|
|
|
|
|
QT_END_NAMESPACE
|
|
|
|
|
|
|
|
|
|
namespace Qt4ProjectManager {
|
|
|
|
|
|
|
|
|
|
namespace Internal {
|
|
|
|
|
class ProFileReader;
|
|
|
|
|
class DeployHelperRunStep;
|
|
|
|
|
class FileItem;
|
|
|
|
|
class Qt4ProFileNode;
|
|
|
|
|
class Qt4RunConfiguration;
|
|
|
|
|
class GCCPreprocessor;
|
|
|
|
|
struct Qt4ProjectFiles;
|
2009-05-04 18:22:40 +02:00
|
|
|
|
|
|
|
|
class CodeModelInfo
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
QByteArray defines;
|
|
|
|
|
QStringList includes;
|
|
|
|
|
QStringList frameworkPaths;
|
|
|
|
|
};
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class QMakeStep;
|
|
|
|
|
class MakeStep;
|
|
|
|
|
|
|
|
|
|
class Qt4Manager;
|
|
|
|
|
class Qt4Project;
|
|
|
|
|
class Qt4RunStep;
|
|
|
|
|
|
2009-03-19 16:33:44 +01:00
|
|
|
class Qt4ProjectFile : public Core::IFile
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
// needed for createProFileReader
|
|
|
|
|
friend class Internal::Qt4RunConfiguration;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Qt4ProjectFile(Qt4Project *project, const QString &filePath, QObject *parent = 0);
|
|
|
|
|
|
|
|
|
|
bool save(const QString &fileName = QString());
|
|
|
|
|
QString fileName() const;
|
|
|
|
|
|
|
|
|
|
QString defaultPath() const;
|
|
|
|
|
QString suggestedFileName() const;
|
|
|
|
|
virtual QString mimeType() const;
|
|
|
|
|
|
|
|
|
|
bool isModified() const;
|
|
|
|
|
bool isReadOnly() const;
|
|
|
|
|
bool isSaveAsAllowed() const;
|
|
|
|
|
|
|
|
|
|
void modified(Core::IFile::ReloadBehavior *behavior);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const QString m_mimeType;
|
|
|
|
|
Qt4Project *m_project;
|
|
|
|
|
QString m_filePath;
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-19 16:33:44 +01:00
|
|
|
class Qt4Project : public ProjectExplorer::Project
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
explicit Qt4Project(Qt4Manager *manager, const QString &proFile);
|
|
|
|
|
virtual ~Qt4Project();
|
|
|
|
|
|
|
|
|
|
QString name() const;
|
|
|
|
|
Core::IFile *file() const;
|
|
|
|
|
ProjectExplorer::IProjectManager *projectManager() const;
|
|
|
|
|
Qt4Manager *qt4ProjectManager() const;
|
|
|
|
|
|
|
|
|
|
QList<Core::IFile *> dependencies(); //NBS remove
|
|
|
|
|
QList<ProjectExplorer::Project *>dependsOn();
|
|
|
|
|
|
|
|
|
|
bool isApplication() const;
|
|
|
|
|
|
|
|
|
|
Internal::Qt4ProFileNode *rootProjectNode() const;
|
|
|
|
|
|
|
|
|
|
virtual QStringList files(FilesMode fileMode) const;
|
|
|
|
|
|
|
|
|
|
//building environment
|
|
|
|
|
ProjectExplorer::Environment environment(const QString &buildConfiguration) const;
|
|
|
|
|
ProjectExplorer::Environment baseEnvironment(const QString &buildConfiguration) const;
|
|
|
|
|
void setUserEnvironmentChanges(const QString &buildConfig, const QList<ProjectExplorer::EnvironmentItem> &diff);
|
|
|
|
|
QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges(const QString &buildConfig) const;
|
|
|
|
|
bool useSystemEnvironment(const QString &buildConfiguration) const;
|
|
|
|
|
void setUseSystemEnvironment(const QString &buildConfiguration, bool b);
|
|
|
|
|
|
2009-05-26 15:22:11 +02:00
|
|
|
virtual QString buildDirectory(const QString &buildConfiguration) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
// returns the CONFIG variable from the .pro file
|
|
|
|
|
QStringList qmakeConfig() const;
|
|
|
|
|
// returns the qtdir (depends on the current QtVersion)
|
|
|
|
|
QString qtDir(const QString &buildConfiguration) const;
|
|
|
|
|
//returns the qtVersion, if the project is set to use the default qt version, then
|
|
|
|
|
// that is returned
|
|
|
|
|
// to check wheter the project uses the default qt version use qtVersionId
|
2009-04-28 12:43:04 +02:00
|
|
|
QtVersion *qtVersion(const QString &buildConfiguration) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
// returns the id of the qt version, if the project is using the default qt version
|
|
|
|
|
// this function returns 0
|
|
|
|
|
int qtVersionId(const QString &buildConfiguration) const;
|
|
|
|
|
//returns the name of the qt version, might be QString::Null, which means default qt version
|
|
|
|
|
// qtVersion is in general the better method to use
|
|
|
|
|
QString qtVersionName(const QString &buildConfiguration) const;
|
2009-06-09 18:02:23 +02:00
|
|
|
ProjectExplorer::ToolChain *toolChain(const QString &buildConfiguration) const;
|
2009-06-10 15:39:16 +02:00
|
|
|
void setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type);
|
|
|
|
|
ProjectExplorer::ToolChain::ToolChainType toolChainType(const QString &buildConfiguration) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
|
|
|
|
|
QList<ProjectExplorer::BuildStepConfigWidget*> subConfigWidgets();
|
|
|
|
|
|
|
|
|
|
void setQtVersion(const QString &buildConfiguration, int id);
|
|
|
|
|
virtual void newBuildConfiguration(const QString &buildConfiguration);
|
|
|
|
|
|
|
|
|
|
QList<Internal::Qt4ProFileNode *> applicationProFiles() const;
|
|
|
|
|
|
|
|
|
|
// Those functions arein a few places.
|
|
|
|
|
// The drawback is that we shouldn't actually depend on them beeing always there
|
|
|
|
|
// That is generally the stuff that is asked should normally be transfered to
|
|
|
|
|
// Qt4Project *
|
|
|
|
|
// So that we can later enable people to build qt4projects the way they would like
|
2009-07-22 16:52:44 +02:00
|
|
|
QMakeStep *qmakeStep() const;
|
2008-12-02 12:01:29 +01:00
|
|
|
MakeStep *makeStep() const;
|
|
|
|
|
|
2008-12-02 18:14:06 +01:00
|
|
|
void notifyChanged(const QString &name);
|
|
|
|
|
|
2009-03-16 18:13:45 +01:00
|
|
|
QString makeCommand(const QString &buildConfiguration) const;
|
2009-06-05 16:10:26 +02:00
|
|
|
QString defaultMakeTarget(const QString &buildConfiguration) const;
|
2009-03-16 18:13:45 +01:00
|
|
|
|
2009-03-19 15:04:43 +01:00
|
|
|
// Is called by qmakestep qt4configurationwidget if the settings change
|
|
|
|
|
// Informs all Qt4RunConfigurations that their cached values are now invalid
|
|
|
|
|
// the Qt4RunConfigurations will update as soon as asked
|
|
|
|
|
void invalidateCachedTargetInformation();
|
|
|
|
|
|
2009-05-04 18:22:40 +02:00
|
|
|
virtual QByteArray predefinedMacros(const QString &fileName) const;
|
|
|
|
|
virtual QStringList includePaths(const QString &fileName) const;
|
|
|
|
|
virtual QStringList frameworkPaths(const QString &fileName) const;
|
|
|
|
|
|
2009-07-23 18:15:25 +02:00
|
|
|
bool compareBuildConfigurationToImportFrom(const QString &buildConfiguration, const QString &workingDirectory);
|
|
|
|
|
|
2009-06-22 15:51:21 +02:00
|
|
|
signals:
|
|
|
|
|
void targetInformationChanged();
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
public slots:
|
|
|
|
|
void update();
|
|
|
|
|
void proFileParseError(const QString &errorMessage);
|
2009-05-04 18:22:40 +02:00
|
|
|
void scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFileNode *);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
void updateCodeModel();
|
|
|
|
|
void defaultQtVersionChanged();
|
|
|
|
|
void qtVersionsChanged();
|
|
|
|
|
void updateFileList();
|
|
|
|
|
|
|
|
|
|
void foldersAboutToBeAdded(FolderNode *, const QList<FolderNode*> &);
|
|
|
|
|
void checkForNewApplicationProjects();
|
|
|
|
|
void checkForDeletedApplicationProjects();
|
|
|
|
|
void projectTypeChanged(Qt4ProjectManager::Internal::Qt4ProFileNode *node,
|
|
|
|
|
const Qt4ProjectManager::Internal::Qt4ProjectType oldType,
|
|
|
|
|
const Qt4ProjectManager::Internal::Qt4ProjectType newType);
|
|
|
|
|
void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node);
|
|
|
|
|
|
|
|
|
|
protected:
|
2009-07-03 16:46:01 +02:00
|
|
|
virtual bool restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &settingsReader);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static void collectApplicationProFiles(QList<Internal::Qt4ProFileNode *> &list, Internal::Qt4ProFileNode *node);
|
2008-12-02 18:14:06 +01:00
|
|
|
static void findProFile(const QString& fileName, Internal::Qt4ProFileNode *root, QList<Internal::Qt4ProFileNode *> &list);
|
2008-12-05 14:29:18 +01:00
|
|
|
static bool hasSubNode(Internal::Qt4PriFileNode *root, const QString &path);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
QList<Internal::Qt4ProFileNode *> m_applicationProFileChange;
|
|
|
|
|
ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const;
|
|
|
|
|
|
|
|
|
|
void addDefaultBuild();
|
|
|
|
|
|
|
|
|
|
static QString qmakeVarName(ProjectExplorer::FileType type);
|
2009-06-23 14:14:29 +02:00
|
|
|
void updateActiveRunConfiguration();
|
2009-07-14 13:39:47 +02:00
|
|
|
void updateToolChain(const QString &buildConfiguration) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
Qt4Manager *m_manager;
|
|
|
|
|
Internal::Qt4ProFileNode *m_rootProjectNode;
|
|
|
|
|
Internal::Qt4NodesWatcher *m_nodesWatcher;
|
|
|
|
|
|
|
|
|
|
Qt4ProjectFile *m_fileInfo;
|
|
|
|
|
bool m_isApplication;
|
|
|
|
|
|
|
|
|
|
// Current configuration
|
|
|
|
|
QString m_oldQtIncludePath;
|
|
|
|
|
QString m_oldQtLibsPath;
|
|
|
|
|
|
|
|
|
|
// cached lists of all of files
|
|
|
|
|
Internal::Qt4ProjectFiles *m_projectFiles;
|
|
|
|
|
|
|
|
|
|
QTimer m_updateCodeModelTimer;
|
2009-05-04 18:22:40 +02:00
|
|
|
QList<Qt4ProjectManager::Internal::Qt4ProFileNode *> m_proFilesForCodeModelUpdate;
|
|
|
|
|
|
|
|
|
|
QMap<QString, Internal::CodeModelInfo> m_codeModelInfo;
|
2009-06-22 14:00:04 +02:00
|
|
|
mutable ProjectExplorer::ToolChain *m_toolChain;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
friend class Qt4ProjectFile;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace Qt4ProjectManager
|
|
|
|
|
|
|
|
|
|
#endif // QT4PROJECT_H
|