Remove BuildConfiguration::name()

The pointers can be used to distinguish BuildConfigurations
This commit is contained in:
dt
2009-11-24 15:36:31 +01:00
parent 60a1ee12ba
commit 7904544b84
38 changed files with 343 additions and 425 deletions

View File

@@ -33,14 +33,14 @@
using namespace CMakeProjectManager; using namespace CMakeProjectManager;
using namespace Internal; using namespace Internal;
CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro, const QString &name) CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro)
: BuildConfiguration(pro, name) : BuildConfiguration(pro)
{ {
} }
CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name, BuildConfiguration *source) CMakeBuildConfiguration::CMakeBuildConfiguration(BuildConfiguration *source)
: BuildConfiguration(name, source) : BuildConfiguration(source)
{ {
} }

View File

@@ -40,8 +40,8 @@ class CMakeProject;
class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration
{ {
public: public:
CMakeBuildConfiguration(CMakeProject *pro, const QString &name); CMakeBuildConfiguration(CMakeProject *pro);
CMakeBuildConfiguration(const QString &name, BuildConfiguration *source); CMakeBuildConfiguration(BuildConfiguration *source);
}; };

View File

@@ -41,7 +41,7 @@ using namespace CMakeProjectManager;
using namespace CMakeProjectManager::Internal; using namespace CMakeProjectManager::Internal;
CMakeBuildEnvironmentWidget::CMakeBuildEnvironmentWidget(CMakeProject *project) CMakeBuildEnvironmentWidget::CMakeBuildEnvironmentWidget(CMakeProject *project)
: BuildConfigWidget(), m_pro(project) : BuildConfigWidget(), m_pro(project), m_buildConfiguration(0)
{ {
QVBoxLayout *vbox = new QVBoxLayout(this); QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0); vbox->setMargin(0);
@@ -63,29 +63,26 @@ QString CMakeBuildEnvironmentWidget::displayName() const
return tr("Build Environment"); return tr("Build Environment");
} }
void CMakeBuildEnvironmentWidget::init(const QString &buildConfigurationName) void CMakeBuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc)
{ {
if (debug) if (debug)
qDebug() << "Qt4BuildConfigWidget::init()"; qDebug() << "Qt4BuildConfigWidget::init()";
m_buildConfiguration = buildConfigurationName; m_buildConfiguration = bc;
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfigurationName); m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration));
m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(bc)); m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration));
m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration));
m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(bc));
m_buildEnvironmentWidget->updateButtons(); m_buildEnvironmentWidget->updateButtons();
} }
void CMakeBuildEnvironmentWidget::environmentModelUserChangesUpdated() void CMakeBuildEnvironmentWidget::environmentModelUserChangesUpdated()
{ {
m_pro->setUserEnvironmentChanges( m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges());
m_pro->buildConfiguration(m_buildConfiguration), m_buildEnvironmentWidget->userChanges());
} }
void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked)
{ {
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked);
m_pro->setUseSystemEnvironment(bc, !checked); m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration));
m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc));
} }

View File

@@ -51,7 +51,7 @@ public:
CMakeBuildEnvironmentWidget(CMakeProject *project); CMakeBuildEnvironmentWidget(CMakeProject *project);
QString displayName() const; QString displayName() const;
void init(const QString &buildConfiguration); void init(ProjectExplorer::BuildConfiguration *bc);
private slots: private slots:
void environmentModelUserChangesUpdated(); void environmentModelUserChangesUpdated();
@@ -61,7 +61,7 @@ private:
ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget;
QCheckBox *m_clearSystemEnvironmentCheckBox; QCheckBox *m_clearSystemEnvironmentCheckBox;
CMakeProject *m_pro; CMakeProject *m_pro;
QString m_buildConfiguration; ProjectExplorer::BuildConfiguration *m_buildConfiguration;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -104,7 +104,8 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type)
&ok); &ok);
if (!ok || buildConfigurationName.isEmpty()) if (!ok || buildConfigurationName.isEmpty())
return false; return false;
BuildConfiguration *bc = new CMakeBuildConfiguration(m_project, buildConfigurationName); BuildConfiguration *bc = new CMakeBuildConfiguration(m_project);
bc->setDisplayName(buildConfigurationName);
MakeStep *makeStep = new MakeStep(bc); MakeStep *makeStep = new MakeStep(bc);
bc->insertBuildStep(0, makeStep); bc->insertBuildStep(0, makeStep);
@@ -133,17 +134,17 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type)
return bc; return bc;
} }
BuildConfiguration *CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const BuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::BuildConfiguration *source) const
{ {
CMakeBuildConfiguration *old = static_cast<CMakeBuildConfiguration *>(source); CMakeBuildConfiguration *old = static_cast<CMakeBuildConfiguration *>(source);
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(name, old); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(old);
m_project->addBuildConfiguration(bc); m_project->addBuildConfiguration(bc);
return bc; return bc;
} }
BuildConfiguration *CMakeBuildConfigurationFactory::restore(const QString &name) const BuildConfiguration *CMakeBuildConfigurationFactory::restore() const
{ {
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project, name); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project);
return bc; return bc;
} }
@@ -590,7 +591,7 @@ void CMakeProject::setUseSystemEnvironment(BuildConfiguration *configuration, bo
if (b == useSystemEnvironment(configuration)) if (b == useSystemEnvironment(configuration))
return; return;
configuration->setValue("clearSystemEnvironment", !b); configuration->setValue("clearSystemEnvironment", !b);
emit environmentChanged(configuration->name()); emit environmentChanged(configuration);
} }
bool CMakeProject::useSystemEnvironment(BuildConfiguration *configuration) const bool CMakeProject::useSystemEnvironment(BuildConfiguration *configuration) const
@@ -611,7 +612,7 @@ void CMakeProject::setUserEnvironmentChanges(BuildConfiguration *configuration,
if (list == configuration->value("userEnvironmentChanges")) if (list == configuration->value("userEnvironmentChanges"))
return; return;
configuration->setValue("userEnvironmentChanges", list); configuration->setValue("userEnvironmentChanges", list);
emit environmentChanged(configuration->name()); emit environmentChanged(configuration);
} }
QString CMakeProject::buildDirectory(BuildConfiguration *configuration) const QString CMakeProject::buildDirectory(BuildConfiguration *configuration) const
@@ -664,7 +665,8 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader
if (copw.exec() != QDialog::Accepted) if (copw.exec() != QDialog::Accepted)
return false; return false;
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this, "all"); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this);
bc->setDisplayName("all");
addBuildConfiguration(bc); addBuildConfiguration(bc);
bc->setValue("msvcVersion", copw.msvcVersion()); bc->setValue("msvcVersion", copw.msvcVersion());
if (!copw.buildDirectory().isEmpty()) if (!copw.buildDirectory().isEmpty())
@@ -792,7 +794,7 @@ void CMakeFile::modified(ReloadBehavior *behavior)
} }
CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeProject *project) CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeProject *project)
: m_project(project) : m_project(project), m_buildConfiguration(0)
{ {
QFormLayout *fl = new QFormLayout(this); QFormLayout *fl = new QFormLayout(this);
fl->setContentsMargins(20, -1, 0, -1); fl->setContentsMargins(20, -1, 0, -1);
@@ -821,10 +823,9 @@ QString CMakeBuildSettingsWidget::displayName() const
return "CMake"; return "CMake";
} }
void CMakeBuildSettingsWidget::init(const QString &buildConfigurationName) void CMakeBuildSettingsWidget::init(BuildConfiguration *bc)
{ {
m_buildConfiguration = buildConfigurationName; m_buildConfiguration = bc;
BuildConfiguration *bc = m_project->buildConfiguration(buildConfigurationName);
m_pathLineEdit->setText(m_project->buildDirectory(bc)); m_pathLineEdit->setText(m_project->buildDirectory(bc));
if (m_project->buildDirectory(bc) == m_project->sourceDirectory()) if (m_project->buildDirectory(bc) == m_project->sourceDirectory())
m_changeButton->setEnabled(false); m_changeButton->setEnabled(false);
@@ -834,14 +835,13 @@ void CMakeBuildSettingsWidget::init(const QString &buildConfigurationName)
void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog() void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog()
{ {
BuildConfiguration *bc = m_project->buildConfiguration(m_buildConfiguration);
CMakeOpenProjectWizard copw(m_project->projectManager(), CMakeOpenProjectWizard copw(m_project->projectManager(),
m_project->sourceDirectory(), m_project->sourceDirectory(),
m_project->buildDirectory(bc), m_project->buildDirectory(m_buildConfiguration),
m_project->environment(bc)); m_project->environment(m_buildConfiguration));
if (copw.exec() == QDialog::Accepted) { if (copw.exec() == QDialog::Accepted) {
m_project->changeBuildDirectory(bc, copw.buildDirectory()); m_project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory());
m_pathLineEdit->setText(m_project->buildDirectory(bc)); m_pathLineEdit->setText(m_project->buildDirectory(m_buildConfiguration));
} }
} }

View File

@@ -74,8 +74,8 @@ public:
QString displayNameForType(const QString &type) const; QString displayNameForType(const QString &type) const;
ProjectExplorer::BuildConfiguration *create(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const;
ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const;
ProjectExplorer::BuildConfiguration *restore(const QString &name) const; ProjectExplorer::BuildConfiguration *restore() const;
private: private:
CMakeProject *m_project; CMakeProject *m_project;
@@ -232,14 +232,14 @@ public:
// This is called to set up the config widget before showing it // This is called to set up the config widget before showing it
// buildConfiguration is QString::null for the non buildConfiguration specific page // buildConfiguration is QString::null for the non buildConfiguration specific page
virtual void init(const QString &buildConfiguration); virtual void init(ProjectExplorer::BuildConfiguration *bc);
private slots: private slots:
void openChangeBuildDirectoryDialog(); void openChangeBuildDirectoryDialog();
private: private:
CMakeProject *m_project; CMakeProject *m_project;
QLineEdit *m_pathLineEdit; QLineEdit *m_pathLineEdit;
QPushButton *m_changeButton; QPushButton *m_changeButton;
QString m_buildConfiguration; ProjectExplorer::BuildConfiguration *m_buildConfiguration;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -58,7 +58,7 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t
connect(pro, SIGNAL(activeBuildConfigurationChanged()), connect(pro, SIGNAL(activeBuildConfigurationChanged()),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
connect(pro, SIGNAL(environmentChanged(QString)), connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
} }

View File

@@ -202,7 +202,8 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
fl->addRow(tr("Targets:"), m_targetsList); fl->addRow(tr("Targets:"), m_targetsList);
// TODO update this list also on rescans of the CMakeLists.txt // TODO update this list also on rescans of the CMakeLists.txt
CMakeProject *pro = m_makeStep->project(); // TODO shouldn't be accessing project
CMakeProject *pro = static_cast<CMakeProject *>(m_makeStep->buildConfiguration()->project());
foreach(const QString& target, pro->targets()) { foreach(const QString& target, pro->targets()) {
QListWidgetItem *item = new QListWidgetItem(target, m_targetsList); QListWidgetItem *item = new QListWidgetItem(target, m_targetsList);
item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
@@ -251,11 +252,10 @@ void MakeStepConfigWidget::updateDetails()
{ {
QStringList arguments = m_makeStep->m_buildTargets; QStringList arguments = m_makeStep->m_buildTargets;
arguments << m_makeStep->additionalArguments(); arguments << m_makeStep->additionalArguments();
m_summaryText = tr("<b>Make:</b> %1 %2")
.arg(m_makeStep->project()->toolChain( BuildConfiguration *bc = m_makeStep->buildConfiguration();
m_makeStep->buildConfiguration()) CMakeProject *pro = static_cast<CMakeProject *>(bc->project());
->makeCommand(), m_summaryText = tr("<b>Make:</b> %1 %2").arg(pro->toolChain(bc)->makeCommand(), arguments.join(" "));
arguments.join(" "));
emit updateSummary(); emit updateSummary();
} }

View File

@@ -34,14 +34,14 @@ using namespace GenericProjectManager;
using namespace GenericProjectManager::Internal; using namespace GenericProjectManager::Internal;
using ProjectExplorer::BuildConfiguration; using ProjectExplorer::BuildConfiguration;
GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &name) GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro)
: BuildConfiguration(pro, name) : BuildConfiguration(pro)
{ {
} }
GenericBuildConfiguration::GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source) GenericBuildConfiguration::GenericBuildConfiguration(GenericBuildConfiguration *source)
: BuildConfiguration(name, source) : BuildConfiguration(source)
{ {
} }

View File

@@ -41,8 +41,8 @@ class GenericProject;
class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
{ {
public: public:
GenericBuildConfiguration(GenericProject *pro, const QString &name); GenericBuildConfiguration(GenericProject *pro);
GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source); GenericBuildConfiguration(GenericBuildConfiguration *source);
}; };
} // namespace GenericProjectManager } // namespace GenericProjectManager

