diff options
author | Tobias Hunger <tobias.hunger@nokia.com> | 2012-04-24 15:49:09 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@nokia.com> | 2012-06-21 12:08:12 +0200 |
commit | 24314562165588b56a318b3b8a846bf5deda7c41 (patch) | |
tree | b5dcf951e76d003c2623011b0e91994e06e7e061 /src/plugins/projectexplorer/buildconfiguration.cpp | |
parent | 8c77b8c9d7b25d0c89003c8c4a54e8da5bfb7edd (diff) | |
download | qt-creator-24314562165588b56a318b3b8a846bf5deda7c41.tar.gz |
Profile introduction
Introduce Profiles to store sets of values that describe a system/device.
These profiles are held by a target, getting rid of much of the information
stored in the Build-/Run-/DeployConfigurations, greatly simplifying those.
This is a squash of the wip/profile branch which has been on gerrit for a
while, rebased to current master.
Change-Id: I25956c8dd4d1962b2134bfaa8a8076ae3909460f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Diffstat (limited to 'src/plugins/projectexplorer/buildconfiguration.cpp')
-rw-r--r-- | src/plugins/projectexplorer/buildconfiguration.cpp | 91 |
1 files changed, 31 insertions, 60 deletions
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index df9561db06..e97134952c 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -32,16 +32,16 @@ #include "buildconfiguration.h" -#include "toolchain.h" #include "buildmanager.h" #include "buildsteplist.h" #include "projectexplorer.h" #include "projectexplorerconstants.h" +#include "profilemanager.h" #include "target.h" -#include "toolchainmanager.h" #include "project.h" #include <coreplugin/variablemanager.h> +#include <extensionsystem/pluginmanager.h> #include <utils/qtcassert.h> #include <utils/stringutils.h> @@ -52,7 +52,6 @@ static const char BUILD_STEP_LIST_COUNT[] = "ProjectExplorer.BuildConfiguration. static const char BUILD_STEP_LIST_PREFIX[] = "ProjectExplorer.BuildConfiguration.BuildStepList."; static const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "ProjectExplorer.BuildConfiguration.ClearSystemEnvironment"; static const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"; -static const char TOOLCHAIN_KEY[] = "ProjectExplorer.BuildCOnfiguration.ToolChain"; namespace ProjectExplorer { namespace Internal { @@ -83,7 +82,6 @@ bool BuildConfigMacroExpander::resolveMacro(const QString &name, QString *ret) BuildConfiguration::BuildConfiguration(Target *target, const Core::Id id) : ProjectConfiguration(target, id), m_clearSystemEnvironment(false), - m_toolChain(0), m_macroExpander(0) { Q_ASSERT(target); @@ -96,19 +94,14 @@ BuildConfiguration::BuildConfiguration(Target *target, const Core::Id id) : bsl->setDefaultDisplayName(tr("Clean")); m_stepLists.append(bsl); - connect(ToolChainManager::instance(), SIGNAL(toolChainRemoved(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainRemovals(ProjectExplorer::ToolChain*))); - connect(ToolChainManager::instance(), SIGNAL(toolChainAdded(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainAddition(ProjectExplorer::ToolChain*))); - connect(ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainUpdates(ProjectExplorer::ToolChain*))); + connect(ProfileManager::instance(), SIGNAL(profileUpdated(ProjectExplorer::Profile*)), + this, SLOT(handleProfileUpdate(ProjectExplorer::Profile*))); } BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *source) : ProjectConfiguration(target, source), m_clearSystemEnvironment(source->m_clearSystemEnvironment), m_userEnvironmentChanges(source->m_userEnvironmentChanges), - m_toolChain(source->m_toolChain), m_macroExpander(0) { Q_ASSERT(target); @@ -116,12 +109,8 @@ BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *sourc // otherwise BuildStepFactories might reject to set up a BuildStep for us // since we are not yet the derived class! - connect(ToolChainManager::instance(), SIGNAL(toolChainRemoved(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainRemovals(ProjectExplorer::ToolChain*))); - connect(ToolChainManager::instance(), SIGNAL(toolChainAdded(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainAddition(ProjectExplorer::ToolChain*))); - connect(ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)), - this, SLOT(handleToolChainUpdates(ProjectExplorer::ToolChain*))); + connect(ProfileManager::instance(), SIGNAL(profileUpdated(ProjectExplorer::Profile*)), + this, SLOT(handleProfileUpdate(ProjectExplorer::Profile*))); } BuildConfiguration::~BuildConfiguration() @@ -162,8 +151,6 @@ QVariantMap BuildConfiguration::toMap() const for (int i = 0; i < m_stepLists.count(); ++i) map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) + QString::number(i), m_stepLists.at(i)->toMap()); - map.insert(QLatin1String(TOOLCHAIN_KEY), m_toolChain ? m_toolChain->id() : QLatin1String("INVALID")); - return map; } @@ -195,10 +182,6 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) m_stepLists.append(list); } - const QString id = map.value(QLatin1String(TOOLCHAIN_KEY)).toString(); - setToolChain(ToolChainManager::instance()->findToolChain(id)); // Do not validate the tool chain as - // the BC is not completely set up yet! - // We currently assume there to be at least a clean and build list! QTC_CHECK(knownStepLists().contains(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD))); QTC_CHECK(knownStepLists().contains(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN))); @@ -206,52 +189,18 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) return ProjectConfiguration::fromMap(map); } -void BuildConfiguration::handleToolChainRemovals(ProjectExplorer::ToolChain *tc) -{ - if (m_toolChain != tc) - return; - setToolChain(target()->preferredToolChain(this)); -} - -void BuildConfiguration::handleToolChainAddition(ProjectExplorer::ToolChain *tc) -{ - Q_UNUSED(tc); - if (m_toolChain != 0) - return; - setToolChain(target()->preferredToolChain(this)); -} - -void BuildConfiguration::handleToolChainUpdates(ProjectExplorer::ToolChain *tc) +void BuildConfiguration::handleProfileUpdate(ProjectExplorer::Profile *p) { - if (tc != m_toolChain) + if (p != target()->profile()) return; - QList<ToolChain *> candidates = target()->possibleToolChains(this); - if (!candidates.contains(m_toolChain)) - setToolChain(target()->preferredToolChain(this)); - else - emit toolChainChanged(); + emit environmentChanged(); } - Target *BuildConfiguration::target() const { return static_cast<Target *>(parent()); } -ProjectExplorer::ToolChain *BuildConfiguration::toolChain() const -{ - return m_toolChain; -} - -void BuildConfiguration::setToolChain(ProjectExplorer::ToolChain *tc) -{ - if (m_toolChain == tc) - return; - m_toolChain = tc; - emit toolChainChanged(); - emit environmentChanged(); -} - Utils::Environment BuildConfiguration::baseEnvironment() const { Utils::Environment result; @@ -333,4 +282,26 @@ IBuildConfigurationFactory::IBuildConfigurationFactory(QObject *parent) : IBuildConfigurationFactory::~IBuildConfigurationFactory() { } +IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map) +{ + QList<IBuildConfigurationFactory *> factories + = ExtensionSystem::PluginManager::instance()->getObjects<IBuildConfigurationFactory>(); + foreach (IBuildConfigurationFactory *factory, factories) { + if (factory->canRestore(parent, map)) + return factory; + } + return 0; +} + +IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent) +{ + QList<IBuildConfigurationFactory *> factories + = ExtensionSystem::PluginManager::instance()->getObjects<IBuildConfigurationFactory>(); + foreach (IBuildConfigurationFactory *factory, factories) { + if (!factory->availableCreationIds(parent).isEmpty()) + return factory; + } + return 0; +} + } // namespace ProjectExplorer |