ToolChainManager: Load tool chains in extensionsInitialized()

Change-Id: Iecbdad090c43fdabfb2d3ceac65fbbb2a72b33c2
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Tobias Hunger
2013-02-28 12:23:36 +01:00
parent f30b4db80d
commit aef18a4bca
3 changed files with 25 additions and 21 deletions

View File

@@ -1128,6 +1128,7 @@ void ProjectExplorerPlugin::extensionsInitialized()
if (dm->find(Core::Id(Constants::DESKTOP_DEVICE_ID)).isNull()) if (dm->find(Core::Id(Constants::DESKTOP_DEVICE_ID)).isNull())
DeviceManager::instance()->addDevice(IDevice::Ptr(new DesktopDevice)); DeviceManager::instance()->addDevice(IDevice::Ptr(new DesktopDevice));
dm->load(); dm->load();
d->m_toolChainManager->restoreToolChains();
} }
void ProjectExplorerPlugin::loadCustomWizards() void ProjectExplorerPlugin::loadCustomWizards()

View File

@@ -80,13 +80,10 @@ public:
ToolChainManagerPrivate(ToolChainManager *parent); ToolChainManagerPrivate(ToolChainManager *parent);
~ToolChainManagerPrivate(); ~ToolChainManagerPrivate();
QList<ToolChain *> &toolChains();
ToolChainManager *q; ToolChainManager *q;
QMap<QString, Utils::FileName> m_abiToDebugger; QMap<QString, Utils::FileName> m_abiToDebugger;
Utils::PersistentSettingsWriter *m_writer; Utils::PersistentSettingsWriter *m_writer;
private:
QList<ToolChain *> m_toolChains; QList<ToolChain *> m_toolChains;
}; };
@@ -101,13 +98,6 @@ ToolChainManagerPrivate::~ToolChainManagerPrivate()
delete m_writer; delete m_writer;
} }
QList<ToolChain *> &ToolChainManagerPrivate::toolChains()
{
if (!m_writer)
q->restoreToolChains();
return m_toolChains;
}
} // namespace Internal } // namespace Internal
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@@ -139,7 +129,6 @@ ToolChainManager::ToolChainManager(QObject *parent) :
void ToolChainManager::restoreToolChains() void ToolChainManager::restoreToolChains()
{ {
QTC_ASSERT(!d->m_writer, return); QTC_ASSERT(!d->m_writer, return);
QTC_CHECK(ProjectExplorerPlugin::instance()->pluginSpec()->state() == ExtensionSystem::PluginSpec::Running);
d->m_writer = d->m_writer =
new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains")); new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains"));
@@ -209,6 +198,8 @@ void ToolChainManager::restoreToolChains()
// Store manual tool chains // Store manual tool chains
foreach (ToolChain *tc, tcsToRegister) foreach (ToolChain *tc, tcsToRegister)
registerToolChain(tc); registerToolChain(tc);
emit toolChainsLoaded();
} }
ToolChainManager::~ToolChainManager() ToolChainManager::~ToolChainManager()
@@ -223,7 +214,7 @@ void ToolChainManager::saveToolChains()
data.insert(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1); data.insert(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1);
int count = 0; int count = 0;
foreach (ToolChain *tc, d->toolChains()) { foreach (ToolChain *tc, d->m_toolChains) {
if (tc->isValid()) { if (tc->isValid()) {
QVariantMap tmp = tc->toMap(); QVariantMap tmp = tc->toMap();
if (tmp.isEmpty()) if (tmp.isEmpty())
@@ -290,18 +281,19 @@ QList<ToolChain *> ToolChainManager::restoreToolChains(const Utils::FileName &fi
qPrintable(ToolChainFactory::idFromMap(tcMap)), qPrintable(ToolChainFactory::idFromMap(tcMap)),
qPrintable(fileName.toUserOutput())); qPrintable(fileName.toUserOutput()));
} }
return result; return result;
} }
QList<ToolChain *> ToolChainManager::toolChains() const QList<ToolChain *> ToolChainManager::toolChains() const
{ {
return d->toolChains(); return d->m_toolChains;
} }
QList<ToolChain *> ToolChainManager::findToolChains(const Abi &abi) const QList<ToolChain *> ToolChainManager::findToolChains(const Abi &abi) const
{ {
QList<ToolChain *> result; QList<ToolChain *> result;
foreach (ToolChain *tc, toolChains()) { foreach (ToolChain *tc, d->m_toolChains) {
Abi targetAbi = tc->targetAbi(); Abi targetAbi = tc->targetAbi();
if (targetAbi.isCompatibleWith(abi)) if (targetAbi.isCompatibleWith(abi))
result.append(tc); result.append(tc);
@@ -314,7 +306,7 @@ ToolChain *ToolChainManager::findToolChain(const QString &id) const
if (id.isEmpty()) if (id.isEmpty())
return 0; return 0;
foreach (ToolChain *tc, d->toolChains()) { foreach (ToolChain *tc, d->m_toolChains) {
if (tc->id() == id) if (tc->id() == id)
return tc; return tc;
} }
@@ -326,32 +318,39 @@ Utils::FileName ToolChainManager::defaultDebugger(const Abi &abi) const
return d->m_abiToDebugger.value(abi.toString()); return d->m_abiToDebugger.value(abi.toString());
} }
bool ToolChainManager::isLoaded() const
{
return d->m_writer;
}
void ToolChainManager::notifyAboutUpdate(ProjectExplorer::ToolChain *tc) void ToolChainManager::notifyAboutUpdate(ProjectExplorer::ToolChain *tc)
{ {
if (!tc || !toolChains().contains(tc)) if (!tc || !d->m_toolChains.contains(tc))
return; return;
emit toolChainUpdated(tc); emit toolChainUpdated(tc);
} }
bool ToolChainManager::registerToolChain(ToolChain *tc) bool ToolChainManager::registerToolChain(ToolChain *tc)
{ {
if (!tc || d->toolChains().contains(tc)) QTC_ASSERT(d->m_writer, return false);
if (!tc || d->m_toolChains.contains(tc))
return true; return true;
foreach (ToolChain *current, d->toolChains()) { foreach (ToolChain *current, d->m_toolChains) {
if (*tc == *current && !tc->isAutoDetected()) if (*tc == *current && !tc->isAutoDetected())
return false; return false;
} }
d->toolChains().append(tc); d->m_toolChains.append(tc);
emit toolChainAdded(tc); emit toolChainAdded(tc);
return true; return true;
} }
void ToolChainManager::deregisterToolChain(ToolChain *tc) void ToolChainManager::deregisterToolChain(ToolChain *tc)
{ {
if (!tc || !d->toolChains().contains(tc)) if (!tc || !d->m_toolChains.contains(tc))
return; return;
d->toolChains().removeOne(tc); d->m_toolChains.removeOne(tc);
emit toolChainRemoved(tc); emit toolChainRemoved(tc);
delete tc; delete tc;
} }

View File

@@ -66,6 +66,8 @@ public:
Utils::FileName defaultDebugger(const Abi &abi) const; Utils::FileName defaultDebugger(const Abi &abi) const;
bool isLoaded() const;
public slots: public slots:
bool registerToolChain(ProjectExplorer::ToolChain *tc); bool registerToolChain(ProjectExplorer::ToolChain *tc);
void deregisterToolChain(ProjectExplorer::ToolChain *tc); void deregisterToolChain(ProjectExplorer::ToolChain *tc);
@@ -81,6 +83,8 @@ signals:
// Something changed: // Something changed:
void toolChainsChanged(); void toolChainsChanged();
void toolChainsLoaded();
private: private:
explicit ToolChainManager(QObject *parent = 0); explicit ToolChainManager(QObject *parent = 0);