View File

@@ -146,7 +146,8 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type
&ok); &ok);
if (!ok || buildConfigurationName.isEmpty()) if (!ok || buildConfigurationName.isEmpty())
return false; return false;
GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, buildConfigurationName); GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project);
bc->setDisplayName(buildConfigurationName);
m_project->addBuildConfiguration(bc); // also makes the name unique... m_project->addBuildConfiguration(bc); // also makes the name unique...
GenericMakeStep *makeStep = new GenericMakeStep(bc); GenericMakeStep *makeStep = new GenericMakeStep(bc);
@@ -155,17 +156,17 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type
return bc; return bc;
} }
BuildConfiguration *GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const BuildConfiguration *GenericBuildConfigurationFactory::clone(BuildConfiguration *source) const
{ {
// TODO // TODO
GenericBuildConfiguration *bc = new GenericBuildConfiguration(name, static_cast<GenericBuildConfiguration *>(source)); GenericBuildConfiguration *bc = new GenericBuildConfiguration(static_cast<GenericBuildConfiguration *>(source));
m_project->addBuildConfiguration(bc); m_project->addBuildConfiguration(bc);
return bc; return bc;
} }
BuildConfiguration *GenericBuildConfigurationFactory::restore(const QString &name) const BuildConfiguration *GenericBuildConfigurationFactory::restore() const
{ {
GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, name); GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project);
return bc; return bc;
} }
@@ -533,7 +534,8 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead
Project::restoreSettingsImpl(reader); Project::restoreSettingsImpl(reader);
if (buildConfigurations().isEmpty()) { if (buildConfigurations().isEmpty()) {
GenericBuildConfiguration *bc = new GenericBuildConfiguration(this, "all"); GenericBuildConfiguration *bc = new GenericBuildConfiguration(this);
bc->setDisplayName("all");
addBuildConfiguration(bc); addBuildConfiguration(bc);
GenericMakeStep *makeStep = new GenericMakeStep(bc); GenericMakeStep *makeStep = new GenericMakeStep(bc);
@@ -589,7 +591,7 @@ void GenericProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter
//////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////
GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project) GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project)
: m_project(project) : m_project(project), m_buildConfiguration(0)
{ {
QFormLayout *fl = new QFormLayout(this); QFormLayout *fl = new QFormLayout(this);
fl->setContentsMargins(0, -1, 0, -1); fl->setContentsMargins(0, -1, 0, -1);
@@ -625,15 +627,15 @@ GenericBuildSettingsWidget::~GenericBuildSettingsWidget()
QString GenericBuildSettingsWidget::displayName() const QString GenericBuildSettingsWidget::displayName() const
{ return tr("Generic Manager"); } { return tr("Generic Manager"); }
void GenericBuildSettingsWidget::init(const QString &buildConfigurationName) void GenericBuildSettingsWidget::init(BuildConfiguration *bc)
{ {
m_buildConfiguration = buildConfigurationName; m_buildConfiguration = bc;
m_pathChooser->setPath(m_project->buildDirectory(m_project->buildConfiguration(buildConfigurationName))); m_pathChooser->setPath(m_project->buildDirectory(bc));
} }
void GenericBuildSettingsWidget::buildDirectoryChanged() void GenericBuildSettingsWidget::buildDirectoryChanged()
{ {
m_project->buildConfiguration(m_buildConfiguration)->setValue("buildDirectory", m_pathChooser->path()); m_buildConfiguration->setValue("buildDirectory", m_pathChooser->path());
} }
void GenericBuildSettingsWidget::toolChainSelected(int index) void GenericBuildSettingsWidget::toolChainSelected(int index)

View File

@@ -67,8 +67,8 @@ public:
QString displayNameForType(const QString &type) const; QString displayNameForType(const QString &type) const;
ProjectExplorer::BuildConfiguration *create(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const;
ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const;
ProjectExplorer::BuildConfiguration *restore(const QString &name) const; ProjectExplorer::BuildConfiguration *restore() const;
private: private:
GenericProject *m_project; GenericProject *m_project;
@@ -195,7 +195,7 @@ public:
virtual QString displayName() const; virtual QString displayName() const;
virtual void init(const QString &buildConfiguration); virtual void init(ProjectExplorer::BuildConfiguration *bc);
private Q_SLOTS: private Q_SLOTS:
void buildDirectoryChanged(); void buildDirectoryChanged();
@@ -204,7 +204,7 @@ private Q_SLOTS:
private: private:
GenericProject *m_project; GenericProject *m_project;
Utils::PathChooser *m_pathChooser; Utils::PathChooser *m_pathChooser;
QString m_buildConfiguration; ProjectExplorer::BuildConfiguration *m_buildConfiguration;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -44,14 +44,14 @@ IBuildStepFactory *findFactory(const QString &name)
return 0; return 0;
} }
BuildConfiguration::BuildConfiguration(Project *pro, const QString &name) BuildConfiguration::BuildConfiguration(Project *pro)
: m_name(name), m_project(pro) : m_project(pro)
{ {
setDisplayName(name);
} }
BuildConfiguration::BuildConfiguration(const QString &name, BuildConfiguration *source) BuildConfiguration::BuildConfiguration(BuildConfiguration *source)
: m_values(source->m_values), m_name(name), m_project(source->m_project) : m_values(source->m_values), m_project(source->m_project)
{ {
foreach(BuildStep *originalbs, source->buildSteps()) { foreach(BuildStep *originalbs, source->buildSteps()) {
IBuildStepFactory *factory = findFactory(originalbs->name()); IBuildStepFactory *factory = findFactory(originalbs->name());
@@ -71,16 +71,6 @@ BuildConfiguration::~BuildConfiguration()
qDeleteAll(m_cleanSteps); qDeleteAll(m_cleanSteps);
} }
void BuildConfiguration::setName(const QString &name)
{
m_name = name;
}
QString BuildConfiguration::name() const
{
return m_name;
}
QString BuildConfiguration::displayName() const QString BuildConfiguration::displayName() const
{ {
QVariant v = value("ProjectExplorer.BuildConfiguration.DisplayName"); QVariant v = value("ProjectExplorer.BuildConfiguration.DisplayName");

View File

@@ -53,7 +53,6 @@ public:
// ctors are protected // ctors are protected
virtual ~BuildConfiguration(); virtual ~BuildConfiguration();
QString name() const;
QString displayName() const; QString displayName() const;
void setDisplayName(const QString &name); void setDisplayName(const QString &name);
@@ -77,19 +76,15 @@ public:
Project *project() const; Project *project() const;
protected: protected:
BuildConfiguration(Project * project, const QString &name); BuildConfiguration(Project * project);
BuildConfiguration(const QString &name, BuildConfiguration *source); BuildConfiguration(BuildConfiguration *source);
private: private:
void setName(const QString &name);
QList<BuildStep *> m_buildSteps; QList<BuildStep *> m_buildSteps;
QList<BuildStep *> m_cleanSteps; QList<BuildStep *> m_cleanSteps;
QHash<QString, QVariant> m_values; QHash<QString, QVariant> m_values;
QString m_name;
Project *m_project; Project *m_project;
friend class Project; // for setName
}; };
class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject
@@ -110,24 +105,21 @@ public:
virtual BuildConfiguration *create(const QString &type) const = 0; virtual BuildConfiguration *create(const QString &type) const = 0;
// clones a given BuildConfiguration and adds it to the project // clones a given BuildConfiguration and adds it to the project
virtual BuildConfiguration *clone(const QString &name, BuildConfiguration *source) const = 0; virtual BuildConfiguration *clone(BuildConfiguration *source) const = 0;
// restores a BuildConfiguration with the name and adds it to the project // restores a BuildConfiguration with the name and adds it to the project
virtual BuildConfiguration *restore(const QString &name) const = 0; virtual BuildConfiguration *restore() const = 0;
// TODO All those methods make the internal name (and display name) unique, // TODO All those methods make the internal name (and display name) unique,
// but in different ways // but in different ways
// to come:
// restore
// clone
signals: signals:
void availableCreationTypesChanged(); void availableCreationTypesChanged();
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer
Q_DECLARE_METATYPE(ProjectExplorer::BuildConfiguration *);
#endif // BUILDCONFIGURATION_H #endif // BUILDCONFIGURATION_H

View File

@@ -351,56 +351,40 @@ void BuildManager::buildQueueAppend(BuildStep * bs)
incrementActiveBuildSteps(bs->buildConfiguration()->project()); incrementActiveBuildSteps(bs->buildConfiguration()->project());
} }
void BuildManager::buildProjects(const QList<Project *> &projects, const QList<QString> &configurations) void BuildManager::buildProjects(const QList<BuildConfiguration *> &configurations)
{ {
Q_ASSERT(projects.count() == configurations.count()); foreach(BuildConfiguration *bc, configurations) {
QList<QString>::const_iterator cit = configurations.constBegin();
QList<Project *>::const_iterator it, end;
end = projects.constEnd();
for (it = projects.constBegin(); it != end; ++it, ++cit) {
if (*cit != QString::null) {
BuildConfiguration *bc = (*it)->buildConfiguration(*cit);
QList<BuildStep *> buildSteps = bc->buildSteps(); QList<BuildStep *> buildSteps = bc->buildSteps();
foreach (BuildStep *bs, buildSteps) { foreach (BuildStep *bs, buildSteps) {
buildQueueAppend(bs); buildQueueAppend(bs);
} }
} }
}
if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput) if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput)
m_outputWindow->popup(false); m_outputWindow->popup(false);
startBuildQueue(); startBuildQueue();
} }
void BuildManager::cleanProjects(const QList<Project *> &projects, const QList<QString> &configurations) void BuildManager::cleanProjects(const QList<BuildConfiguration *> &configurations)
{ {
Q_ASSERT(projects.count() == configurations.count()); foreach(BuildConfiguration *bc, configurations) {
QList<QString>::const_iterator cit = configurations.constBegin();
QList<Project *>::const_iterator it, end;
end = projects.constEnd();
for (it = projects.constBegin(); it != end; ++it, ++cit) {
if (*cit != QString::null) {
BuildConfiguration *bc = (*it)->buildConfiguration(*cit);
QList<BuildStep *> cleanSteps = bc->cleanSteps(); QList<BuildStep *> cleanSteps = bc->cleanSteps();
foreach (BuildStep *bs, cleanSteps) { foreach (BuildStep *bs, cleanSteps) {
buildQueueAppend(bs); buildQueueAppend(bs);
} }
} }
}
if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput) if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput)
m_outputWindow->popup(false); m_outputWindow->popup(false);
startBuildQueue(); startBuildQueue();
} }
void BuildManager::buildProject(Project *p, const QString &configuration) void BuildManager::buildProject(BuildConfiguration *configuration)
{ {
buildProjects(QList<Project *>() << p, QList<QString>() << configuration); buildProjects(QList<BuildConfiguration *>() << configuration);
} }
void BuildManager::cleanProject(Project *p, const QString &configuration) void BuildManager::cleanProject(BuildConfiguration *configuration)
{ {
cleanProjects(QList<Project *>() << p, QList<QString>() << configuration); cleanProjects(QList<BuildConfiguration *>() << configuration);
} }
void BuildManager::appendStep(BuildStep *step) void BuildManager::appendStep(BuildStep *step)

