From 68a7861263cb137038a12d692a264647b404756b Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 18 Oct 2012 15:35:10 +0200 Subject: [PATCH] Qt4Project: Evaluate .pro and update codemodel only on some kit changes Task-number: QTCREATORBUG-8037 Change-Id: I5c89a712be9429b49d65f6886b5b3b2dade7fc20 Reviewed-by: Tobias Hunger --- .../qt4buildconfiguration.cpp | 60 ++++++++++++++++++- .../qt4projectmanager/qt4buildconfiguration.h | 17 ++++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 02e8ad68e34..0368047864e 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -43,12 +43,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -127,6 +129,12 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) m_lastEmmitedBuildDirectory = buildDirectory(); m_qtVersionSupportsShadowBuilds = supportsShadowBuilds(); + m_lastKitState = LastKitState(target()->kit()); + + connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain *)), + this, SLOT(toolChainUpdated(ProjectExplorer::ToolChain *))); + connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList,QList,QList)), + this, SLOT(qtVersionsChanged(QList,QList,QList))); return true; } @@ -142,8 +150,27 @@ void Qt4BuildConfiguration::ctor() void Qt4BuildConfiguration::kitChanged() { - emitProFileEvaluateNeeded(); - emitBuildDirectoryChanged(); + LastKitState newState = LastKitState(target()->kit()); + if (newState != m_lastKitState) { + // This only checks if the ids have changed! + // For that reason the Qt4BuildConfiguration is also connected + // to the toolchain and qtversion managers + emitProFileEvaluateNeeded(); + emitBuildDirectoryChanged(); + m_lastKitState = newState; + } +} + +void Qt4BuildConfiguration::toolChainUpdated(ProjectExplorer::ToolChain *tc) +{ + if (ToolChainKitInformation::toolChain(target()->kit()) == tc) + emitProFileEvaluateNeeded(); +} + +void Qt4BuildConfiguration::qtVersionsChanged(const QList &,const QList &, const QList &changed) +{ + if (changed.contains(QtKitInformation::qtVersionId(target()->kit()))) + emitProFileEvaluateNeeded(); } void Qt4BuildConfiguration::emitBuildDirectoryChanged() @@ -751,4 +778,33 @@ Qt4BuildConfiguration *Qt4BuildConfiguration::setup(Target *t, QString defaultDi return bc; } +Qt4BuildConfiguration::LastKitState::LastKitState() +{ + +} + +Qt4BuildConfiguration::LastKitState::LastKitState(Kit *k) + : m_qtVersion(QtKitInformation::qtVersionId(k)), + m_sysroot(SysRootKitInformation::sysRoot(k).toString()), + m_mkspec(QmakeKitInformation::mkspec(k).toString()) +{ + ToolChain *tc = ToolChainKitInformation::toolChain(k); + m_toolchain = tc ? tc->id() : QString(); +} + +bool Qt4BuildConfiguration::LastKitState::operator ==(const LastKitState &other) +{ + return m_qtVersion == other.m_qtVersion + && m_toolchain == other.m_toolchain + && m_sysroot == other.m_sysroot + && m_mkspec == other.m_mkspec; +} + +bool Qt4BuildConfiguration::LastKitState::operator !=(const LastKitState &other) +{ + return !operator ==(other); +} + + + } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index c2c58868005..807eaa14641 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -127,6 +127,8 @@ signals: private slots: void kitChanged(); + void toolChainUpdated(ProjectExplorer::ToolChain *tc); + void qtVersionsChanged(const QList &, const QList &, const QList &changed); void emitBuildDirectoryChanged(); protected: @@ -139,6 +141,21 @@ private: QString rawBuildDirectory() const; QString defaultShadowBuildDirectory() const; + class LastKitState + { + public: + LastKitState(); + explicit LastKitState(ProjectExplorer::Kit *k); + bool operator ==(const LastKitState &other); + bool operator !=(const LastKitState &other); + private: + int m_qtVersion; + QString m_toolchain; + QString m_sysroot; + QString m_mkspec; + }; + LastKitState m_lastKitState; + bool m_shadowBuild; bool m_isEnabled; QString m_buildDirectory;