diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index e8a4f2eef3c..91072330489 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -302,9 +302,14 @@ Abi GccToolChain::targetAbi() const void GccToolChain::setTargetAbi(const Abi &abi) { + if (abi == m_targetAbi) + return; + updateSupportedAbis(); - if (m_supportedAbis.contains(abi)) + if (m_supportedAbis.contains(abi)) { m_targetAbi = abi; + toolChainUpdated(); + } } QList GccToolChain::supportedAbis() const @@ -348,7 +353,10 @@ void GccToolChain::addToEnvironment(Utils::Environment &env) const void GccToolChain::setDebuggerCommand(const QString &d) { + if (m_debuggerCommand == d) + return; m_debuggerCommand = d; + toolChainUpdated(); } QString GccToolChain::debuggerCommand() const @@ -385,7 +393,7 @@ void GccToolChain::setCompilerPath(const QString &path) if (displayName() == typeName()) setDisplayName(defaultDisplayName()); } - updateId(); + updateId(); // Will trigger toolChainUpdated()! } QString GccToolChain::compilerPath() const diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index e807abb6760..6f17dc57e0e 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -435,7 +435,10 @@ QString MsvcToolChain::makeCommand() const void MsvcToolChain::setDebuggerCommand(const QString &d) { + if (m_debuggerCommand == d) + return; m_debuggerCommand = d; + toolChainUpdated(); } QString MsvcToolChain::debuggerCommand() const diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 6bc98f111e3..c8dce8ee0a4 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -32,6 +32,9 @@ **************************************************************************/ #include "toolchain.h" + +#include "toolchainmanager.h" + #include #include @@ -90,9 +93,13 @@ QString ToolChain::displayName() const return m_d->m_displayName; } -void ToolChain::setDisplayName(const QString &name) const +void ToolChain::setDisplayName(const QString &name) { + if (m_d->m_displayName == name) + return; + m_d->m_displayName = name; + toolChainUpdated(); } bool ToolChain::isAutoDetected() const @@ -143,12 +150,24 @@ QVariantMap ToolChain::toMap() const void ToolChain::setId(const QString &id) { Q_ASSERT(!id.isEmpty()); + if (m_d->m_id == id) + return; + m_d->m_id = id; + toolChainUpdated(); +} + +void ToolChain::toolChainUpdated() +{ + ToolChainManager::instance()->notifyAboutUpdate(this); } void ToolChain::setAutoDetected(bool autodetect) { + if (m_d->m_autodetect == autodetect) + return; m_d->m_autodetect = autodetect; + toolChainUpdated(); } bool ToolChain::fromMap(const QVariantMap &data) diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 640b450b174..98d32ea00f5 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -67,7 +67,7 @@ public: virtual ~ToolChain(); QString displayName() const; - void setDisplayName(const QString &name) const; + void setDisplayName(const QString &name); bool isAutoDetected() const; QString id() const; @@ -106,6 +106,8 @@ protected: void setId(const QString &id); + void toolChainUpdated(); + // Make sure to call this method when deriving! virtual bool fromMap(const QVariantMap &data); diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 91c06b7c43f..271783954da 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -207,6 +207,13 @@ ToolChain *ToolChainManager::findToolChain(const QString &id) const return 0; } +void ToolChainManager::notifyAboutUpdate(ProjectExplorer::ToolChain *tc) +{ + if (!tc || !m_d->m_toolChains.contains(tc)) + return; + emit toolChainUpdated(tc); +} + void ToolChainManager::registerToolChain(ToolChain *tc) { if (!tc || m_d->m_toolChains.contains(tc)) diff --git a/src/plugins/projectexplorer/toolchainmanager.h b/src/plugins/projectexplorer/toolchainmanager.h index 5b030756def..b43f3f1752a 100644 --- a/src/plugins/projectexplorer/toolchainmanager.h +++ b/src/plugins/projectexplorer/toolchainmanager.h @@ -78,6 +78,8 @@ signals: void toolChainAdded(ProjectExplorer::ToolChain *); // Tool chain is still valid when this call happens! void toolChainRemoved(ProjectExplorer::ToolChain *); + // Tool chain was updated. + void toolChainUpdated(ProjectExplorer::ToolChain *); private: explicit ToolChainManager(QObject *parent = 0); @@ -87,12 +89,15 @@ private: void restoreToolChains(); void restoreToolChains(const QString &fileName, bool autoDetected = false); + void notifyAboutUpdate(ProjectExplorer::ToolChain *); + Internal::ToolChainManagerPrivate *const m_d; static ToolChainManager *m_instance; friend class ProjectExplorerPlugin; + friend class ToolChain; }; } // namespace ProjectExplorer diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp index d8bbfad3538..d1f49ed9100 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp @@ -171,7 +171,7 @@ void MaemoToolChain::setQtVersionId(int id) if (id < 0) { m_targetAbi = ProjectExplorer::Abi(); m_qtVersionId = -1; - updateId(); + updateId(); // Will trigger toolChainUpdated()! return; } @@ -192,7 +192,7 @@ void MaemoToolChain::setQtVersionId(int id) Q_ASSERT(version->qtAbis().count() == 1); m_targetAbi = version->qtAbis().at(0); - updateId(); + updateId(); // Will trigger toolChainUpdated()! setDisplayName(MaemoToolChainFactory::tr("Maemo GCC for %1").arg(version->displayName())); } diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp index ad2a058350c..cd5cd2ba963 100644 --- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp @@ -248,7 +248,10 @@ bool RvctToolChain::operator ==(const ToolChain &other) const void RvctToolChain::setEnvironmentChanges(const QList &changes) { + if (m_environmentChanges == changes) + return; m_environmentChanges = changes; + toolChainUpdated(); } QList RvctToolChain::environmentChanges() const @@ -263,7 +266,7 @@ void RvctToolChain::setCompilerPath(const QString &path) m_compilerPath = path; m_version.reset(); - updateId(); + updateId(); // Will trigger toolChainUpdated()! } QString RvctToolChain::compilerPath() const @@ -273,7 +276,10 @@ QString RvctToolChain::compilerPath() const void RvctToolChain::setDebuggerCommand(const QString &d) { + if (m_debuggerCommand == d) + return; m_debuggerCommand = d; + toolChainUpdated(); } QString RvctToolChain::debuggerCommand() const @@ -283,7 +289,10 @@ QString RvctToolChain::debuggerCommand() const void RvctToolChain::setArmVersion(RvctToolChain::ArmVersion av) { + if (m_armVersion == av) + return; m_armVersion = av; + toolChainUpdated(); } RvctToolChain::ArmVersion RvctToolChain::armVersion() const @@ -293,7 +302,10 @@ RvctToolChain::ArmVersion RvctToolChain::armVersion() const void RvctToolChain::setVersion(const RvctVersion &v) const { + if (m_version == v) + return; m_version = v; + // Internal use only! No need to call toolChainUpdated()! } ProjectExplorer::ToolChainConfigWidget *RvctToolChain::configurationWidget() diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h index 64eea5c439b..40efbac9a40 100644 --- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h @@ -66,6 +66,13 @@ public: bool isNull() { return majorVersion == 0 && minorVersion == 0 && build == 0; } void reset() { majorVersion = 0; minorVersion = 0; build = 0; } + bool operator ==(const RvctVersion &other) const + { + return majorVersion == other.majorVersion + && minorVersion == other.minorVersion + && build == other.build; + } + int majorVersion; int minorVersion; int build; @@ -101,8 +108,6 @@ public: void setArmVersion(ArmVersion); ArmVersion armVersion() const; - void setVersion(const RvctVersion &v) const; - ProjectExplorer::ToolChainConfigWidget *configurationWidget(); ProjectExplorer::ToolChain *clone() const; @@ -111,6 +116,7 @@ public: private: void updateId(); + void setVersion(const RvctVersion &v) const; explicit RvctToolChain(bool autodetected = false); RvctToolChain(const RvctToolChain &); diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp index d64bb50094a..c6893ac7558 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp @@ -250,7 +250,10 @@ bool WinscwToolChain::fromMap(const QVariantMap &data) void WinscwToolChain::setSystemIncludePathes(const QStringList &pathes) { + if (m_systemIncludePathes == pathes) + return; m_systemIncludePathes = pathes; + toolChainUpdated(); } QStringList WinscwToolChain::systemIncludePathes() const @@ -260,7 +263,10 @@ QStringList WinscwToolChain::systemIncludePathes() const void WinscwToolChain::setSystemLibraryPathes(const QStringList &pathes) { + if (m_systemLibraryPathes == pathes) + return; m_systemLibraryPathes = pathes; + toolChainUpdated(); } QStringList WinscwToolChain::systemLibraryPathes() const @@ -274,7 +280,7 @@ void WinscwToolChain::setCompilerPath(const QString &path) return; m_compilerPath = path; - updateId(); + updateId(); // Will trigger topolChainUpdated()! } QString WinscwToolChain::compilerPath() const