View File

@@ -49,6 +49,7 @@ namespace Internal {
class BuildStep; class BuildStep;
class Project; class Project;
class ProjectExplorerPlugin; class ProjectExplorerPlugin;
class BuildConfiguration;
class PROJECTEXPLORER_EXPORT BuildManager class PROJECTEXPLORER_EXPORT BuildManager
: public QObject : public QObject
@@ -70,10 +71,10 @@ public:
void gotoTaskWindow(); void gotoTaskWindow();
//TODO these should take buildconfiguration object //TODO these should take buildconfiguration object
void buildProject(Project *p, const QString &configuration); void buildProject(BuildConfiguration *bc);
void buildProjects(const QList<Project *> &projects, const QList<QString> &configurations); void buildProjects(const QList<BuildConfiguration *> &configurations);
void cleanProject(Project *p, const QString &configuration); void cleanProject(BuildConfiguration *configuration);
void cleanProjects(const QList<Project *> &projects, const QList<QString> &configurations); void cleanProjects(const QList<BuildConfiguration *> &configurations);
bool isBuilding(Project *p); bool isBuilding(Project *p);
// Append any build step to the list of build steps (currently only used to add the QMakeStep) // Append any build step to the list of build steps (currently only used to add the QMakeStep)

View File

@@ -153,7 +153,7 @@ BuildSettingsWidget::~BuildSettingsWidget()
} }
BuildSettingsWidget::BuildSettingsWidget(Project *project) BuildSettingsWidget::BuildSettingsWidget(Project *project)
: m_project(project) : m_project(project), m_buildConfiguration(0)
{ {
QVBoxLayout *vbox = new QVBoxLayout(this); QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setContentsMargins(0, -1, 0, -1); vbox->setContentsMargins(0, -1, 0, -1);
@@ -189,7 +189,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
m_addButton->setMenu(m_addButtonMenu); m_addButton->setMenu(m_addButtonMenu);
updateAddButtonMenu(); updateAddButtonMenu();
m_buildConfiguration = m_project->activeBuildConfiguration()->name(); m_buildConfiguration = m_project->activeBuildConfiguration();
connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)), connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)),
this, SLOT(makeActive())); this, SLOT(makeActive()));
@@ -200,8 +200,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
connect(m_removeButton, SIGNAL(clicked()), connect(m_removeButton, SIGNAL(clicked()),
this, SLOT(deleteConfiguration())); this, SLOT(deleteConfiguration()));
connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)), connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)),
this, SLOT(buildConfigurationDisplayNameChanged(const QString &))); this, SLOT(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)));
connect(m_project, SIGNAL(activeBuildConfigurationChanged()), connect(m_project, SIGNAL(activeBuildConfigurationChanged()),
this, SLOT(checkMakeActiveLabel())); this, SLOT(checkMakeActiveLabel()));
@@ -214,7 +214,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
void BuildSettingsWidget::makeActive() void BuildSettingsWidget::makeActive()
{ {
m_project->setActiveBuildConfiguration(m_project->buildConfiguration(m_buildConfiguration)); m_project->setActiveBuildConfiguration(m_buildConfiguration);
} }
void BuildSettingsWidget::updateAddButtonMenu() void BuildSettingsWidget::updateAddButtonMenu()
@@ -231,11 +231,11 @@ void BuildSettingsWidget::updateAddButtonMenu()
} }
} }
void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &buildConfiguration) void BuildSettingsWidget::buildConfigurationDisplayNameChanged(BuildConfiguration *bc)
{ {
for (int i=0; i<m_buildConfigurationComboBox->count(); ++i) { for (int i=0; i<m_buildConfigurationComboBox->count(); ++i) {
if (m_buildConfigurationComboBox->itemData(i).toString() == buildConfiguration) { if (m_buildConfigurationComboBox->itemData(i).value<BuildConfiguration *>() == bc) {
m_buildConfigurationComboBox->setItemText(i, m_project->buildConfiguration(buildConfiguration)->displayName()); m_buildConfigurationComboBox->setItemText(i, bc->displayName());
break; break;
} }
} }
@@ -267,8 +267,8 @@ void BuildSettingsWidget::updateBuildSettings()
// Add tree items // Add tree items
foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) { foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) {
m_buildConfigurationComboBox->addItem(bc->displayName(), bc->name()); m_buildConfigurationComboBox->addItem(bc->displayName(), bc);
if (bc->name() == m_buildConfiguration) if (bc == m_buildConfiguration)
m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1);
} }
@@ -281,14 +281,14 @@ void BuildSettingsWidget::updateBuildSettings()
void BuildSettingsWidget::currentIndexChanged(int index) void BuildSettingsWidget::currentIndexChanged(int index)
{ {
m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString(); m_buildConfiguration = (BuildConfiguration *) m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
activeBuildConfigurationChanged(); activeBuildConfigurationChanged();
} }
void BuildSettingsWidget::activeBuildConfigurationChanged() void BuildSettingsWidget::activeBuildConfigurationChanged()
{ {
for (int i = 0; i < m_buildConfigurationComboBox->count(); ++i) { for (int i = 0; i < m_buildConfigurationComboBox->count(); ++i) {
if (m_buildConfigurationComboBox->itemData(i).toString() == m_buildConfiguration) { if (m_buildConfigurationComboBox->itemData(i).value<BuildConfiguration *>() == m_buildConfiguration) {
m_buildConfigurationComboBox->setCurrentIndex(i); m_buildConfigurationComboBox->setCurrentIndex(i);
break; break;
} }
@@ -304,10 +304,8 @@ void BuildSettingsWidget::activeBuildConfigurationChanged()
void BuildSettingsWidget::checkMakeActiveLabel() void BuildSettingsWidget::checkMakeActiveLabel()
{ {
m_makeActiveLabel->setVisible(false); m_makeActiveLabel->setVisible(false);
if (!m_project->activeBuildConfiguration() || m_project->activeBuildConfiguration()->name() != m_buildConfiguration) { if (!m_project->activeBuildConfiguration() || m_project->activeBuildConfiguration() != m_buildConfiguration) {
BuildConfiguration *bc = m_project->buildConfiguration(m_buildConfiguration); m_makeActiveLabel->setText(tr("<a href=\"#\">Make %1 active.</a>").arg(m_buildConfiguration->displayName()));
QTC_ASSERT(bc, return);
m_makeActiveLabel->setText(tr("<a href=\"#\">Make %1 active.</a>").arg(bc->displayName()));
m_makeActiveLabel->setVisible(true); m_makeActiveLabel->setVisible(true);
} }
} }
@@ -316,64 +314,55 @@ void BuildSettingsWidget::createConfiguration()
{ {
QAction *action = qobject_cast<QAction *>(sender()); QAction *action = qobject_cast<QAction *>(sender());
const QString &type = action->data().toString(); const QString &type = action->data().toString();
if (m_project->buildConfigurationFactory()->create(type)) { BuildConfiguration *bc = m_project->buildConfigurationFactory()->create(type);
// TODO switching to last buildconfiguration in list might not be what we want if (bc) {
m_buildConfiguration = m_project->buildConfigurations().last()->name(); m_buildConfiguration = bc;
updateBuildSettings(); updateBuildSettings();
} }
} }
void BuildSettingsWidget::cloneConfiguration() void BuildSettingsWidget::cloneConfiguration()
{ {
const QString configuration = m_buildConfigurationComboBox->itemData(m_buildConfigurationComboBox->currentIndex()).toString(); int index = m_buildConfigurationComboBox->currentIndex();
cloneConfiguration(configuration); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
cloneConfiguration(bc);
} }
void BuildSettingsWidget::deleteConfiguration() void BuildSettingsWidget::deleteConfiguration()
{ {
const QString configuration = m_buildConfigurationComboBox->itemData(m_buildConfigurationComboBox->currentIndex()).toString(); int index = m_buildConfigurationComboBox->currentIndex();
deleteConfiguration(configuration); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
deleteConfiguration(bc);
} }
void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration) void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfiguration)
{ {
if (sourceConfiguration.isEmpty()) if (!sourceConfiguration)
return; return;
QString newBuildConfiguration = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:")); QString newDisplayName = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:"));
if (newBuildConfiguration.isEmpty()) if (newDisplayName.isEmpty())
return; return;
QString newDisplayName = newBuildConfiguration;
QStringList buildConfigurationDisplayNames; QStringList buildConfigurationDisplayNames;
foreach(BuildConfiguration *bc, m_project->buildConfigurations()) foreach(BuildConfiguration *bc, m_project->buildConfigurations())
buildConfigurationDisplayNames << bc->displayName(); buildConfigurationDisplayNames << bc->displayName();
newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames); newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames);
QStringList buildConfigurationNames; m_buildConfiguration = m_project->buildConfigurationFactory()->clone(sourceConfiguration);
foreach(BuildConfiguration *bc, m_project->buildConfigurations()) m_project->setDisplayNameFor(m_buildConfiguration, newDisplayName);
buildConfigurationNames << bc->name();
newBuildConfiguration = Project::makeUnique(newBuildConfiguration, buildConfigurationNames);
BuildConfiguration *sourceBc = m_project->buildConfiguration(sourceConfiguration);
m_project->buildConfigurationFactory()->clone(newBuildConfiguration, sourceBc);
m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName);
m_buildConfiguration = newBuildConfiguration;
updateBuildSettings(); updateBuildSettings();
} }
void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration) void BuildSettingsWidget::deleteConfiguration(BuildConfiguration *deleteConfiguration)
{ {
if (deleteConfiguration.isEmpty() || m_project->buildConfigurations().size() <= 1) if (!deleteConfiguration || m_project->buildConfigurations().size() <= 1)
return; return;
if (m_project->activeBuildConfiguration()->name() == deleteConfiguration) { if (m_project->activeBuildConfiguration() == deleteConfiguration) {
foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { foreach (BuildConfiguration *bc, m_project->buildConfigurations()) {
if (bc->name() != deleteConfiguration) { if (bc != deleteConfiguration) {
m_project->setActiveBuildConfiguration(bc); m_project->setActiveBuildConfiguration(bc);
break; break;
} }
@@ -381,15 +370,15 @@ void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration
} }
if (m_buildConfiguration == deleteConfiguration) { if (m_buildConfiguration == deleteConfiguration) {
foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) { foreach (BuildConfiguration *bc, m_project->buildConfigurations()) {
if (bc->name() != deleteConfiguration) { if (bc != deleteConfiguration) {
m_buildConfiguration = bc->name(); m_buildConfiguration = bc;
break; break;
} }
} }
} }
m_project->removeBuildConfiguration(m_project->buildConfiguration(deleteConfiguration)); m_project->removeBuildConfiguration(deleteConfiguration);
updateBuildSettings(); updateBuildSettings();
} }

View File

@@ -42,6 +42,7 @@
namespace ProjectExplorer { namespace ProjectExplorer {
class IBuildStepFactory; class IBuildStepFactory;
class BuildConfiguration;
namespace Internal { namespace Internal {
@@ -93,7 +94,7 @@ public:
~BuildSettingsWidget(); ~BuildSettingsWidget();
private slots: private slots:
void buildConfigurationDisplayNameChanged(const QString &buildConfiguration); void buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *bc);
void updateBuildSettings(); void updateBuildSettings();
void currentIndexChanged(int index); void currentIndexChanged(int index);
void activeBuildConfigurationChanged(); void activeBuildConfigurationChanged();
@@ -106,15 +107,15 @@ private slots:
void makeActive(); void makeActive();
private: private:
void cloneConfiguration(const QString &toClone); void cloneConfiguration(ProjectExplorer::BuildConfiguration *toClone);
void deleteConfiguration(const QString &toDelete); void deleteConfiguration(ProjectExplorer::BuildConfiguration *toDelete);
Project *m_project; Project *m_project;
QPushButton *m_addButton; QPushButton *m_addButton;
QPushButton *m_removeButton; QPushButton *m_removeButton;
QComboBox *m_buildConfigurationComboBox; QComboBox *m_buildConfigurationComboBox;
BuildSettingsSubWidgets *m_subWidgets; BuildSettingsSubWidgets *m_subWidgets;
QString m_buildConfiguration; BuildConfiguration *m_buildConfiguration;
QMenu *m_addButtonMenu; QMenu *m_addButtonMenu;
QLabel *m_makeActiveLabel; QLabel *m_makeActiveLabel;
}; };

View File

@@ -44,7 +44,7 @@ BuildStep::BuildStep(BuildConfiguration *bc)
BuildStep::BuildStep(BuildStep *bs, BuildConfiguration *bc) BuildStep::BuildStep(BuildStep *bs, BuildConfiguration *bc)
: m_buildConfiguration(bc) : m_buildConfiguration(bc)
{ {
Q_UNUSED(bs);
} }
BuildStep::~BuildStep() BuildStep::~BuildStep()

View File

@@ -155,7 +155,7 @@ public:
virtual QString displayName() const = 0; virtual QString displayName() const = 0;
// This is called to set up the config widget before showing it // This is called to set up the config widget before showing it
virtual void init(const QString &buildConfiguration) = 0; virtual void init(BuildConfiguration *bc) = 0;
}; };
class PROJECTEXPLORER_EXPORT BuildStepConfigWidget class PROJECTEXPLORER_EXPORT BuildStepConfigWidget

