From 20214787d13089b5822ebea1f0be02c0efe75176 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 23 Nov 2009 13:29:45 +0100 Subject: [PATCH] Add BuildConfiguration::restore and BuildConfiguration::project() More API work. --- .../cmakebuildconfiguration.cpp | 9 +++++++-- .../cmakebuildconfiguration.h | 11 +++++++++- .../cmakeprojectmanager/cmakeproject.cpp | 20 +++++++++++-------- .../cmakeprojectmanager/cmakeproject.h | 5 +++-- .../genericbuildconfiguration.cpp | 5 +++-- .../genericbuildconfiguration.h | 6 ++++-- .../genericprojectmanager/genericproject.cpp | 18 +++++++++++------ .../genericprojectmanager/genericproject.h | 5 +++-- .../projectexplorer/buildconfiguration.cpp | 11 +++++++--- .../projectexplorer/buildconfiguration.h | 16 ++++++++++----- src/plugins/projectexplorer/project.cpp | 4 ++-- .../qt4buildconfiguration.cpp | 5 +++-- .../qt4projectmanager/qt4buildconfiguration.h | 5 ++++- src/plugins/qt4projectmanager/qt4project.cpp | 20 +++++++++++++------ src/plugins/qt4projectmanager/qt4project.h | 14 +++++++------ 15 files changed, 104 insertions(+), 50 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 3ea888b3bd7..4cf0a743919 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -28,9 +28,13 @@ **************************************************************************/ #include "cmakebuildconfiguration.h" +#include "cmakeproject.h" -CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name) - : BuildConfiguration(name) +using namespace CMakeProjectManager; +using namespace Internal; + +CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro, const QString &name) + : BuildConfiguration(pro, name) { } @@ -40,3 +44,4 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name, BuildConfi { } + diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index be98eecda15..2152b8bb238 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -32,11 +32,20 @@ #include +namespace CMakeProjectManager { +namespace Internal { + +class CMakeProject; + class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - CMakeBuildConfiguration(const QString &name); + CMakeBuildConfiguration(CMakeProject *pro, const QString &name); CMakeBuildConfiguration(const QString &name, BuildConfiguration *source); }; + +} // namespace Internal +} // namespace CMakeProjectManager + #endif // CMAKEBUILDCONFIGURATION_H diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 34262e966a4..56f321603fc 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -90,7 +90,7 @@ QString CMakeBuildConfigurationFactory::displayNameForType(const QString & /* ty return tr("Create"); } -bool CMakeBuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(type == "Create", return false); @@ -104,7 +104,7 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - BuildConfiguration *bc = new CMakeBuildConfiguration(buildConfigurationName); + BuildConfiguration *bc = new CMakeBuildConfiguration(m_project, buildConfigurationName); MakeStep *makeStep = new MakeStep(m_project, bc); bc->insertBuildStep(0, makeStep); @@ -130,15 +130,21 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const // Default to all if (m_project->targets().contains("all")) makeStep->setBuildTarget("all", true); - return true; + return bc; } -bool CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const +BuildConfiguration *CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const { CMakeBuildConfiguration *old = static_cast(source); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(name, old); m_project->addBuildConfiguration(bc); - return true; + return bc; +} + +BuildConfiguration *CMakeBuildConfigurationFactory::restore(const QString &name) const +{ + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project, name); + return bc; } /*! @@ -658,7 +664,7 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader if (copw.exec() != QDialog::Accepted) return false; - CMakeBuildConfiguration *bc = new CMakeBuildConfiguration("all"); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this, "all"); addBuildConfiguration(bc); bc->setValue("msvcVersion", copw.msvcVersion()); if (!copw.buildDirectory().isEmpty()) @@ -677,8 +683,6 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader // We have a user file, but we could still be missing the cbp file // or simply run createXml with the saved settings QFileInfo sourceFileInfo(m_fileName); - QStringList needToCreate; - QStringList needToUpdate; BuildConfiguration *activeBC = activeBuildConfiguration(); QString cbpFile = CMakeManager::findCbpFile(QDir(buildDirectory(activeBC))); QFileInfo cbpFileFi(cbpFile); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 38595b525cd..6e61e7889f8 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -73,8 +73,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; private: CMakeProject *m_project; diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 04385f82121..9e1f05a7ea5 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "genericbuildconfiguration.h" +#include "genericproject.h" using namespace GenericProjectManager; using namespace GenericProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -GenericBuildConfiguration::GenericBuildConfiguration(const QString &name) - : BuildConfiguration(name) +GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &name) + : BuildConfiguration(pro, name) { } diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 58f05dc4478..5cfd664032d 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -33,13 +33,15 @@ #include namespace GenericProjectManager { - namespace Internal { +namespace Internal { + +class GenericProject; class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - GenericBuildConfiguration(const QString &name); + GenericBuildConfiguration(GenericProject *pro, const QString &name); GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source); }; diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 25e914a9fb8..40bf9fee978 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -132,7 +132,7 @@ QString GenericBuildConfigurationFactory::displayNameForType(const QString & /* return tr("Create"); } -bool GenericBuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(type == "Create", return false); //TODO asking for name is duplicated everywhere, but maybe more @@ -146,21 +146,27 @@ bool GenericBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - GenericBuildConfiguration *bc = new GenericBuildConfiguration(buildConfigurationName); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, buildConfigurationName); m_project->addBuildConfiguration(bc); // also makes the name unique... GenericMakeStep *makeStep = new GenericMakeStep(m_project, bc); bc->insertBuildStep(0, makeStep); makeStep->setBuildTarget("all", /* on = */ true); - return true; + return bc; } -bool GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const { // TODO GenericBuildConfiguration *bc = new GenericBuildConfiguration(name, static_cast(source)); m_project->addBuildConfiguration(bc); - return true; + return bc; +} + +BuildConfiguration *GenericBuildConfigurationFactory::restore(const QString &name) const +{ + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, name); + return bc; } //////////////////////////////////////////////////////////////////////////////////// @@ -527,7 +533,7 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead Project::restoreSettingsImpl(reader); if (buildConfigurations().isEmpty()) { - GenericBuildConfiguration *bc = new GenericBuildConfiguration("all"); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(this, "all"); addBuildConfiguration(bc); GenericMakeStep *makeStep = new GenericMakeStep(this, bc); diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index c0a3c042036..6ad13b2bda8 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -66,8 +66,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; private: GenericProject *m_project; diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index a9cbeda862e..3c80b43b5d5 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -44,14 +44,14 @@ IBuildStepFactory *findFactory(const QString &name) return 0; } -BuildConfiguration::BuildConfiguration(const QString &name) - : m_name(name) +BuildConfiguration::BuildConfiguration(Project *pro, const QString &name) + : m_name(name), m_project(pro) { setDisplayName(name); } BuildConfiguration::BuildConfiguration(const QString &name, BuildConfiguration *source) - : m_values(source->m_values), m_name(name) + : m_values(source->m_values), m_name(name), m_project(source->m_project) { foreach(BuildStep *originalbs, source->buildSteps()) { IBuildStepFactory *factory = findFactory(originalbs->name()); @@ -172,6 +172,11 @@ void BuildConfiguration::moveCleanStepUp(int position) m_cleanSteps.swap(position - 1, position); } +Project *BuildConfiguration::project() const +{ + return m_project; +} + /// // IBuildConfigurationFactory /// diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index a6acb4c1c30..2f7f05c1cfc 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -74,8 +74,10 @@ public: void removeCleanStep(int position); void moveCleanStepUp(int position); + Project *project() const; + protected: - BuildConfiguration(const QString &name); + BuildConfiguration(Project * project, const QString &name); BuildConfiguration(const QString &name, BuildConfiguration *source); private: @@ -86,6 +88,7 @@ private: QHash m_values; QString m_name; + Project *m_project; friend class Project; // for setName }; @@ -104,15 +107,18 @@ public: // creates build configuration(s) for given type and adds them to project // returns true if build configuration(s) actually have been added - virtual bool create(const QString &type) const = 0; + virtual BuildConfiguration *create(const QString &type) const = 0; + + // clones a given BuildConfiguration and adds it to the project + virtual BuildConfiguration *clone(const QString &name, BuildConfiguration *source) const = 0; + + // restores a BuildConfiguration with the name and adds it to the project + virtual BuildConfiguration *restore(const QString &name) const = 0; - // clones a given BuildConfiguration - virtual bool clone(const QString &name, BuildConfiguration *source) const = 0; // TODO All those methods make the internal name (and display name) unique, // but in different ways - //virtual bool restore(const QString &name); // to come: // restore diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 37bd4d3fa0c..2ac3d728a3f 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -222,8 +222,8 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) // restoring BuldConfigurations from settings const QStringList buildConfigurationNames = reader.restoreValue("buildconfigurations").toStringList(); foreach (const QString &buildConfigurationName, buildConfigurationNames) { - BuildConfiguration *bc = new BuildConfiguration(buildConfigurationName); - addBuildConfiguration(bc); + BuildConfiguration *bc = buildConfigurationFactory()->restore(buildConfigurationName); + QMap temp = reader.restoreValue("buildConfiguration-" + buildConfigurationName).toMap(); bc->setValuesFromMap(temp); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index cc62dbe4484..05d90274633 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "qt4buildconfiguration.h" +#include "qt4project.h" using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name) - : BuildConfiguration(name) +Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro, const QString &name) + : BuildConfiguration(pro, name) { } diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index d359a7810ae..8ea2cd81160 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -33,12 +33,15 @@ #include namespace Qt4ProjectManager { + +class Qt4Project; + namespace Internal { class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - Qt4BuildConfiguration(const QString &name); + Qt4BuildConfiguration(Qt4Project *pro, const QString &name); // copy ctor Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source); ~Qt4BuildConfiguration(); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 7c127bba263..c7c5979614b 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -270,7 +270,7 @@ QString Qt4BuildConfigurationFactory::displayNameForType(const QString &type) co return QString(); } -bool Qt4BuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *Qt4BuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(m_versions.contains(type), return false); const VersionInfo &info = m_versions.value(type); @@ -290,18 +290,25 @@ bool Qt4BuildConfigurationFactory::create(const QString &type) const m_project->addQt4BuildConfiguration(tr("%1 Debug").arg(buildConfigurationName), version, (version->defaultBuildConfig() | QtVersion::DebugBuild)); + BuildConfiguration *bc = m_project->addQt4BuildConfiguration(tr("%1 Release").arg(buildConfigurationName), version, (version->defaultBuildConfig() & ~QtVersion::DebugBuild)); - return true; + return bc; } -bool Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const { Qt4BuildConfiguration *oldbc = static_cast(source); Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(name, oldbc); m_project->addBuildConfiguration(newbc); - return true; + return newbc; +} + +BuildConfiguration *Qt4BuildConfigurationFactory::restore(const QString &name) const +{ + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project, name); + return bc; } /*! @@ -445,14 +452,14 @@ ProjectExplorer::IBuildConfigurationFactory *Qt4Project::buildConfigurationFacto return m_buildConfigurationFactory; } -void Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVersion *qtversion, +Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVersion *qtversion, QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, QStringList additionalArguments) { bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild; // Add the buildconfiguration - Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(buildConfigurationName); + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this, buildConfigurationName); addBuildConfiguration(bc); QMakeStep *qmakeStep = new QMakeStep(this, bc); @@ -479,6 +486,7 @@ void Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVers setQtVersion(bc, 0); else setQtVersion(bc, qtversion->uniqueId()); + return bc; } namespace { diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 84ae43db613..e0faac766c3 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -73,6 +73,7 @@ namespace Internal { class GCCPreprocessor; struct Qt4ProjectFiles; class Qt4ProjectConfigWidget; + class Qt4BuildConfiguration; class CodeModelInfo { @@ -130,8 +131,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; void update(); @@ -162,10 +164,10 @@ public: Qt4Manager *qt4ProjectManager() const; ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const; - void addQt4BuildConfiguration(QString buildConfigurationName, - QtVersion *qtversion, - QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, - QStringList additionalArguments = QStringList()); + Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString buildConfigurationName, + QtVersion *qtversion, + QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, + QStringList additionalArguments = QStringList()); QList dependencies(); //NBS remove QListdependsOn();