Make use of ProjectConfiguration in the BuildConfigurations

* Make use of the ProjectConfiguration base class in the
   BuildConfigurations and update the factories accordingly.

Reviewed-by: dt
This commit is contained in:
Tobias Hunger
2010-01-18 12:11:04 +01:00
parent 1726688434
commit 16a7d5daa2
11 changed files with 446 additions and 416 deletions

View File

@@ -40,28 +40,44 @@ using namespace GenericProjectManager;
using namespace GenericProjectManager::Internal;
using ProjectExplorer::BuildConfiguration;
namespace {
const char * const GENERIC_BC_ID("GenericProjectManager.GenericBuildConfiguration");
const char * const BUILD_DIRECTORY_KEY("GenericProjectManager.GenericBuildConfiguration.BuildDirectory");
}
GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro)
: BuildConfiguration(pro)
: BuildConfiguration(pro, QLatin1String(GENERIC_BC_ID))
{
}
GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QVariantMap &map)
: BuildConfiguration(pro, map)
GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &id)
: BuildConfiguration(pro, id)
{
m_buildDirectory = map.value("buildDirectory").toString();
}
GenericBuildConfiguration::GenericBuildConfiguration(GenericBuildConfiguration *source)
: BuildConfiguration(source),
GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, GenericBuildConfiguration *source) :
BuildConfiguration(pro, source),
m_buildDirectory(source->m_buildDirectory)
{
}
void GenericBuildConfiguration::toMap(QVariantMap &map) const
GenericBuildConfiguration::~GenericBuildConfiguration()
{
map.insert("buildDirectory", m_buildDirectory);
}
QVariantMap GenericBuildConfiguration::toMap() const
{
QVariantMap map(BuildConfiguration::toMap());
map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
return map;
}
bool GenericBuildConfiguration::fromMap(const QVariantMap &map)
{
m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY)).toString();
return BuildConfiguration::fromMap(map);
}
ProjectExplorer::Environment GenericBuildConfiguration::environment() const
@@ -98,9 +114,8 @@ GenericProject *GenericBuildConfiguration::genericProject() const
\class GenericBuildConfigurationFactory
*/
GenericBuildConfigurationFactory::GenericBuildConfigurationFactory(GenericProject *project)
: IBuildConfigurationFactory(project),
m_project(project)
GenericBuildConfigurationFactory::GenericBuildConfigurationFactory(QObject *parent) :
ProjectExplorer::IBuildConfigurationFactory(parent)
{
}
@@ -108,20 +123,34 @@ GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory()
{
}
QStringList GenericBuildConfigurationFactory::availableCreationIds() const
QStringList GenericBuildConfigurationFactory::availableCreationIds(ProjectExplorer::Project *parent) const
{
return QStringList() << "Create";
Q_UNUSED(parent);
return QStringList() << QLatin1String(GENERIC_BC_ID);
}
QString GenericBuildConfigurationFactory::displayNameForId(const QString &id) const
{
QTC_ASSERT(id == "Create", return QString());
return tr("Create");
if (id == QLatin1String(GENERIC_BC_ID))
return tr("Build");
return QString();
}
BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &id) const
bool GenericBuildConfigurationFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
{
QTC_ASSERT(id == "Create", return false);
if (!qobject_cast<GenericProject *>(parent))
return false;
if (id == QLatin1String(GENERIC_BC_ID))
return true;
return false;
}
BuildConfiguration *GenericBuildConfigurationFactory::create(ProjectExplorer::Project *parent, const QString &id)
{
if (!canCreate(parent, id))
return 0;
GenericProject *project(static_cast<GenericProject *>(parent));
//TODO asking for name is duplicated everywhere, but maybe more
// wizards will show up, that incorporate choosing the name
bool ok;
@@ -133,9 +162,9 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &id)
&ok);
if (!ok || buildConfigurationName.isEmpty())
return false;
GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project);
GenericBuildConfiguration *bc = new GenericBuildConfiguration(project);
bc->setDisplayName(buildConfigurationName);
m_project->addBuildConfiguration(bc); // also makes the name unique...
project->addBuildConfiguration(bc); // also makes the name unique...
GenericMakeStep *makeStep = new GenericMakeStep(bc);
bc->insertBuildStep(0, makeStep);
@@ -143,14 +172,33 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &id)
return bc;
}
BuildConfiguration *GenericBuildConfigurationFactory::clone(BuildConfiguration *source) const
bool GenericBuildConfigurationFactory::canClone(ProjectExplorer::Project *parent, ProjectExplorer::BuildConfiguration *source) const
{
GenericBuildConfiguration *bc = new GenericBuildConfiguration(static_cast<GenericBuildConfiguration *>(source));
return bc;
return canCreate(parent, source->id());
}
BuildConfiguration *GenericBuildConfigurationFactory::restore(const QVariantMap &map) const
BuildConfiguration *GenericBuildConfigurationFactory::clone(ProjectExplorer::Project *parent, BuildConfiguration *source)
{
GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, map);
return bc;
if (!canClone(parent, source))
return 0;
GenericProject *project(static_cast<GenericProject *>(parent));
return new GenericBuildConfiguration(project, qobject_cast<GenericBuildConfiguration *>(source));
}
bool GenericBuildConfigurationFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
{
QString id(ProjectExplorer::idFromMap(map));
return canCreate(parent, id);
}
BuildConfiguration *GenericBuildConfigurationFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
{
if (!canRestore(parent, map))
return 0;
GenericProject *project(static_cast<GenericProject *>(parent));
GenericBuildConfiguration *bc(new GenericBuildConfiguration(project));
if (bc->fromMap(map))
return bc;
delete bc;
return 0;
}