View File

@@ -110,7 +110,7 @@ QString BuildStepsPage::displayName() const
return m_clean ? tr("Clean Steps") : tr("Build Steps"); return m_clean ? tr("Clean Steps") : tr("Build Steps");
} }
void BuildStepsPage::init(const QString &buildConfiguration) void BuildStepsPage::init(BuildConfiguration *bc)
{ {
foreach(BuildStepsWidgetStruct s, m_buildSteps) { foreach(BuildStepsWidgetStruct s, m_buildSteps) {
delete s.widget; delete s.widget;
@@ -118,8 +118,7 @@ void BuildStepsPage::init(const QString &buildConfiguration)
} }
m_buildSteps.clear(); m_buildSteps.clear();
m_configuration = buildConfiguration; m_configuration = bc;
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration);
const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps();
int i = 0; int i = 0;
@@ -214,7 +213,7 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step)
void BuildStepsPage::addBuildStep() void BuildStepsPage::addBuildStep()
{ {
if (QAction *action = qobject_cast<QAction *>(sender())) { if (QAction *action = qobject_cast<QAction *>(sender())) {
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); BuildConfiguration *bc = m_configuration;
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action); QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
BuildStep *newStep = pair.second->create(bc, pair.first); BuildStep *newStep = pair.second->create(bc, pair.first);
int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count(); int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count();
@@ -232,8 +231,7 @@ void BuildStepsPage::updateRemoveBuildStepMenu()
{ {
QMenu *menu = m_removeButton->menu(); QMenu *menu = m_removeButton->menu();
menu->clear(); menu->clear();
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps();
foreach(BuildStep *step, steps) { foreach(BuildStep *step, steps) {
QAction *action = menu->addAction(step->displayName()); QAction *action = menu->addAction(step->displayName());
if (step->immutable()) if (step->immutable())
@@ -248,8 +246,7 @@ void BuildStepsPage::removeBuildStep()
QAction *action = qobject_cast<QAction *>(sender()); QAction *action = qobject_cast<QAction *>(sender());
if (action) { if (action) {
int pos = m_removeButton->menu()->actions().indexOf(action); int pos = m_removeButton->menu()->actions().indexOf(action);
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps();
if (steps.at(pos)->immutable()) if (steps.at(pos)->immutable())
return; return;
@@ -257,7 +254,7 @@ void BuildStepsPage::removeBuildStep()
delete s.widget; delete s.widget;
delete s.detailsWidget; delete s.detailsWidget;
m_buildSteps.removeAt(pos); m_buildSteps.removeAt(pos);
m_clean ? bc->removeCleanStep(pos) : bc->removeBuildStep(pos); m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos);
} }
updateBuildStepButtonsState(); updateBuildStepButtonsState();
} }
@@ -304,8 +301,7 @@ void BuildStepsPage::downBuildStep()
void BuildStepsPage::stepMoveUp(int pos) void BuildStepsPage::stepMoveUp(int pos)
{ {
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); m_clean ? m_configuration->moveCleanStepUp(pos) : m_configuration->moveBuildStepUp(pos);
m_clean ? bc->moveCleanStepUp(pos) : bc->moveBuildStepUp(pos);
m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget); m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget);
@@ -316,8 +312,7 @@ void BuildStepsPage::stepMoveUp(int pos)
void BuildStepsPage::updateBuildStepButtonsState() void BuildStepsPage::updateBuildStepButtonsState()
{ {
BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps();
for(int i=0; i<m_buildSteps.count(); ++i) { for(int i=0; i<m_buildSteps.count(); ++i) {
BuildStepsWidgetStruct s = m_buildSteps.at(i); BuildStepsWidgetStruct s = m_buildSteps.at(i);
s.upButton->setEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1))); s.upButton->setEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1)));

View File

@@ -71,7 +71,7 @@ public:
virtual ~BuildStepsPage(); virtual ~BuildStepsPage();
QString displayName() const; QString displayName() const;
void init(const QString &buildConfiguration); void init(BuildConfiguration *bc);
private slots: private slots:
void updateAddBuildStepMenu(); void updateAddBuildStepMenu();
@@ -88,7 +88,7 @@ private:
void addBuildStepWidget(int pos, BuildStep *step); void addBuildStepWidget(int pos, BuildStep *step);
Project *m_pro; Project *m_pro;
QString m_configuration; BuildConfiguration *m_configuration;
QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash; QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash;
bool m_clean; bool m_clean;

View File

