Refactor deployment

* Add a DeployConfiguration class to hold settings related
   to deployment.
 * Add BuildStepsList to hold a list of buildsteps
 * Update BuildConfiguration to use BuildStepLists instead of
   manageing lists of buildsteps itself.
 * Update BuildManager to use BuildStepLists in its interfaces
 * Fix fallout introduced by API changes
 * Update .user file to new way of storing settings

Task-number: QTCREATORBUG-1427
Task-number: QTCREATORBUG-1428
Task-number: QTCREATORBUG-1811
Task-number: QTCREATORBUG-1930
This commit is contained in:
Tobias Hunger
2010-07-16 14:00:41 +02:00
parent cc93a08b1b
commit ee4a04a20b
81 changed files with 2469 additions and 1057 deletions
@@ -34,6 +34,7 @@
#include "cmaketarget.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/buildsteplist.h>
#include <utils/qtcassert.h>
#include <QtGui/QInputDialog>
@@ -61,6 +62,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeTarget *parent, CMakeBuild
m_buildDirectory(source->m_buildDirectory),
m_msvcVersion(source->m_msvcVersion)
{
Q_ASSERT(parent);
cloneSteps(source);
}
@@ -217,11 +219,14 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer:
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(cmtarget);
bc->setDisplayName(buildConfigurationName);
MakeStep *makeStep = new MakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Build, 0, makeStep);
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
MakeStep *cleanMakeStep = new MakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Clean, 0, cleanMakeStep);
MakeStep *makeStep = new MakeStep(buildSteps);
buildSteps->insertStep(0, makeStep);
MakeStep *cleanMakeStep = new MakeStep(cleanSteps);
cleanSteps->insertStep(0, cleanMakeStep);
cleanMakeStep->setAdditionalArguments(QStringList() << "clean");
cleanMakeStep->setClean(true);
@@ -38,6 +38,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/buildenvironmentwidget.h>
#include <projectexplorer/buildsteplist.h>
#include <cpptools/cppmodelmanagerinterface.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/qtcassert.h>
@@ -410,7 +411,7 @@ QString CMakeProject::displayName() const
QString CMakeProject::id() const
{
return QLatin1String("CMakeProjectManager.CMakeProject");
return QLatin1String(Constants::CMAKEPROJECT_ID);
}
Core::IFile *CMakeProject::file() const
@@ -521,7 +522,7 @@ bool CMakeProject::fromMap(const QVariantMap &map)
if (!hasUserFile && hasBuildTarget("all")) {
MakeStep *makeStep = qobject_cast<MakeStep *>(
activeTarget()->activeBuildConfiguration()->steps(ProjectExplorer::BuildStep::Build).at(0));
activeTarget()->activeBuildConfiguration()->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->at(0));
Q_ASSERT(makeStep);
makeStep->setBuildTarget("all", true);
}
@@ -38,6 +38,10 @@ const char * const CMAKEMIMETYPE = "text/x-cmake"; // TOOD check that this is c
const char * const CMAKE_EDITOR_ID = "CMakeProject.CMakeEditor";
const char * const CMAKE_EDITOR_DISPLAY_NAME = "CMake Editor";
const char * const C_CMAKEEDITOR = "CMakeProject.Context.CMakeEditor";
// Project
const char * const CMAKEPROJECT_ID = "CMakeProjectManager.CMakeProject";
} // namespace Constants
} // namespace CMakeProjectManager
@@ -34,7 +34,10 @@
#include "cmakerunconfiguration.h"
#include "cmakebuildconfiguration.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <QtGui/QApplication>
#include <QtGui/QStyle>
@@ -58,7 +61,8 @@ QString displayNameForId(const QString &id) {
CMakeTarget::CMakeTarget(CMakeProject *parent) :
ProjectExplorer::Target(parent, QLatin1String(DEFAULT_CMAKE_TARGET_ID)),
m_buildConfigurationFactory(new CMakeBuildConfigurationFactory(this))
m_buildConfigurationFactory(new CMakeBuildConfigurationFactory(this)),
m_deployConfigurationFactory(new ProjectExplorer::DeployConfigurationFactory(this))
{
setDisplayName(displayNameForId(id()));
setIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
@@ -81,7 +85,12 @@ CMakeBuildConfiguration *CMakeTarget::activeBuildConfiguration() const
CMakeBuildConfigurationFactory *CMakeTarget::buildConfigurationFactory() const
{
return m_buildConfigurationFactory;
return m_buildConfigurationFactory;
}
ProjectExplorer::DeployConfigurationFactory *CMakeTarget::deployConfigurationFactory() const
{
return m_deployConfigurationFactory;
}
QString CMakeTarget::defaultBuildDirectory() const
@@ -187,16 +196,21 @@ CMakeTarget *CMakeTargetFactory::create(ProjectExplorer::Project *parent, const
CMakeBuildConfiguration *bc(new CMakeBuildConfiguration(t));
bc->setDisplayName("all");
// Now create a standard build configuration
bc->insertStep(ProjectExplorer::BuildStep::Build, 0, new MakeStep(bc));
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
MakeStep *cleanMakeStep = new MakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Clean, 0, cleanMakeStep);
// Now create a standard build configuration
buildSteps->insertStep(0, new MakeStep(buildSteps));
MakeStep *cleanMakeStep = new MakeStep(cleanSteps);
cleanSteps->insertStep(0, cleanMakeStep);
cleanMakeStep->setAdditionalArguments(QStringList() << "clean");
cleanMakeStep->setClean(true);
t->addBuildConfiguration(bc);
t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
t->updateRunConfigurations();
return t;
@@ -58,6 +58,7 @@ public:
CMakeBuildConfiguration *activeBuildConfiguration() const;
CMakeBuildConfigurationFactory *buildConfigurationFactory() const;
ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
QString defaultBuildDirectory() const;
@@ -69,6 +70,7 @@ private slots:
private:
CMakeBuildConfigurationFactory *m_buildConfigurationFactory;
ProjectExplorer::DeployConfigurationFactory *m_deployConfigurationFactory;
};
class CMakeTargetFactory : public ProjectExplorer::ITargetFactory
+23 -24
View File
@@ -34,6 +34,7 @@
#include "cmaketarget.h"
#include "cmakebuildconfiguration.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/gnumakeparser.h>
@@ -57,22 +58,22 @@ const char * const ADDITIONAL_ARGUMENTS_KEY("CMakeProjectManager.MakeStep.Additi
// TODO: Move progress information into an IOutputParser!
MakeStep::MakeStep(BuildConfiguration *bc) :
AbstractProcessStep(bc, QLatin1String(MS_ID)), m_clean(false),
MakeStep::MakeStep(BuildStepList *bsl) :
AbstractProcessStep(bsl, QLatin1String(MS_ID)), m_clean(false),
m_futureInterface(0)
{
ctor();
}
MakeStep::MakeStep(BuildConfiguration *bc, const QString &id) :
AbstractProcessStep(bc, id), m_clean(false),
MakeStep::MakeStep(BuildStepList *bsl, const QString &id) :
AbstractProcessStep(bsl, id), m_clean(false),
m_futureInterface(0)
{
ctor();
}
MakeStep::MakeStep(BuildConfiguration *bc, MakeStep *bs) :
AbstractProcessStep(bc, bs),
MakeStep::MakeStep(BuildStepList *bsl, MakeStep *bs) :
AbstractProcessStep(bsl, bs),
m_clean(bs->m_clean),
m_futureInterface(0),
m_buildTargets(bs->m_buildTargets),
@@ -317,42 +318,41 @@ MakeStepFactory::~MakeStepFactory()
{
}
bool MakeStepFactory::canCreate(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
bool MakeStepFactory::canCreate(BuildStepList *parent, const QString &id) const
{
Q_UNUSED(type)
if (!qobject_cast<CMakeBuildConfiguration *>(parent))
if (parent->target()->project()->id() != QLatin1String(Constants::CMAKEPROJECT_ID))
return false;
return QLatin1String(MS_ID) == id;
}
BuildStep *MakeStepFactory::create(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id)
BuildStep *MakeStepFactory::create(BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new MakeStep(parent);
}
bool MakeStepFactory::canClone(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, BuildStep *source) const
bool MakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const
{
return canCreate(parent, type, source->id());
return canCreate(parent, source->id());
}
BuildStep *MakeStepFactory::clone(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, BuildStep *source)
BuildStep *MakeStepFactory::clone(BuildStepList *parent, BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
return new MakeStep(parent, static_cast<MakeStep *>(source));
}
bool MakeStepFactory::canRestore(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const
bool MakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
BuildStep *MakeStepFactory::restore(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map)
BuildStep *MakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
MakeStep *bs(new MakeStep(parent));
if (bs->fromMap(map))
@@ -361,12 +361,11 @@ BuildStep *MakeStepFactory::restore(BuildConfiguration *parent, ProjectExplorer:
return 0;
}
QStringList MakeStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
QStringList MakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
Q_UNUSED(type)
if (!qobject_cast<CMakeBuildConfiguration *>(parent))
return QStringList();
return QStringList() << QLatin1String(MS_ID);
if (parent->target()->project()->id() == QLatin1String(Constants::CMAKEPROJECT_ID))
return QStringList() << QLatin1String(MS_ID);
return QStringList();
}
QString MakeStepFactory::displayNameForId(const QString &id) const
+10 -10
View File
@@ -52,7 +52,7 @@ class MakeStep : public ProjectExplorer::AbstractProcessStep
// This is for modifying internal data
public:
MakeStep(ProjectExplorer::BuildConfiguration *bc);
MakeStep(ProjectExplorer::BuildStepList *bsl);
virtual ~MakeStep();
CMakeBuildConfiguration *cmakeBuildConfiguration() const;
@@ -73,8 +73,8 @@ public:
QVariantMap toMap() const;
protected:
MakeStep(ProjectExplorer::BuildConfiguration *bc, MakeStep *bs);
MakeStep(ProjectExplorer::BuildConfiguration *bc, const QString &id);
MakeStep(ProjectExplorer::BuildStepList *bsl, MakeStep *bs);
MakeStep(ProjectExplorer::BuildStepList *bsl, const QString &id);
bool fromMap(const QVariantMap &map);
@@ -119,14 +119,14 @@ public:
explicit MakeStepFactory(QObject *parent = 0);
virtual ~MakeStepFactory();
virtual bool canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const;
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id);
virtual bool canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source) const;
virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source);
virtual bool canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const;
virtual ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
virtual bool canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const;
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const QString &id);
virtual bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const;
virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source);
virtual bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
virtual ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
virtual QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *bc, ProjectExplorer::BuildStep::Type type) const;
virtual QStringList availableCreationIds(ProjectExplorer::BuildStepList *bc) const;
virtual QString displayNameForId(const QString &id) const;
};
@@ -33,6 +33,8 @@
#include "genericproject.h"
#include "generictarget.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/qtcassert.h>
#include <QtGui/QInputDialog>
@@ -182,8 +184,10 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(ProjectExplorer::Ta
GenericBuildConfiguration *bc = new GenericBuildConfiguration(target);
bc->setDisplayName(buildConfigurationName);
GenericMakeStep *makeStep = new GenericMakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Build, 0, makeStep);
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
Q_ASSERT(buildSteps);
GenericMakeStep *makeStep = new GenericMakeStep(buildSteps);
buildSteps->insertStep(0, makeStep);
makeStep->setBuildTarget("all", /* on = */ true);
target->addBuildConfiguration(bc); // also makes the name unique...
@@ -35,6 +35,7 @@
#include "genericbuildconfiguration.h"
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/gnumakeparser.h>
@@ -60,20 +61,20 @@ const char * const MAKE_ARGUMENTS_KEY("GenericProjectManager.GenericMakeStep.Mak
const char * const MAKE_COMMAND_KEY("GenericProjectManager.GenericMakeStep.MakeCommand");
}
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildConfiguration *bc) :
AbstractProcessStep(bc, QLatin1String(GENERIC_MS_ID))
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildStepList *parent) :
AbstractProcessStep(parent, QLatin1String(GENERIC_MS_ID))
{
ctor();
}
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildConfiguration *bc, const QString &id) :
AbstractProcessStep(bc, id)
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildStepList *parent, const QString &id) :
AbstractProcessStep(parent, id)
{
ctor();
}
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildConfiguration *bc, GenericMakeStep *bs) :
AbstractProcessStep(bc, bs),
GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildStepList *parent, GenericMakeStep *bs) :
AbstractProcessStep(parent, bs),
m_buildTargets(bs->m_buildTargets),
m_makeArguments(bs->m_makeArguments),
m_makeCommand(bs->m_makeCommand)
@@ -307,57 +308,50 @@ GenericMakeStepFactory::~GenericMakeStepFactory()
{
}
bool GenericMakeStepFactory::canCreate(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
bool GenericMakeStepFactory::canCreate(ProjectExplorer::BuildStepList *parent,
const QString &id) const
{
Q_UNUSED(type)
if (!qobject_cast<GenericBuildConfiguration *>(parent))
if (parent->target()->project()->id() != QLatin1String(Constants::GENERICPROJECT_ID))
return false;
return id == QLatin1String(GENERIC_MS_ID);
}
ProjectExplorer::BuildStep *GenericMakeStepFactory::create(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
ProjectExplorer::BuildStep *GenericMakeStepFactory::create(ProjectExplorer::BuildStepList *parent,
const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new GenericMakeStep(parent);
}
bool GenericMakeStepFactory::canClone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
bool GenericMakeStepFactory::canClone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *source) const
{
const QString id(source->id());
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *GenericMakeStepFactory::clone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
ProjectExplorer::BuildStep *GenericMakeStepFactory::clone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
GenericMakeStep *old(qobject_cast<GenericMakeStep *>(source));
Q_ASSERT(old);
return new GenericMakeStep(parent, old);
}
bool GenericMakeStepFactory::canRestore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
bool GenericMakeStepFactory::canRestore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *GenericMakeStepFactory::restore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
ProjectExplorer::BuildStep *GenericMakeStepFactory::restore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
GenericMakeStep *bs(new GenericMakeStep(parent));
if (bs->fromMap(map))
@@ -366,11 +360,9 @@ ProjectExplorer::BuildStep *GenericMakeStepFactory::restore(ProjectExplorer::Bui
return 0;
}
QStringList GenericMakeStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type) const
QStringList GenericMakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
Q_UNUSED(type)
if (!qobject_cast<GenericBuildConfiguration *>(parent))
if (parent->target()->project()->id() != QLatin1String(Constants::GENERICPROJECT_ID))
return QStringList();
return QStringList() << QLatin1String(GENERIC_MS_ID);
}
@@ -54,7 +54,7 @@ class GenericMakeStep : public ProjectExplorer::AbstractProcessStep
friend class GenericMakeStepFactory;
public:
GenericMakeStep(ProjectExplorer::BuildConfiguration *bc);
GenericMakeStep(ProjectExplorer::BuildStepList *parent);
virtual ~GenericMakeStep();
GenericBuildConfiguration *genericBuildConfiguration() const;
@@ -73,8 +73,8 @@ public:
QVariantMap toMap() const;
protected:
GenericMakeStep(ProjectExplorer::BuildConfiguration *bc, GenericMakeStep *bs);
GenericMakeStep(ProjectExplorer::BuildConfiguration *bc, const QString &id);
GenericMakeStep(ProjectExplorer::BuildStepList *parent, GenericMakeStep *bs);
GenericMakeStep(ProjectExplorer::BuildStepList *parent, const QString &id);
virtual bool fromMap(const QVariantMap &map);
private:
@@ -113,27 +113,20 @@ public:
explicit GenericMakeStepFactory(QObject *parent = 0);
virtual ~GenericMakeStepFactory();
virtual bool canCreate(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canCreate(ProjectExplorer::BuildStepList *parent,
const QString &id) const;
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent,
const QString &id);
virtual bool canClone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canClone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *source) const;
virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *source);
virtual bool canRestore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canRestore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map) const;
virtual ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map);
virtual QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *bc,
ProjectExplorer::BuildStep::Type type) const;
virtual QStringList availableCreationIds(ProjectExplorer::BuildStepList *bc) const;
virtual QString displayNameForId(const QString &id) const;
};
@@ -375,7 +375,7 @@ QString GenericProject::displayName() const
QString GenericProject::id() const
{
return QLatin1String("GenericProjectManager.GenericProject");
return QLatin1String(Constants::GENERICPROJECT_ID);
}
Core::IFile *GenericProject::file() const
@@ -54,6 +54,9 @@ const char *const INCLUDES_MIMETYPE = "application/vnd.nokia.qt.generic.include
const char *const CONFIG_EDITOR = ".config Editor";
const char *const CONFIG_MIMETYPE = "application/vnd.nokia.qt.generic.config";
// Project
const char *const GENERICPROJECT_ID = "GenericProjectManager.GenericProject";
} // namespace Constants
} // namespace GenericProjectManager
@@ -33,7 +33,10 @@
#include "genericproject.h"
#include "genericmakestep.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <QtGui/QApplication>
#include <QtGui/QStyle>
@@ -51,7 +54,8 @@ using namespace GenericProjectManager::Internal;
GenericTarget::GenericTarget(GenericProject *parent) :
ProjectExplorer::Target(parent, QLatin1String(GENERIC_DESKTOP_TARGET_ID)),
m_buildConfigurationFactory(new GenericBuildConfigurationFactory(this))
m_buildConfigurationFactory(new GenericBuildConfigurationFactory(this)),
m_deployConfigurationFactory(new ProjectExplorer::DeployConfigurationFactory(this))
{
setDisplayName(QApplication::translate("GenericProjectManager::GenericTarget",
GENERIC_DESKTOP_TARGET_DISPLAY_NAME,
@@ -73,6 +77,11 @@ GenericBuildConfigurationFactory *GenericTarget::buildConfigurationFactory() con
return m_buildConfigurationFactory;
}
ProjectExplorer::DeployConfigurationFactory *GenericTarget::deployConfigurationFactory() const
{
return m_deployConfigurationFactory;
}
GenericBuildConfiguration *GenericTarget::activeBuildConfiguration() const
{
return static_cast<GenericBuildConfiguration *>(Target::activeBuildConfiguration());
@@ -136,8 +145,9 @@ GenericTarget *GenericTargetFactory::create(ProjectExplorer::Project *parent, co
GenericBuildConfiguration *bc = new GenericBuildConfiguration(t);
bc->setDisplayName("all");
GenericMakeStep *makeStep = new GenericMakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Build, 0, makeStep);
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
GenericMakeStep *makeStep = new GenericMakeStep(buildSteps);
buildSteps->insertStep(0, makeStep);
makeStep->setBuildTarget("all", /* on = */ true);
@@ -145,6 +155,8 @@ GenericTarget *GenericTargetFactory::create(ProjectExplorer::Project *parent, co
t->addBuildConfiguration(bc);
t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
// 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));
@@ -64,6 +64,7 @@ public:
GenericProject *genericProject() const;
GenericBuildConfigurationFactory *buildConfigurationFactory() const;
ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
GenericBuildConfiguration *activeBuildConfiguration() const;
protected:
@@ -71,6 +72,7 @@ protected:
private:
GenericBuildConfigurationFactory *m_buildConfigurationFactory;
ProjectExplorer::DeployConfigurationFactory *m_deployConfigurationFactory;
};
class GenericTargetFactory : public ProjectExplorer::ITargetFactory
@@ -43,16 +43,16 @@
using namespace ProjectExplorer;
AbstractProcessStep::AbstractProcessStep(BuildConfiguration *bc, const QString &id) :
BuildStep(bc, id), m_timer(0), m_futureInterface(0),
AbstractProcessStep::AbstractProcessStep(BuildStepList *bsl, const QString &id) :
BuildStep(bsl, id), m_timer(0), m_futureInterface(0),
m_enabled(true), m_ignoreReturnValue(false),
m_process(0), m_eventLoop(0), m_outputParserChain(0)
{
}
AbstractProcessStep::AbstractProcessStep(BuildConfiguration *bc,
AbstractProcessStep::AbstractProcessStep(BuildStepList *bsl,
AbstractProcessStep *bs) :
BuildStep(bc, bs), m_timer(0), m_futureInterface(0),
BuildStep(bsl, bs), m_timer(0), m_futureInterface(0),
m_enabled(bs->m_enabled), m_ignoreReturnValue(bs->m_ignoreReturnValue),
m_process(0), m_eventLoop(0), m_outputParserChain(0)
{
@@ -117,8 +117,8 @@ public:
ProjectExplorer::IOutputParser *outputParser() const;
protected:
AbstractProcessStep(BuildConfiguration *bc, const QString &id);
AbstractProcessStep(BuildConfiguration *bc, AbstractProcessStep *bs);
AbstractProcessStep(BuildStepList *bsl, const QString &id);
AbstractProcessStep(BuildStepList *bsl, AbstractProcessStep *bs);
/// Called after the process is started
/// the default implementation adds a process started message to the output message
@@ -29,100 +29,81 @@
#include "buildconfiguration.h"
#include <utils/qtcassert.h>
#include <coreplugin/icore.h>
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/buildmanager.h>
#include "buildmanager.h"
#include "buildsteplist.h"
#include "projectexplorer.h"
#include "projectexplorerconstants.h"
#include "target.h"
#include <QtCore/QMetaEnum>
#include <QtCore/QMetaObject>
#include <QtCore/QProcess>
using namespace ProjectExplorer;
namespace {
IBuildStepFactory *findCloneFactory(BuildConfiguration *parent, BuildStep::Type type, BuildStep *source)
{
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
foreach(IBuildStepFactory *factory, factories)
if (factory->canClone(parent, type, source))
return factory;
return 0;
}
IBuildStepFactory *findRestoreFactory(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map)
{
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
foreach(IBuildStepFactory *factory, factories)
if (factory->canRestore(parent, type, map))
return factory;
return 0;
}
const char * const STEPS_COUNT_KEY("ProjectExplorer.BuildConfiguration.%1StepsCount");
const char * const STEPS_PREFIX("ProjectExplorer.BuildConfiguration.%1Step.");
const char * const BUILD_STEP_LIST_COUNT("ProjectExplorer.BuildConfiguration.BuildStepListCount");
const char * const BUILD_STEP_LIST_PREFIX("ProjectExplorer.BuildConfiguration.BuildStepList.");
const char * const CLEAR_SYSTEM_ENVIRONMENT_KEY("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment");
const char * const USER_ENVIRONMENT_CHANGES_KEY("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges");
} // namespace
BuildConfiguration::BuildConfiguration(Target *target, const QString &id) :
ProjectConfiguration(id),
m_target(target),
ProjectConfiguration(target, id),
m_clearSystemEnvironment(false)
{
Q_ASSERT(m_target);
Q_ASSERT(target);
BuildStepList *bsl = new BuildStepList(this, QLatin1String(Constants::BUILDSTEPS_BUILD));
//: Display name of the build build step list. Used as part of the labels in the project window.
bsl->setDisplayName(tr("Build"));
m_stepLists.append(bsl);
bsl = new BuildStepList(this, QLatin1String(Constants::BUILDSTEPS_CLEAN));
//: Display name of the clean build step list. Used as part of the labels in the project window.
bsl->setDisplayName(tr("Clean"));
m_stepLists.append(bsl);
}
BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *source) :
ProjectConfiguration(source),
m_target(target),
ProjectConfiguration(target, source),
m_clearSystemEnvironment(source->m_clearSystemEnvironment),
m_userEnvironmentChanges(source->m_userEnvironmentChanges)
{
Q_ASSERT(m_target);
Q_ASSERT(target);
// Do not clone stepLists here, do that in the derived constructor instead
// otherwise BuildStepFactories might reject to set up a BuildStep for us
// since we are not yet the derived class!
}
BuildConfiguration::~BuildConfiguration()
{ }
QStringList BuildConfiguration::knownStepLists() const
{
for (int i = 0; i < BuildStep::LastStepType; ++i) {
qDeleteAll(m_steps[i]);
}
QStringList result;
foreach (BuildStepList *list, m_stepLists)
result.append(list->id());
return result;
}
BuildStepList *BuildConfiguration::stepList(const QString &id) const
{
foreach (BuildStepList *list, m_stepLists)
if (id == list->id())
return list;
return 0;
}
QVariantMap BuildConfiguration::toMap() const
{
QVariantMap map(ProjectConfiguration::toMap());
// Save build steps
QMetaEnum typeEnum = BuildStep::staticMetaObject.enumerator(BuildStep::staticMetaObject.indexOfEnumerator("Type"));
for (int type = 0; type < BuildStep::LastStepType; ++type) {
const QString key(typeEnum.key(type));
map.insert(QString::fromLatin1(STEPS_COUNT_KEY).arg(key), m_steps[type].count());
for (int step = 0; step < m_steps[type].count(); ++step)
map.insert(QString::fromLatin1(STEPS_PREFIX).arg(key) + QString::number(step), m_steps[type].at(step)->toMap());
}
map.insert(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY), m_clearSystemEnvironment);
map.insert(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY), EnvironmentItem::toStringList(m_userEnvironmentChanges));
return map;
}
map.insert(QLatin1String(BUILD_STEP_LIST_COUNT), m_stepLists.count());
for (int i = 0; i < m_stepLists.count(); ++i)
map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) % QString::number(i), m_stepLists.at(i)->toMap());
void BuildConfiguration::cloneSteps(BuildConfiguration *source)
{
Q_ASSERT(source);
for (int i = 0; i < BuildStep::LastStepType; ++i) {
foreach (BuildStep *originalbs, source->steps(BuildStep::Type(i))) {
IBuildStepFactory *factory(findCloneFactory(this, BuildStep::Type(i), originalbs));
if (!factory)
continue;
BuildStep *clonebs(factory->clone(this, BuildStep::Type(i), originalbs));
if (clonebs)
m_steps[i].append(clonebs);
}
}
return map;
}
bool BuildConfiguration::fromMap(const QVariantMap &map)
@@ -130,74 +111,38 @@ bool BuildConfiguration::fromMap(const QVariantMap &map)
if (!ProjectConfiguration::fromMap(map))
return false;
QMetaEnum typeEnum = BuildStep::staticMetaObject.enumerator(BuildStep::staticMetaObject.indexOfEnumerator("Type"));
for (int type = 0; type < BuildStep::LastStepType; ++type) {
const QString key(typeEnum.key(type));
int maxSteps = map.value(QString::fromLatin1(STEPS_COUNT_KEY).arg(key), 0).toInt();
for (int step = 0; step < maxSteps; ++step) {
QVariantMap bsData(map.value(QString::fromLatin1(STEPS_PREFIX).arg(key) + QString::number(step)).toMap());
if (bsData.isEmpty()) {
qWarning() << "No step data found for" << key << step << "(continuing).";
continue;
}
IBuildStepFactory *factory(findRestoreFactory(this, BuildStep::Type(type), bsData));
if (!factory) {
qWarning() << "No factory for step" << key << step << "found (continuing).";
continue;
}
BuildStep *bs(factory->restore(this, BuildStep::Type(type), bsData));
if (!bs) {
qWarning() << "Restoration of step" << key << step << "failed (continuing).";
continue;
}
insertStep(BuildStep::Type(type), m_steps[type].count(), bs);
}
}
m_clearSystemEnvironment = map.value(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY)).toBool();
m_userEnvironmentChanges = EnvironmentItem::fromStringList(map.value(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY)).toStringList());
qDeleteAll(m_stepLists);
m_stepLists.clear();
int maxI = map.value(QLatin1String(BUILD_STEP_LIST_COUNT), 0).toInt();
for (int i = 0; i < maxI; ++i) {
QVariantMap data = map.value(QLatin1String(BUILD_STEP_LIST_PREFIX) % QString::number(i)).toMap();
if (data.isEmpty()) {
qWarning() << "No data for build step list" << i << "found!";
continue;
}
BuildStepList *list = new BuildStepList(this, data);
if (list->isNull()) {
qWarning() << "Failed to restore build step list" << i;
delete list;
return false;
}
m_stepLists.append(list);
}
// TODO: We currently assume there to be at least a clean, build and deploy list!
Q_ASSERT(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_BUILD)));
Q_ASSERT(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_CLEAN)));
return true;
}
QList<BuildStep *> BuildConfiguration::steps(BuildStep::Type type) const
{
Q_ASSERT(type >= 0 && type < BuildStep::LastStepType);
return m_steps[type];
}
void BuildConfiguration::insertStep(BuildStep::Type type, int position, BuildStep *step)
{
Q_ASSERT(type >= 0 && type < BuildStep::LastStepType);
m_steps[type].insert(position, step);
}
bool BuildConfiguration::removeStep(BuildStep::Type type, int position)
{
Q_ASSERT(type >= 0 && type < BuildStep::LastStepType);
ProjectExplorer::BuildManager *bm =
ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager();
if (bm->isBuilding(m_steps[type].at(position)))
return false;
delete m_steps[type].at(position);
m_steps[type].removeAt(position);
return true;
}
void BuildConfiguration::moveStepUp(BuildStep::Type type, int position)
{
Q_ASSERT(type >= 0 && type < BuildStep::LastStepType);
if (position <= 0 || m_steps[type].size() <= 1)
return;
m_steps[type].swap(position - 1, position);
}
Target *BuildConfiguration::target() const
{
return m_target;
return static_cast<Target *>(parent());
}
Environment BuildConfiguration::baseEnvironment() const
@@ -248,15 +193,23 @@ void BuildConfiguration::setUserEnvironmentChanges(const QList<ProjectExplorer::
emit environmentChanged();
}
void BuildConfiguration::cloneSteps(BuildConfiguration *source)
{
qDeleteAll(m_stepLists);
m_stepLists.clear();
foreach (BuildStepList *bsl, source->m_stepLists) {
BuildStepList *newBsl = new BuildStepList(this, bsl);
m_stepLists.append(newBsl);
}
}
///
// IBuildConfigurationFactory
///
IBuildConfigurationFactory::IBuildConfigurationFactory(QObject *parent) :
QObject(parent)
{
}
{ }
IBuildConfigurationFactory::~IBuildConfigurationFactory()
{
}
{ }
@@ -38,11 +38,11 @@
#include <QtCore/QList>
#include <QtCore/QObject>
#include "buildstep.h"
#include "projectconfiguration.h"
namespace ProjectExplorer {
class BuildStepList;
class Target;
class IOutputParser;
@@ -54,15 +54,8 @@ public:
// ctors are protected
virtual ~BuildConfiguration();
QList<BuildStep *> steps(BuildStep::Type type) const;
void insertStep(BuildStep::Type type, int position, BuildStep *step);
bool removeStep(BuildStep::Type type, int position);
void moveStepUp(BuildStep::Type type, int position);
virtual QString buildDirectory() const = 0;
Target *target() const;
// TODO: Maybe the BuildConfiguration is not the best place for the environment
virtual Environment baseEnvironment() const;
QString baseEnvironmentText() const;
@@ -72,6 +65,9 @@ public:
bool useSystemEnvironment() const;
void setUseSystemEnvironment(bool b);
QStringList knownStepLists() const;
BuildStepList *stepList(const QString &id) const;
virtual QVariantMap toMap() const;
// Creates a suitable outputparser for custom build steps
@@ -81,6 +77,8 @@ public:
// with the generic project manager
virtual IOutputParser *createOutputParser() const = 0;
Target *target() const;
signals:
void environmentChanged();
void buildDirectoryChanged();
@@ -88,16 +86,15 @@ signals:
protected:
BuildConfiguration(Target *target, const QString &id);
BuildConfiguration(Target *target, BuildConfiguration *source);
void cloneSteps(BuildConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
private:
QList<BuildStep *> m_steps[BuildStep::LastStepType];
Target *m_target;
bool m_clearSystemEnvironment;
QList<EnvironmentItem> m_userEnvironmentChanges;
QList<BuildStepList *> m_stepLists;
};
class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory :
+9 -54
View File
@@ -31,6 +31,7 @@
#include "buildprogress.h"
#include "buildstep.h"
#include "buildsteplist.h"
#include "compileoutputwindow.h"
#include "projectexplorerconstants.h"
#include "projectexplorer.h"
@@ -409,11 +410,16 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
return true;
}
bool BuildManager::buildProjects(const QList<BuildConfiguration *> &configurations)
bool BuildManager::buildList(BuildStepList *bsl)
{
return buildLists(QList<BuildStepList *>() << bsl);
}
bool BuildManager::buildLists(QList<BuildStepList *> bsls)
{
QList<BuildStep *> steps;
foreach(BuildConfiguration *bc, configurations)
steps.append(bc->steps(BuildStep::Build));
foreach(BuildStepList *list, bsls)
steps.append(list->steps());
bool success = buildQueueAppend(steps);
if (!success) {
@@ -427,57 +433,6 @@ bool BuildManager::buildProjects(const QList<BuildConfiguration *> &configuratio
return true;
}
bool BuildManager::deployProjects(const QList<BuildConfiguration *> &configurations)
{
QList<BuildStep *> steps;
foreach(BuildConfiguration *bc, configurations)
steps.append(bc->steps(BuildStep::Deploy));
bool success = buildQueueAppend(steps);
if (!success) {
m_outputWindow->popup(false);
return false;
}
if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput)
m_outputWindow->popup(false);
startBuildQueue();
return true;
}
bool BuildManager::cleanProjects(const QList<BuildConfiguration *> &configurations)
{
QList<BuildStep *> steps;
foreach(BuildConfiguration *bc, configurations)
steps.append(bc->steps(BuildStep::Clean));
bool success = buildQueueAppend(steps);
if (!success) {
m_outputWindow->popup(false);
return false;
}
if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput)
m_outputWindow->popup(false);
startBuildQueue();
return true;
}
bool BuildManager::buildProject(BuildConfiguration *configuration)
{
return buildProjects(QList<BuildConfiguration *>() << configuration);
}
bool BuildManager::deployProject(BuildConfiguration *configuration)
{
return deployProjects(QList<BuildConfiguration *>() << configuration);
}
bool BuildManager::cleanProject(BuildConfiguration *configuration)
{
return cleanProjects(QList<BuildConfiguration *>() << configuration);
}
void BuildManager::appendStep(BuildStep *step)
{
bool success = buildQueueAppend(QList<BuildStep *>() << step);
+3 -6
View File
@@ -49,6 +49,7 @@ namespace Internal {
}
class BuildStep;
class BuildStepList;
class Project;
class ProjectExplorerPlugin;
class BuildConfiguration;
@@ -73,12 +74,8 @@ public:
bool tasksAvailable() const;
bool buildProject(BuildConfiguration *bc);
bool buildProjects(const QList<BuildConfiguration *> &configurations);
bool deployProject(BuildConfiguration *bc);
bool deployProjects(const QList<BuildConfiguration *> &configurations);
bool cleanProject(BuildConfiguration *configuration);
bool cleanProjects(const QList<BuildConfiguration *> &configurations);
bool buildLists(QList<BuildStepList *> bsls);
bool buildList(BuildStepList *bsl);
bool isBuilding(Project *p);
bool isBuilding(BuildStep *step);
@@ -31,6 +31,7 @@
#include "buildstep.h"
#include "buildstepspage.h"
#include "project.h"
#include "projectexplorerconstants.h"
#include "target.h"
#include "buildconfiguration.h"
#include "buildconfigurationmodel.h"
@@ -187,12 +188,14 @@ void BuildSettingsWidget::setupUi()
SLOT(updateAddButtonMenu()));
}
void BuildSettingsWidget::addSubWidget(const QString &name, BuildConfigWidget *widget)
void BuildSettingsWidget::addSubWidget(BuildConfigWidget *widget)
{
widget->setContentsMargins(0, 10, 0, 0);
QLabel *label = new QLabel(this);
label->setText(name);
label->setText(widget->displayName());
connect(widget, SIGNAL(displayNameChanged(QString)),
label, SLOT(setText(QString)));
QFont f = label->font();
f.setBold(true);
f.setPointSizeF(f.pointSizeF() * 1.2);
@@ -247,15 +250,14 @@ void BuildSettingsWidget::updateBuildSettings()
// Add pages
BuildConfigWidget *generalConfigWidget = m_target->project()->createConfigWidget();
addSubWidget(generalConfigWidget->displayName(), generalConfigWidget);
addSubWidget(generalConfigWidget);
addSubWidget(tr("Build Steps"), new BuildStepsPage(m_target, BuildStep::Build));
addSubWidget(tr("Deploy Steps"), new BuildStepsPage(m_target, BuildStep::Deploy));
addSubWidget(tr("Clean Steps"), new BuildStepsPage(m_target, BuildStep::Clean));
addSubWidget(new BuildStepsPage(m_target, QLatin1String(Constants::BUILDSTEPS_BUILD)));
addSubWidget(new BuildStepsPage(m_target, QLatin1String(Constants::BUILDSTEPS_CLEAN)));
QList<BuildConfigWidget *> subConfigWidgets = m_target->project()->subConfigWidgets();
foreach (BuildConfigWidget *subConfigWidget, subConfigWidgets)
addSubWidget(subConfigWidget->displayName(), subConfigWidget);
addSubWidget(subConfigWidget);
foreach (BuildConfigWidget *widget, subWidgets())
widget->init(m_buildConfiguration);
@@ -87,7 +87,7 @@ public:
~BuildSettingsWidget();
void clear();
void addSubWidget(const QString &name, BuildConfigWidget *widget);
void addSubWidget(BuildConfigWidget *widget);
QList<BuildConfigWidget *> subWidgets() const;
void setupUi();
+21 -13
View File
@@ -29,20 +29,22 @@
#include "buildstep.h"
#include "buildconfiguration.h"
#include "buildsteplist.h"
#include "target.h"
using namespace ProjectExplorer;
BuildStep::BuildStep(BuildConfiguration *bc, const QString &id) :
ProjectConfiguration(id),
m_buildConfiguration(bc)
BuildStep::BuildStep(BuildStepList *bsl, const QString &id) :
ProjectConfiguration(bsl, id)
{
Q_ASSERT(bc);
Q_ASSERT(bsl);
}
BuildStep::BuildStep(BuildConfiguration *bc, BuildStep *bs) :
ProjectConfiguration(bs),
m_buildConfiguration(bc)
BuildStep::BuildStep(BuildStepList *bsl, BuildStep *bs) :
ProjectConfiguration(bsl, bs)
{
Q_ASSERT(bc);
Q_ASSERT(bsl);
}
BuildStep::~BuildStep()
@@ -51,7 +53,15 @@ BuildStep::~BuildStep()
BuildConfiguration *BuildStep::buildConfiguration() const
{
return m_buildConfiguration;
BuildConfiguration *bc = qobject_cast<BuildConfiguration *>(parent()->parent());
if (!bc)
bc = target()->activeBuildConfiguration();
return bc;
}
Target *BuildStep::target() const
{
return qobject_cast<Target *>(parent()->parent()->parent());
}
bool BuildStep::immutable() const
@@ -61,9 +71,7 @@ bool BuildStep::immutable() const
IBuildStepFactory::IBuildStepFactory(QObject *parent) :
QObject(parent)
{
}
{ }
IBuildStepFactory::~IBuildStepFactory()
{
}
{ }
+15 -20
View File
@@ -40,6 +40,8 @@
namespace ProjectExplorer {
class BuildConfiguration;
class BuildStepList;
class Target;
/*
// BuildSteps are the primary way plugin developers can customize
@@ -68,18 +70,10 @@ class PROJECTEXPLORER_EXPORT BuildStep : public ProjectConfiguration
Q_OBJECT
protected:
BuildStep(BuildConfiguration *bc, const QString &id);
BuildStep(BuildConfiguration *bc, BuildStep *bs);
BuildStep(BuildStepList *bsl, const QString &id);
BuildStep(BuildStepList *bsl, BuildStep *bs);
public:
enum Type {
Build = 0,
Clean,
Deploy,
LastStepType
};
Q_ENUMS(Type)
virtual ~BuildStep();
// This function is run in the gui thread,
@@ -103,6 +97,7 @@ public:
virtual bool immutable() const;
BuildConfiguration *buildConfiguration() const;
Target *target() const;
enum OutputFormat { NormalOutput, ErrorOutput, MessageOutput, ErrorMessageOutput };
@@ -113,9 +108,6 @@ signals:
// window.
// It should be in plain text, with the format in the parameter
void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format);
private:
BuildConfiguration *m_buildConfiguration;
};
class PROJECTEXPLORER_EXPORT IBuildStepFactory :
@@ -128,17 +120,17 @@ public:
virtual ~IBuildStepFactory();
// used to show the list of possible additons to a target, returns a list of types
virtual QStringList availableCreationIds(BuildConfiguration *parent, BuildStep::Type type) const = 0;
virtual QStringList availableCreationIds(BuildStepList *parent) const = 0;
// used to translate the types to names to display to the user
virtual QString displayNameForId(const QString &id) const = 0;
virtual bool canCreate(BuildConfiguration *parent, BuildStep::Type type, const QString &id) const = 0;
virtual BuildStep *create(BuildConfiguration *parent, BuildStep::Type type, const QString &id) = 0;
virtual bool canCreate(BuildStepList *parent, const QString &id) const = 0;
virtual BuildStep *create(BuildStepList *parent, const QString &id) = 0;
// used to recreate the runConfigurations when restoring settings
virtual bool canRestore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map) const = 0;
virtual BuildStep *restore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map) = 0;
virtual bool canClone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *product) const = 0;
virtual BuildStep *clone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *product) = 0;
virtual bool canRestore(BuildStepList *parent, const QVariantMap &map) const = 0;
virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map) = 0;
virtual bool canClone(BuildStepList *parent, BuildStep *product) const = 0;
virtual BuildStep *clone(BuildStepList *parent, BuildStep *product) = 0;
};
class PROJECTEXPLORER_EXPORT BuildConfigWidget
@@ -154,6 +146,9 @@ public:
// This is called to set up the config widget before showing it
virtual void init(BuildConfiguration *bc) = 0;
signals:
void displayNameChanged(const QString &);
};
class PROJECTEXPLORER_EXPORT BuildStepConfigWidget
@@ -0,0 +1,221 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 "buildsteplist.h"
#include "buildconfiguration.h"
#include "buildmanager.h"
#include "buildstep.h"
#include "deployconfiguration.h"
#include "projectexplorer.h"
#include "target.h"
#include <extensionsystem/pluginmanager.h>
using namespace ProjectExplorer;
namespace {
IBuildStepFactory *findCloneFactory(BuildStepList *parent, BuildStep *source)
{
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
foreach(IBuildStepFactory *factory, factories)
if (factory->canClone(parent, source))
return factory;
return 0;
}
IBuildStepFactory *findRestoreFactory(BuildStepList *parent, const QVariantMap &map)
{
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
foreach(IBuildStepFactory *factory, factories)
if (factory->canRestore(parent, map))
return factory;
return 0;
}
const char * const STEPS_COUNT_KEY("ProjectExplorer.BuildStepList.StepsCount");
const char * const STEPS_PREFIX("ProjectExplorer.BuildStepList.Step.");
} // namespace
BuildStepList::BuildStepList(QObject *parent, const QString &id) :
ProjectConfiguration(parent, id),
m_isNull(false)
{
Q_ASSERT(parent);
}
BuildStepList::BuildStepList(QObject *parent, BuildStepList *source) :
ProjectConfiguration(parent, source),
m_isNull(source->m_isNull)
{
Q_ASSERT(parent);
// do not clone the steps here:
// The BC is not fully set up yet and thus some of the buildstepfactories
// will fail to clone the buildsteps!
}
BuildStepList::BuildStepList(QObject *parent, const QVariantMap &data) :
ProjectConfiguration(parent, QLatin1String("UNKNOWN"))
{
Q_ASSERT(parent);
m_isNull = !fromMap(data);
}
BuildStepList::~BuildStepList()
{
qDeleteAll(m_steps);
}
QVariantMap BuildStepList::toMap() const
{
QVariantMap map(ProjectConfiguration::toMap());
// Save build steps
map.insert(QString::fromLatin1(STEPS_COUNT_KEY), m_steps.count());
for (int i = 0; i < m_steps.count(); ++i)
map.insert(QString::fromLatin1(STEPS_PREFIX) + QString::number(i), m_steps.at(i)->toMap());
return map;
}
bool BuildStepList::isNull() const
{
return m_isNull;
}
int BuildStepList::count() const
{
return m_steps.count();
}
bool BuildStepList::isEmpty() const
{
return m_steps.isEmpty();
}
bool BuildStepList::contains(const QString &id) const
{
foreach (BuildStep *bs, steps()) {
if (bs->id() == id)
return true;
}
return false;
}
void BuildStepList::cloneSteps(BuildStepList *source)
{
Q_ASSERT(source);
foreach (BuildStep *originalbs, source->steps()) {
IBuildStepFactory *factory(findCloneFactory(this, originalbs));
if (!factory)
continue;
BuildStep *clonebs(factory->clone(this, originalbs));
if (clonebs)
m_steps.append(clonebs);
}
}
bool BuildStepList::fromMap(const QVariantMap &map)
{
if (!ProjectConfiguration::fromMap(map))
return false;
int maxSteps = map.value(QString::fromLatin1(STEPS_COUNT_KEY), 0).toInt();
for (int i = 0; i < maxSteps; ++i) {
QVariantMap bsData(map.value(QString::fromLatin1(STEPS_PREFIX) + QString::number(i)).toMap());
if (bsData.isEmpty()) {
qWarning() << "No step data found for" << i << "(continuing).";
continue;
}
IBuildStepFactory *factory(findRestoreFactory(this, bsData));
if (!factory) {
qWarning() << "No factory for step" << i << "found (continuing).";
continue;
}
BuildStep *bs(factory->restore(this, bsData));
if (!bs) {
qWarning() << "Restoration of step" << i << "failed (continuing).";
continue;
}
insertStep(m_steps.count(), bs);
}
return ProjectConfiguration::fromMap(map);
}
QList<BuildStep *> BuildStepList::steps() const
{
return m_steps;
}
void BuildStepList::insertStep(int position, BuildStep *step)
{
m_steps.insert(position, step);
emit stepInserted(position);
}
bool BuildStepList::removeStep(int position)
{
ProjectExplorer::BuildManager *bm =
ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager();
BuildStep *bs = at(position);
if (bm->isBuilding(bs))
return false;
emit aboutToRemoveStep(position);
m_steps.removeAt(position);
delete bs;
emit stepRemoved(position);
return true;
}
void BuildStepList::moveStepUp(int position)
{
m_steps.swap(position - 1, position);
emit stepMoved(position, position - 1);
}
BuildStep *BuildStepList::at(int position)
{
return m_steps.at(position);
}
Target *BuildStepList::target() const
{
Q_ASSERT(parent());
BuildConfiguration *bc = qobject_cast<BuildConfiguration *>(parent());
if (bc)
return bc->target();
DeployConfiguration *dc = qobject_cast<DeployConfiguration *>(parent());
if (dc)
return dc->target();
Q_ASSERT(false);
return 0;
}
@@ -0,0 +1,89 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 PROJECTEXPLORER_BUILDSTEPLIST_H
#define PROJECTEXPLORER_BUILDSTEPLIST_H
#include "projectexplorer_export.h"
#include "projectconfiguration.h"
#include <QtCore/QVariantMap>
namespace ProjectExplorer {
class BuildStep;
class Target;
class PROJECTEXPLORER_EXPORT BuildStepList : public ProjectConfiguration
{
Q_OBJECT
public:
BuildStepList(QObject *parent, const QString &id);
BuildStepList(QObject *parent, BuildStepList *source);
BuildStepList(QObject *parent, const QVariantMap &data);
virtual ~BuildStepList();
QList<BuildStep *> steps() const;
bool isNull() const;
int count() const;
bool isEmpty() const;
bool contains(const QString &id) const;
void insertStep(int position, BuildStep *step);
bool removeStep(int position);
void moveStepUp(int position);
BuildStep *at(int position);
Target *target() const;
virtual QVariantMap toMap() const;
signals:
void stepInserted(int position);
void aboutToRemoveStep(int position);
void stepRemoved(int position);
void stepMoved(int from, int to);
protected:
void cloneSteps(BuildStepList *source);
virtual bool fromMap(const QVariantMap &map);
private:
QList<BuildStep *> m_steps;
bool m_isNull;
};
} // namespace ProjectExplorer
Q_DECLARE_METATYPE(ProjectExplorer::BuildStepList *);
#endif // PROJECTEXPLORER_BUILDSTEPLIST_H
+88 -64
View File
@@ -28,8 +28,11 @@
**************************************************************************/
#include "buildstepspage.h"
#include "buildconfiguration.h"
#include "buildsteplist.h"
#include "detailsbutton.h"
#include "projectexplorerconstants.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
@@ -50,16 +53,15 @@
using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
BuildStepsPage::BuildStepsPage(Target *target, BuildStep::Type type) :
BuildConfigWidget(),
m_type(type),
BuildStepListWidget::BuildStepListWidget(QWidget *parent) :
NamedWidget(parent),
m_buildStepList(0),
m_addButton(0)
{
Q_UNUSED(target);
setStyleSheet("background: red");
}
BuildStepsPage::~BuildStepsPage()
BuildStepListWidget::~BuildStepListWidget()
{
foreach(const BuildStepsWidgetStruct &s, m_buildSteps) {
delete s.widget;
@@ -68,7 +70,7 @@ BuildStepsPage::~BuildStepsPage()
m_buildSteps.clear();
}
void BuildStepsPage::updateSummary()
void BuildStepListWidget::updateSummary()
{
BuildStepConfigWidget *widget = qobject_cast<BuildStepConfigWidget *>(sender());
if (widget) {
@@ -81,23 +83,9 @@ void BuildStepsPage::updateSummary()
}
}
QString BuildStepsPage::displayName() const
void BuildStepListWidget::init(BuildStepList *bsl)
{
switch(m_type) {
case BuildStep::Build:
return tr("Build Steps");
case BuildStep::Deploy:
return tr("Deploy Steps");
case BuildStep::Clean:
return tr("Clean Steps");
default:
return tr("Unknown Steps");
}
}
void BuildStepsPage::init(BuildConfiguration *bc)
{
QTC_ASSERT(bc, return);
Q_ASSERT(bsl);
setupUi();
@@ -107,16 +95,17 @@ void BuildStepsPage::init(BuildConfiguration *bc)
}
m_buildSteps.clear();
m_configuration = bc;
m_buildStepList = bsl;
//: %1 is the name returned by BuildStepList::displayName
setDisplayName(tr("%1 Steps").arg(m_buildStepList->displayName()));
const QList<BuildStep *> &steps = m_configuration->steps(m_type);
int i = 0;
foreach (BuildStep *bs, steps) {
addBuildStepWidget(i, bs);
++i;
}
for (int i = 0; i < bsl->count(); ++i)
addBuildStepWidget(i, m_buildStepList->at(i));
m_noStepsLabel->setVisible(steps.isEmpty());
m_noStepsLabel->setVisible(bsl->isEmpty());
m_noStepsLabel->setText(tr("No %1 Steps").arg(m_buildStepList->displayName()));
m_addButton->setText(tr("Add %1 Step").arg(m_buildStepList->displayName()));
// make sure widget is updated
foreach(BuildStepsWidgetStruct s, m_buildSteps) {
@@ -132,13 +121,13 @@ void BuildStepsPage::init(BuildConfiguration *bc)
setStyleSheet(buttonStyle);
}
void BuildStepsPage::updateAddBuildStepMenu()
void BuildStepListWidget::updateAddBuildStepMenu()
{
QMap<QString, QPair<QString, IBuildStepFactory *> > map;
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
foreach (IBuildStepFactory *factory, factories) {
QStringList ids = factory->availableCreationIds(m_configuration, m_type);
QStringList ids = factory->availableCreationIds(m_buildStepList);
foreach (const QString &id, ids) {
map.insert(factory->displayNameForId(id), QPair<QString, IBuildStepFactory *>(id, factory));
}
@@ -160,7 +149,7 @@ void BuildStepsPage::updateAddBuildStepMenu()
}
}
void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step)
void BuildStepListWidget::addBuildStepWidget(int pos, BuildStep *step)
{
// create everything
BuildStepsWidgetStruct s;
@@ -222,13 +211,13 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step)
m_removeMapper, SLOT(map()));
}
void BuildStepsPage::addBuildStep()
void BuildStepListWidget::addBuildStep()
{
if (QAction *action = qobject_cast<QAction *>(sender())) {
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
BuildStep *newStep = pair.second->create(m_configuration, m_type, pair.first);
int pos = m_configuration->steps(m_type).count();
m_configuration->insertStep(m_type, pos, newStep);
BuildStep *newStep = pair.second->create(m_buildStepList, pair.first);
int pos = m_buildStepList->count();
m_buildStepList->insertStep(pos, newStep);
addBuildStepWidget(pos, newStep);
const BuildStepsWidgetStruct s = m_buildSteps.at(pos);
@@ -239,9 +228,9 @@ void BuildStepsPage::addBuildStep()
updateBuildStepButtonsState();
}
void BuildStepsPage::stepMoveUp(int pos)
void BuildStepListWidget::stepMoveUp(int pos)
{
m_configuration->moveStepUp(m_type, pos);
m_buildStepList->moveStepUp(pos);
m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget);
@@ -250,14 +239,14 @@ void BuildStepsPage::stepMoveUp(int pos)
updateBuildStepButtonsState();
}
void BuildStepsPage::stepMoveDown(int pos)
void BuildStepListWidget::stepMoveDown(int pos)
{
stepMoveUp(pos + 1);
}
void BuildStepsPage::stepRemove(int pos)
void BuildStepListWidget::stepRemove(int pos)
{
if (m_configuration->removeStep(m_type, pos)) {
if (m_buildStepList->removeStep(pos)) {
BuildStepsWidgetStruct s = m_buildSteps.at(pos);
delete s.widget;
delete s.detailsWidget;
@@ -265,7 +254,7 @@ void BuildStepsPage::stepRemove(int pos)
updateBuildStepButtonsState();
bool hasSteps = m_configuration->steps(m_type).isEmpty();
bool hasSteps = m_buildStepList->isEmpty();
m_noStepsLabel->setVisible(hasSteps);
} else {
QMessageBox::warning(Core::ICore::instance()->mainWindow(),
@@ -275,7 +264,7 @@ void BuildStepsPage::stepRemove(int pos)
}
}
void BuildStepsPage::setupUi()
void BuildStepListWidget::setupUi()
{
if (0 != m_addButton)
return;
@@ -301,19 +290,6 @@ void BuildStepsPage::setupUi()
QHBoxLayout *hboxLayout = new QHBoxLayout();
hboxLayout->setContentsMargins(0, 4, 0, 0);
m_addButton = new QPushButton(this);
switch (m_type) {
case BuildStep::Clean:
m_addButton->setText(tr("Add Clean Step"));
break;
case BuildStep::Build:
m_addButton->setText(tr("Add Build Step"));
break;
case BuildStep::Deploy:
m_addButton->setText(tr("Add Deploy Step"));
break;
default:
m_addButton->setText(tr("Add Step"));
}
m_addButton->setMenu(new QMenu(this));
hboxLayout->addWidget(m_addButton);
@@ -329,21 +305,69 @@ void BuildStepsPage::setupUi()
this, SLOT(updateAddBuildStepMenu()));
}
void BuildStepsPage::updateBuildStepButtonsState()
void BuildStepListWidget::updateBuildStepButtonsState()
{
const QList<BuildStep *> &steps = m_configuration->steps(m_type);
for(int i = 0; i < m_buildSteps.count(); ++i) {
BuildStepsWidgetStruct s = m_buildSteps.at(i);
s.removeButton->setEnabled(!steps.at(i)->immutable());
s.removeButton->setEnabled(!m_buildStepList->at(i)->immutable());
m_removeMapper->setMapping(s.removeButton, i);
s.upButton->setEnabled((i > 0) && !(steps.at(i)->immutable() && steps.at(i - 1)));
s.upButton->setEnabled((i > 0)
&& !(m_buildStepList->at(i)->immutable()
&& m_buildStepList->at(i - 1)));
m_upMapper->setMapping(s.upButton, i);
s.downButton->setEnabled((i + 1 < steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable()));
s.downButton->setEnabled((i + 1 < m_buildStepList->count())
&& !(m_buildStepList->at(i)->immutable()
&& m_buildStepList->at(i + 1)->immutable()));
m_downMapper->setMapping(s.downButton, i);
// Only show buttons when needed
s.downButton->setVisible(steps.count() != 1);
s.upButton->setVisible(steps.count() != 1);
s.downButton->setVisible(m_buildStepList->count() != 1);
s.upButton->setVisible(m_buildStepList->count() != 1);
}
}
BuildStepsPage::BuildStepsPage(Target *target, const QString &id) :
BuildConfigWidget(),
m_id(id),
m_widget(new BuildStepListWidget(this))
{
Q_UNUSED(target);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(m_widget);
}
BuildStepsPage::~BuildStepsPage()
{ }
QString BuildStepsPage::displayName() const
{
if (m_id == QLatin1String(Constants::BUILDSTEPS_BUILD))
return tr("Build Steps");
if (m_id == QLatin1String(Constants::BUILDSTEPS_CLEAN))
return tr("Clean Steps");
return QString();
}
void BuildStepsPage::init(BuildConfiguration *bc)
{
m_widget->init(bc->stepList(m_id));
}
DeployConfigurationStepsWidget::DeployConfigurationStepsWidget(QWidget *parent) :
DeployConfigurationWidget(parent),
m_widget(new BuildStepListWidget(this))
{
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(m_widget);
}
void DeployConfigurationStepsWidget::init(DeployConfiguration *dc)
{
m_widget->init(dc->stepList());
setDisplayName(m_widget->displayName());
}
+40 -13
View File
@@ -31,7 +31,9 @@
#define BUILDSTEPSPAGE_H
#include "buildstep.h"
#include "buildconfiguration.h"
#include "deployconfiguration.h"
#include "namedwidget.h"
#include <utils/detailswidget.h>
QT_BEGIN_NAMESPACE
@@ -49,10 +51,6 @@ class BuildConfiguration;
namespace Internal {
namespace Ui {
class BuildStepsPage;
}
struct BuildStepsWidgetStruct
{
BuildStepConfigWidget *widget;
@@ -62,16 +60,15 @@ struct BuildStepsWidgetStruct
QToolButton *removeButton;
};
class BuildStepsPage : public BuildConfigWidget
class BuildStepListWidget : public NamedWidget
{
Q_OBJECT
public:
explicit BuildStepsPage(Target *target, BuildStep::Type type);
virtual ~BuildStepsPage();
BuildStepListWidget(QWidget *parent = 0);
virtual ~BuildStepListWidget();
QString displayName() const;
void init(BuildConfiguration *bc);
void init(BuildStepList *bsl);
private slots:
void updateAddBuildStepMenu();
@@ -86,11 +83,10 @@ private:
void updateBuildStepButtonsState();
void addBuildStepWidget(int pos, BuildStep *step);
BuildConfiguration * m_configuration;
BuildStepList *m_buildStepList;
QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash;
BuildStep::Type m_type;
QList<BuildStepsWidgetStruct> m_buildSteps;
QList<Internal::BuildStepsWidgetStruct> m_buildSteps;
QVBoxLayout *m_vbox;
@@ -104,6 +100,37 @@ private:
int m_leftMargin;
};
namespace Ui {
class BuildStepsPage;
}
class BuildStepsPage : public BuildConfigWidget
{
Q_OBJECT
public:
BuildStepsPage(Target *target, const QString &id);
virtual ~BuildStepsPage();
QString displayName() const;
void init(BuildConfiguration *bc);
private:
QString m_id;
BuildStepListWidget *m_widget;
};
class DeployConfigurationStepsWidget : public DeployConfigurationWidget
{
public:
explicit DeployConfigurationStepsWidget(QWidget *parent = 0);
void init(DeployConfiguration *dc);
private:
BuildStepListWidget *m_widget;
};
} // Internal
} // ProjectExplorer
@@ -0,0 +1,203 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 "deployconfiguration.h"
#include "buildmanager.h"
#include "buildsteplist.h"
#include "buildstepspage.h"
#include "projectexplorer.h"
#include "projectexplorerconstants.h"
#include "target.h"
using namespace ProjectExplorer;
namespace {
const char * const BUILD_STEP_LIST_COUNT("ProjectExplorer.BuildConfiguration.BuildStepListCount");
const char * const BUILD_STEP_LIST_PREFIX("ProjectExplorer.BuildConfiguration.BuildStepList.");
} // namespace
DeployConfiguration::DeployConfiguration(Target *target, const QString &id) :
ProjectConfiguration(target, id),
m_stepList(0)
{
Q_ASSERT(target);
m_stepList = new BuildStepList(this, QLatin1String(Constants::BUILDSTEPS_DEPLOY));
//: Display name of the deploy build step list. Used as part of the labels in the project window.
m_stepList->setDisplayName(tr("Deploy"));
setDisplayName(tr("No deployment"));
}
DeployConfiguration::DeployConfiguration(Target *target, DeployConfiguration *source) :
ProjectConfiguration(target, source)
{
Q_ASSERT(target);
// Do not clone stepLists here, do that in the derived constructor instead
// otherwise BuildStepFactories might reject to set up a BuildStep for us
// since we are not yet the derived class!
}
DeployConfiguration::~DeployConfiguration()
{
delete m_stepList;
}
BuildStepList *DeployConfiguration::stepList() const
{
return m_stepList;
}
QVariantMap DeployConfiguration::toMap() const
{
QVariantMap map(ProjectConfiguration::toMap());
map.insert(QLatin1String(BUILD_STEP_LIST_COUNT), 1);
map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) % QLatin1String("0"), m_stepList->toMap());
return map;
}
DeployConfigurationWidget *DeployConfiguration::configurationWidget() const
{
return 0;
}
bool DeployConfiguration::fromMap(const QVariantMap &map)
{
if (!ProjectConfiguration::fromMap(map))
return false;
int maxI = map.value(QLatin1String(BUILD_STEP_LIST_COUNT), 0).toInt();
Q_ASSERT(maxI == 1);
QVariantMap data = map.value(QLatin1String(BUILD_STEP_LIST_PREFIX) % QLatin1String("0")).toMap();
if (!data.isEmpty()) {
m_stepList = new BuildStepList(this, data);
if (m_stepList->isNull()) {
qWarning() << "Failed to restore deploy step list";
delete m_stepList;
m_stepList = 0;
return false;
}
} else {
qWarning() << "No data for deploy step list found!";
}
// TODO: We assume that we have hold the deploy list
Q_ASSERT(m_stepList && m_stepList->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY));
return true;
}
Target *DeployConfiguration::target() const
{
return static_cast<Target *>(parent());
}
void DeployConfiguration::cloneSteps(DeployConfiguration *source)
{
if (source == this)
return;
delete m_stepList;
m_stepList = new BuildStepList(this, source->stepList());
}
///
// DeployConfigurationFactory
///
DeployConfigurationFactory::DeployConfigurationFactory(QObject *parent) :
QObject(parent)
{ }
DeployConfigurationFactory::~DeployConfigurationFactory()
{ }
QStringList DeployConfigurationFactory::availableCreationIds(Target *parent) const
{
Q_UNUSED(parent);
return QStringList() << QLatin1String(Constants::DEFAULT_DEPLOYCONFIGURATION_ID);
}
QString DeployConfigurationFactory::displayNameForId(const QString &id) const
{
if (id == QLatin1String(Constants::DEFAULT_DEPLOYCONFIGURATION_ID))
//: Display name of the default deploy configuration
return tr("Deploy Configuration");
return QString();
}
bool DeployConfigurationFactory::canCreate(Target *parent, const QString &id) const
{
Q_UNUSED(parent);
return id == QLatin1String(Constants::DEFAULT_DEPLOYCONFIGURATION_ID);
}
DeployConfiguration *DeployConfigurationFactory::create(Target *parent, const QString &id)
{
if (!canCreate(parent, id))
return 0;
return new DeployConfiguration(parent, id);
}
bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
return canCreate(parent, idFromMap(map));
}
DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
{
if (!canRestore(parent, map))
return 0;
DeployConfiguration *dc = new DeployConfiguration(parent, idFromMap(map));
if (!dc->fromMap(map)) {
delete dc;
return 0;
}
return dc;
}
bool DeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const
{
return canCreate(parent, product->id());
}
DeployConfiguration *DeployConfigurationFactory::clone(Target *parent, DeployConfiguration *product)
{
if (!canClone(parent, product))
return 0;
return new DeployConfiguration(parent, product);
}
///
// DeployConfigurationWidget
///
DeployConfigurationWidget::DeployConfigurationWidget(QWidget *parent) : NamedWidget(parent)
{ }
@@ -0,0 +1,122 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 PROJECTEXPLORER_DEPLOYCONFIGURATION_H
#define PROJECTEXPLORER_DEPLOYCONFIGURATION_H
#include "projectexplorer_export.h"
#include "environment.h"
#include "namedwidget.h"
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QList>
#include <QtCore/QObject>
#include "projectconfiguration.h"
namespace ProjectExplorer {
class BuildStepList;
class Target;
class DeployConfigurationFactory;
class DeployConfigurationWidget;
class PROJECTEXPLORER_EXPORT DeployConfiguration : public ProjectConfiguration
{
Q_OBJECT
public:
// ctors are protected
virtual ~DeployConfiguration();
BuildStepList *stepList() const;
virtual QVariantMap toMap() const;
virtual DeployConfigurationWidget *configurationWidget() const;
Target *target() const;
protected:
DeployConfiguration(Target *target, const QString &id);
DeployConfiguration(Target *target, DeployConfiguration *source);
void cloneSteps(DeployConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
private:
friend class DeployConfigurationFactory;
BuildStepList *m_stepList;
};
class PROJECTEXPLORER_EXPORT DeployConfigurationFactory :
public QObject
{
Q_OBJECT
public:
explicit DeployConfigurationFactory(QObject *parent = 0);
virtual ~DeployConfigurationFactory();
// used to show the list of possible additons to a target, returns a list of types
virtual QStringList availableCreationIds(Target *parent) const;
// used to translate the types to names to display to the user
virtual QString displayNameForId(const QString &id) const;
virtual bool canCreate(Target *parent, const QString &id) const;
virtual DeployConfiguration *create(Target *parent, const QString &id);
// used to recreate the runConfigurations when restoring settings
virtual bool canRestore(Target *parent, const QVariantMap &map) const;
virtual DeployConfiguration *restore(Target *parent, const QVariantMap &map);
virtual bool canClone(Target *parent, DeployConfiguration *product) const;
virtual DeployConfiguration *clone(Target *parent, DeployConfiguration *product);
signals:
void availableCreationIdsChanged();
};
class PROJECTEXPLORER_EXPORT DeployConfigurationWidget : public NamedWidget
{
Q_OBJECT
public:
explicit DeployConfigurationWidget(QWidget *parent = 0);
// This is called to set up the config widget before showing it
virtual void init(DeployConfiguration *dc) = 0;
};
} // namespace ProjectExplorer
Q_DECLARE_METATYPE(ProjectExplorer::DeployConfiguration *);
#endif // PROJECTEXPLORER_DEPLOYCONFIGURATION_H
@@ -0,0 +1,181 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 "deployconfigurationmodel.h"
#include "target.h"
#include "deployconfiguration.h"
using namespace ProjectExplorer;
///
/// DeployConfigurationsModel
///
class DeployConfigurationComparer
{
public:
bool operator()(DeployConfiguration *a, DeployConfiguration *b)
{
return a->displayName() < b->displayName();
}
};
DeployConfigurationModel::DeployConfigurationModel(Target *target, QObject *parent)
: QAbstractListModel(parent),
m_target(target)
{
m_deployConfigurations = m_target->deployConfigurations();
qSort(m_deployConfigurations.begin(), m_deployConfigurations.end(), DeployConfigurationComparer());
connect(target, SIGNAL(addedDeployConfiguration(ProjectExplorer::DeployConfiguration*)),
this, SLOT(addedDeployConfiguration(ProjectExplorer::DeployConfiguration*)));
connect(target, SIGNAL(removedDeployConfiguration(ProjectExplorer::DeployConfiguration*)),
this, SLOT(removedDeployConfiguration(ProjectExplorer::DeployConfiguration*)));
foreach (DeployConfiguration *dc, m_deployConfigurations)
connect(dc, SIGNAL(displayNameChanged()),
this, SLOT(displayNameChanged()));
}
int DeployConfigurationModel::rowCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : m_deployConfigurations.size();
}
int DeployConfigurationModel::columnCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : 1;
}
void DeployConfigurationModel::displayNameChanged()
{
DeployConfiguration *dc = qobject_cast<DeployConfiguration *>(sender());
if (!dc)
return;
DeployConfigurationComparer compare;
// Find the old position
int oldPos = m_deployConfigurations.indexOf(dc);
if (oldPos >= 1 && compare(m_deployConfigurations.at(oldPos), m_deployConfigurations.at(oldPos - 1))) {
// We need to move up
int newPos = oldPos - 1;
while (newPos >= 0 && compare(m_deployConfigurations.at(oldPos), m_deployConfigurations.at(newPos))) {
--newPos;
}
++newPos;
beginMoveRows(QModelIndex(), oldPos, oldPos, QModelIndex(), newPos);
m_deployConfigurations.insert(newPos, dc);
m_deployConfigurations.removeAt(oldPos + 1);
endMoveRows();
// Not only did we move, we also changed...
emit dataChanged(index(newPos, 0), index(newPos,0));
} else if (oldPos < m_deployConfigurations.size() - 1
&& compare(m_deployConfigurations.at(oldPos + 1), m_deployConfigurations.at(oldPos))) {
// We need to move down
int newPos = oldPos + 1;
while (newPos < m_deployConfigurations.size()
&& compare(m_deployConfigurations.at(newPos), m_deployConfigurations.at(oldPos))) {
++newPos;
}
beginMoveRows(QModelIndex(), oldPos, oldPos, QModelIndex(), newPos);
m_deployConfigurations.insert(newPos, dc);
m_deployConfigurations.removeAt(oldPos);
endMoveRows();
// We need to subtract one since removing at the old place moves the newIndex down
emit dataChanged(index(newPos - 1, 0), index(newPos - 1, 0));
} else {
emit dataChanged(index(oldPos, 0), index(oldPos, 0));
}
}
QVariant DeployConfigurationModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) {
const int row = index.row();
if (row < m_deployConfigurations.size()) {
return m_deployConfigurations.at(row)->displayName();
}
}
return QVariant();
}
DeployConfiguration *DeployConfigurationModel::deployConfigurationAt(int i)
{
if (i > m_deployConfigurations.size() || i < 0)
return 0;
return m_deployConfigurations.at(i);
}
DeployConfiguration *DeployConfigurationModel::deployConfigurationFor(const QModelIndex &idx)
{
if (idx.row() > m_deployConfigurations.size() || idx.row() < 0)
return 0;
return m_deployConfigurations.at(idx.row());
}
QModelIndex DeployConfigurationModel::indexFor(DeployConfiguration *rc)
{
int idx = m_deployConfigurations.indexOf(rc);
if (idx == -1)
return QModelIndex();
return index(idx, 0);
}
void DeployConfigurationModel::addedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc)
{
// Find the right place to insert
DeployConfigurationComparer compare;
int i = 0;
for (; i < m_deployConfigurations.size(); ++i) {
if (compare(dc, m_deployConfigurations.at(i))) {
break;
}
}
beginInsertRows(QModelIndex(), i, i);
m_deployConfigurations.insert(i, dc);
endInsertRows();
connect(dc, SIGNAL(displayNameChanged()),
this, SLOT(displayNameChanged()));
}
void DeployConfigurationModel::removedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc)
{
int i = m_deployConfigurations.indexOf(dc);
if (i < 0)
return;
beginRemoveRows(QModelIndex(), i, i);
m_deployConfigurations.removeAt(i);
endRemoveRows();
}
@@ -0,0 +1,68 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 PROJECTEXPLORER_DEPLOYCONFIGURATIONMODEL_H
#define PROJECTEXPLORER_DEPLOYCONFIGURATIONMODEL_H
#include <QtCore/QAbstractItemModel>
namespace ProjectExplorer {
class Target;
class DeployConfiguration;
/*! A model to represent the run configurations of a target.
To be used in for the drop down of comboboxes
Does automatically adjust itself to added and removed RunConfigurations
*/
class DeployConfigurationModel : public QAbstractListModel
{
Q_OBJECT
public:
DeployConfigurationModel(Target *target, QObject *parent = 0);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
DeployConfiguration *deployConfigurationAt(int i);
DeployConfiguration *deployConfigurationFor(const QModelIndex &idx);
QModelIndex indexFor(DeployConfiguration *rc);
private slots:
void addedDeployConfiguration(ProjectExplorer::DeployConfiguration*);
void removedDeployConfiguration(ProjectExplorer::DeployConfiguration*);
void displayNameChanged();
private:
Target *m_target;
QList<DeployConfiguration *> m_deployConfigurations;
};
} // namespace ProjectExplorer
#endif // PROJECTEXPLORER_DEPLOYCONFIGURATIONMODEL_H
@@ -0,0 +1,52 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 "namedwidget.h"
using namespace ProjectExplorer;
///
// NamedWidget
///
NamedWidget::NamedWidget(QWidget *parent) : QWidget(parent)
{ }
QString NamedWidget::displayName() const
{
return m_displayName;
}
void NamedWidget::setDisplayName(const QString &displayName)
{
if (m_displayName == displayName)
return;
m_displayName = displayName;
emit displayNameChanged(m_displayName);
}
+60
View File
@@ -0,0 +1,60 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 PROJECTEXPLORER_NAMEDWIDGET_H
#define PROJECTEXPLORER_NAMEDWIDGET_H
#include "projectexplorer_export.h"
#include <QtGui/QWidget>
namespace ProjectExplorer {
class PROJECTEXPLORER_EXPORT NamedWidget : public QWidget
{
Q_OBJECT
public:
NamedWidget(QWidget *parent = 0);
QString displayName() const;
signals:
void displayNameChanged(const QString &);
protected:
void setDisplayName(const QString &displayName);
private:
QString m_displayName;
};
} // namespace ProjectExplorer
#endif // PROJECTEXPLORER_NAMEDWIDGET_H
+22 -23
View File
@@ -50,20 +50,20 @@ const char * const PROCESS_ARGUMENTS_KEY("ProjectExplorer.ProcessStep.Arguments"
const char * const PROCESS_ENABLED_KEY("ProjectExplorer.ProcessStep.Enabled");
}
ProcessStep::ProcessStep(BuildConfiguration *bc) :
AbstractProcessStep(bc, QLatin1String(PROCESS_STEP_ID))
ProcessStep::ProcessStep(BuildStepList *bsl) :
AbstractProcessStep(bsl, QLatin1String(PROCESS_STEP_ID))
{
ctor();
}
ProcessStep::ProcessStep(BuildConfiguration *bc, const QString &id) :
AbstractProcessStep(bc, id)
ProcessStep::ProcessStep(BuildStepList *bsl, const QString &id) :
AbstractProcessStep(bsl, id)
{
ctor();
}
ProcessStep::ProcessStep(BuildConfiguration *bc, ProcessStep *bs) :
AbstractProcessStep(bc, bs),
ProcessStep::ProcessStep(BuildStepList *bsl, ProcessStep *bs) :
AbstractProcessStep(bsl, bs),
m_name(bs->m_name),
m_command(bs->m_command),
m_arguments(bs->m_arguments),
@@ -85,16 +85,17 @@ ProcessStep::~ProcessStep()
bool ProcessStep::init()
{
setEnvironment(buildConfiguration()->environment());
BuildConfiguration *bc = buildConfiguration();
setEnvironment(bc->environment());
QString wd = workingDirectory();
if (wd.isEmpty())
wd = "$BUILDDIR";
AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", buildConfiguration()->buildDirectory()));
AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", bc->buildDirectory()));
AbstractProcessStep::setCommand(m_command);
AbstractProcessStep::setEnabled(m_enabled);
AbstractProcessStep::setArguments(m_arguments);
setOutputParser(buildConfiguration()->createOutputParser());
setOutputParser(bc->createOutputParser());
return AbstractProcessStep::init();
}
@@ -185,41 +186,40 @@ ProcessStepFactory::~ProcessStepFactory()
{
}
bool ProcessStepFactory::canCreate(BuildConfiguration *parent, BuildStep::Type type, const QString &id) const
bool ProcessStepFactory::canCreate(BuildStepList *parent, const QString &id) const
{
Q_UNUSED(parent);
Q_UNUSED(type);
return id == QLatin1String(PROCESS_STEP_ID);
}
BuildStep *ProcessStepFactory::create(BuildConfiguration *parent, BuildStep::Type type, const QString &id)
BuildStep *ProcessStepFactory::create(BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new ProcessStep(parent);
}
bool ProcessStepFactory::canClone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *bs) const
bool ProcessStepFactory::canClone(BuildStepList *parent, BuildStep *bs) const
{
return canCreate(parent, type, bs->id());
return canCreate(parent, bs->id());
}
BuildStep *ProcessStepFactory::clone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *bs)
BuildStep *ProcessStepFactory::clone(BuildStepList *parent, BuildStep *bs)
{
if (!canClone(parent, type, bs))
if (!canClone(parent, bs))
return 0;
return new ProcessStep(parent, static_cast<ProcessStep *>(bs));
}
bool ProcessStepFactory::canRestore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map) const
bool ProcessStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
BuildStep *ProcessStepFactory::restore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map)
BuildStep *ProcessStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
ProcessStep *bs(new ProcessStep(parent));
@@ -229,10 +229,9 @@ BuildStep *ProcessStepFactory::restore(BuildConfiguration *parent, BuildStep::Ty
return 0;
}
QStringList ProcessStepFactory::availableCreationIds(BuildConfiguration *parent, BuildStep::Type type) const
QStringList ProcessStepFactory::availableCreationIds(BuildStepList *parent) const
{
Q_UNUSED(parent);
Q_UNUSED(type);
return QStringList() << QLatin1String(PROCESS_STEP_ID);
}
QString ProcessStepFactory::displayNameForId(const QString &id) const
+10 -10
View File
@@ -46,15 +46,15 @@ public:
ProcessStepFactory();
~ProcessStepFactory();
virtual QStringList availableCreationIds(BuildConfiguration *parent, BuildStep::Type type) const;
virtual QStringList availableCreationIds(BuildStepList *parent) const;
virtual QString displayNameForId(const QString &id) const;
virtual bool canCreate(BuildConfiguration *parent, BuildStep::Type type, const QString &id) const;
virtual BuildStep *create(BuildConfiguration *parent, BuildStep::Type type, const QString &id);
virtual bool canRestore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map) const;
virtual BuildStep *restore(BuildConfiguration *parent, BuildStep::Type type, const QVariantMap &map);
virtual bool canClone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *product) const;
virtual BuildStep *clone(BuildConfiguration *parent, BuildStep::Type type, BuildStep *product);
virtual bool canCreate(BuildStepList *parent, const QString &id) const;
virtual BuildStep *create(BuildStepList *parent, const QString &id);
virtual bool canRestore(BuildStepList *parent, const QVariantMap &map) const;
virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
virtual bool canClone(BuildStepList *parent, BuildStep *product) const;
virtual BuildStep *clone(BuildStepList *parent, BuildStep *product);
};
class ProcessStep : public ProjectExplorer::AbstractProcessStep
@@ -63,7 +63,7 @@ class ProcessStep : public ProjectExplorer::AbstractProcessStep
friend class ProcessStepFactory;
public:
explicit ProcessStep(BuildConfiguration *bc);
explicit ProcessStep(BuildStepList *bsl);
virtual ~ProcessStep();
virtual bool init();
@@ -85,8 +85,8 @@ public:
QVariantMap toMap() const;
protected:
ProcessStep(BuildConfiguration *bc, ProcessStep *bs);
ProcessStep(BuildConfiguration *bc, const QString &id);
ProcessStep(BuildStepList *bsl, ProcessStep *bs);
ProcessStep(BuildStepList *bsl, const QString &id);
bool fromMap(const QVariantMap &map);
+1 -2
View File
@@ -40,8 +40,6 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/qtcassert.h>
#include <QtCore/QDebug>
using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
@@ -51,6 +49,7 @@ const char * const TARGET_KEY_PREFIX("ProjectExplorer.Project.Target.");
const char * const TARGET_COUNT_KEY("ProjectExplorer.Project.TargetCount");
const char * const EDITOR_SETTINGS_KEY("ProjectExplorer.Project.EditorSettings");
} // namespace
// -------------------------------------------------------------------------
@@ -36,23 +36,23 @@ const char * const CONFIGURATION_ID_KEY("ProjectExplorer.ProjectConfiguration.Id
const char * const DISPLAY_NAME_KEY("ProjectExplorer.ProjectConfiguration.DisplayName");
}
ProjectConfiguration::ProjectConfiguration(const QString &id) :
ProjectConfiguration::ProjectConfiguration(QObject *parent, const QString &id) :
QObject(parent),
m_id(id)
{
Q_ASSERT(!m_id.isEmpty());
}
ProjectConfiguration::ProjectConfiguration(ProjectConfiguration *config)
ProjectConfiguration::ProjectConfiguration(QObject *parent, const ProjectConfiguration *source) :
QObject(parent)
{
Q_ASSERT(config);
m_id = config->m_id;
m_displayName = tr("Clone of %1").arg(config->displayName());
Q_ASSERT(!m_id.isEmpty());
Q_ASSERT(source);
m_id = source->m_id;
m_displayName = tr("Clone of %1").arg(source->displayName());
}
ProjectConfiguration::~ProjectConfiguration()
{
}
{ }
QString ProjectConfiguration::id() const
{
@@ -59,13 +59,15 @@ signals:
void displayNameChanged();
protected:
ProjectConfiguration(const QString &id);
ProjectConfiguration(ProjectConfiguration *config);
ProjectConfiguration(QObject *parent, const QString &id);
ProjectConfiguration(QObject *parent, const ProjectConfiguration *source);
// Note: Make sure subclasses call the superclasses toMap() method!
virtual bool fromMap(const QVariantMap &map);
private:
Q_DISABLE_COPY(ProjectConfiguration)
QString m_id;
QString m_displayName;
};
+89 -179
View File
@@ -29,6 +29,8 @@
#include "projectexplorer.h"
#include "buildsteplist.h"
#include "deployconfiguration.h"
#include "project.h"
#include "projectexplorersettings.h"
#include "target.h"
@@ -1482,221 +1484,141 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
//NBS handle case where there is no activeBuildConfiguration
// because someone delete all build configurations
void ProjectExplorerPlugin::deploy(QList<Project *> projects)
{
QStringList steps;
if (d->m_projectExplorerSettings.buildBeforeDeploy)
steps << Constants::BUILDSTEPS_BUILD;
steps << Constants::BUILDSTEPS_DEPLOY;
queue(projects, steps);
}
int ProjectExplorerPlugin::queue(QList<Project *> projects, QStringList stepIds)
{
if (debug) {
QStringList projectNames;
foreach (Project *p, projects)
projectNames << p->displayName();
qDebug() << "Building" << stepIds << "for projects" << projectNames;
}
if (!saveModifiedFiles())
return -1;
QList<BuildStepList *> stepLists;
foreach (Project *pro, projects) {
if (!pro || !pro->activeTarget())
continue;
foreach (const QString id, stepIds) {
BuildStepList *bsl = 0;
if (id == QLatin1String(Constants::BUILDSTEPS_DEPLOY)
&& pro->activeTarget()->activeDeployConfiguration())
bsl = pro->activeTarget()->activeDeployConfiguration()->stepList();
else if (pro->activeTarget()->activeBuildConfiguration())
bsl = pro->activeTarget()->activeBuildConfiguration()->stepList(id);
if (!bsl || bsl->isEmpty())
continue;
stepLists << bsl;
}
}
if (stepLists.isEmpty())
return 0;
if (!d->m_buildManager->buildLists(stepLists))
return -1;
return stepLists.count();
}
void ProjectExplorerPlugin::buildProjectOnly()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::buildProjectOnly";
if (saveModifiedFiles())
buildManager()->buildProject(session()->startupProject()->activeTarget()->activeBuildConfiguration());
queue(QList<Project *>() << session()->startupProject(), QStringList() << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::buildProject()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::buildProject";
if (saveModifiedFiles()) {
QList<BuildConfiguration *> configurations;
foreach (Project *pro, d->m_session->projectOrder(session()->startupProject()))
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(session()->startupProject()),
QStringList() << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::buildProjectContextMenu()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::buildProjectContextMenu";
if (saveModifiedFiles()) {
QList<BuildConfiguration *> configurations;
foreach (Project *pro, d->m_session->projectOrder(d->m_currentProject))
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(d->m_currentProject),
QStringList() << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::buildSession()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::buildSession";
if (saveModifiedFiles()) {
QList<BuildConfiguration *> configurations;
foreach (Project *pro, d->m_session->projectOrder())
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(),
QStringList() << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::rebuildProjectOnly()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::rebuildProjectOnly";
if (saveModifiedFiles()) {
d->m_buildManager->cleanProject(session()->startupProject()->activeTarget()->activeBuildConfiguration());
d->m_buildManager->buildProject(session()->startupProject()->activeTarget()->activeBuildConfiguration());
}
queue(QList<Project *>() << session()->startupProject(),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::rebuildProject()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::rebuildProject";
if (saveModifiedFiles()) {
const QList<Project *> &projects = d->m_session->projectOrder(session()->startupProject());
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(session()->startupProject()),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::rebuildProjectContextMenu()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::rebuildProjectContextMenu";
if (saveModifiedFiles()) {
const QList<Project *> &projects = d->m_session->projectOrder(d->m_currentProject);
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(d->m_currentProject),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::rebuildSession()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::rebuildSession";
if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder();
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
d->m_buildManager->buildProjects(configurations);
}
queue(d->m_session->projectOrder(),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_BUILD);
}
void ProjectExplorerPlugin::deployProjectOnly()
{
if (!saveModifiedFiles())
return;
d->m_buildManager->deployProject(session()->startupProject()->activeTarget()->activeBuildConfiguration());
deploy(QList<Project *>() << session()->startupProject());
}
void ProjectExplorerPlugin::deployProject()
{
if (!saveModifiedFiles())
return;
const QList<Project *> &projects = d->m_session->projectOrder(session()->startupProject());
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->deployProjects(configurations);
deploy(d->m_session->projectOrder(session()->startupProject()));
}
void ProjectExplorerPlugin::deployProjectContextMenu()
{
if (!saveModifiedFiles())
return;
QList<BuildConfiguration *> configurations;
foreach (Project *pro, d->m_session->projectOrder(d->m_currentProject))
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->deployProjects(configurations);
deploy(d->m_session->projectOrder(d->m_currentProject));
}
void ProjectExplorerPlugin::deploySession()
{
if (!saveModifiedFiles())
return;
const QList<Project *> & projects = d->m_session->projectOrder();
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->deployProjects(configurations);
deploy(d->m_session->projectOrder());
}
void ProjectExplorerPlugin::cleanProjectOnly()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::cleanProjectOnly";
if (saveModifiedFiles())
d->m_buildManager->cleanProject(session()->startupProject()->activeTarget()->activeBuildConfiguration());
queue(QList<Project *>() << session()->startupProject(),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_CLEAN);
}
void ProjectExplorerPlugin::cleanProject()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::cleanProject";
if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(session()->startupProject());
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
}
queue(d->m_session->projectOrder(session()->startupProject()),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_CLEAN);
}
void ProjectExplorerPlugin::cleanProjectContextMenu()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::cleanProjectContextMenu";
if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(d->m_currentProject);
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
}
queue(d->m_session->projectOrder(d->m_currentProject),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_CLEAN);
}
void ProjectExplorerPlugin::cleanSession()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::cleanSession";
if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder();
QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
if (pro->activeTarget()->activeBuildConfiguration())
configurations << pro->activeTarget()->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
}
queue(d->m_session->projectOrder(),
QStringList() << Constants::BUILDSTEPS_CLEAN << Constants::BUILDSTEPS_CLEAN);
}
void ProjectExplorerPlugin::runProject()
@@ -1722,8 +1644,8 @@ bool ProjectExplorerPlugin::hasDeploySettings(Project *pro)
{
const QList<Project *> & projects = d->m_session->projectOrder(pro);
foreach(Project *project, projects)
if (project->activeTarget()->activeBuildConfiguration() &&
!project->activeTarget()->activeBuildConfiguration()->steps(BuildStep::Deploy).isEmpty())
if (project->activeTarget()->activeDeployConfiguration() &&
!project->activeTarget()->activeDeployConfiguration()->stepList()->isEmpty())
return true;
return false;
}
@@ -1738,32 +1660,20 @@ void ProjectExplorerPlugin::runProjectImpl(Project *pro, QString mode)
return;
}
if (!saveModifiedFiles())
QStringList stepIds;
if (d->m_projectExplorerSettings.deployBeforeRun) {
if (d->m_projectExplorerSettings.buildBeforeDeploy)
stepIds << Constants::BUILDSTEPS_BUILD;
stepIds << Constants::BUILDSTEPS_DEPLOY;
}
const QList<Project *> &projects = d->m_session->projectOrder(pro);
int queueCount = queue(projects, stepIds);
if (queueCount < 0) // something went wrong
return;
bool delayRun = false;
// Deploy/build first?
if (d->m_projectExplorerSettings.deployBeforeRun) {
const QList<Project *> & projects = d->m_session->projectOrder(pro);
QList<BuildConfiguration *> configurations;
foreach(Project *project, projects)
if (project->activeTarget()->activeBuildConfiguration())
configurations << project->activeTarget()->activeBuildConfiguration();
if (d->m_projectExplorerSettings.buildBeforeDeploy && hasBuildSettings(pro)) {
if (!d->m_buildManager->buildProjects(configurations))
return;
delayRun = true;
}
if (hasDeploySettings(pro)) {
if (!d->m_buildManager->deployProjects(configurations))
return;
delayRun = true;
}
}
// Actually run (delayed)
if (delayRun) {
if (queueCount > 0) {
// delay running till after our queued steps were processed
d->m_runMode = mode;
d->m_delayedRunConfiguration = pro->activeTarget()->activeRunConfiguration();
} else {
@@ -207,6 +207,8 @@ private slots:
#endif
private:
void deploy(QList<Project *>);
int queue(QList<Project *>, QStringList stepIds);
void updateContextMenuActions(Node *node);
bool parseArguments(const QStringList &arguments, QString *error);
void runProjectImpl(Project *pro, QString mode);
@@ -13,7 +13,11 @@ HEADERS += projectexplorer.h \
projectexplorer_export.h \
projectwindow.h \
buildmanager.h \
buildsteplist.h \
compileoutputwindow.h \
deployconfiguration.h \
deployconfigurationmodel.h \
namedwidget.h \
target.h \
targetsettingspanel.h \
task.h \
@@ -93,7 +97,11 @@ HEADERS += projectexplorer.h \
SOURCES += projectexplorer.cpp \
projectwindow.cpp \
buildmanager.cpp \
buildsteplist.cpp \
compileoutputwindow.cpp \
deployconfiguration.cpp \
deployconfigurationmodel.cpp \
namedwidget.cpp \
target.cpp \
targetsettingspanel.cpp \
ioutputparser.cpp \
@@ -207,6 +207,14 @@ const char * const PROJECT_WIZARD_CATEGORY = "I.Projects"; // (after Qt)
const char * const PROJECT_WIZARD_TR_SCOPE = "ProjectExplorer";
const char * const PROJECT_WIZARD_TR_CATEGORY = QT_TRANSLATE_NOOP("ProjectExplorer", "Other Project");
// Build step lists ids:
const char * const BUILDSTEPS_CLEAN = "ProjectExplorer.BuildSteps.Clean";
const char * const BUILDSTEPS_BUILD = "ProjectExplorer.BuildSteps.Build";
const char * const BUILDSTEPS_DEPLOY = "ProjectExplorer.BuildSteps.Deploy";
// Deploy Configuration id:
const char * const DEFAULT_DEPLOYCONFIGURATION_ID = "ProjectExplorer.DefaultDeployConfiguration";
} // namespace Constants
} // namespace ProjectExplorer
@@ -136,17 +136,15 @@ IRunConfigurationFactory * findRunConfigurationFactory(RunConfigurationFactoryMa
// RunConfiguration
RunConfiguration::RunConfiguration(Target *target, const QString &id) :
ProjectConfiguration(id),
m_target(target)
ProjectConfiguration(target, id)
{
Q_ASSERT(m_target);
Q_ASSERT(target);
}
RunConfiguration::RunConfiguration(Target *target, RunConfiguration *source) :
ProjectConfiguration(source),
m_target(target)
ProjectConfiguration(target, source)
{
Q_ASSERT(m_target);
Q_ASSERT(target);
}
RunConfiguration::~RunConfiguration()
@@ -176,7 +174,7 @@ BuildConfiguration *RunConfiguration::activeBuildConfiguration() const
Target *RunConfiguration::target() const
{
return m_target;
return static_cast<Target *>(parent());
}
ProjectExplorer::OutputFormatter *RunConfiguration::createOutputFormatter() const
@@ -96,9 +96,6 @@ protected:
/// convenience method to get current build configuration.
BuildConfiguration *activeBuildConfiguration() const;
private:
Target *m_target;
};
/**
@@ -28,6 +28,10 @@
**************************************************************************/
#include "runsettingspropertiespage.h"
#include "buildstepspage.h"
#include "deployconfiguration.h"
#include "deployconfigurationmodel.h"
#include "runconfigurationmodel.h"
#include "runconfiguration.h"
#include "target.h"
@@ -39,7 +43,6 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/qtcassert.h>
#include <QtCore/QDebug>
#include <QtCore/QPair>
#include <QtGui/QMenu>
@@ -123,31 +126,64 @@ QIcon RunSettingsPanel::icon() const
RunSettingsWidget::RunSettingsWidget(Target *target)
: m_target(target),
m_runConfigurationsModel(new RunConfigurationModel(target, this)),
m_deployConfigurationModel(new DeployConfigurationModel(target, this)),
m_runConfigurationWidget(0),
m_deployConfigurationWidget(0),
m_deployLayout(0),
m_deploySteps(0),
m_ignoreChange(false)
{
Q_ASSERT(m_target);
m_ui = new Ui::RunSettingsPropertiesPage;
m_ui->setupUi(this);
m_addMenu = new QMenu(m_ui->addToolButton);
m_ui->addToolButton->setMenu(m_addMenu);
m_ui->addToolButton->setText(tr("Add"));
m_ui->removeToolButton->setText(tr("Remove"));
m_ui->deployWidget->setContentsMargins(0, 0, 0, 25);
m_deployLayout = new QVBoxLayout(m_ui->deployWidget);
m_deployLayout->setMargin(0);
m_deployLayout->setSpacing(5);
m_ui->deployConfigurationCombo->setModel(m_deployConfigurationModel);
m_addDeployMenu = new QMenu(m_ui->addDeployToolButton);
m_ui->addDeployToolButton->setMenu(m_addDeployMenu);
// deploy part
updateDeployConfiguration(m_target->activeDeployConfiguration());
m_ui->addDeployToolButton->setEnabled(m_target->activeDeployConfiguration());
m_ui->deployConfigurationCombo->setEnabled(m_target->activeDeployConfiguration());
m_ui->removeDeployToolButton->setEnabled(m_target->deployConfigurations().count() > 1);
connect(m_addDeployMenu, SIGNAL(aboutToShow()),
this, SLOT(aboutToShowDeployMenu()));
connect(m_ui->deployConfigurationCombo, SIGNAL(currentIndexChanged(int)),
this, SLOT(currentDeployConfigurationChanged(int)));
connect(m_ui->removeDeployToolButton, SIGNAL(clicked(bool)),
this, SLOT(removeDeployConfiguration()));
connect(m_target, SIGNAL(activeDeployConfigurationChanged(ProjectExplorer::DeployConfiguration*)),
this, SLOT(activeDeployConfigurationChanged()));
// run part
m_addRunMenu = new QMenu(m_ui->addRunToolButton);
m_ui->addRunToolButton->setMenu(m_addRunMenu);
m_ui->runConfigurationCombo->setModel(m_runConfigurationsModel);
m_ui->runConfigurationCombo->setCurrentIndex(
m_runConfigurationsModel->indexFor(m_target->activeRunConfiguration()).row());
m_ui->removeToolButton->setEnabled(m_target->runConfigurations().size() > 1);
m_ui->removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
m_runConfigurationWidget = m_target->activeRunConfiguration()->createConfigurationWidget();
layout()->addWidget(m_runConfigurationWidget);
QVBoxLayout *runLayout = new QVBoxLayout(m_ui->runWidget);
runLayout->setMargin(0);
runLayout->setSpacing(0);
runLayout->addWidget(m_runConfigurationWidget);
connect(m_addMenu, SIGNAL(aboutToShow()),
connect(m_addRunMenu, SIGNAL(aboutToShow()),
this, SLOT(aboutToShowAddMenu()));
connect(m_ui->runConfigurationCombo, SIGNAL(currentIndexChanged(int)),
this, SLOT(currentRunConfigurationChanged(int)));
connect(m_ui->removeToolButton, SIGNAL(clicked(bool)),
connect(m_ui->removeRunToolButton, SIGNAL(clicked(bool)),
this, SLOT(removeRunConfiguration()));
connect(m_target, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
@@ -170,13 +206,13 @@ RunSettingsWidget::~RunSettingsWidget()
void RunSettingsWidget::aboutToShowAddMenu()
{
m_addMenu->clear();
m_addRunMenu->clear();
QList<IRunConfigurationFactory *> factories =
ExtensionSystem::PluginManager::instance()->getObjects<IRunConfigurationFactory>();
foreach (IRunConfigurationFactory *factory, factories) {
QStringList ids = factory->availableCreationIds(m_target);
foreach (const QString &id, ids) {
QAction *action = m_addMenu->addAction(factory->displayNameForId(id));;
QAction *action = m_addRunMenu->addAction(factory->displayNameForId(id));;
FactoryAndId fai;
fai.factory = factory;
fai.id = id;
@@ -200,14 +236,14 @@ void RunSettingsWidget::addRunConfiguration()
return;
m_target->addRunConfiguration(newRC);
m_target->setActiveRunConfiguration(newRC);
m_ui->removeToolButton->setEnabled(m_target->runConfigurations().size() > 1);
m_ui->removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
}
void RunSettingsWidget::removeRunConfiguration()
{
RunConfiguration *rc = m_target->activeRunConfiguration();
m_target->removeRunConfiguration(rc);
m_ui->removeToolButton->setEnabled(m_target->runConfigurations().size() > 1);
m_ui->removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
}
void RunSettingsWidget::activeRunConfigurationChanged()
@@ -245,3 +281,76 @@ void RunSettingsWidget::currentRunConfigurationChanged(int index)
m_runConfigurationWidget = selectedRunConfiguration->createConfigurationWidget();
layout()->addWidget(m_runConfigurationWidget);
}
void RunSettingsWidget::currentDeployConfigurationChanged(int index)
{
if (index == -1)
updateDeployConfiguration(0);
else
m_target->setActiveDeployConfiguration(m_deployConfigurationModel->deployConfigurationAt(index));
}
void RunSettingsWidget::aboutToShowDeployMenu()
{
m_addDeployMenu->clear();
DeployConfigurationFactory *factory = m_target->deployConfigurationFactory();
QStringList ids = factory->availableCreationIds(m_target);
foreach (const QString &id, ids) {
QAction *action = m_addDeployMenu->addAction(factory->displayNameForId(id));;
action->setData(QVariant(id));
connect(action, SIGNAL(triggered()),
this, SLOT(addDeployConfiguration()));
}
}
void RunSettingsWidget::addDeployConfiguration()
{
QAction *act = qobject_cast<QAction *>(sender());
if (!act)
return;
QString id = act->data().toString();
DeployConfiguration *newDc = m_target->deployConfigurationFactory()->create(m_target, id);
if (!newDc)
return;
m_target->addDeployConfiguration(newDc);
m_target->setActiveDeployConfiguration(newDc);
m_ui->removeDeployToolButton->setEnabled(m_target->deployConfigurations().size() > 1);
}
void RunSettingsWidget::removeDeployConfiguration()
{
DeployConfiguration *dc = m_target->activeDeployConfiguration();
m_target->removeDeployConfiguration(dc);
m_ui->removeDeployToolButton->setEnabled(m_target->deployConfigurations().size() > 1);
}
void RunSettingsWidget::activeDeployConfigurationChanged()
{
updateDeployConfiguration(m_target->activeDeployConfiguration());
}
void RunSettingsWidget::updateDeployConfiguration(DeployConfiguration *dc)
{
delete m_deployConfigurationWidget;
m_deployConfigurationWidget = 0;
delete m_deploySteps;
m_deploySteps = 0;
m_ui->deployConfigurationCombo->setCurrentIndex(-1);
if (!dc)
return;
QModelIndex actDc = m_deployConfigurationModel->indexFor(dc);
m_ui->deployConfigurationCombo->setCurrentIndex(actDc.row());
m_deployConfigurationWidget = dc->configurationWidget();
if (m_deployConfigurationWidget) {
m_deployConfigurationWidget->init(dc);
m_deployLayout->addWidget(m_deployConfigurationWidget);
}
m_deploySteps = new BuildStepListWidget;
m_deploySteps->init(dc->stepList());
m_deployLayout->addWidget(m_deploySteps);
}
@@ -37,11 +37,14 @@
QT_BEGIN_NAMESPACE
class QMenu;
class QLabel;
class QVBoxLayout;
QT_END_NAMESPACE
namespace ProjectExplorer {
class RunConfiguration;
class DeployConfiguration;
class DeployConfigurationWidget;
class DeployConfigurationModel;
class RunConfigurationModel;
namespace Internal {
@@ -53,6 +56,7 @@ class RunSettingsPropertiesPage;
}
class RunSettingsWidget;
class BuildStepListWidget;
class RunSettingsPanelFactory : public ITargetPanelFactory
{
@@ -91,12 +95,24 @@ private slots:
void addRunConfiguration();
void removeRunConfiguration();
void activeRunConfigurationChanged();
void currentDeployConfigurationChanged(int index);
void aboutToShowDeployMenu();
void addDeployConfiguration();
void removeDeployConfiguration();
void activeDeployConfigurationChanged();
private:
void updateDeployConfiguration(DeployConfiguration *);
Target *m_target;
RunConfigurationModel *m_runConfigurationsModel;
DeployConfigurationModel *m_deployConfigurationModel;
Ui::RunSettingsPropertiesPage *m_ui;
QWidget *m_runConfigurationWidget;
QMenu *m_addMenu;
DeployConfigurationWidget *m_deployConfigurationWidget;
QVBoxLayout *m_deployLayout;
BuildStepListWidget *m_deploySteps;
QMenu *m_addRunMenu;
QMenu *m_addDeployMenu;
bool m_ignoreChange;
};
@@ -6,79 +6,109 @@
<rect>
<x>0</x>
<y>0</y>
<width>480</width>
<height>32</height>
<width>474</width>
<height>191</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Run configuration:</string>
</property>
<property name="buddy">
<cstring>runConfigurationCombo</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="runConfigurationCombo">
<property name="maximumSize">
<size>
<width>500</width>
<height>16777215</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<property name="minimumContentsLength">
<number>15</number>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addToolButton">
<property name="text">
<string>+</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeToolButton">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>39</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="deployLabel">
<property name="text">
<string>Deployment:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="deployConfigurationCombo"/>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="addDeployToolButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="removeDeployToolButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="5">
<widget class="QWidget" name="deployWidget" native="true"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="runLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Run configuration:</string>
</property>
<property name="buddy">
<cstring>runConfigurationCombo</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="runConfigurationCombo">
<property name="maximumSize">
<size>
<width>500</width>
<height>16777215</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<property name="minimumContentsLength">
<number>15</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="addRunToolButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="removeRunToolButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="2" column="4">
<spacer name="runHorizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>17</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0" colspan="5">
<widget class="QWidget" name="runWidget" native="true"/>
</item>
</layout>
</widget>
<layoutdefault spacing="0" margin="0"/>
<resources/>
<connections/>
</ui>
+105 -7
View File
@@ -30,6 +30,7 @@
#include "target.h"
#include "buildconfiguration.h"
#include "deployconfiguration.h"
#include "project.h"
#include "runconfiguration.h"
@@ -42,6 +43,10 @@ const char * const ACTIVE_BC_KEY("ProjectExplorer.Target.ActiveBuildConfiguratio
const char * const BC_KEY_PREFIX("ProjectExplorer.Target.BuildConfiguration.");
const char * const BC_COUNT_KEY("ProjectExplorer.Target.BuildConfigurationCount");
const char * const ACTIVE_DC_KEY("ProjectExplorer.Target.ActiveDeployConfiguration");
const char * const DC_KEY_PREFIX("ProjectExplorer.Target.DeployConfiguration.");
const char * const DC_COUNT_KEY("ProjectExplorer.Target.DeployConfigurationCount");
const char * const ACTIVE_RC_KEY("ProjectExplorer.Target.ActiveRunConfiguration");
const char * const RC_KEY_PREFIX("ProjectExplorer.Target.RunConfiguration.");
const char * const RC_COUNT_KEY("ProjectExplorer.Target.RunConfigurationCount");
@@ -53,10 +58,10 @@ const char * const RC_COUNT_KEY("ProjectExplorer.Target.RunConfigurationCount");
// -------------------------------------------------------------------------
Target::Target(Project *project, const QString &id) :
ProjectConfiguration(id),
m_project(project),
ProjectConfiguration(project, id),
m_isEnabled(true),
m_activeBuildConfiguration(0),
m_activeDeployConfiguration(0),
m_activeRunConfiguration(0)
{
}
@@ -76,7 +81,7 @@ void Target::changeEnvironment()
Project *Target::project() const
{
return m_project;
return static_cast<Project *>(parent());
}
void Target::addBuildConfiguration(BuildConfiguration *configuration)
@@ -148,6 +153,72 @@ void Target::setActiveBuildConfiguration(BuildConfiguration *configuration)
}
}
void Target::addDeployConfiguration(DeployConfiguration *dc)
{
QTC_ASSERT(dc && !m_deployConfigurations.contains(dc), return);
Q_ASSERT(dc->target() == this);
if (!deployConfigurationFactory())
return;
// Check that we don't have a configuration with the same displayName
QString configurationDisplayName = dc->displayName();
QStringList displayNames;
foreach (const DeployConfiguration *bc, m_deployConfigurations)
displayNames << bc->displayName();
configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames);
dc->setDisplayName(configurationDisplayName);
// add it
m_deployConfigurations.push_back(dc);
emit addedDeployConfiguration(dc);
if (!m_activeDeployConfiguration)
setActiveDeployConfiguration(dc);
Q_ASSERT(activeDeployConfiguration());
}
void Target::removeDeployConfiguration(DeployConfiguration *dc)
{
//todo: this might be error prone
if (!m_deployConfigurations.contains(dc))
return;
m_deployConfigurations.removeOne(dc);
emit removedDeployConfiguration(dc);
if (activeDeployConfiguration() == dc) {
if (m_deployConfigurations.isEmpty())
setActiveDeployConfiguration(0);
else
setActiveDeployConfiguration(m_deployConfigurations.at(0));
}
delete dc;
}
QList<DeployConfiguration *> Target::deployConfigurations() const
{
return m_deployConfigurations;
}
DeployConfiguration *Target::activeDeployConfiguration() const
{
return m_activeDeployConfiguration;
}
void Target::setActiveDeployConfiguration(DeployConfiguration *dc)
{
if ((!dc && m_deployConfigurations.isEmpty()) ||
(dc && m_deployConfigurations.contains(dc) &&
dc != m_activeDeployConfiguration)) {
m_activeDeployConfiguration = dc;
emit activeDeployConfigurationChanged(m_activeDeployConfiguration);
}
}
QList<RunConfiguration *> Target::runConfigurations() const
{
return m_runConfigurations;
@@ -245,6 +316,12 @@ QVariantMap Target::toMap() const
for (int i = 0; i < bcs.size(); ++i)
map.insert(QString::fromLatin1(BC_KEY_PREFIX) + QString::number(i), bcs.at(i)->toMap());
const QList<DeployConfiguration *> dcs = deployConfigurations();
map.insert(QLatin1String(ACTIVE_DC_KEY), dcs.indexOf(m_activeDeployConfiguration));
map.insert(QLatin1String(DC_COUNT_KEY), dcs.size());
for (int i = 0; i < dcs.size(); ++i)
map.insert(QString::fromLatin1(DC_KEY_PREFIX) + QString::number(i), dcs.at(i)->toMap());
const QList<RunConfiguration *> rcs = runConfigurations();
map.insert(QLatin1String(ACTIVE_RC_KEY), rcs.indexOf(m_activeRunConfiguration));
map.insert(QLatin1String(RC_COUNT_KEY), rcs.size());
@@ -292,6 +369,29 @@ bool Target::fromMap(const QVariantMap &map)
if (buildConfigurations().isEmpty() && buildConfigurationFactory())
return false;
int dcCount(map.value(QLatin1String(DC_COUNT_KEY), 0).toInt(&ok));
if (!ok || dcCount < 0)
dcCount = 0;
activeConfiguration = map.value(QLatin1String(ACTIVE_DC_KEY), 0).toInt(&ok);
if (!ok || activeConfiguration < 0)
activeConfiguration = 0;
if (0 > activeConfiguration || dcCount < activeConfiguration)
activeConfiguration = 0;
for (int i = 0; i < dcCount; ++i) {
const QString key(QString::fromLatin1(DC_KEY_PREFIX) + QString::number(i));
if (!map.contains(key))
return false;
DeployConfiguration *dc(deployConfigurationFactory()->restore(this, map.value(key).toMap()));
if (!dc)
continue;
addDeployConfiguration(dc);
if (i == activeConfiguration)
setActiveDeployConfiguration(dc);
}
if (deployConfigurations().isEmpty() && deployConfigurationFactory())
return false;
int rcCount(map.value(QLatin1String(RC_COUNT_KEY), 0).toInt(&ok));
if (!ok || rcCount < 0)
rcCount = 0;
@@ -330,9 +430,7 @@ bool Target::fromMap(const QVariantMap &map)
ITargetFactory::ITargetFactory(QObject *parent) :
QObject(parent)
{
}
{ }
ITargetFactory::~ITargetFactory()
{
}
{ }
+18 -1
View File
@@ -40,7 +40,9 @@ namespace ProjectExplorer {
class RunConfiguration;
class Environment;
class BuildConfiguration;
class DeployConfiguration;
class IBuildConfigurationFactory;
class DeployConfigurationFactory;
class IRunConfigurationFactory;
class Project;
@@ -63,6 +65,16 @@ public:
virtual IBuildConfigurationFactory *buildConfigurationFactory() const = 0;
// DeployConfiguration
void addDeployConfiguration(DeployConfiguration *dc);
void removeDeployConfiguration(DeployConfiguration *dc);
QList<DeployConfiguration *> deployConfigurations() const;
virtual DeployConfiguration *activeDeployConfiguration() const;
void setActiveDeployConfiguration(DeployConfiguration *configuration);
virtual DeployConfigurationFactory *deployConfigurationFactory() const = 0;
// Running
QList<RunConfiguration *> runConfigurations() const;
void addRunConfiguration(RunConfiguration *runConfiguration);
@@ -105,6 +117,10 @@ signals:
void addedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc);
void activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration *);
void removedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
void addedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
void activeDeployConfigurationChanged(ProjectExplorer::DeployConfiguration *dc);
/// convenience signal, emitted if either the active buildconfiguration emits
/// environmentChanged() or if the active build configuration changes
void environmentChanged();
@@ -120,7 +136,6 @@ private slots:
void changeEnvironment();
private:
Project *m_project;
bool m_isEnabled;
QIcon m_icon;
QIcon m_overlayIcon;
@@ -128,6 +143,8 @@ private:
QList<BuildConfiguration *> m_buildConfigurations;
BuildConfiguration *m_activeBuildConfiguration;
QList<DeployConfiguration *> m_deployConfigurations;
DeployConfiguration *m_activeDeployConfiguration;
QList<RunConfiguration *> m_runConfigurations;
RunConfiguration* m_activeRunConfiguration;
};
@@ -184,6 +184,23 @@ public:
QVariantMap update(Project *project, const QVariantMap &map);
};
// Version 5 reflects the introduction of new deploy steps for Symbian/Maemo
class Version6Handler : public UserFileVersionHandler
{
public:
int userFileVersion() const
{
return 6;
}
QString displayUserFileVersion() const
{
return QLatin1String("2.2pre3");
}
QVariantMap update(Project *project, const QVariantMap &map);
};
//
// Helper functions:
//
@@ -256,6 +273,7 @@ UserFileAccessor::UserFileAccessor() :
addVersionHandler(new Version3Handler);
addVersionHandler(new Version4Handler);
addVersionHandler(new Version5Handler);
addVersionHandler(new Version6Handler);
}
UserFileAccessor::~UserFileAccessor()
@@ -1188,3 +1206,109 @@ QVariantMap Version5Handler::update(Project *, const QVariantMap &map)
}
return result;
}
// -------------------------------------------------------------------------
// Version6Handler
// -------------------------------------------------------------------------
// Introduce DeployConfiguration and BuildStepLists
QVariantMap Version6Handler::update(Project *, const QVariantMap &map)
{
QVariantMap result;
QMapIterator<QString, QVariant> it(map);
while (it.hasNext()) {
it.next();
const QString &globalKey = it.key();
// check for target info
if (!globalKey.startsWith(QLatin1String("ProjectExplorer.Project.Target."))) {
result.insert(globalKey, it.value());
continue;
}
QVariantMap newDc;
const QVariantMap &originalTarget = it.value().toMap();
QVariantMap newTarget;
QVariantMap deploySteps;
QString deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "No deployment");
QMapIterator<QString, QVariant> targetIt(originalTarget);
while (targetIt.hasNext()) {
targetIt.next();
const QString &targetKey = targetIt.key();
if (targetKey == QLatin1String("ProjectExplorer.ProjectConfiguration.Id")) {
if (targetIt.value().toString() == QLatin1String("Qt4ProjectManager.Target.MaemoDeviceTarget"))
deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "Deploy to Maemo device");
else if (targetIt.value().toString() == QLatin1String("Qt4ProjectManager.Target.S60DeviceTarget"))
deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "Deploy to Symbian device");
}
if (!targetKey.startsWith(QLatin1String("ProjectExplorer.Target.BuildConfiguration."))) {
newTarget.insert(targetKey, targetIt.value());
continue;
}
QVariantMap buildSteps;
QVariantMap cleanSteps;
QVariantMap &originalBc = targetIt.value().toMap();
QVariantMap newBc;
QMapIterator<QString, QVariant> bcIt(originalBc);
while (bcIt.hasNext())
{
bcIt.next();
const QString &bcKey = bcIt.key();
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStep."))) {
QString position = bcKey.mid(45);
buildSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
continue;
}
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepsCount"))) {
buildSteps.insert(QLatin1String("ProjectExplorer.BuildStepList.StepsCount"), bcIt.value());
continue;
}
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.CleanStep."))) {
QString position = bcKey.mid(45);
cleanSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
continue;
}
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.CleanStepsCount"))) {
cleanSteps.insert(QLatin1String("ProjectExplorer.BuildStepList.StepsCount"), bcIt.value());
continue;
}
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.DeployStep."))) {
QString position = bcKey.mid(46);
deploySteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
continue;
}
if (bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.DeployStepsCount"))) {
deploySteps.insert(QLatin1String("ProjectExplorer.BuildStepList.StepsCount"), bcIt.value());
continue;
}
newBc.insert(bcKey, bcIt.value());
}
buildSteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.DisplayName"), QLatin1String("Build"));
buildSteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"), QLatin1String("ProjectExplorer.BuildSteps.Build"));
cleanSteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.DisplayName"), QLatin1String("Clean"));
cleanSteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"), QLatin1String("ProjectExplorer.BuildSteps.Clean"));
newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepList.0"), buildSteps);
newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepList.1"), cleanSteps);
newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepListCount"), 2);
newTarget.insert(targetKey, newBc);
}
// Only insert one deploy configuration:
deploySteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.DisplayName"), QLatin1String("Deploy"));
deploySteps.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"), QLatin1String("ProjectExplorer.BuildSteps.Deploy"));
newDc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepList.0"), deploySteps);
newDc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepListCount"), 1);
newDc.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.DisplayName"), deploymentName);
newDc.insert(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"), QLatin1String("ProjectExplorer.DefaultDeployConfiguration"));
newTarget.insert(QLatin1String("ProjectExplorer.Target.DeployConfigurationCount"), 1);
newTarget.insert(QLatin1String("ProjectExplorer.Target.ActiveDeployConfiguration"), 0);
newTarget.insert(QLatin1String("ProjectExplorer.Target.DeployConfiguration.0"), newDc);
result.insert(globalKey, newTarget);
}
return result;
}
@@ -63,6 +63,11 @@ ProjectExplorer::IBuildConfigurationFactory *QmlProjectTarget::buildConfiguratio
return 0;
}
ProjectExplorer::DeployConfigurationFactory *QmlProjectTarget::deployConfigurationFactory() const
{
return 0;
}
bool QmlProjectTarget::fromMap(const QVariantMap &map)
{
if (!Target::fromMap(map))
@@ -55,6 +55,7 @@ public:
QmlProject *qmlProject() const;
ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const;
ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
protected:
bool fromMap(const QVariantMap &map);
+21 -22
View File
@@ -35,6 +35,7 @@
#include "qt4buildconfiguration.h"
#include "qt4projectmanagerconstants.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/gnumakeparser.h>
#include <projectexplorer/projectexplorer.h>
#include <extensionsystem/pluginmanager.h>
@@ -55,15 +56,15 @@ const char * const MAKE_COMMAND_KEY("Qt4ProjectManager.MakeStep.MakeCommand");
const char * const CLEAN_KEY("Qt4ProjectManager.MakeStep.Clean");
}
MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc) :
AbstractProcessStep(bc, QLatin1String(MAKESTEP_BS_ID)),
MakeStep::MakeStep(ProjectExplorer::BuildStepList *bsl) :
AbstractProcessStep(bsl, QLatin1String(MAKESTEP_BS_ID)),
m_clean(false)
{
ctor();
}
MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc, MakeStep *bs) :
AbstractProcessStep(bc, bs),
MakeStep::MakeStep(ProjectExplorer::BuildStepList *bsl, MakeStep *bs) :
AbstractProcessStep(bsl, bs),
m_clean(bs->m_clean),
m_userArgs(bs->m_userArgs),
m_makeCmd(bs->m_makeCmd)
@@ -71,8 +72,8 @@ MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc, MakeStep *bs) :
ctor();
}
MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc, const QString &id) :
AbstractProcessStep(bc, id),
MakeStep::MakeStep(ProjectExplorer::BuildStepList *bsl, const QString &id) :
AbstractProcessStep(bsl, id),
m_clean(false)
{
ctor();
@@ -354,42 +355,41 @@ MakeStepFactory::~MakeStepFactory()
{
}
bool MakeStepFactory::canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
bool MakeStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const
{
Q_UNUSED(type)
if (!qobject_cast<Qt4BuildConfiguration *>(parent))
if (parent->target()->project()->id() != QLatin1String(Constants::QT4PROJECT_ID))
return false;
return (id == QLatin1String(MAKESTEP_BS_ID));
}
ProjectExplorer::BuildStep *MakeStepFactory::create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id)
ProjectExplorer::BuildStep *MakeStepFactory::create(ProjectExplorer::BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new MakeStep(parent);
}
bool MakeStepFactory::canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source) const
bool MakeStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const
{
return canCreate(parent, type, source->id());
return canCreate(parent, source->id());
}
ProjectExplorer::BuildStep *MakeStepFactory::clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source)
ProjectExplorer::BuildStep *MakeStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
return new MakeStep(parent, static_cast<MakeStep *>(source));
}
bool MakeStepFactory::canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const
bool MakeStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *MakeStepFactory::restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map)
ProjectExplorer::BuildStep *MakeStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
MakeStep *bs(new MakeStep(parent));
if (bs->fromMap(map))
@@ -398,10 +398,9 @@ ProjectExplorer::BuildStep *MakeStepFactory::restore(ProjectExplorer::BuildConfi
return 0;
}
QStringList MakeStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
QStringList MakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
Q_UNUSED(type)
if (qobject_cast<Qt4BuildConfiguration *>(parent))
if (parent->target()->project()->id() == QLatin1String(Constants::QT4PROJECT_ID))
return QStringList() << QLatin1String(MAKESTEP_BS_ID);
return QStringList();
}
+10 -10
View File
@@ -57,14 +57,14 @@ public:
explicit MakeStepFactory(QObject *parent = 0);
virtual ~MakeStepFactory();
bool canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id);
bool canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source);
bool canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
bool canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const QString &id);
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source);
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const;
QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
QString displayNameForId(const QString &id) const;
};
} //namespace Internal
@@ -79,7 +79,7 @@ class MakeStep : public ProjectExplorer::AbstractProcessStep
// used to access internal stuff
public:
explicit MakeStep(ProjectExplorer::BuildConfiguration *bc);
explicit MakeStep(ProjectExplorer::BuildStepList *bsl);
virtual ~MakeStep();
Internal::Qt4BuildConfiguration *qt4BuildConfiguration() const;
@@ -100,8 +100,8 @@ signals:
void userArgumentsChanged();
protected:
MakeStep(ProjectExplorer::BuildConfiguration *bc, MakeStep *bs);
MakeStep(ProjectExplorer::BuildConfiguration *bc, const QString &id);
MakeStep(ProjectExplorer::BuildStepList *bsl, MakeStep *bs);
MakeStep(ProjectExplorer::BuildStepList *bsl, const QString &id);
virtual bool fromMap(const QVariantMap &map);
private:
+27 -31
View File
@@ -38,6 +38,8 @@
#include "qt4target.h"
#include "qtversionmanager.h"
#include <projectexplorer/buildsteplist.h>
#include <coreplugin/icore.h>
#include <utils/qtcassert.h>
@@ -54,22 +56,22 @@ const char * const QMAKE_BS_ID("QtProjectManager.QMakeBuildStep");
const char * const QMAKE_ARGUMENTS_KEY("QtProjectManager.QMakeBuildStep.QMakeArguments");
}
QMakeStep::QMakeStep(Qt4BuildConfiguration *bc) :
AbstractProcessStep(bc, QLatin1String(QMAKE_BS_ID)),
QMakeStep::QMakeStep(BuildStepList *bsl) :
AbstractProcessStep(bsl, QLatin1String(QMAKE_BS_ID)),
m_forced(false)
{
ctor();
}
QMakeStep::QMakeStep(Qt4BuildConfiguration *bc, const QString &id) :
AbstractProcessStep(bc, id),
QMakeStep::QMakeStep(BuildStepList *bsl, const QString &id) :
AbstractProcessStep(bsl, id),
m_forced(false)
{
ctor();
}
QMakeStep::QMakeStep(Qt4BuildConfiguration *bc, QMakeStep *bs) :
AbstractProcessStep(bc, bs),
QMakeStep::QMakeStep(BuildStepList *bsl, QMakeStep *bs) :
AbstractProcessStep(bsl, bs),
m_forced(false),
m_userArgs(bs->m_userArgs)
{
@@ -423,61 +425,55 @@ QMakeStepFactory::~QMakeStepFactory()
{
}
bool QMakeStepFactory::canCreate(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
bool QMakeStepFactory::canCreate(BuildStepList *parent, const QString &id) const
{
if (type != ProjectExplorer::BuildStep::Build)
if (parent->id() != QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_BUILD))
return false;
if (!qobject_cast<Qt4BuildConfiguration *>(parent))
if (!qobject_cast<Qt4BuildConfiguration *>(parent->parent()))
return false;
return (id == QLatin1String(QMAKE_BS_ID));
}
ProjectExplorer::BuildStep *QMakeStepFactory::create(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,const QString &id)
ProjectExplorer::BuildStep *QMakeStepFactory::create(BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
Qt4BuildConfiguration *bc(qobject_cast<Qt4BuildConfiguration *>(parent));
Q_ASSERT(bc);
return new QMakeStep(bc);
return new QMakeStep(parent);
}
bool QMakeStepFactory::canClone(BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, BuildStep *source) const
bool QMakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const
{
return canCreate(parent, type, source->id());
return canCreate(parent, source->id());
}
ProjectExplorer::BuildStep *QMakeStepFactory::clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source)
ProjectExplorer::BuildStep *QMakeStepFactory::clone(BuildStepList *parent, ProjectExplorer::BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
Qt4BuildConfiguration *bc(qobject_cast<Qt4BuildConfiguration *>(parent));
Q_ASSERT(bc);
return new QMakeStep(bc, qobject_cast<QMakeStep *>(source));
return new QMakeStep(parent, qobject_cast<QMakeStep *>(source));
}
bool QMakeStepFactory::canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const
bool QMakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *QMakeStepFactory::restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map)
ProjectExplorer::BuildStep *QMakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
Qt4BuildConfiguration *bc(qobject_cast<Qt4BuildConfiguration *>(parent));
Q_ASSERT(bc);
QMakeStep *bs(new QMakeStep(bc));
QMakeStep *bs = new QMakeStep(parent);
if (bs->fromMap(map))
return bs;
delete bs;
return 0;
}
QStringList QMakeStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
QStringList QMakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
if (type == ProjectExplorer::BuildStep::Build)
if (Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(parent))
if (parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_BUILD))
if (Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(parent->parent()))
if (!bc->qmakeStep())
return QStringList() << QLatin1String(QMAKE_BS_ID);
return QStringList();
+10 -10
View File
@@ -55,13 +55,13 @@ class QMakeStepFactory : public ProjectExplorer::IBuildStepFactory
public:
explicit QMakeStepFactory(QObject *parent = 0);
virtual ~QMakeStepFactory();
bool canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,const QString & id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,const QString &id);
bool canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,ProjectExplorer::BuildStep *bs) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,ProjectExplorer::BuildStep *bs);
bool canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type,const QVariantMap &map);
QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *bc, ProjectExplorer::BuildStep::Type type) const;
bool canCreate(ProjectExplorer::BuildStepList *parent, const QString & id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const QString &id);
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *bs) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *bs);
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
QString displayNameForId(const QString &id) const;
};
@@ -74,7 +74,7 @@ class QMakeStep : public ProjectExplorer::AbstractProcessStep
friend class Internal::QMakeStepFactory;
public:
explicit QMakeStep(Internal::Qt4BuildConfiguration *parent);
explicit QMakeStep(ProjectExplorer::BuildStepList *parent);
virtual ~QMakeStep();
Internal::Qt4BuildConfiguration *qt4BuildConfiguration() const;
@@ -95,8 +95,8 @@ signals:
void userArgumentsChanged();
protected:
QMakeStep(Internal::Qt4BuildConfiguration *parent, QMakeStep *source);
QMakeStep(Internal::Qt4BuildConfiguration *parent, const QString &id);
QMakeStep(ProjectExplorer::BuildStepList *parent, QMakeStep *source);
QMakeStep(ProjectExplorer::BuildStepList *parent, const QString &id);
virtual bool fromMap(const QVariantMap &map);
virtual void processStartupFailed();
@@ -58,15 +58,15 @@ namespace Internal {
const QLatin1String MaemoDeployStep::Id("Qt4ProjectManager.MaemoDeployStep");
MaemoDeployStep::MaemoDeployStep(ProjectExplorer::BuildConfiguration *bc)
: BuildStep(bc, Id), m_deployables(new MaemoDeployables(this))
MaemoDeployStep::MaemoDeployStep(ProjectExplorer::BuildStepList *parent)
: BuildStep(parent, Id), m_deployables(new MaemoDeployables(this))
{
ctor();
}
MaemoDeployStep::MaemoDeployStep(ProjectExplorer::BuildConfiguration *bc,
MaemoDeployStep::MaemoDeployStep(ProjectExplorer::BuildStepList *parent,
MaemoDeployStep *other)
: BuildStep(bc, other), m_deployables(new MaemoDeployables(this)),
: BuildStep(parent, other), m_deployables(new MaemoDeployables(this)),
m_lastDeployed(other->m_lastDeployed)
{
ctor();
@@ -63,7 +63,7 @@ class MaemoDeployStep : public ProjectExplorer::BuildStep
Q_OBJECT
friend class MaemoDeployStepFactory;
public:
MaemoDeployStep(ProjectExplorer::BuildConfiguration *bc);
MaemoDeployStep(ProjectExplorer::BuildStepList *bc);
virtual ~MaemoDeployStep();
MaemoDeviceConfig deviceConfig() const;
MaemoDeviceConfigListModel *deviceConfigModel() const;
@@ -90,7 +90,7 @@ private slots:
void handleInstallerErrorOutput(const QByteArray &output);
private:
MaemoDeployStep(ProjectExplorer::BuildConfiguration *bc,
MaemoDeployStep(ProjectExplorer::BuildStepList *bc,
MaemoDeployStep *other);
virtual bool init();
virtual void run(QFutureInterface<bool> &fi);
@@ -3,6 +3,8 @@
#include "maemodeploystep.h"
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <qt4projectmanager/qt4projectmanagerconstants.h>
@@ -16,40 +18,44 @@ MaemoDeployStepFactory::MaemoDeployStepFactory(QObject *parent)
{
}
QStringList MaemoDeployStepFactory::availableCreationIds(BuildConfiguration *,
BuildStep::Type) const
QStringList MaemoDeployStepFactory::availableCreationIds(BuildStepList *parent) const
{
if (parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
&& parent->target()->id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
&& !parent->contains(MaemoDeployStep::Id))
return QStringList() << MaemoDeployStep::Id;
return QStringList();
}
QString MaemoDeployStepFactory::displayNameForId(const QString &) const
QString MaemoDeployStepFactory::displayNameForId(const QString &id) const
{
if (id == MaemoDeployStep::Id)
return(tr("Deploy to device"));
return QString();
}
bool MaemoDeployStepFactory::canCreate(BuildConfiguration *,
BuildStep::Type, const QString &) const
bool MaemoDeployStepFactory::canCreate(BuildStepList *parent, const QString &id) const
{
return false;
return parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
&& id == QLatin1String(MaemoDeployStep::Id)
&& parent->target()->id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
&& !parent->contains(MaemoDeployStep::Id);
}
BuildStep *MaemoDeployStepFactory::create(BuildConfiguration *,
BuildStep::Type, const QString &)
BuildStep *MaemoDeployStepFactory::create(BuildStepList *parent, const QString &id)
{
Q_ASSERT(false);
return 0;
Q_ASSERT(canCreate(parent, id));
return new MaemoDeployStep(parent);
}
bool MaemoDeployStepFactory::canRestore(BuildConfiguration *parent,
BuildStep::Type type, const QVariantMap &map) const
bool MaemoDeployStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
{
return canCreateInternally(parent, type, idFromMap(map));
return canCreate(parent, idFromMap(map));
}
BuildStep *MaemoDeployStepFactory::restore(BuildConfiguration *parent,
BuildStep::Type type, const QVariantMap &map)
BuildStep *MaemoDeployStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
{
Q_ASSERT(canRestore(parent, type, map));
Q_ASSERT(canRestore(parent, map));
MaemoDeployStep * const step = new MaemoDeployStep(parent);
if (!step->fromMap(map)) {
delete step;
@@ -58,25 +64,16 @@ BuildStep *MaemoDeployStepFactory::restore(BuildConfiguration *parent,
return step;
}
bool MaemoDeployStepFactory::canClone(BuildConfiguration *parent,
BuildStep::Type type, BuildStep *product) const
bool MaemoDeployStepFactory::canClone(BuildStepList *parent, BuildStep *product) const
{
return canCreateInternally(parent, type, product->id());
return canCreate(parent, product->id());
}
BuildStep *MaemoDeployStepFactory::clone(BuildConfiguration *parent,
BuildStep::Type type, BuildStep *product)
BuildStep *MaemoDeployStepFactory::clone(BuildStepList *parent, BuildStep *product)
{
Q_ASSERT(canClone(parent, type, product));
Q_ASSERT(canClone(parent, product));
return new MaemoDeployStep(parent, static_cast<MaemoDeployStep*>(product));
}
bool MaemoDeployStepFactory::canCreateInternally(BuildConfiguration *parent,
BuildStep::Type type, const QString &id) const
{
return type == BuildStep::Deploy && id == MaemoDeployStep::Id
&& parent->target()->id() == Constants::MAEMO_DEVICE_TARGET_ID;
}
} // namespace Internal
} // namespace Qt4ProjectManager
@@ -11,36 +11,24 @@ class MaemoDeployStepFactory : public ProjectExplorer::IBuildStepFactory
public:
MaemoDeployStepFactory(QObject *parent);
virtual QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type) const;
virtual QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
virtual QString displayNameForId(const QString &id) const;
virtual bool canCreate(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canCreate(ProjectExplorer::BuildStepList *parent,
const QString &id) const;
virtual ProjectExplorer::BuildStep *
create(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type, const QString &id);
create(ProjectExplorer::BuildStepList *parent, const QString &id);
virtual bool canRestore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canRestore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map) const;
virtual ProjectExplorer::BuildStep *
restore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
virtual bool canClone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canClone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product) const;
virtual ProjectExplorer::BuildStep *
clone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
clone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product);
private:
bool canCreateInternally(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
const QString &id) const;
};
} // namespace Internal
@@ -32,6 +32,8 @@
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/environment.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <QtCore/QList>
@@ -53,8 +55,10 @@ public:
template<class T> static T *buildStep(const ProjectExplorer::BuildConfiguration *bc)
{
const QList<ProjectExplorer::BuildStep *> &buildSteps
= bc->steps(ProjectExplorer::BuildStep::Deploy);
ProjectExplorer::BuildStepList *bsl = bc->stepList(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY));
if (!bsl)
return 0;
const QList<ProjectExplorer::BuildStep *> &buildSteps = bsl->steps();
for (int i = buildSteps.count() - 1; i >= 0; --i) {
if (T * const step = qobject_cast<T *>(buildSteps.at(i)))
return step;
@@ -44,10 +44,13 @@
#include "maemopackagecreationstep.h"
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <qt4projectmanagerconstants.h>
using ProjectExplorer::BuildConfiguration;
using ProjectExplorer::BuildStepList;
using ProjectExplorer::BuildStep;
namespace Qt4ProjectManager {
@@ -56,45 +59,48 @@ namespace Internal {
MaemoPackageCreationFactory::MaemoPackageCreationFactory(QObject *parent)
: ProjectExplorer::IBuildStepFactory(parent)
{
}
QStringList MaemoPackageCreationFactory::availableCreationIds(BuildConfiguration *,
BuildStep::Type) const
QStringList MaemoPackageCreationFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
if (parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
&& parent->target()->id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
&& !parent->contains(MaemoPackageCreationStep::CreatePackageId))
return QStringList() << MaemoPackageCreationStep::CreatePackageId;
return QStringList();
}
QString MaemoPackageCreationFactory::displayNameForId(const QString &) const
QString MaemoPackageCreationFactory::displayNameForId(const QString &id) const
{
if (id == MaemoPackageCreationStep::CreatePackageId)
return tr("Create Debian Package");
return QString();
}
bool MaemoPackageCreationFactory::canCreate(BuildConfiguration *,
BuildStep::Type, const QString &) const
bool MaemoPackageCreationFactory::canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const
{
return false;
return parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
&& id == QLatin1String(MaemoPackageCreationStep::CreatePackageId)
&& parent->target()->id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
&& !parent->contains(MaemoPackageCreationStep::CreatePackageId);
}
BuildStep *MaemoPackageCreationFactory::create(BuildConfiguration *,
BuildStep::Type, const QString &)
BuildStep *MaemoPackageCreationFactory::create(ProjectExplorer::BuildStepList *parent, const QString &id)
{
Q_ASSERT(false);
return 0;
Q_ASSERT(canCreate(parent, id));
return new MaemoPackageCreationStep(parent);
}
bool MaemoPackageCreationFactory::canRestore(BuildConfiguration *parent,
BuildStep::Type type,
bool MaemoPackageCreationFactory::canRestore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map) const
{
return canCreateInternally(parent, type, ProjectExplorer::idFromMap(map));
return canCreate(parent, ProjectExplorer::idFromMap(map));
}
BuildStep *MaemoPackageCreationFactory::restore(BuildConfiguration *parent,
BuildStep::Type type,
BuildStep *MaemoPackageCreationFactory::restore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map)
{
Q_ASSERT(canRestore(parent, type, map));
Q_ASSERT(canRestore(parent, map));
MaemoPackageCreationStep * const step
= new MaemoPackageCreationStep(parent);
if (!step->fromMap(map)) {
@@ -104,29 +110,18 @@ BuildStep *MaemoPackageCreationFactory::restore(BuildConfiguration *parent,
return step;
}
bool MaemoPackageCreationFactory::canClone(BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
BuildStep *product) const
bool MaemoPackageCreationFactory::canClone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product) const
{
return canCreateInternally(parent, type, product->id());
return canCreate(parent, product->id());
}
BuildStep *MaemoPackageCreationFactory::clone(BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
BuildStep *product)
BuildStep *MaemoPackageCreationFactory::clone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product)
{
Q_ASSERT(canClone(parent, type, product));
Q_ASSERT(canClone(parent, product));
return new MaemoPackageCreationStep(parent, static_cast<MaemoPackageCreationStep *>(product));
}
bool MaemoPackageCreationFactory::canCreateInternally(BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
const QString &id) const
{
return type == ProjectExplorer::BuildStep::Deploy
&& id == MaemoPackageCreationStep::CreatePackageId
&& parent->target()->id() == Constants::MAEMO_DEVICE_TARGET_ID;
}
} // namespace Internal
} // namespace Qt4ProjectManager
@@ -52,36 +52,24 @@ class MaemoPackageCreationFactory : public ProjectExplorer::IBuildStepFactory
public:
MaemoPackageCreationFactory(QObject *parent);
virtual QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type) const;
virtual QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
virtual QString displayNameForId(const QString &id) const;
virtual bool canCreate(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canCreate(ProjectExplorer::BuildStepList *parent,
const QString &id) const;
virtual ProjectExplorer::BuildStep *
create(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type, const QString &id);
create(ProjectExplorer::BuildStepList *parent, const QString &id);
virtual bool canRestore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canRestore(ProjectExplorer::BuildStepList *parent,
const QVariantMap &map) const;
virtual ProjectExplorer::BuildStep *
restore(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
virtual bool canClone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
virtual bool canClone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product) const;
virtual ProjectExplorer::BuildStep *
clone(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
clone(ProjectExplorer::BuildStepList *parent,
ProjectExplorer::BuildStep *product);
private:
bool canCreateInternally(ProjectExplorer::BuildConfiguration *parent,
ProjectExplorer::BuildStep::Type type,
const QString &id) const;
};
} // namespace Internal
@@ -49,6 +49,7 @@
#include "maemoprofilewrapper.h"
#include "maemotoolchain.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <qt4buildconfiguration.h>
#include <qt4project.h>
@@ -66,24 +67,24 @@ namespace {
}
using namespace ProjectExplorer::Constants;
using ProjectExplorer::BuildConfiguration;
using ProjectExplorer::BuildStepList;
using ProjectExplorer::BuildStepConfigWidget;
using ProjectExplorer::Task;
namespace Qt4ProjectManager {
namespace Internal {
MaemoPackageCreationStep::MaemoPackageCreationStep(BuildConfiguration *buildConfig)
: ProjectExplorer::BuildStep(buildConfig, CreatePackageId),
MaemoPackageCreationStep::MaemoPackageCreationStep(BuildStepList *bsl)
: ProjectExplorer::BuildStep(bsl, CreatePackageId),
m_packagingEnabled(true),
m_versionString(DefaultVersionNumber)
{
ctor();
}
MaemoPackageCreationStep::MaemoPackageCreationStep(BuildConfiguration *buildConfig,
MaemoPackageCreationStep::MaemoPackageCreationStep(BuildStepList *bsl,
MaemoPackageCreationStep *other)
: BuildStep(buildConfig, other),
: BuildStep(bsl, other),
m_packagingEnabled(other->m_packagingEnabled),
m_versionString(other->m_versionString)
{
@@ -64,7 +64,7 @@ class MaemoPackageCreationStep : public ProjectExplorer::BuildStep
Q_OBJECT
friend class MaemoPackageCreationFactory;
public:
MaemoPackageCreationStep(ProjectExplorer::BuildConfiguration *buildConfig);
MaemoPackageCreationStep(ProjectExplorer::BuildStepList *bsl);
~MaemoPackageCreationStep();
QString packageFilePath() const;
@@ -82,7 +82,7 @@ private slots:
void handleBuildOutput();
private:
MaemoPackageCreationStep(ProjectExplorer::BuildConfiguration *buildConfig,
MaemoPackageCreationStep(ProjectExplorer::BuildStepList *buildConfig,
MaemoPackageCreationStep *other);
void ctor();
@@ -38,6 +38,8 @@
#include "passphraseforkeydialog.h"
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <projectexplorer/project.h>
#include <projectexplorer/gnumakeparser.h>
@@ -64,8 +66,8 @@ namespace {
const char * const MAKE_CERTIFICATE_ARGUMENT("QT_SIS_CERTIFICATE=");
}
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc) :
BuildStep(bc, QLatin1String(SIGN_BS_ID)),
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl) :
BuildStep(bsl, QLatin1String(SIGN_BS_ID)),
m_signingMode(SignSelf),
m_createSmartInstaller(false),
m_outputParserChain(0),
@@ -79,8 +81,8 @@ S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildConfiguration *
ctor_package();
}
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc, S60CreatePackageStep *bs) :
BuildStep(bc, bs),
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl, S60CreatePackageStep *bs) :
BuildStep(bsl, bs),
m_signingMode(bs->m_signingMode),
m_customSignaturePath(bs->m_customSignaturePath),
m_customKeyPath(bs->m_customKeyPath),
@@ -96,8 +98,8 @@ S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildConfiguration *
ctor_package();
}
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc, const QString &id) :
BuildStep(bc, id),
S60CreatePackageStep::S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl, const QString &id) :
BuildStep(bsl, id),
m_signingMode(SignSelf),
m_createSmartInstaller(false),
m_outputParserChain(0),
@@ -564,43 +566,43 @@ S60CreatePackageStepFactory::~S60CreatePackageStepFactory()
{
}
bool S60CreatePackageStepFactory::canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
bool S60CreatePackageStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const
{
if (type != ProjectExplorer::BuildStep::Deploy)
if (parent->id() != QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY))
return false;
if (parent->target()->id() != Constants::S60_DEVICE_TARGET_ID)
if (parent->target()->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return false;
return (id == QLatin1String(SIGN_BS_ID));
}
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id)
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::create(ProjectExplorer::BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new S60CreatePackageStep(parent);
}
bool S60CreatePackageStepFactory::canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source) const
bool S60CreatePackageStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const
{
return canCreate(parent, type, source->id());
return canCreate(parent, source->id());
}
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source)
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
return new S60CreatePackageStep(parent, static_cast<S60CreatePackageStep *>(source));
}
bool S60CreatePackageStepFactory::canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const
bool S60CreatePackageStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map)
ProjectExplorer::BuildStep *S60CreatePackageStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
S60CreatePackageStep *bs(new S60CreatePackageStep(parent));
if (bs->fromMap(map))
@@ -609,11 +611,11 @@ ProjectExplorer::BuildStep *S60CreatePackageStepFactory::restore(ProjectExplorer
return 0;
}
QStringList S60CreatePackageStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
QStringList S60CreatePackageStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
if (type != ProjectExplorer::BuildStep::Deploy)
if (parent->id() != QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY))
return QStringList();
if (parent->target()->id() == Constants::S60_DEVICE_TARGET_ID)
if (parent->target()->id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return QStringList() << QLatin1String(SIGN_BS_ID);
return QStringList();
}
@@ -53,17 +53,17 @@ public:
~S60CreatePackageStepFactory();
// used to show the list of possible additons to a target, returns a list of types
QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const;
QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
// used to translate the types to names to display to the user
QString displayNameForId(const QString &id) const;
bool canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id);
bool canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const QString &id);
// used to recreate the runConfigurations when restoring settings
bool canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
bool canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *product) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *product);
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product);
};
@@ -77,7 +77,7 @@ public:
SignCustom = 1
};
explicit S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc);
explicit S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl);
virtual ~S60CreatePackageStep();
virtual bool init();
@@ -106,8 +106,8 @@ signals:
void badPassphrase();
protected:
S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc, S60CreatePackageStep *bs);
S60CreatePackageStep(ProjectExplorer::BuildConfiguration *bc, const QString &id);
S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl, S60CreatePackageStep *bs);
S60CreatePackageStep(ProjectExplorer::BuildStepList *bsl, const QString &id);
bool fromMap(const QVariantMap &map);
Qt4BuildConfiguration *qt4BuildConfiguration() const;
@@ -27,7 +27,6 @@
**
**************************************************************************/
#include "s60deploystep.h"
#include "qt4buildconfiguration.h"
@@ -45,9 +44,10 @@
#include <QDir>
#include <coreplugin/icore.h>
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/target.h>
#include <projectexplorer/ioutputparser.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <qt4projectmanagerconstants.h>
using namespace ProjectExplorer;
@@ -85,14 +85,7 @@ static inline bool renameFile(const QString &sourceName, const QString &targetNa
// #pragma mark -- S60DeployStep
S60DeployStep::S60DeployStep(ProjectExplorer::BuildConfiguration *bc, const QString &id) :
BuildStep(bc, id), m_timer(0),
m_releaseDeviceAfterLauncherFinish(true), m_handleDeviceRemoval(true),
m_launcher(0), m_eventLoop(0)
{
}
S60DeployStep::S60DeployStep(ProjectExplorer::BuildConfiguration *bc,
S60DeployStep::S60DeployStep(ProjectExplorer::BuildStepList *bc,
S60DeployStep *bs):
BuildStep(bc, bs), m_timer(0),
m_releaseDeviceAfterLauncherFinish(bs->m_releaseDeviceAfterLauncherFinish),
@@ -101,7 +94,7 @@ S60DeployStep::S60DeployStep(ProjectExplorer::BuildConfiguration *bc,
{
}
S60DeployStep::S60DeployStep(ProjectExplorer::BuildConfiguration *bc):
S60DeployStep::S60DeployStep(ProjectExplorer::BuildStepList *bc):
BuildStep(bc, QLatin1String(S60_DEPLOY_STEP_ID)), m_timer(0),
m_releaseDeviceAfterLauncherFinish(true),
m_handleDeviceRemoval(true), m_launcher(0), m_eventLoop(0)
@@ -415,12 +408,12 @@ void S60DeployStepWidget::init()
QString S60DeployStepWidget::summaryText() const
{
return tr("<b>Deploy SIS Package</b>");
return QString("<b>%1</b>").arg(displayName());
}
QString S60DeployStepWidget::displayName() const
{
return QString("S60DeployStepWidget::displayName");
return tr("Deploy SIS Package");
}
// #pragma mark -- S60DeployStepFactory
@@ -434,43 +427,47 @@ S60DeployStepFactory::~S60DeployStepFactory()
{
}
bool S60DeployStepFactory::canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
bool S60DeployStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const
{
if (type != ProjectExplorer::BuildStep::Deploy)
if (parent->id() != QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY))
return false;
if (parent->target()->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return false;
return (id == QLatin1String(S60_DEPLOY_STEP_ID));
}
ProjectExplorer::BuildStep *S60DeployStepFactory::create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id)
ProjectExplorer::BuildStep *S60DeployStepFactory::create(ProjectExplorer::BuildStepList *parent, const QString &id)
{
if (!canCreate(parent, type, id))
if (!canCreate(parent, id))
return 0;
return new S60DeployStep(parent, id);
return new S60DeployStep(parent);
}
bool S60DeployStepFactory::canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source) const
bool S60DeployStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const
{
return canCreate(parent, type, source->id());
if (!canCreate(parent, source->id()))
return false;
if (!qobject_cast<S60DeployStep *>(source))
return false;
return true;
}
ProjectExplorer::BuildStep *S60DeployStepFactory::clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *source)
ProjectExplorer::BuildStep *S60DeployStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source)
{
if (!canClone(parent, type, source))
if (!canClone(parent, source))
return 0;
return new S60DeployStep(parent, static_cast<S60DeployStep *>(source));
}
bool S60DeployStepFactory::canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const
bool S60DeployStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, type, id);
return canCreate(parent, id);
}
ProjectExplorer::BuildStep *S60DeployStepFactory::restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map)
ProjectExplorer::BuildStep *S60DeployStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map)
{
if (!canRestore(parent, type, map))
if (!canRestore(parent, map))
return 0;
S60DeployStep *bs = new S60DeployStep(parent);
if (bs->fromMap(map))
@@ -479,11 +476,10 @@ ProjectExplorer::BuildStep *S60DeployStepFactory::restore(ProjectExplorer::Build
return 0;
}
QStringList S60DeployStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
QStringList S60DeployStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
{
if (type != ProjectExplorer::BuildStep::Deploy)
return QStringList();
if (parent->target()->id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
if (parent->id() == QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
&& parent->target()->id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return QStringList() << QLatin1String(S60_DEPLOY_STEP_ID);
return QStringList();
}
@@ -60,17 +60,17 @@ public:
~S60DeployStepFactory();
// used to show the list of possible additons to a target, returns a list of types
QStringList availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const;
QStringList availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
// used to translate the types to names to display to the user
QString displayNameForId(const QString &id) const;
bool canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id);
bool canCreate(ProjectExplorer::BuildStepList *parent, const QString &id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const QString &id);
// used to recreate the runConfigurations when restoring settings
bool canRestore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QVariantMap &map);
bool canClone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *product) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, ProjectExplorer::BuildStep *product);
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product);
};
class S60DeployStep : public ProjectExplorer::BuildStep
@@ -79,10 +79,7 @@ class S60DeployStep : public ProjectExplorer::BuildStep
public:
friend class S60DeployStepFactory;
S60DeployStep(ProjectExplorer::BuildConfiguration *bc, const QString &id);
S60DeployStep(ProjectExplorer::BuildConfiguration *bc,
S60DeployStep *bs);
explicit S60DeployStep(ProjectExplorer::BuildConfiguration *bc);
explicit S60DeployStep(ProjectExplorer::BuildStepList *parent);
virtual ~S60DeployStep();
@@ -97,14 +94,6 @@ public:
protected:
virtual bool fromMap(const QVariantMap &map);
private:
void start();
void stop();
void startDeployment();
bool processPackageName(QString &errorMessage);
void setupConnections();
void appendMessage(const QString &error, bool isError);
protected slots:
void deviceRemoved(const SymbianUtils::SymbianDevice &);
@@ -127,6 +116,16 @@ signals:
void finishNow();
private:
S60DeployStep(ProjectExplorer::BuildStepList *parent,
S60DeployStep *bs);
void start();
void stop();
void startDeployment();
bool processPackageName(QString &errorMessage);
void setupConnections();
void appendMessage(const QString &error, bool isError);
QString m_serialPortName;
QString m_serialPortFriendlyName;
QStringList m_packageFileNamesWithTarget; // Support for 4.6.1
@@ -48,6 +48,7 @@
#include <coreplugin/progressmanager/progressmanager.h>
#include <utils/qtcassert.h>
#include <utils/pathchooser.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/project.h>
#include <projectexplorer/buildconfiguration.h>
@@ -413,7 +414,9 @@ bool S60DeviceRunConfiguration::runSmartInstaller() const
{
BuildConfiguration *bc = target()->activeBuildConfiguration();
QTC_ASSERT(bc, return false);
QList<BuildStep *> steps = bc->steps(ProjectExplorer::BuildStep::Build);
BuildStepList *bsl = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
QTC_ASSERT(bsl, return false);
QList<BuildStep *> steps = bsl->steps();
foreach (const BuildStep *step, steps) {
if (const S60CreatePackageStep *packageStep = qobject_cast<const S60CreatePackageStep *>(step)) {
return packageStep->createsSmartInstaller();
@@ -37,6 +37,8 @@
#include "makestep.h"
#include <utils/qtcassert.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <QtCore/QDebug>
@@ -398,18 +400,22 @@ void Qt4BuildConfiguration::getConfigCommandLineArguments(QStringList *addedUser
QMakeStep *Qt4BuildConfiguration::qmakeStep() const
{
QMakeStep *qs = 0;
foreach(BuildStep *bs, steps(ProjectExplorer::BuildStep::Build))
if ((qs = qobject_cast<QMakeStep *>(bs)) != 0)
BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
Q_ASSERT(bsl);
for (int i = 0; i < bsl->count(); ++i)
if ((qs = qobject_cast<QMakeStep *>(bsl->at(i))) != 0)
return qs;
return 0;
}
MakeStep *Qt4BuildConfiguration::makeStep() const
{
MakeStep *qs = 0;
foreach(BuildStep *bs, steps(ProjectExplorer::BuildStep::Build))
if ((qs = qobject_cast<MakeStep *>(bs)) != 0)
return qs;
MakeStep *ms = 0;
BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
Q_ASSERT(bsl);
for (int i = 0; i < bsl->count(); ++i)
if ((ms = qobject_cast<MakeStep *>(bsl->at(i))) != 0)
return ms;
return 0;
}
@@ -648,7 +654,7 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target
version->displayName(),
&ok);
if (!ok || buildConfigurationName.isEmpty())
return false;
return 0;
qt4Target->addQt4BuildConfiguration(tr("%1 Debug").arg(buildConfigurationName),
version,
@@ -0,0 +1,65 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 "qt4deployconfiguration.h"
#include "qt4projectmanagerconstants.h"
#include "qt4target.h"
#include "qt-maemo/maemodeploystep.h"
#include "qt-maemo/maemopackagecreationstep.h"
#include "qt-s60/s60createpackagestep.h"
#include "qt-s60/s60deploystep.h"
#include <projectexplorer/buildsteplist.h>
using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal;
Qt4DeployConfigurationFactory::Qt4DeployConfigurationFactory(QObject *parent) :
ProjectExplorer::DeployConfigurationFactory(parent)
{ }
ProjectExplorer::DeployConfiguration *Qt4DeployConfigurationFactory::create(ProjectExplorer::Target *parent, const QString &id)
{
ProjectExplorer::DeployConfiguration *dc = ProjectExplorer::DeployConfigurationFactory::create(parent, id);
if (!dc)
return 0;
if (parent->id() == Constants::S60_DEVICE_TARGET_ID) {
dc->setDisplayName(tr("Deploy to Symbian device"));
dc->stepList()->insertStep(0, new S60CreatePackageStep(dc->stepList()));
dc->stepList()->insertStep(1, new S60DeployStep(dc->stepList()));
} else if (parent->id() == Constants::MAEMO_DEVICE_TARGET_ID) {
dc->setDisplayName(tr("Deploy to Maemo device"));
dc->stepList()->insertStep(0, new MaemoPackageCreationStep(dc->stepList()));
dc->stepList()->insertStep(1, new MaemoDeployStep(dc->stepList()));
}
return dc;
}
@@ -0,0 +1,51 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 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 QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
#define QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
#include <projectexplorer/deployconfiguration.h>
namespace Qt4ProjectManager {
namespace Internal {
class Qt4DeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
{
Q_OBJECT
public:
explicit Qt4DeployConfigurationFactory(QObject *parent = 0);
ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
};
} // namespace Internal
} // namespace Qt4ProjectManager
#endif // QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
+1 -1
View File
@@ -849,7 +849,7 @@ QString Qt4Project::displayName() const
QString Qt4Project::id() const
{
return QLatin1String("Qt4ProjectManager.Qt4Project");
return QLatin1String(Constants::QT4PROJECT_ID);
}
Core::IFile *Qt4Project::file() const
@@ -166,7 +166,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
QTC_ASSERT(bc, return);
if (debug)
qDebug() << "Qt4ProjectConfigWidget::init() for"<<bc->displayName();
qDebug() << "Qt4ProjectConfigWidget::init() for" << bc->displayName();
if (m_buildConfiguration) {
disconnect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()),
@@ -298,13 +298,15 @@ void Qt4Manager::handleSubDirContexMenu(Qt4Manager::Action action)
bc->setSubNodeBuild(profile);
if (projectExplorer()->saveModifiedFiles()) {
if (action == BUILD)
projectExplorer()->buildManager()->buildProject(bc);
else if (action == CLEAN)
projectExplorer()->buildManager()->cleanProject(bc);
else if (action == REBUILD) {
projectExplorer()->buildManager()->cleanProject(bc);
projectExplorer()->buildManager()->buildProject(bc);
if (action == BUILD) {
projectExplorer()->buildManager()->buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
} else if (action == CLEAN) {
projectExplorer()->buildManager()->buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
} else if (action == REBUILD) {
QList<ProjectExplorer::BuildStepList *> stepLists;
stepLists << bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
stepLists << bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
projectExplorer()->buildManager()->buildLists(stepLists);
}
}
@@ -3,7 +3,8 @@ TARGET = Qt4ProjectManager
QT += network
include(../../qtcreatorplugin.pri)
include(qt4projectmanager_dependencies.pri)
HEADERS += qt4projectmanagerplugin.h \
HEADERS += qt4deployconfiguration.h \
qt4projectmanagerplugin.h \
qt4projectmanager.h \
qt4project.h \
qt4nodes.h \
@@ -46,7 +47,8 @@ HEADERS += qt4projectmanagerplugin.h \
qt4target.h \
qmakeparser.h \
qtoutputformatter.h
SOURCES += qt4projectmanagerplugin.cpp \
SOURCES += qt4deployconfiguration.cpp \
qt4projectmanagerplugin.cpp \
qt4projectmanager.cpp \
qt4project.cpp \
qt4nodes.cpp \
@@ -95,6 +95,9 @@ const char * const QT_APP_WIZARD_TR_CATEGORY = QT_TRANSLATE_NOOP("Qt4ProjectMana
// Tasks
const char * const PROFILE_EVALUATE = "Qt4ProjectManager.ProFileEvaluate";
// Project
const char * const QT4PROJECT_ID("Qt4ProjectManager.Qt4Project");
// Targets
const char * const DESKTOP_TARGET_ID("Qt4ProjectManager.Target.DesktopTarget");
const char * const S60_EMULATOR_TARGET_ID("Qt4ProjectManager.Target.S60EmulatorTarget");
+32 -28
View File
@@ -32,6 +32,7 @@
#include "makestep.h"
#include "profilereader.h"
#include "qmakestep.h"
#include "qt4deployconfiguration.h"
#include "qt4project.h"
#include "qt4runconfiguration.h"
#include "qt4projectmanagerconstants.h"
@@ -43,8 +44,10 @@
#include "qt-s60/s60createpackagestep.h"
#include "qt-s60/s60deploystep.h"
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <coreplugin/coreconstants.h>
#include <symbianutils/symbiandevicemanager.h>
@@ -59,29 +62,29 @@ using namespace Qt4ProjectManager::Internal;
namespace {
QString displayNameForId(const QString &id) {
if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::DESKTOP_TARGET_ID))
return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Desktop", "Qt4 Desktop target display name");
if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::S60_EMULATOR_TARGET_ID))
return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Symbian Emulator", "Qt4 Symbian Emulator target display name");
if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::S60_DEVICE_TARGET_ID))
return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Symbian Device", "Qt4 Symbian Device target display name");
if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::MAEMO_DEVICE_TARGET_ID))
return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Maemo", "Qt4 Maemo target display name");
if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::QT_SIMULATOR_TARGET_ID))
return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Qt Simulator", "Qt4 Simulator target display name");
return QString();
}
QIcon iconForId(const QString &id) {
if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::DESKTOP_TARGET_ID))
return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::S60_EMULATOR_TARGET_ID))
return QIcon(QLatin1String(":/projectexplorer/images/SymbianEmulator.png"));
if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::S60_DEVICE_TARGET_ID))
return QIcon(QLatin1String(":/projectexplorer/images/SymbianDevice.png"));
if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::MAEMO_DEVICE_TARGET_ID))
return QIcon(QLatin1String(":/projectexplorer/images/MaemoDevice.png"));
if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
if (id == QLatin1String(Qt4ProjectManager::Constants::QT_SIMULATOR_TARGET_ID))
return QIcon(QLatin1String(":/projectexplorer/images/SymbianEmulator.png"));
return QIcon();
}
@@ -194,6 +197,8 @@ Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QStr
t->addQt4BuildConfiguration(displayName, info.version, info.buildConfig, info.additionalArguments, info.directory);
}
t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
// create RunConfigurations:
QStringList pathes = qt4project->applicationProFilePathes();
foreach (const QString &path, pathes)
@@ -231,7 +236,8 @@ Qt4Target::Qt4Target(Qt4Project *parent, const QString &id) :
ProjectExplorer::Target(parent, id),
m_connectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOn.png")),
m_disconnectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOff.png")),
m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this))
m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
m_deployConfigurationFactory(new Qt4DeployConfigurationFactory(this))
{
connect(project(), SIGNAL(supportedTargetIdsChanged()),
this, SLOT(updateQtVersion()));
@@ -277,28 +283,21 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this);
bc->setDisplayName(displayName);
QMakeStep *qmakeStep = new QMakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Build, 0, qmakeStep);
BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
Q_ASSERT(buildSteps);
Q_ASSERT(cleanSteps);
MakeStep *makeStep = new MakeStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Build, 1, makeStep);
QMakeStep *qmakeStep = new QMakeStep(buildSteps);
buildSteps->insertStep(0, qmakeStep);
if (id() == Constants::S60_DEVICE_TARGET_ID) {
S60CreatePackageStep *packageStep = new S60CreatePackageStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Deploy, 2, packageStep);
S60DeployStep *deployStep = new S60DeployStep(bc);
bc->insertStep(ProjectExplorer::BuildStep::Deploy, 3, deployStep);
} else if (id() == Constants::MAEMO_DEVICE_TARGET_ID) {
bc->insertStep(ProjectExplorer::BuildStep::Deploy, 2,
new MaemoPackageCreationStep(bc));
bc->insertStep(ProjectExplorer::BuildStep::Deploy, 3,
new MaemoDeployStep(bc));
}
MakeStep *makeStep = new MakeStep(buildSteps);
buildSteps->insertStep(1, makeStep);
MakeStep* cleanStep = new MakeStep(bc);
MakeStep* cleanStep = new MakeStep(cleanSteps);
cleanStep->setClean(true);
cleanStep->setUserArguments(QStringList() << "clean");
bc->insertStep(ProjectExplorer::BuildStep::Clean, 0, cleanStep);
cleanSteps->insertStep(0, cleanStep);
if (!additionalArguments.isEmpty())
qmakeStep->setUserArguments(additionalArguments);
@@ -324,6 +323,11 @@ Qt4BuildConfigurationFactory *Qt4Target::buildConfigurationFactory() const
return m_buildConfigurationFactory;
}
ProjectExplorer::DeployConfigurationFactory *Qt4Target::deployConfigurationFactory() const
{
return m_deployConfigurationFactory;
}
void Qt4Target::addRunConfigurationForPath(const QString &proFilePath)
{
if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID) ||
@@ -43,6 +43,7 @@ namespace Internal {
class Qt4ProFileNode;
class Qt4TargetFactory;
class Qt4BuildConfigurationFactory;
class Qt4DeployConfigurationFactory;
struct BuildConfigurationInfo {
explicit BuildConfigurationInfo(QtVersion *v = 0, QtVersion::QmakeBuildConfigs bc = QtVersion::QmakeBuildConfig(0),
@@ -75,6 +76,7 @@ public:
void addRunConfigurationForPath(const QString &proFilePath);
Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
QList<ProjectExplorer::ToolChain::ToolChainType> filterToolChainTypes(const QList<ProjectExplorer::ToolChain::ToolChainType> &candidates) const;
ProjectExplorer::ToolChain::ToolChainType preferredToolChainType(const QList<ProjectExplorer::ToolChain::ToolChainType> &candidates) const;
@@ -105,6 +107,7 @@ private:
const QPixmap m_disconnectedPixmap;
Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
Internal::Qt4DeployConfigurationFactory *m_deployConfigurationFactory;
};
class Qt4TargetFactory : public ProjectExplorer::ITargetFactory