CMake: Make handling of default CMakeTool more consistent

Change-Id: Idc2ba2c51122855f0b335f89ca5f916dea7665c5
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2018-06-29 14:02:22 +02:00
parent b3f4282edc
commit ccfb7c6aa4
2 changed files with 25 additions and 27 deletions

View File

@@ -270,9 +270,7 @@ bool CMakeToolManager::registerCMakeTool(CMakeTool *tool)
emit CMakeToolManager::m_instance->cmakeAdded(toolId); emit CMakeToolManager::m_instance->cmakeAdded(toolId);
//set the first registered cmake tool as default if there is not already one ensureDefaultCMakeToolIsValid();
if (!d->m_defaultCMake.isValid())
CMakeToolManager::setDefaultCMakeTool(toolId);
return true; return true;
} }
@@ -282,14 +280,8 @@ void CMakeToolManager::deregisterCMakeTool(const Id &id)
int idx = Utils::indexOf(d->m_cmakeTools, Utils::equal(&CMakeTool::id, id)); int idx = Utils::indexOf(d->m_cmakeTools, Utils::equal(&CMakeTool::id, id));
if (idx >= 0) { if (idx >= 0) {
CMakeTool *toRemove = d->m_cmakeTools.takeAt(idx); CMakeTool *toRemove = d->m_cmakeTools.takeAt(idx);
if (toRemove->id() == d->m_defaultCMake) {
if (d->m_cmakeTools.isEmpty())
d->m_defaultCMake = Id();
else
d->m_defaultCMake = d->m_cmakeTools.first()->id();
emit m_instance->defaultCMakeChanged(); ensureDefaultCMakeToolIsValid();
}
emit m_instance->cmakeRemoved(id); emit m_instance->cmakeRemoved(id);
delete toRemove; delete toRemove;
@@ -298,28 +290,18 @@ void CMakeToolManager::deregisterCMakeTool(const Id &id)
CMakeTool *CMakeToolManager::defaultCMakeTool() CMakeTool *CMakeToolManager::defaultCMakeTool()
{ {
CMakeTool *tool = findById(d->m_defaultCMake); return findById(d->m_defaultCMake);
if (!tool) {
//if the id is not valid, we set the firstly registered one as default
if (!d->m_cmakeTools.isEmpty()) {
d->m_defaultCMake = d->m_cmakeTools.first()->id();
emit m_instance->defaultCMakeChanged();
return d->m_cmakeTools.first();
}
}
return tool;
} }
void CMakeToolManager::setDefaultCMakeTool(const Id &id) void CMakeToolManager::setDefaultCMakeTool(const Id &id)
{ {
if (d->m_defaultCMake == id) if (d->m_defaultCMake != id && findById(id)) {
return;
if (findById(id)) {
d->m_defaultCMake = id; d->m_defaultCMake = id;
emit m_instance->defaultCMakeChanged(); emit m_instance->defaultCMakeChanged();
return;
} }
ensureDefaultCMakeToolIsValid();
} }
CMakeTool *CMakeToolManager::findByCommand(const FileName &command) CMakeTool *CMakeToolManager::findByCommand(const FileName &command)
@@ -361,8 +343,7 @@ void CMakeToolManager::restoreCMakeTools()
} }
} }
if (CMakeToolManager::findById(defaultId)) setDefaultCMakeTool(defaultId);
d->m_defaultCMake = defaultId;
emit m_instance->cmakeToolsLoaded(); emit m_instance->cmakeToolsLoaded();
} }
@@ -397,4 +378,20 @@ void CMakeToolManager::saveCMakeTools()
d->m_writer->save(data, ICore::mainWindow()); d->m_writer->save(data, ICore::mainWindow());
} }
void CMakeToolManager::ensureDefaultCMakeToolIsValid()
{
const Core::Id oldId = d->m_defaultCMake;
if (d->m_cmakeTools.isEmpty()) {
d->m_defaultCMake = Core::Id();
} else {
if (findById(d->m_defaultCMake))
return;
d->m_defaultCMake = d->m_cmakeTools.at(0)->id();
}
// signaling:
if (oldId != d->m_defaultCMake)
emit m_instance->defaultCMakeChanged();
}
} // namespace CMakeProjectManager } // namespace CMakeProjectManager

View File

@@ -69,6 +69,7 @@ signals:
private: private:
static void saveCMakeTools(); static void saveCMakeTools();
static void ensureDefaultCMakeToolIsValid();
static CMakeToolManager *m_instance; static CMakeToolManager *m_instance;
}; };