@@ -251,7 +251,7 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Project *pro)
connect(pro, SIGNAL(activeBuildConfigurationChanged()), connect(pro, SIGNAL(activeBuildConfigurationChanged()),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
connect(pro, SIGNAL(environmentChanged(QString)), connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
} }

View File

@@ -74,15 +74,6 @@ QString Project::makeUnique(const QString &preferedName, const QStringList &used
void Project::addBuildConfiguration(BuildConfiguration *configuration) void Project::addBuildConfiguration(BuildConfiguration *configuration)
{ {
QStringList buildConfigurationNames;
foreach (const BuildConfiguration *bc, buildConfigurations())
buildConfigurationNames << bc->name();
// Check that the internal name is not taken and use a different one otherwise
QString configurationName = configuration->name();
configurationName = makeUnique(configurationName, buildConfigurationNames);
configuration->setName(configurationName);
// Check that we don't have a configuration with the same displayName // Check that we don't have a configuration with the same displayName
QString configurationDisplayName = configuration->displayName(); QString configurationDisplayName = configuration->displayName();
QStringList displayNames; QStringList displayNames;
@@ -94,7 +85,7 @@ void Project::addBuildConfiguration(BuildConfiguration *configuration)
// add it // add it
m_buildConfigurationValues.push_back(configuration); m_buildConfigurationValues.push_back(configuration);
emit addedBuildConfiguration(this, configuration->name()); emit addedBuildConfiguration(this, configuration);
} }
void Project::removeBuildConfiguration(BuildConfiguration *configuration) void Project::removeBuildConfiguration(BuildConfiguration *configuration)
@@ -105,7 +96,7 @@ void Project::removeBuildConfiguration(BuildConfiguration *configuration)
m_buildConfigurationValues.removeOne(configuration); m_buildConfigurationValues.removeOne(configuration);
emit removedBuildConfiguration(this, configuration->name()); emit removedBuildConfiguration(this, configuration);
delete configuration; delete configuration;
} }
@@ -133,7 +124,7 @@ bool Project::restoreSettings()
if (!restoreSettingsImpl(reader)) if (!restoreSettingsImpl(reader))
return false; return false;
if (m_activeBuildConfiguration.isEmpty() && !m_buildConfigurationValues.isEmpty()) if (m_activeBuildConfiguration && !m_buildConfigurationValues.isEmpty())
setActiveBuildConfiguration(m_buildConfigurationValues.at(0)); setActiveBuildConfiguration(m_buildConfigurationValues.at(0));
if (!m_activeRunConfiguration && !m_runConfigurations.isEmpty()) if (!m_activeRunConfiguration && !m_runConfigurations.isEmpty())
@@ -148,47 +139,50 @@ QList<BuildConfigWidget*> Project::subConfigWidgets()
void Project::saveSettingsImpl(PersistentSettingsWriter &writer) void Project::saveSettingsImpl(PersistentSettingsWriter &writer)
{ {
writer.saveValue("activebuildconfiguration", m_activeBuildConfiguration); const QList<BuildConfiguration *> bcs = buildConfigurations();
// For compability with older versions the "name" is saved as a string instead of a number
writer.saveValue("activebuildconfiguration", QString::number(bcs.indexOf(m_activeBuildConfiguration)));
//save m_values //save m_values
writer.saveValue("project", m_values); writer.saveValue("project", m_values);
//save buildsettings //save buildsettings
QStringList buildConfigurationNames; QStringList buildConfigurationNames;
foreach (const BuildConfiguration *bc, buildConfigurations()) { for(int i=0; i < bcs.size(); ++i) {
QMap<QString, QVariant> temp = bc->toMap(); QMap<QString, QVariant> temp = bcs.at(i)->toMap();
writer.saveValue("buildConfiguration-" + bc->name(), temp); writer.saveValue("buildConfiguration-" + QString::number(i), temp);
buildConfigurationNames << bc->name(); buildConfigurationNames << QString::number(i);
} }
writer.saveValue("buildconfigurations", buildConfigurationNames); writer.saveValue("buildconfigurations", buildConfigurationNames);
// save each buildstep/buildConfiguration combination // save each buildstep/buildConfiguration combination
foreach (const BuildConfiguration *bc, buildConfigurations()) { for(int i=0; i < bcs.size(); ++i) {
QStringList buildStepNames; QStringList buildStepNames;
foreach (BuildStep *buildStep, bc->buildSteps()) foreach (BuildStep *buildStep, bcs.at(i)->buildSteps())
buildStepNames << buildStep->name(); buildStepNames << buildStep->name();
writer.saveValue("buildconfiguration-" + bc->name() + "-buildsteps", buildStepNames); writer.saveValue("buildconfiguration-" + QString::number(i) + "-buildsteps", buildStepNames);
int buildstepnr = 0; int buildstepnr = 0;
foreach (BuildStep *buildStep, bc->buildSteps()) { foreach (BuildStep *buildStep, bcs.at(i)->buildSteps()) {
QMap<QString, QVariant> temp; QMap<QString, QVariant> temp;
buildStep->storeIntoLocalMap(temp); buildStep->storeIntoLocalMap(temp);
writer.saveValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr), temp); writer.saveValue("buildconfiguration-" + QString::number(i) + "-buildstep" + QString().setNum(buildstepnr), temp);
++buildstepnr; ++buildstepnr;
} }
} }
// save each cleanstep/buildConfiguration combination // save each cleanstep/buildConfiguration combination
foreach (const BuildConfiguration *bc, buildConfigurations()) { for(int i=0; i < bcs.size(); ++i) {
QStringList cleanStepNames; QStringList cleanStepNames;
foreach (BuildStep *cleanStep, bc->cleanSteps()) foreach (BuildStep *cleanStep, bcs.at(i)->cleanSteps())
cleanStepNames << cleanStep->name(); cleanStepNames << cleanStep->name();
writer.saveValue("buildconfiguration-" + bc->name() + "-cleansteps", cleanStepNames); writer.saveValue("buildconfiguration-" + QString::number(i) + "-cleansteps", cleanStepNames);
int cleanstepnr = 0; int cleanstepnr = 0;
foreach (BuildStep *cleanStep, bc->cleanSteps()) { foreach (BuildStep *cleanStep, bcs.at(i)->cleanSteps()) {
QMap<QString, QVariant> temp; QMap<QString, QVariant> temp;
cleanStep->storeIntoLocalMap(temp); cleanStep->storeIntoLocalMap(temp);
writer.saveValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr), temp); writer.saveValue("buildconfiguration-" + QString::number(i) + "-cleanstep" + QString().setNum(cleanstepnr), temp);
++cleanstepnr; ++cleanstepnr;
} }
} }
@@ -212,8 +206,6 @@ void Project::saveSettingsImpl(PersistentSettingsWriter &writer)
bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
{ {
m_activeBuildConfiguration = reader.restoreValue("activebuildconfiguration").toString();
m_values = reader.restoreValue("project").toMap(); m_values = reader.restoreValue("project").toMap();
const QList<IBuildStepFactory *> buildStepFactories = const QList<IBuildStepFactory *> buildStepFactories =
@@ -221,15 +213,16 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
// restoring BuldConfigurations from settings // restoring BuldConfigurations from settings
const QStringList buildConfigurationNames = reader.restoreValue("buildconfigurations").toStringList(); const QStringList buildConfigurationNames = reader.restoreValue("buildconfigurations").toStringList();
foreach (const QString &buildConfigurationName, buildConfigurationNames) { foreach (const QString &buildConfigurationName, buildConfigurationNames) {
BuildConfiguration *bc = buildConfigurationFactory()->restore(buildConfigurationName); BuildConfiguration *bc = buildConfigurationFactory()->restore();
QMap<QString, QVariant> temp = QMap<QString, QVariant> temp =
reader.restoreValue("buildConfiguration-" + buildConfigurationName).toMap(); reader.restoreValue("buildConfiguration-" + buildConfigurationName).toMap();
bc->setValuesFromMap(temp); bc->setValuesFromMap(temp);
// Restore build steps // Restore build steps
QVariant buildStepsValueVariant = reader.restoreValue("buildconfiguration-" + bc->name() + "-buildsteps"); QVariant buildStepsValueVariant = reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-buildsteps");
if(buildStepsValueVariant.isValid()) { if(buildStepsValueVariant.isValid()) {
int pos = 0; int pos = 0;
QStringList buildStepNames = buildStepsValueVariant.toStringList(); QStringList buildStepNames = buildStepsValueVariant.toStringList();
@@ -248,7 +241,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
QMap<QString, QVariant> buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap(); QMap<QString, QVariant> buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap();
buildStep->restoreFromGlobalMap(buildStepValues); buildStep->restoreFromGlobalMap(buildStepValues);
buildStepValues = buildStepValues =
reader.restoreValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr)).toMap(); reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-buildstep" + QString().setNum(buildstepnr)).toMap();
buildStep->restoreFromLocalMap(buildStepValues); buildStep->restoreFromLocalMap(buildStepValues);
bc->insertBuildStep(pos, buildStep); bc->insertBuildStep(pos, buildStep);
++pos; ++pos;
@@ -256,7 +249,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
} }
} }
// Restore clean steps // Restore clean steps
QVariant cleanStepsValueVariant = reader.restoreValue("buildconfiguration-" + bc->name() + "-cleansteps"); QVariant cleanStepsValueVariant = reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-cleansteps");
if(cleanStepsValueVariant.isValid()) { if(cleanStepsValueVariant.isValid()) {
int pos = 0; int pos = 0;
QStringList cleanStepNames = cleanStepsValueVariant.toStringList(); QStringList cleanStepNames = cleanStepsValueVariant.toStringList();
@@ -275,7 +268,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
QMap<QString, QVariant> buildStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap(); QMap<QString, QVariant> buildStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap();
cleanStep->restoreFromGlobalMap(buildStepValues); cleanStep->restoreFromGlobalMap(buildStepValues);
buildStepValues = buildStepValues =
reader.restoreValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-cleanstep" + QString().setNum(cleanstepnr)).toMap();
cleanStep->restoreFromLocalMap(buildStepValues); cleanStep->restoreFromLocalMap(buildStepValues);
bc->insertCleanStep(pos, cleanStep); bc->insertCleanStep(pos, cleanStep);
++pos; ++pos;
@@ -284,6 +277,10 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
} }
} }
// Set Active Configuration
QString activeConfigurationName = reader.restoreValue("activebuildconfiguration").toString();
m_activeBuildConfiguration = buildConfigurations().at(buildConfigurationNames.indexOf(activeConfigurationName));
//Build Settings //Build Settings
QVariant buildStepsVariant = reader.restoreValue("buildsteps"); QVariant buildStepsVariant = reader.restoreValue("buildsteps");
if (buildStepsVariant.isValid()) { if (buildStepsVariant.isValid()) {
@@ -302,13 +299,14 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
} }
} }
if (factory) { if (factory) {
foreach(BuildConfiguration *bc, buildConfigurations()) { const QList<BuildConfiguration *> &bcs = buildConfigurations();
buildStep = factory->create(bc, buildStepName); for(int i = 0; i < bcs.size(); ++i) {
bc->insertBuildStep(pos, buildStep); buildStep = factory->create(bcs.at(i), buildStepName);
bcs.at(i)->insertBuildStep(pos, buildStep);
QMap<QString, QVariant> buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap(); QMap<QString, QVariant> buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap();
buildStep->restoreFromGlobalMap(buildStepValues); buildStep->restoreFromGlobalMap(buildStepValues);
buildStepValues = buildStepValues =
reader.restoreValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr)).toMap(); reader.restoreValue("buildconfiguration-" + QString::number(i) + "-buildstep" + QString().setNum(buildstepnr)).toMap();
buildStep->restoreFromLocalMap(buildStepValues); buildStep->restoreFromLocalMap(buildStepValues);
} }
++pos; ++pos;
@@ -334,13 +332,14 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader)
} }
if (factory) { if (factory) {
foreach(BuildConfiguration *bc, buildConfigurations()) { const QList<BuildConfiguration *> &bcs = buildConfigurations();
cleanStep = factory->create(bc, cleanStepName); for (int i = 0; i < bcs.size(); ++i) {
bc->insertCleanStep(pos, cleanStep); cleanStep = factory->create(bcs.at(i), cleanStepName);
bcs.at(i)->insertCleanStep(pos, cleanStep);
QMap<QString, QVariant> cleanStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap(); QMap<QString, QVariant> cleanStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap();
cleanStep->restoreFromGlobalMap(cleanStepValues); cleanStep->restoreFromGlobalMap(cleanStepValues);
QMap<QString, QVariant> buildStepValues = QMap<QString, QVariant> buildStepValues =
reader.restoreValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); reader.restoreValue("buildconfiguration-" + QString::number(i) + "-cleanstep" + QString().setNum(cleanstepnr)).toMap();
cleanStep->restoreFromLocalMap(buildStepValues); cleanStep->restoreFromLocalMap(buildStepValues);
} }
++pos; ++pos;
@@ -396,23 +395,15 @@ QVariant Project::value(const QString &name) const
return QVariant(); return QVariant();
} }
BuildConfiguration *Project::buildConfiguration(const QString &name) const
{
for (int i = 0; i != m_buildConfigurationValues.size(); ++i)
if (m_buildConfigurationValues.at(i)->name() == name)
return m_buildConfigurationValues.at(i);
return 0;
}
BuildConfiguration *Project::activeBuildConfiguration() const BuildConfiguration *Project::activeBuildConfiguration() const
{ {
return buildConfiguration(m_activeBuildConfiguration); //TODO return m_activeBuildConfiguration; //TODO
} }
void Project::setActiveBuildConfiguration(BuildConfiguration *configuration) void Project::setActiveBuildConfiguration(BuildConfiguration *configuration)
{ {
if (m_activeBuildConfiguration != configuration->name() && m_buildConfigurationValues.contains(configuration)) { if (m_activeBuildConfiguration != configuration && m_buildConfigurationValues.contains(configuration)) {
m_activeBuildConfiguration = configuration->name(); m_activeBuildConfiguration = configuration;
emit activeBuildConfigurationChanged(); emit activeBuildConfigurationChanged();
} }
} }
@@ -486,7 +477,7 @@ void Project::setDisplayNameFor(BuildConfiguration *configuration, const QString
configuration->setDisplayName(displayName); configuration->setDisplayName(displayName);
emit buildConfigurationDisplayNameChanged(configuration->name()); emit buildConfigurationDisplayNameChanged(configuration);
} }
QByteArray Project::predefinedMacros(const QString &) const QByteArray Project::predefinedMacros(const QString &) const

View File

