summaryrefslogtreecommitdiff
path: root/src/plugins/genericprojectmanager
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/genericprojectmanager')
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.cpp53
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.h24
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp11
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp35
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h39
-rw-r--r--src/plugins/genericprojectmanager/genericprojectmanager.pro2
-rw-r--r--src/plugins/genericprojectmanager/generictarget.cpp175
-rw-r--r--src/plugins/genericprojectmanager/generictarget.h97
8 files changed, 353 insertions, 83 deletions
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
index 32d64b01f1..ae2ee4b530 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
@@ -31,6 +31,7 @@
#include "genericmakestep.h"
#include "genericproject.h"
+#include "generictarget.h"
#include <utils/qtcassert.h>
@@ -46,18 +47,18 @@ const char * const GENERIC_BC_ID("GenericProjectManager.GenericBuildConfiguratio
const char * const BUILD_DIRECTORY_KEY("GenericProjectManager.GenericBuildConfiguration.BuildDirectory");
}
-GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro)
- : BuildConfiguration(pro, QLatin1String(GENERIC_BC_ID))
+GenericBuildConfiguration::GenericBuildConfiguration(GenericTarget *parent)
+ : BuildConfiguration(parent, QLatin1String(GENERIC_BC_ID))
{
}
-GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &id)
- : BuildConfiguration(pro, id)
+GenericBuildConfiguration::GenericBuildConfiguration(GenericTarget *parent, const QString &id)
+ : BuildConfiguration(parent, id)
{
}
-GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, GenericBuildConfiguration *source) :
- BuildConfiguration(pro, source),
+GenericBuildConfiguration::GenericBuildConfiguration(GenericTarget *parent, GenericBuildConfiguration *source) :
+ BuildConfiguration(parent, source),
m_buildDirectory(source->m_buildDirectory)
{
}
@@ -89,7 +90,7 @@ QString GenericBuildConfiguration::buildDirectory() const
{
QString buildDirectory = m_buildDirectory;
if (buildDirectory.isEmpty()) {
- QFileInfo fileInfo(project()->file()->fileName());
+ QFileInfo fileInfo(target()->project()->file()->fileName());
buildDirectory = fileInfo.absolutePath();
}
@@ -104,9 +105,9 @@ void GenericBuildConfiguration::setBuildDirectory(const QString &buildDirectory)
emit buildDirectoryChanged();
}
-GenericProject *GenericBuildConfiguration::genericProject() const
+GenericTarget *GenericBuildConfiguration::genericTarget() const
{
- return static_cast<GenericProject *>(project());
+ return static_cast<GenericTarget *>(target());
}
@@ -123,9 +124,10 @@ GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory()
{
}
-QStringList GenericBuildConfigurationFactory::availableCreationIds(ProjectExplorer::Project *parent) const
+QStringList GenericBuildConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
{
- Q_UNUSED(parent);
+ if (!qobject_cast<GenericTarget *>(parent))
+ return QStringList();
return QStringList() << QLatin1String(GENERIC_BC_ID);
}
@@ -136,20 +138,20 @@ QString GenericBuildConfigurationFactory::displayNameForId(const QString &id) co
return QString();
}
-bool GenericBuildConfigurationFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+bool GenericBuildConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const QString &id) const
{
- if (!qobject_cast<GenericProject *>(parent))
+ if (!qobject_cast<GenericTarget *>(parent))
return false;
if (id == QLatin1String(GENERIC_BC_ID))
return true;
return false;
}
-BuildConfiguration *GenericBuildConfigurationFactory::create(ProjectExplorer::Project *parent, const QString &id)
+BuildConfiguration *GenericBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const QString &id)
{
if (!canCreate(parent, id))
return 0;
- GenericProject *project(static_cast<GenericProject *>(parent));
+ GenericTarget *target(static_cast<GenericTarget *>(parent));
//TODO asking for name is duplicated everywhere, but maybe more
// wizards will show up, that incorporate choosing the name
@@ -162,41 +164,42 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(ProjectExplorer::Pr
&ok);
if (!ok || buildConfigurationName.isEmpty())
return false;
- GenericBuildConfiguration *bc = new GenericBuildConfiguration(project);
+ GenericBuildConfiguration *bc = new GenericBuildConfiguration(target);
bc->setDisplayName(buildConfigurationName);
- project->addBuildConfiguration(bc); // also makes the name unique...
GenericMakeStep *makeStep = new GenericMakeStep(bc);
bc->insertBuildStep(0, makeStep);
makeStep->setBuildTarget("all", /* on = */ true);
+
+ target->addBuildConfiguration(bc); // also makes the name unique...
return bc;
}
-bool GenericBuildConfigurationFactory::canClone(ProjectExplorer::Project *parent, ProjectExplorer::BuildConfiguration *source) const
+bool GenericBuildConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const
{
return canCreate(parent, source->id());
}
-BuildConfiguration *GenericBuildConfigurationFactory::clone(ProjectExplorer::Project *parent, BuildConfiguration *source)
+BuildConfiguration *GenericBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, BuildConfiguration *source)
{
if (!canClone(parent, source))
return 0;
- GenericProject *project(static_cast<GenericProject *>(parent));
- return new GenericBuildConfiguration(project, qobject_cast<GenericBuildConfiguration *>(source));
+ GenericTarget *target(static_cast<GenericTarget *>(parent));
+ return new GenericBuildConfiguration(target, qobject_cast<GenericBuildConfiguration *>(source));
}
-bool GenericBuildConfigurationFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+bool GenericBuildConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, id);
}
-BuildConfiguration *GenericBuildConfigurationFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+BuildConfiguration *GenericBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
{
if (!canRestore(parent, map))
return 0;
- GenericProject *project(static_cast<GenericProject *>(parent));
- GenericBuildConfiguration *bc(new GenericBuildConfiguration(project));
+ GenericTarget *target(static_cast<GenericTarget *>(parent));
+ GenericBuildConfiguration *bc(new GenericBuildConfiguration(target));
if (bc->fromMap(map))
return bc;
delete bc;
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
index 722ca2e217..f22226f7eb 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
@@ -35,7 +35,7 @@
namespace GenericProjectManager {
namespace Internal {
-class GenericProject;
+class GenericTarget;
class GenericBuildConfigurationFactory;
class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
@@ -44,10 +44,10 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class GenericBuildConfigurationFactory;
public:
- explicit GenericBuildConfiguration(GenericProject *pro);
+ explicit GenericBuildConfiguration(GenericTarget *parent);
virtual ~GenericBuildConfiguration();
- GenericProject *genericProject() const;
+ GenericTarget *genericTarget() const;
virtual ProjectExplorer::Environment environment() const;
virtual QString buildDirectory() const;
@@ -55,8 +55,8 @@ public:
QVariantMap toMap() const;
protected:
- GenericBuildConfiguration(GenericProject *pro, GenericBuildConfiguration *source);
- GenericBuildConfiguration(GenericProject *pro, const QString &id);
+ GenericBuildConfiguration(GenericTarget *parent, GenericBuildConfiguration *source);
+ GenericBuildConfiguration(GenericTarget *parent, const QString &id);
virtual bool fromMap(const QVariantMap &map);
private:
@@ -71,15 +71,15 @@ public:
explicit GenericBuildConfigurationFactory(QObject *parent = 0);
virtual ~GenericBuildConfigurationFactory();
- QStringList availableCreationIds(ProjectExplorer::Project *project) const;
+ QStringList availableCreationIds(ProjectExplorer::Target *parent) const;
QString displayNameForId(const QString &id) const;
- bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Project *parent, const QString &id);
- bool canClone(ProjectExplorer::Project *parent, ProjectExplorer::BuildConfiguration *source) const;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Project *parent, ProjectExplorer::BuildConfiguration *source);
- bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ bool canCreate(ProjectExplorer::Target *parent, const QString &id) const;
+ ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
+ bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const;
+ ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
+ bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
+ ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
};
} // namespace GenericProjectManager
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index 4dd38982b0..a4532c4645 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -30,6 +30,7 @@
#include "genericmakestep.h"
#include "genericprojectconstants.h"
#include "genericproject.h"
+#include "generictarget.h"
#include "ui_genericmakestep.h"
#include "genericbuildconfiguration.h"
@@ -111,8 +112,8 @@ bool GenericMakeStep::init()
setEnvironment(bc->environment());
setOutputParser(new ProjectExplorer::GnuMakeParser(buildDir));
- if (bc->genericProject()->toolChain())
- appendOutputParser(bc->genericProject()->toolChain()->outputParser());
+ if (bc->genericTarget()->genericProject()->toolChain())
+ appendOutputParser(bc->genericTarget()->genericProject()->toolChain()->outputParser());
return AbstractProcessStep::init();
}
@@ -155,7 +156,7 @@ QString GenericMakeStep::makeCommand() const
{
QString command = m_makeCommand;
if (command.isEmpty()) {
- GenericProject *pro = genericBuildConfiguration()->genericProject();
+ GenericProject *pro = genericBuildConfiguration()->genericTarget()->genericProject();
if (ProjectExplorer::ToolChain *toolChain = pro->toolChain())
command = toolChain->makeCommand();
else
@@ -206,8 +207,8 @@ GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeSt
m_ui->setupUi(this);
// TODO update this list also on rescans of the GenericLists.txt
- GenericProject *pro = m_makeStep->genericBuildConfiguration()->genericProject();
- foreach (const QString &target, pro->targets()) {
+ GenericProject *pro = m_makeStep->genericBuildConfiguration()->genericTarget()->genericProject();
+ foreach (const QString &target, pro->buildTargets()) {
QListWidgetItem *item = new QListWidgetItem(target, m_ui->targetsList);
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 6699e126d3..469651b126 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -28,9 +28,10 @@
**************************************************************************/
#include "genericproject.h"
-#include "genericprojectconstants.h"
-#include "genericmakestep.h"
+
#include "genericbuildconfiguration.h"
+#include "genericprojectconstants.h"
+#include "generictarget.h"
#include <projectexplorer/toolchain.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -116,7 +117,7 @@ public:
GenericProject::GenericProject(Manager *manager, const QString &fileName)
: m_manager(manager),
m_fileName(fileName),
- m_buildConfigurationFactory(new GenericBuildConfigurationFactory(this)),
+ m_targetFactory(new GenericTargetFactory(this)),
m_toolChain(0)
{
QFileInfo fileInfo(m_fileName);
@@ -141,9 +142,14 @@ GenericProject::~GenericProject()
delete m_toolChain;
}
-IBuildConfigurationFactory *GenericProject::buildConfigurationFactory() const
+GenericTargetFactory *GenericProject::targetFactory() const
+{
+ return m_targetFactory;
+}
+
+GenericTarget *GenericProject::activeTarget() const
{
- return m_buildConfigurationFactory;
+ return static_cast<GenericTarget *>(Project::activeTarget());
}
QString GenericProject::filesFileName() const
@@ -424,7 +430,7 @@ QStringList GenericProject::files(FilesMode fileMode) const
return m_files; // ### TODO: handle generated files here.
}
-QStringList GenericProject::targets() const
+QStringList GenericProject::buildTargets() const
{
QStringList targets;
targets.append(QLatin1String("all"));
@@ -445,21 +451,8 @@ bool GenericProject::fromMap(const QVariantMap &map)
return false;
// Add default BC:
- if (buildConfigurations().isEmpty()) {
- GenericBuildConfiguration *bc = new GenericBuildConfiguration(this);
- bc->setDisplayName("all");
- addBuildConfiguration(bc);
-
- GenericMakeStep *makeStep = new GenericMakeStep(bc);
- bc->insertBuildStep(0, makeStep);
-
- makeStep->setBuildTarget("all", /* on = */ true);
-
- const QFileInfo fileInfo(file()->fileName());
- bc->setBuildDirectory(fileInfo.absolutePath());
-
- setActiveBuildConfiguration(bc);
- }
+ if (targets().isEmpty())
+ addTarget(targetFactory()->create(this, QLatin1String(GENERIC_DESKTOP_TARGET_ID)));
ToolChain::ToolChainType type =
static_cast<ProjectExplorer::ToolChain::ToolChainType>
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index d54004511f..a4324d1cb8 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -32,30 +32,28 @@
#include "genericprojectmanager.h"
#include "genericprojectnodes.h"
+#include "generictarget.h"
#include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h>
+#include <projectexplorer/target.h>
#include <projectexplorer/buildstep.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/buildconfiguration.h>
#include <coreplugin/ifile.h>
-QT_BEGIN_NAMESPACE
-class QPushButton;
-class QStringListModel;
-QT_END_NAMESPACE
-
namespace Utils {
class PathChooser;
}
namespace GenericProjectManager {
namespace Internal {
+class GenericBuildConfiguration;
class GenericProject;
+class GenericTarget;
+class GenericTargetFactory;
class GenericMakeStep;
class GenericProjectFile;
-class GenericBuildConfiguration;
-class GenericBuildConfigurationFactory;
class GenericProject : public ProjectExplorer::Project
{
@@ -69,23 +67,24 @@ public:
QString includesFileName() const;
QString configFileName() const;
- virtual QString displayName() const;
- virtual QString id() const;
- virtual Core::IFile *file() const;
- virtual ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const;
- virtual ProjectExplorer::IProjectManager *projectManager() const;
+ QString displayName() const;
+ QString id() const;
+ Core::IFile *file() const;
+ GenericTargetFactory *targetFactory() const;
+ ProjectExplorer::IProjectManager *projectManager() const;
+ GenericTarget *activeTarget() const;
- virtual QList<ProjectExplorer::Project *> dependsOn();
+ QList<ProjectExplorer::Project *> dependsOn();
- virtual bool isApplication() const;
+ bool isApplication() const;
- virtual ProjectExplorer::BuildConfigWidget *createConfigWidget();
- virtual QList<ProjectExplorer::BuildConfigWidget*> subConfigWidgets();
+ ProjectExplorer::BuildConfigWidget *createConfigWidget();
+ QList<ProjectExplorer::BuildConfigWidget*> subConfigWidgets();
- virtual GenericProjectNode *rootProjectNode() const;
- virtual QStringList files(FilesMode fileMode) const;
+ GenericProjectNode *rootProjectNode() const;
+ QStringList files(FilesMode fileMode) const;
- QStringList targets() const;
+ QStringList buildTargets() const;
ProjectExplorer::ToolChain *toolChain() const;
bool setFiles(const QStringList &filePaths);
@@ -127,7 +126,7 @@ private:
QString m_configFileName;
GenericProjectFile *m_file;
QString m_projectName;
- GenericBuildConfigurationFactory *m_buildConfigurationFactory;
+ GenericTargetFactory *m_targetFactory;
QStringList m_files;
QStringList m_generated;
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro
index cc7f616424..0c3e3ee304 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.pro
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro
@@ -4,6 +4,7 @@ include(../../qtcreatorplugin.pri)
include(genericprojectmanager_dependencies.pri)
HEADERS = genericproject.h \
genericprojectplugin.h \
+ generictarget.h \
genericprojectmanager.h \
genericprojectconstants.h \
genericprojectnodes.h \
@@ -14,6 +15,7 @@ HEADERS = genericproject.h \
genericbuildconfiguration.h
SOURCES = genericproject.cpp \
genericprojectplugin.cpp \
+ generictarget.cpp \
genericprojectmanager.cpp \
genericprojectnodes.cpp \
genericprojectwizard.cpp \
diff --git a/src/plugins/genericprojectmanager/generictarget.cpp b/src/plugins/genericprojectmanager/generictarget.cpp
new file mode 100644
index 0000000000..a2ec758839
--- /dev/null
+++ b/src/plugins/genericprojectmanager/generictarget.cpp
@@ -0,0 +1,175 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** 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.
+**
+** GNU Lesser General Public License Usage
+**
+** 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "generictarget.h"
+
+#include "genericbuildconfiguration.h"
+#include "genericproject.h"
+#include "genericmakestep.h"
+
+#include <projectexplorer/customexecutablerunconfiguration.h>
+
+#include <QtGui/QApplication>
+#include <QtGui/QStyle>
+
+namespace {
+const char * const GENERIC_DESKTOP_TARGET_DISPLAY_NAME("Desktop");
+}
+
+using namespace GenericProjectManager;
+using namespace GenericProjectManager::Internal;
+
+////////////////////////////////////////////////////////////////////////////////////
+// GenericTarget
+////////////////////////////////////////////////////////////////////////////////////
+
+GenericTarget::GenericTarget(GenericProject *parent) :
+ ProjectExplorer::Target(parent, QLatin1String(GENERIC_DESKTOP_TARGET_ID)),
+ m_buildConfigurationFactory(new GenericBuildConfigurationFactory(this))
+{
+ setDisplayName(QApplication::translate("GenericProjectManager::GenericTarget",
+ GENERIC_DESKTOP_TARGET_DISPLAY_NAME,
+ "Generic desktop target display name"));
+ setIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
+}
+
+GenericTarget::~GenericTarget()
+{
+}
+
+GenericProject *GenericTarget::genericProject() const
+{
+ return static_cast<GenericProject *>(project());
+}
+
+GenericBuildConfigurationFactory *GenericTarget::buildConfigurationFactory() const
+{
+ return m_buildConfigurationFactory;
+}
+
+GenericBuildConfiguration *GenericTarget::activeBuildConfiguration() const
+{
+ return static_cast<GenericBuildConfiguration *>(Target::activeBuildConfiguration());
+}
+
+bool GenericTarget::fromMap(const QVariantMap &map)
+{
+ if (!Target::fromMap(map))
+ return false;
+
+ if (displayName().isEmpty())
+ setDisplayName(QApplication::translate("GenericProjectManager::GenericTarget",
+ GENERIC_DESKTOP_TARGET_DISPLAY_NAME,
+ "Generic desktop target display name"));
+ if (icon().isNull())
+ setIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
+
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////
+// GenericTargetFactory
+////////////////////////////////////////////////////////////////////////////////////
+
+GenericTargetFactory::GenericTargetFactory(QObject *parent) :
+ ITargetFactory(parent)
+{
+}
+
+GenericTargetFactory::~GenericTargetFactory()
+{
+}
+
+QStringList GenericTargetFactory::availableCreationIds(ProjectExplorer::Project *parent) const
+{
+ if (!qobject_cast<GenericProject *>(parent))
+ return QStringList();
+ return QStringList() << QLatin1String(GENERIC_DESKTOP_TARGET_ID);
+}
+
+QString GenericTargetFactory::displayNameForId(const QString &id) const
+{
+ if (id == QLatin1String(GENERIC_DESKTOP_TARGET_ID))
+ return QCoreApplication::translate("GenericProjectManager::GenericTarget",
+ GENERIC_DESKTOP_TARGET_DISPLAY_NAME,
+ "Generic desktop target display name");
+ return QString();
+}
+
+bool GenericTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+{
+ if (!qobject_cast<GenericProject *>(parent))
+ return false;
+ return id == QLatin1String(GENERIC_DESKTOP_TARGET_ID);
+}
+
+GenericTarget *GenericTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
+{
+ if (!canCreate(parent, id))
+ return 0;
+ GenericProject *genericproject = static_cast<GenericProject *>(parent);
+ GenericTarget *t = new GenericTarget(genericproject);
+
+ // Set up BuildConfiguration:
+ GenericBuildConfiguration *bc = new GenericBuildConfiguration(t);
+ bc->setDisplayName("all");
+
+ GenericMakeStep *makeStep = new GenericMakeStep(bc);
+ bc->insertBuildStep(0, makeStep);
+
+ makeStep->setBuildTarget("all", /* on = */ true);
+
+ const QFileInfo fileInfo(genericproject->file()->fileName());
+ bc->setBuildDirectory(fileInfo.absolutePath());
+
+ t->addBuildConfiguration(bc);
+
+ // Add a runconfiguration. The CustomExecutableRC one will query the user
+ // for its settings, so it is a good choice here.
+ t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
+
+ return t;
+}
+
+bool GenericTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+{
+ return canCreate(parent, ProjectExplorer::idFromMap(map));
+}
+
+GenericTarget *GenericTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+ GenericProject *genericproject = static_cast<GenericProject *>(parent);
+ GenericTarget *target = new GenericTarget(genericproject);
+ if (target->fromMap(map))
+ return target;
+ delete target;
+ return 0;
+}
diff --git a/src/plugins/genericprojectmanager/generictarget.h b/src/plugins/genericprojectmanager/generictarget.h
new file mode 100644
index 0000000000..090e321519
--- /dev/null
+++ b/src/plugins/genericprojectmanager/generictarget.h
@@ -0,0 +1,97 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** 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.
+**
+** GNU Lesser General Public License Usage
+**
+** 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef GENERICTARGET_H
+#define GENERICTARGET_H
+
+#include <projectexplorer/target.h>
+
+#include "genericbuildconfiguration.h"
+
+#include <QtCore/QStringList>
+#include <QtCore/QVariantMap>
+
+namespace ProjectExplorer {
+class IBuildConfigurationFactory;
+} // namespace ProjectExplorer
+
+namespace GenericProjectManager {
+
+namespace Internal {
+
+const char * const GENERIC_DESKTOP_TARGET_ID("GenericProjectManager.GenericTarget");
+
+class GenericProject;
+class GenericRunConfiguration;
+
+class GenericTargetFactory;
+
+class GenericTarget : public ProjectExplorer::Target
+{
+ Q_OBJECT
+ friend class GenericTargetFactory;
+
+public:
+ explicit GenericTarget(GenericProject *parent);
+ ~GenericTarget();
+
+ GenericProject *genericProject() const;
+
+ GenericBuildConfigurationFactory *buildConfigurationFactory() const;
+ GenericBuildConfiguration *activeBuildConfiguration() const;
+
+protected:
+ bool fromMap(const QVariantMap &map);
+
+private:
+ GenericBuildConfigurationFactory *m_buildConfigurationFactory;
+};
+
+class GenericTargetFactory : public ProjectExplorer::ITargetFactory
+{
+ Q_OBJECT
+
+public:
+ explicit GenericTargetFactory(QObject *parent = 0);
+ ~GenericTargetFactory();
+
+ QStringList availableCreationIds(ProjectExplorer::Project *parent) const;
+ QString displayNameForId(const QString &id) const;
+
+ bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
+ GenericTarget *create(ProjectExplorer::Project *parent, const QString &id);
+ bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
+ GenericTarget *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+};
+
+} // namespace Internal
+
+} // namespace GenericProjectManager
+
+#endif // GENERICTARGET_H