From 42c965d17d07c7cbb9de5b4cbf414afb8c504572 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 29 Aug 2012 15:52:47 +0200 Subject: [PATCH] ProjectExplorer: Add signal to inform about deployment data changes. Also one for changes to the application target list. This re-enables the RemoteLinux plugin's ability to react to changes in project files, which has been broken by the removal of the buildSystemEvaluated() signal from the Project class in I50249b186917cd3a4f399f187f09ac8428ab6f9e. Change-Id: I380db69c9396b99423ff305096d4b9f4f17d3075 Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/buildtargetinfo.h | 27 +++++++++++++++++++ src/plugins/projectexplorer/target.cpp | 10 +++++-- src/plugins/projectexplorer/target.h | 3 +++ .../remotelinux/abstractpackagingstep.cpp | 2 +- .../remotelinuxdeployconfigurationwidget.cpp | 3 +-- .../remotelinuxrunconfiguration.cpp | 4 +-- 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/plugins/projectexplorer/buildtargetinfo.h b/src/plugins/projectexplorer/buildtargetinfo.h index 2f811c48b01..63e7e0748fe 100644 --- a/src/plugins/projectexplorer/buildtargetinfo.h +++ b/src/plugins/projectexplorer/buildtargetinfo.h @@ -35,6 +35,7 @@ #include #include +#include namespace ProjectExplorer { @@ -59,6 +60,22 @@ public: bool isValid() const { return !targetFilePath.isEmpty(); } }; +inline bool operator==(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) +{ + return ti1.targetFilePath == ti2.targetFilePath; +} + +inline bool operator!=(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) +{ + return !(ti1 == ti2); +} + +inline uint qHash(const BuildTargetInfo &ti) +{ + return qHash(ti.targetFilePath); +} + + class PROJECTEXPLORER_EXPORT BuildTargetInfoList { public: @@ -79,6 +96,16 @@ public: QList list; }; +inline bool operator==(const BuildTargetInfoList &til1, const BuildTargetInfoList &til2) +{ + return til1.list.toSet() == til2.list.toSet(); +} + +inline bool operator!=(const BuildTargetInfoList &til1, const BuildTargetInfoList &til2) +{ + return !(til1 == til2); +} + } // namespace ProjectExplorer #endif // BUILDTARGETINFO_H diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 040c1c02da3..880f2f88721 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -368,7 +368,10 @@ void Target::setActiveDeployConfiguration(DeployConfiguration *dc) void Target::setDeploymentData(const DeploymentData &deploymentData) { - d->m_deploymentData = deploymentData; + if (d->m_deploymentData != deploymentData) { + d->m_deploymentData = deploymentData; + emit deploymentDataChanged(); + } } DeploymentData Target::deploymentData() const @@ -378,7 +381,10 @@ DeploymentData Target::deploymentData() const void Target::setApplicationTargets(const BuildTargetInfoList &appTargets) { - d->m_appTargets = appTargets; + if (d->m_appTargets != appTargets) { + d->m_appTargets = appTargets; + emit applicationTargetsChanged(); + } } BuildTargetInfoList Target::applicationTargets() const diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h index 6157c248808..0f8b03c95aa 100644 --- a/src/plugins/projectexplorer/target.h +++ b/src/plugins/projectexplorer/target.h @@ -150,6 +150,9 @@ signals: void deployConfigurationEnabledChanged(); void runConfigurationEnabledChanged(); + void deploymentDataChanged(); + void applicationTargetsChanged(); + // Remove all the signals below, they are stupid /// Emitted whenever the current build configuartion changed or the build directory of the current /// build configuration was changed. diff --git a/src/plugins/remotelinux/abstractpackagingstep.cpp b/src/plugins/remotelinux/abstractpackagingstep.cpp index f002f6988b3..8dcb4f7353e 100644 --- a/src/plugins/remotelinux/abstractpackagingstep.cpp +++ b/src/plugins/remotelinux/abstractpackagingstep.cpp @@ -78,7 +78,7 @@ void AbstractPackagingStep::ctor() SLOT(handleBuildConfigurationChanged())); handleBuildConfigurationChanged(); - connect(project(), SIGNAL(buildSystemEvaluated()), SLOT(setDeploymentDataModified())); + connect(target(), SIGNAL(deploymentDataChanged()), SLOT(setDeploymentDataModified())); setDeploymentDataModified(); connect(this, SIGNAL(unmodifyDeploymentData()), this, SLOT(setDeploymentDataUnmodified())); diff --git a/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp b/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp index d5c951c529d..dfaa1caf5c2 100644 --- a/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp +++ b/src/plugins/remotelinux/remotelinuxdeployconfigurationwidget.cpp @@ -73,8 +73,7 @@ void RemoteLinuxDeployConfigurationWidget::init(DeployConfiguration *dc) d->deployConfiguration = qobject_cast(dc); QTC_ASSERT(d->deployConfiguration, return); - connect(dc->target()->project(), SIGNAL(buildSystemEvaluated()), - SLOT(updateDeploymentDataModel())); + connect(dc->target(), SIGNAL(deploymentDataChanged()), SLOT(updateDeploymentDataModel())); updateDeploymentDataModel(); } diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index 07650bfc0ee..eb02382723e 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -126,8 +126,8 @@ void RemoteLinuxRunConfiguration::init() setDefaultDisplayName(defaultDisplayName()); debuggerAspect()->suppressQmlDebuggingSpinbox(); - Project *pro = target()->project(); - connect(pro, SIGNAL(buildSystemEvaluated()), SLOT(handleBuildSystemDataUpdated())); + connect(target(), SIGNAL(deploymentDataChanged()), SLOT(handleBuildSystemDataUpdated())); + connect(target(), SIGNAL(applicationTargetsChanged()), SLOT(handleBuildSystemDataUpdated())); connect(target(), SIGNAL(profileChanged()), this, SLOT(handleBuildSystemDataUpdated())); // Handles device changes, etc. }