@@ -87,7 +87,6 @@ public:
void addBuildConfiguration(BuildConfiguration *configuration); void addBuildConfiguration(BuildConfiguration *configuration);
void removeBuildConfiguration(BuildConfiguration *configuration); void removeBuildConfiguration(BuildConfiguration *configuration);
BuildConfiguration *buildConfiguration(const QString & name) const;
QList<BuildConfiguration *> buildConfigurations() const; QList<BuildConfiguration *> buildConfigurations() const;
// remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead
void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName); void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName);
@@ -146,12 +145,12 @@ signals:
void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name); void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name);
void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name); void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name);
void removedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); void removedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc);
void addedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); void addedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc);
// This signal is jut there for updating the tree list in the buildsettings wizard // This signal is jut there for updating the tree list in the buildsettings wizard
void buildConfigurationDisplayNameChanged(const QString &buildConfiguration); void buildConfigurationDisplayNameChanged(BuildConfiguration *bc);
void environmentChanged(const QString &buildConfiguration); void environmentChanged(BuildConfiguration *bc);
protected: protected:
/* This method is called when the project .user file is saved. Simply call /* This method is called when the project .user file is saved. Simply call
@@ -175,7 +174,7 @@ protected:
private: private:
QMap<QString, QVariant> m_values; QMap<QString, QVariant> m_values;
QList<BuildConfiguration *> m_buildConfigurationValues; QList<BuildConfiguration *> m_buildConfigurationValues;
QString m_activeBuildConfiguration; BuildConfiguration *m_activeBuildConfiguration;
QList<RunConfiguration *> m_runConfigurations; QList<RunConfiguration *> m_runConfigurations;
RunConfiguration* m_activeRunConfiguration; RunConfiguration* m_activeRunConfiguration;
EditorConfiguration *m_editorConfiguration; EditorConfiguration *m_editorConfiguration;

View File

@@ -1424,20 +1424,7 @@ void ProjectExplorerPlugin::buildProjectOnly()
qDebug() << "ProjectExplorerPlugin::buildProjectOnly"; qDebug() << "ProjectExplorerPlugin::buildProjectOnly";
if (saveModifiedFiles()) if (saveModifiedFiles())
buildManager()->buildProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); buildManager()->buildProject(d->m_currentProject->activeBuildConfiguration());
}
static QStringList configurations(const QList<Project *> &projects)
{
QStringList result;
foreach (const Project * pro, projects) {
if (BuildConfiguration *bc = pro->activeBuildConfiguration()) {
result << bc->name();
} else {
result << QString::null;
}
}
return result;
} }
void ProjectExplorerPlugin::buildProject() void ProjectExplorerPlugin::buildProject()
@@ -1446,8 +1433,11 @@ void ProjectExplorerPlugin::buildProject()
qDebug() << "ProjectExplorerPlugin::buildProject"; qDebug() << "ProjectExplorerPlugin::buildProject";
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(d->m_currentProject); QList<BuildConfiguration *> configurations;
d->m_buildManager->buildProjects(projects, configurations(projects)); foreach (Project *pro, d->m_session->projectOrder(d->m_currentProject))
configurations << pro->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
} }
} }
@@ -1457,8 +1447,10 @@ void ProjectExplorerPlugin::buildSession()
qDebug() << "ProjectExplorerPlugin::buildSession"; qDebug() << "ProjectExplorerPlugin::buildSession";
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(); QList<BuildConfiguration *> configurations;
d->m_buildManager->buildProjects(projects, configurations(projects)); foreach (Project *pro, d->m_session->projectOrder())
configurations << pro->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
} }
} }
@@ -1468,8 +1460,8 @@ void ProjectExplorerPlugin::rebuildProjectOnly()
qDebug() << "ProjectExplorerPlugin::rebuildProjectOnly"; qDebug() << "ProjectExplorerPlugin::rebuildProjectOnly";
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
d->m_buildManager->cleanProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); d->m_buildManager->cleanProject(d->m_currentProject->activeBuildConfiguration());
d->m_buildManager->buildProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); d->m_buildManager->buildProject(d->m_currentProject->activeBuildConfiguration());
} }
} }
@@ -1479,11 +1471,13 @@ void ProjectExplorerPlugin::rebuildProject()
qDebug() << "ProjectExplorerPlugin::rebuildProject"; qDebug() << "ProjectExplorerPlugin::rebuildProject";
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(d->m_currentProject); const QList<Project *> &projects = d->m_session->projectOrder(d->m_currentProject);
const QStringList configs = configurations(projects); QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
configurations << pro->activeBuildConfiguration();
d->m_buildManager->cleanProjects(projects, configs); d->m_buildManager->cleanProjects(configurations);
d->m_buildManager->buildProjects(projects, configs); d->m_buildManager->buildProjects(configurations);
} }
} }
@@ -1494,10 +1488,12 @@ void ProjectExplorerPlugin::rebuildSession()
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(); const QList<Project *> & projects = d->m_session->projectOrder();
const QStringList configs = configurations(projects); QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
configurations << pro->activeBuildConfiguration();
d->m_buildManager->cleanProjects(projects, configs); d->m_buildManager->cleanProjects(configurations);
d->m_buildManager->buildProjects(projects, configs); d->m_buildManager->buildProjects(configurations);
} }
} }
@@ -1507,7 +1503,7 @@ void ProjectExplorerPlugin::cleanProjectOnly()
qDebug() << "ProjectExplorerPlugin::cleanProjectOnly"; qDebug() << "ProjectExplorerPlugin::cleanProjectOnly";
if (saveModifiedFiles()) if (saveModifiedFiles())
d->m_buildManager->cleanProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); d->m_buildManager->cleanProject(d->m_currentProject->activeBuildConfiguration());
} }
void ProjectExplorerPlugin::cleanProject() void ProjectExplorerPlugin::cleanProject()
@@ -1517,7 +1513,10 @@ void ProjectExplorerPlugin::cleanProject()
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(d->m_currentProject); const QList<Project *> & projects = d->m_session->projectOrder(d->m_currentProject);
d->m_buildManager->cleanProjects(projects, configurations(projects)); QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
configurations << pro->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
} }
} }
@@ -1528,21 +1527,24 @@ void ProjectExplorerPlugin::cleanSession()
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
const QList<Project *> & projects = d->m_session->projectOrder(); const QList<Project *> & projects = d->m_session->projectOrder();
d->m_buildManager->cleanProjects(projects, configurations(projects)); QList<BuildConfiguration *> configurations;
foreach (Project *pro, projects)
configurations << pro->activeBuildConfiguration();
d->m_buildManager->cleanProjects(configurations);
} }
} }
void ProjectExplorerPlugin::runProject() void ProjectExplorerPlugin::runProject()
{ {
runProjectImpl(startupProject()); runProjectImpl(startupProject(), ProjectExplorer::Constants::RUNMODE);
} }
void ProjectExplorerPlugin::runProjectContextMenu() void ProjectExplorerPlugin::runProjectContextMenu()
{ {
runProjectImpl(d->m_currentProject); runProjectImpl(d->m_currentProject, ProjectExplorer::Constants::RUNMODE);
} }
void ProjectExplorerPlugin::runProjectImpl(Project *pro) void ProjectExplorerPlugin::runProjectImpl(Project *pro, QString mode)
{ {
if (!pro) if (!pro)
return; return;
@@ -1553,16 +1555,21 @@ void ProjectExplorerPlugin::runProjectImpl(Project *pro)
return; return;
} }
if (saveModifiedFiles()) { if (saveModifiedFiles()) {
d->m_runMode = ProjectExplorer::Constants::RUNMODE; d->m_runMode = mode;
d->m_delayedRunConfiguration = pro->activeRunConfiguration(); d->m_delayedRunConfiguration = pro->activeRunConfiguration();
const QList<Project *> & projects = d->m_session->projectOrder(pro); const QList<Project *> & projects = d->m_session->projectOrder(pro);
d->m_buildManager->buildProjects(projects, configurations(projects)); QList<BuildConfiguration *> configurations;
foreach(Project *pro, projects)
configurations << pro->activeBuildConfiguration();
d->m_buildManager->buildProjects(configurations);
updateRunAction();
} }
} else { } else {
// TODO this ignores RunConfiguration::isEnabled() // TODO this ignores RunConfiguration::isEnabled()
if (saveModifiedFiles()) if (saveModifiedFiles())
executeRunConfiguration(pro->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE); executeRunConfiguration(pro->activeRunConfiguration(), mode);
} }
} }
@@ -1572,25 +1579,7 @@ void ProjectExplorerPlugin::debugProject()
if (!pro || d->m_debuggingRunControl ) if (!pro || d->m_debuggingRunControl )
return; return;
if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasBuildSettings()) { runProjectImpl(pro, ProjectExplorer::Constants::DEBUGMODE);
if (!pro->activeRunConfiguration()->isEnabled()) {
if (!showBuildConfigDialog())
return;
}
if (saveModifiedFiles()) {
d->m_runMode = ProjectExplorer::Constants::DEBUGMODE;
d->m_delayedRunConfiguration = pro->activeRunConfiguration();
const QList<Project *> & projects = d->m_session->projectOrder(pro);
d->m_buildManager->buildProjects(projects, configurations(projects));
updateRunAction();
}
} else {
// TODO this ignores RunConfiguration::isEnabled()
if (saveModifiedFiles())
executeRunConfiguration(pro->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE);
}
} }
bool ProjectExplorerPlugin::showBuildConfigDialog() bool ProjectExplorerPlugin::showBuildConfigDialog()
@@ -1965,14 +1954,14 @@ void ProjectExplorerPlugin::populateBuildConfigurationMenu()
d->m_buildConfigurationMenu->clear(); d->m_buildConfigurationMenu->clear();
if (Project *pro = d->m_currentProject) { if (Project *pro = d->m_currentProject) {
const BuildConfiguration *activeBC = pro->activeBuildConfiguration(); const BuildConfiguration *activeBC = pro->activeBuildConfiguration();
foreach (const BuildConfiguration *bc, pro->buildConfigurations()) { foreach (BuildConfiguration *bc, pro->buildConfigurations()) {
QString displayName = bc->displayName(); QString displayName = bc->displayName();
QAction *act = new QAction(displayName, d->m_buildConfigurationActionGroup); QAction *act = new QAction(displayName, d->m_buildConfigurationActionGroup);
if (debug) if (debug)
qDebug() << "BuildConfiguration " << bc->name() << "active: " << activeBC->name(); qDebug() << "BuildConfiguration " << bc->displayName() << "active: " << activeBC->displayName();
act->setCheckable(true); act->setCheckable(true);
act->setChecked(bc == activeBC); act->setChecked(bc == activeBC);
act->setData(bc->name()); act->setData(QVariant::fromValue(bc));
d->m_buildConfigurationMenu->addAction(act); d->m_buildConfigurationMenu->addAction(act);
} }
d->m_buildConfigurationMenu->setEnabled(true); d->m_buildConfigurationMenu->setEnabled(true);
@@ -1986,8 +1975,7 @@ void ProjectExplorerPlugin::buildConfigurationMenuTriggered(QAction *action)
if (debug) if (debug)
qDebug() << "ProjectExplorerPlugin::buildConfigurationMenuTriggered"; qDebug() << "ProjectExplorerPlugin::buildConfigurationMenuTriggered";
d->m_currentProject->setActiveBuildConfiguration(d->m_currentProject->buildConfiguration( d->m_currentProject->setActiveBuildConfiguration(action->data().value<BuildConfiguration *>());
action->data().toString()));
} }
void ProjectExplorerPlugin::populateRunConfigurationMenu() void ProjectExplorerPlugin::populateRunConfigurationMenu()
@@ -2136,9 +2124,6 @@ Internal::ProjectExplorerSettings ProjectExplorerPlugin::projectExplorerSettings
return d->m_projectExplorerSettings; return d->m_projectExplorerSettings;
} }
// ---------- BuildConfigDialog -----------
Q_DECLARE_METATYPE(BuildConfiguration*);
BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent) BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent)
: QDialog(parent), : QDialog(parent),
m_project(project) m_project(project)
@@ -2173,7 +2158,7 @@ BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent)
RunConfiguration *activeRun = m_project->activeRunConfiguration(); RunConfiguration *activeRun = m_project->activeRunConfiguration();
foreach (BuildConfiguration *config, m_project->buildConfigurations()) { foreach (BuildConfiguration *config, m_project->buildConfigurations()) {
if (activeRun->isEnabled(config)) { if (activeRun->isEnabled(config)) {
m_configCombo->addItem(config->name(), qVariantFromValue(config)); m_configCombo->addItem(config->displayName(), QVariant::fromValue(config));
} }
} }
if (m_configCombo->count() == 0) { if (m_configCombo->count() == 0) {

View File

@@ -215,7 +215,7 @@ private slots:
void currentModeChanged(Core::IMode *mode); void currentModeChanged(Core::IMode *mode);
private: private:
void runProjectImpl(Project *pro); void runProjectImpl(Project *pro, QString mode);
void executeRunConfiguration(RunConfiguration *, const QString &mode); void executeRunConfiguration(RunConfiguration *, const QString &mode);
bool showBuildConfigDialog(); bool showBuildConfigDialog();

View File

@@ -512,7 +512,7 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare
//m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); //m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
foreach(const BuildConfiguration *buildConfiguration, p->buildConfigurations()) foreach(const BuildConfiguration *buildConfiguration, p->buildConfigurations())
m_comboBox->addItem(buildConfiguration->displayName(), buildConfiguration->name()); m_comboBox->addItem(buildConfiguration->displayName(), buildConfiguration);
if (p->buildConfigurations().count() == 1) { if (p->buildConfigurations().count() == 1) {
m_label->setText(m_comboBox->itemText(0)); m_label->setText(m_comboBox->itemText(0));
setCurrentWidget(m_label); setCurrentWidget(m_label);
@@ -522,14 +522,14 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare
if (index != -1) if (index != -1)
m_comboBox->setCurrentIndex(index); m_comboBox->setCurrentIndex(index);
connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)), connect(p, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)),
this, SLOT(nameChanged(QString))); this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *)));
connect(p, SIGNAL(activeBuildConfigurationChanged()), connect(p, SIGNAL(activeBuildConfigurationChanged()),
this, SLOT(activeConfigurationChanged())); this, SLOT(activeConfigurationChanged()));
connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, QString)), connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)),
this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, QString))); this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)));
connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, QString)), connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)),
this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, QString))); this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)));
connect(m_comboBox, SIGNAL(activated(int)), connect(m_comboBox, SIGNAL(activated(int)),
this, SLOT(changedIndex(int))); this, SLOT(changedIndex(int)));
} }
@@ -539,28 +539,28 @@ BuildConfigurationComboBox::~BuildConfigurationComboBox()
} }
void BuildConfigurationComboBox::nameChanged(const QString &buildConfiguration) void BuildConfigurationComboBox::nameChanged(BuildConfiguration *bc)
{ {
int index = nameToIndex(buildConfiguration); int index = nameToIndex(bc);
if (index == -1) if (index == -1)
return; return;
const QString &displayName = m_project->buildConfiguration(buildConfiguration)->displayName(); const QString &displayName = bc->displayName();
m_comboBox->setItemText(index, displayName); m_comboBox->setItemText(index, displayName);
if (m_comboBox->count() == 1) if (m_comboBox->count() == 1)
m_label->setText(displayName); m_label->setText(displayName);
} }
int BuildConfigurationComboBox::nameToIndex(const QString &buildConfiguration) int BuildConfigurationComboBox::nameToIndex(BuildConfiguration *bc)
{ {
for (int i=0; i < m_comboBox->count(); ++i) for (int i=0; i < m_comboBox->count(); ++i)
if (m_comboBox->itemData(i) == buildConfiguration) if (m_comboBox->itemData(i).value<BuildConfiguration *>() == bc)
return i; return i;
return -1; return -1;
} }
void BuildConfigurationComboBox::activeConfigurationChanged() void BuildConfigurationComboBox::activeConfigurationChanged()
{ {
int index = nameToIndex(m_project->activeBuildConfiguration()->name()); int index = nameToIndex(m_project->activeBuildConfiguration());
if (index == -1) if (index == -1)
return; return;
ignoreIndexChange = true; ignoreIndexChange = true;
@@ -568,20 +568,20 @@ void BuildConfigurationComboBox::activeConfigurationChanged()
ignoreIndexChange = false; ignoreIndexChange = false;
} }
void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,const QString &buildConfiguration) void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,BuildConfiguration *bc)
{ {
ignoreIndexChange = true; ignoreIndexChange = true;
m_comboBox->addItem(m_project->buildConfiguration(buildConfiguration)->displayName(), buildConfiguration); m_comboBox->addItem(bc->displayName(), QVariant::fromValue(bc));
if (m_comboBox->count() == 2) if (m_comboBox->count() == 2)
setCurrentWidget(m_comboBox); setCurrentWidget(m_comboBox);
ignoreIndexChange = false; ignoreIndexChange = false;
} }
void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration) void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, BuildConfiguration *bc)
{ {
ignoreIndexChange = true; ignoreIndexChange = true;
int index = nameToIndex(buildConfiguration); int index = nameToIndex(bc);
m_comboBox->removeItem(index); m_comboBox->removeItem(index);
if (m_comboBox->count() == 1) { if (m_comboBox->count() == 1) {
m_label->setText(m_comboBox->itemText(0)); m_label->setText(m_comboBox->itemText(0));
@@ -594,8 +594,7 @@ void BuildConfigurationComboBox::changedIndex(int newIndex)
{ {
if (newIndex == -1) if (newIndex == -1)
return; return;
m_project->setActiveBuildConfiguration( m_project->setActiveBuildConfiguration(m_comboBox->itemData(newIndex).value<BuildConfiguration *>());
m_project->buildConfiguration(m_comboBox->itemData(newIndex).toString()));
} }
/// ///

View File

@@ -56,6 +56,7 @@ class IPropertiesPanel;
class Project; class Project;
class ProjectExplorerPlugin; class ProjectExplorerPlugin;
class SessionManager; class SessionManager;
class BuildConfiguration;
namespace Internal { namespace Internal {
@@ -100,13 +101,13 @@ public:
BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0); BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0);
~BuildConfigurationComboBox(); ~BuildConfigurationComboBox();
private slots: private slots:
void nameChanged(const QString &buildConfiguration); void nameChanged(ProjectExplorer::BuildConfiguration *bc);
void activeConfigurationChanged(); void activeConfigurationChanged();
void addedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); void addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc);
void removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); void removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc);
void changedIndex(int newIndex); void changedIndex(int newIndex);
private: private:
int nameToIndex(const QString &buildConfiguration); int nameToIndex(ProjectExplorer::BuildConfiguration *bc);
bool ignoreIndexChange; bool ignoreIndexChange;
ProjectExplorer::Project *m_project; ProjectExplorer::Project *m_project;
QComboBox *m_comboBox; QComboBox *m_comboBox;

View File

@@ -34,14 +34,14 @@ using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal; using namespace Qt4ProjectManager::Internal;
using ProjectExplorer::BuildConfiguration; using ProjectExplorer::BuildConfiguration;
Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro, const QString &name) Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro)
: BuildConfiguration(pro, name) : BuildConfiguration(pro)
{ {
} }
Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source) Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4BuildConfiguration *source)
: BuildConfiguration(name, source) : BuildConfiguration(source)
{ {
} }

View File

@@ -41,9 +41,9 @@ namespace Internal {
class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration
{ {
public: public:
Qt4BuildConfiguration(Qt4Project *pro, const QString &name); Qt4BuildConfiguration(Qt4Project *pro);
// copy ctor // copy ctor
Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source); Qt4BuildConfiguration(Qt4BuildConfiguration *source);
~Qt4BuildConfiguration(); ~Qt4BuildConfiguration();
}; };

View File

@@ -42,7 +42,7 @@ using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal; using namespace Qt4ProjectManager::Internal;
Qt4BuildEnvironmentWidget::Qt4BuildEnvironmentWidget(Qt4Project *project) Qt4BuildEnvironmentWidget::Qt4BuildEnvironmentWidget(Qt4Project *project)
: BuildConfigWidget(), m_pro(project) : BuildConfigWidget(), m_pro(project), m_buildConfiguration(0)
{ {
QVBoxLayout *vbox = new QVBoxLayout(this); QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0); vbox->setMargin(0);
@@ -65,28 +65,25 @@ QString Qt4BuildEnvironmentWidget::displayName() const
return tr("Build Environment"); return tr("Build Environment");
} }
void Qt4BuildEnvironmentWidget::init(const QString &buildConfiguration) void Qt4BuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc)
{ {
if (debug) if (debug)
qDebug() << "Qt4BuildConfigWidget::init()"; qDebug() << "Qt4BuildConfigWidget::init()";
m_buildConfiguration = buildConfiguration; m_buildConfiguration = bc;
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfiguration); m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration));
m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(bc)); m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration));
m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration));
m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(bc));
m_buildEnvironmentWidget->updateButtons(); m_buildEnvironmentWidget->updateButtons();
} }
void Qt4BuildEnvironmentWidget::environmentModelUserChangesUpdated() void Qt4BuildEnvironmentWidget::environmentModelUserChangesUpdated()
{ {
m_pro->setUserEnvironmentChanges(m_pro->buildConfiguration(m_buildConfiguration), m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges());
m_buildEnvironmentWidget->userChanges());
} }
void Qt4BuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) void Qt4BuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked)
{ {
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked);
m_pro->setUseSystemEnvironment(bc, !checked); m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration));
m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc));
} }

View File

@@ -53,7 +53,7 @@ public:
Qt4BuildEnvironmentWidget(Qt4Project *project); Qt4BuildEnvironmentWidget(Qt4Project *project);
QString displayName() const; QString displayName() const;
void init(const QString &buildConfiguration); void init(ProjectExplorer::BuildConfiguration *bc);
private slots: private slots:
void environmentModelUserChangesUpdated(); void environmentModelUserChangesUpdated();
@@ -63,7 +63,7 @@ private:
ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget;
QCheckBox *m_clearSystemEnvironmentCheckBox; QCheckBox *m_clearSystemEnvironmentCheckBox;
Qt4Project *m_pro; Qt4Project *m_pro;
QString m_buildConfiguration; ProjectExplorer::BuildConfiguration *m_buildConfiguration;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -297,17 +297,17 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(const QString &type) co
return bc; return bc;
} }
BuildConfiguration *Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const BuildConfiguration *Qt4BuildConfigurationFactory::clone(BuildConfiguration *source) const
{ {
Qt4BuildConfiguration *oldbc = static_cast<Qt4BuildConfiguration *>(source); Qt4BuildConfiguration *oldbc = static_cast<Qt4BuildConfiguration *>(source);
Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(name, oldbc); Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(oldbc);
m_project->addBuildConfiguration(newbc); m_project->addBuildConfiguration(newbc);
return newbc; return newbc;
} }
BuildConfiguration *Qt4BuildConfigurationFactory::restore(const QString &name) const BuildConfiguration *Qt4BuildConfigurationFactory::restore() const
{ {
Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project, name); Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project);
return bc; return bc;
} }
@@ -459,7 +459,8 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu
bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild; bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild;
// Add the buildconfiguration // Add the buildconfiguration
Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this, buildConfigurationName); Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this);
bc->setDisplayName(buildConfigurationName);
addBuildConfiguration(bc); addBuildConfiguration(bc);
QMakeStep *qmakeStep = new QMakeStep(bc); QMakeStep *qmakeStep = new QMakeStep(bc);
@@ -890,7 +891,7 @@ void Qt4Project::setUseSystemEnvironment(BuildConfiguration *configuration, bool
if (useSystemEnvironment(configuration) == b) if (useSystemEnvironment(configuration) == b)
return; return;
configuration->setValue("clearSystemEnvironment", !b); configuration->setValue("clearSystemEnvironment", !b);
emit environmentChanged(configuration->name()); emit environmentChanged(configuration);
} }
bool Qt4Project::useSystemEnvironment(BuildConfiguration *configuration) const bool Qt4Project::useSystemEnvironment(BuildConfiguration *configuration) const
@@ -911,7 +912,7 @@ void Qt4Project::setUserEnvironmentChanges(BuildConfiguration *configuration, co
if (list == configuration->value("userEnvironmentChanges").toStringList()) if (list == configuration->value("userEnvironmentChanges").toStringList())
return; return;
configuration->setValue("userEnvironmentChanges", list); configuration->setValue("userEnvironmentChanges", list);
emit environmentChanged(configuration->name()); emit environmentChanged(configuration);
} }
QString Qt4Project::qtDir(BuildConfiguration *configuration) const QString Qt4Project::qtDir(BuildConfiguration *configuration) const
@@ -931,7 +932,7 @@ int Qt4Project::qtVersionId(BuildConfiguration *configuration) const
{ {
QtVersionManager *vm = QtVersionManager::instance(); QtVersionManager *vm = QtVersionManager::instance();
if (debug) if (debug)
qDebug()<<"Looking for qtVersion ID of "<<configuration->name(); qDebug()<<"Looking for qtVersion ID of "<<configuration->displayName();
int id = 0; int id = 0;
QVariant vid = configuration->value(KEY_QT_VERSION_ID); QVariant vid = configuration->value(KEY_QT_VERSION_ID);
if (vid.isValid()) { if (vid.isValid()) {

View File

@@ -132,8 +132,8 @@ public:
QString displayNameForType(const QString &type) const; QString displayNameForType(const QString &type) const;
ProjectExplorer::BuildConfiguration *create(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const;
ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const;
ProjectExplorer::BuildConfiguration *restore(const QString &name) const; ProjectExplorer::BuildConfiguration *restore() const;
void update(); void update();

View File

@@ -53,7 +53,8 @@ using namespace Qt4ProjectManager::Internal;
Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project)
: BuildConfigWidget(), : BuildConfigWidget(),
m_pro(project) m_pro(project),
m_buildConfiguration(0)
{ {
QVBoxLayout *vbox = new QVBoxLayout(this); QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0); vbox->setMargin(0);
@@ -111,10 +112,9 @@ Qt4ProjectConfigWidget::~Qt4ProjectConfigWidget()
void Qt4ProjectConfigWidget::updateDetails() void Qt4ProjectConfigWidget::updateDetails()
{ {
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); QtVersion *version = m_pro->qtVersion(m_buildConfiguration);
QtVersion *version = m_pro->qtVersion(bc);
QString versionString; QString versionString;
if (m_pro->qtVersionId(bc) == 0) { if (m_pro->qtVersionId(m_buildConfiguration) == 0) {
versionString = tr("Default Qt Version (%1)").arg(version->name()); versionString = tr("Default Qt Version (%1)").arg(version->name());
} else if(version){ } else if(version){
versionString = version->name(); versionString = version->name();
@@ -126,8 +126,8 @@ void Qt4ProjectConfigWidget::updateDetails()
"with tool chain <b>%2</b><br>" "with tool chain <b>%2</b><br>"
"building in <b>%3</b>") "building in <b>%3</b>")
.arg(versionString, .arg(versionString,
ProjectExplorer::ToolChain::toolChainName(m_pro->toolChainType(bc)), ProjectExplorer::ToolChain::toolChainName(m_pro->toolChainType(m_buildConfiguration)),
QDir::toNativeSeparators(m_pro->buildDirectory(bc)))); QDir::toNativeSeparators(m_pro->buildDirectory(m_buildConfiguration))));
} }
void Qt4ProjectConfigWidget::manageQtVersions() void Qt4ProjectConfigWidget::manageQtVersions()
@@ -142,22 +142,21 @@ QString Qt4ProjectConfigWidget::displayName() const
return tr("General"); return tr("General");
} }
void Qt4ProjectConfigWidget::init(const QString &buildConfiguration) void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
{ {
if (debug) if (debug)
qDebug() << "Qt4ProjectConfigWidget::init() for"<<buildConfiguration; qDebug() << "Qt4ProjectConfigWidget::init() for"<<bc->displayName();
m_buildConfiguration = buildConfiguration; m_buildConfiguration = bc;
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfiguration); m_ui->nameLineEdit->setText(m_buildConfiguration->displayName());
m_ui->nameLineEdit->setText(bc->displayName());
setupQtVersionsComboBox(); setupQtVersionsComboBox();
bool shadowBuild = bc->value("useShadowBuild").toBool(); bool shadowBuild = m_buildConfiguration->value("useShadowBuild").toBool();
m_ui->shadowBuildCheckBox->setChecked(shadowBuild); m_ui->shadowBuildCheckBox->setChecked(shadowBuild);
m_ui->shadowBuildDirEdit->setEnabled(shadowBuild); m_ui->shadowBuildDirEdit->setEnabled(shadowBuild);
m_browseButton->setEnabled(shadowBuild); m_browseButton->setEnabled(shadowBuild);
m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(bc)); m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(m_buildConfiguration));
updateImportLabel(); updateImportLabel();
updateToolChainCombo(); updateToolChainCombo();
updateDetails(); updateDetails();
@@ -165,12 +164,12 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration)
void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) void Qt4ProjectConfigWidget::changeConfigName(const QString &newName)
{ {
m_pro->setDisplayNameFor(m_pro->buildConfiguration(m_buildConfiguration), newName); m_pro->setDisplayNameFor(m_buildConfiguration, newName);
} }
void Qt4ProjectConfigWidget::setupQtVersionsComboBox() void Qt4ProjectConfigWidget::setupQtVersionsComboBox()
{ {
if (m_buildConfiguration.isEmpty()) // not yet initialized if (!m_buildConfiguration) // not yet initialized
return; return;
disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
@@ -181,7 +180,7 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox()
m_ui->qtVersionComboBox->clear(); m_ui->qtVersionComboBox->clear();
m_ui->qtVersionComboBox->addItem(tr("Default Qt Version (%1)").arg(vm->defaultVersion()->name()), 0); m_ui->qtVersionComboBox->addItem(tr("Default Qt Version (%1)").arg(vm->defaultVersion()->name()), 0);
int qtVersionId = m_pro->qtVersionId(m_pro->buildConfiguration(m_buildConfiguration)); int qtVersionId = m_pro->qtVersionId(m_buildConfiguration);
if (qtVersionId == 0) { if (qtVersionId == 0) {
m_ui->qtVersionComboBox->setCurrentIndex(0); m_ui->qtVersionComboBox->setCurrentIndex(0);
@@ -215,12 +214,11 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked)
m_ui->shadowBuildDirEdit->setEnabled(checked); m_ui->shadowBuildDirEdit->setEnabled(checked);
m_browseButton->setEnabled(checked); m_browseButton->setEnabled(checked);
bool b = m_ui->shadowBuildCheckBox->isChecked(); bool b = m_ui->shadowBuildCheckBox->isChecked();
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); m_buildConfiguration->setValue("useShadowBuild", b);
bc->setValue("useShadowBuild", b);
if (b) if (b)
bc->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path());
else else
bc->setValue("buildDirectory", QVariant(QString::null)); m_buildConfiguration->setValue("buildDirectory", QVariant(QString::null));
updateDetails(); updateDetails();
m_pro->invalidateCachedTargetInformation(); m_pro->invalidateCachedTargetInformation();
updateImportLabel(); updateImportLabel();
@@ -231,10 +229,9 @@ void Qt4ProjectConfigWidget::updateImportLabel()
bool visible = false; bool visible = false;
// we only show if we actually have a qmake and makestep // we only show if we actually have a qmake and makestep
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); if (m_pro->qmakeStep(m_buildConfiguration) && m_pro->makeStep(m_buildConfiguration)) {
if (m_pro->qmakeStep(bc) && m_pro->makeStep(bc)) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_pro->buildDirectory(m_buildConfiguration));
QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_pro->buildDirectory(bc)); QtVersion *version = m_pro->qtVersion(m_buildConfiguration);
QtVersion *version = m_pro->qtVersion(bc);
// check that there's a makefile // check that there's a makefile
if (!qmakePath.isEmpty()) { if (!qmakePath.isEmpty()) {
// and that the qmake path is different from the current version // and that the qmake path is different from the current version
@@ -243,7 +240,7 @@ void Qt4ProjectConfigWidget::updateImportLabel()
visible = true; visible = true;
} else { } else {
// check that the qmake flags, arguments match // check that the qmake flags, arguments match
visible = !m_pro->compareBuildConfigurationToImportFrom(bc, m_pro->buildDirectory(bc)); visible = !m_pro->compareBuildConfigurationToImportFrom(m_buildConfiguration, m_pro->buildDirectory(m_buildConfiguration));
} }
} else { } else {
visible = false; visible = false;
@@ -255,10 +252,9 @@ void Qt4ProjectConfigWidget::updateImportLabel()
void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged()
{ {
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); if (m_buildConfiguration->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path())
if (bc->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path())
return; return;
bc->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path());
// if the directory already exists // if the directory already exists
// check if we have a build in there and // check if we have a build in there and
// offer to import it // offer to import it
@@ -270,10 +266,9 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged()
void Qt4ProjectConfigWidget::importLabelClicked() void Qt4ProjectConfigWidget::importLabelClicked()
{ {
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); if (!m_pro->qmakeStep(m_buildConfiguration) || !m_pro->makeStep(m_buildConfiguration))
if (!m_pro->qmakeStep(bc) || !m_pro->makeStep(bc))
return; return;
QString directory = m_pro->buildDirectory(bc); QString directory = m_pro->buildDirectory(m_buildConfiguration);
if (!directory.isEmpty()) { if (!directory.isEmpty()) {
QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(directory); QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(directory);
if (!qmakePath.isEmpty()) { if (!qmakePath.isEmpty()) {
@@ -298,14 +293,14 @@ void Qt4ProjectConfigWidget::importLabelClicked()
} }
// So we got all the information now apply it... // So we got all the information now apply it...
m_pro->setQtVersion(bc, version->uniqueId()); m_pro->setQtVersion(m_buildConfiguration, version->uniqueId());
// Combo box will be updated at the end // Combo box will be updated at the end
QMakeStep *qmakeStep = m_pro->qmakeStep(bc); QMakeStep *qmakeStep = m_pro->qmakeStep(m_buildConfiguration);
qmakeStep->setQMakeArguments(additionalArguments); qmakeStep->setQMakeArguments(additionalArguments);
MakeStep *makeStep = m_pro->makeStep(bc); MakeStep *makeStep = m_pro->makeStep(m_buildConfiguration);
bc->setValue("buildConfiguration", int(qmakeBuildConfig)); m_buildConfiguration->setValue("buildConfiguration", int(qmakeBuildConfig));
// Adjust command line arguments, this is ugly as hell // Adjust command line arguments, this is ugly as hell
// If we are switching to BuildAll we want "release" in there and no "debug" // If we are switching to BuildAll we want "release" in there and no "debug"
// or "debug" in there and no "release" // or "debug" in there and no "release"
@@ -340,8 +335,8 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString
QtVersionManager *vm = QtVersionManager::instance(); QtVersionManager *vm = QtVersionManager::instance();
bool isValid = vm->version(newQtVersion)->isValid(); bool isValid = vm->version(newQtVersion)->isValid();
m_ui->invalidQtWarningLabel->setVisible(!isValid); m_ui->invalidQtWarningLabel->setVisible(!isValid);
if (newQtVersion != m_pro->qtVersionId(m_pro->buildConfiguration(m_buildConfiguration))) { if (newQtVersion != m_pro->qtVersionId(m_buildConfiguration)) {
m_pro->setQtVersion(m_pro->buildConfiguration(m_buildConfiguration), newQtVersion); m_pro->setQtVersion(m_buildConfiguration, newQtVersion);
updateToolChainCombo(); updateToolChainCombo();
m_pro->update(); m_pro->update();
} }
@@ -351,14 +346,13 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString
void Qt4ProjectConfigWidget::updateToolChainCombo() void Qt4ProjectConfigWidget::updateToolChainCombo()
{ {
m_ui->toolChainComboBox->clear(); m_ui->toolChainComboBox->clear();
ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); QList<ProjectExplorer::ToolChain::ToolChainType> toolchains = m_pro->qtVersion(m_buildConfiguration)->possibleToolChainTypes();
QList<ProjectExplorer::ToolChain::ToolChainType> toolchains = m_pro->qtVersion(bc)->possibleToolChainTypes();
using namespace ProjectExplorer; using namespace ProjectExplorer;
foreach (ToolChain::ToolChainType toolchain, toolchains) { foreach (ToolChain::ToolChainType toolchain, toolchains) {
m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain));
} }
m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1);
setToolChain(toolchains.indexOf(m_pro->toolChainType(bc))); setToolChain(toolchains.indexOf(m_pro->toolChainType(m_buildConfiguration)));
} }
void Qt4ProjectConfigWidget::selectToolChain(int index) void Qt4ProjectConfigWidget::selectToolChain(int index)
@@ -372,7 +366,7 @@ void Qt4ProjectConfigWidget::setToolChain(int index)
ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = ProjectExplorer::ToolChain::ToolChainType selectedToolChainType =
m_ui->toolChainComboBox->itemData(index, m_ui->toolChainComboBox->itemData(index,
Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>(); Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>();
m_pro->setToolChainType(m_pro->buildConfiguration(m_buildConfiguration), selectedToolChainType); m_pro->setToolChainType(m_buildConfiguration, selectedToolChainType);
if (m_ui->toolChainComboBox->currentIndex() != index) if (m_ui->toolChainComboBox->currentIndex() != index)
m_ui->toolChainComboBox->setCurrentIndex(index); m_ui->toolChainComboBox->setCurrentIndex(index);
updateDetails(); updateDetails();

View File

@@ -52,7 +52,7 @@ public:
~Qt4ProjectConfigWidget(); ~Qt4ProjectConfigWidget();
QString displayName() const; QString displayName() const;
void init(const QString &buildConfiguration); void init(ProjectExplorer::BuildConfiguration *bc);
private slots: private slots:
void changeConfigName(const QString &newName); void changeConfigName(const QString &newName);
@@ -72,8 +72,8 @@ private:
void setToolChain(int index); void setToolChain(int index);
Ui::Qt4ProjectConfigWidget *m_ui; Ui::Qt4ProjectConfigWidget *m_ui;
QAbstractButton *m_browseButton; QAbstractButton *m_browseButton;
Qt4Project *m_pro; Qt4Project *m_pro; // TODO remove
QString m_buildConfiguration; ProjectExplorer::BuildConfiguration *m_buildConfiguration;
Utils::DetailsWidget *m_detailsContainer; Utils::DetailsWidget *m_detailsContainer;
}; };

View File

@@ -80,7 +80,7 @@ Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, const QString &proFile
connect(pro, SIGNAL(activeBuildConfigurationChanged()), connect(pro, SIGNAL(activeBuildConfigurationChanged()),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
connect(pro, SIGNAL(environmentChanged(QString)), connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)),
this, SIGNAL(baseEnvironmentChanged())); this, SIGNAL(baseEnvironmentChanged()));
} }