Save custom ordering of tools.

This overrides ordering of *all* tools. Which is suboptimal.
This commit is contained in:
con
2011-02-10 14:16:11 +01:00
parent c422786b02
commit 845e9d513e
2 changed files with 25 additions and 17 deletions

View File

@@ -694,9 +694,6 @@ void ExternalToolManager::initialize()
&tools, &tools,
true); true);
// adapt overridden names and categories etc
readSettings(tools, &categoryPriorityMap);
QMap<QString, QList<Internal::ExternalTool *> > categoryMap; QMap<QString, QList<Internal::ExternalTool *> > categoryMap;
QMapIterator<QString, QMultiMap<int, ExternalTool*> > it(categoryPriorityMap); QMapIterator<QString, QMultiMap<int, ExternalTool*> > it(categoryPriorityMap);
while (it.hasNext()) { while (it.hasNext()) {
@@ -704,6 +701,8 @@ void ExternalToolManager::initialize()
categoryMap.insert(it.key(), it.value().values()); categoryMap.insert(it.key(), it.value().values());
} }
// read renamed categories and custom order
readSettings(tools, &categoryMap);
setToolsByCategory(categoryMap); setToolsByCategory(categoryMap);
} }
@@ -848,24 +847,29 @@ void ExternalToolManager::setToolsByCategory(const QMap<QString, QList<Internal:
} }
void ExternalToolManager::readSettings(const QMap<QString, ExternalTool *> &tools, void ExternalToolManager::readSettings(const QMap<QString, ExternalTool *> &tools,
QMap<QString, QMultiMap<int, Internal::ExternalTool*> > *categoryPriorityMap) QMap<QString, QList<ExternalTool *> > *categoryMap)
{ {
QSettings *settings = m_core->settings(); QSettings *settings = m_core->settings();
settings->beginGroup(QLatin1String("ExternalTools")); settings->beginGroup(QLatin1String("ExternalTools"));
if (categoryPriorityMap) { if (categoryMap) {
settings->beginGroup(QLatin1String("OverrideCategories")); settings->beginGroup(QLatin1String("OverrideCategories"));
foreach (const QString &id, settings->allKeys()) { foreach (const QString &category, settings->childGroups()) {
if (tools.contains(id)) { int count = settings->beginReadArray(category);
const QString &newCategory = settings->value(id).toString(); for (int i = 0; i < count; ++i) {
ExternalTool *tool = tools.value(id); settings->setArrayIndex(i);
if (tool->displayCategory() != newCategory) { const QString &toolId = settings->value(QLatin1String("Tool")).toString();
(*categoryPriorityMap)[tool->displayCategory()].remove(tool->order(), tool); if (tools.contains(toolId)) {
(*categoryPriorityMap)[newCategory].insert(tool->order(), tool); ExternalTool *tool = tools.value(toolId);
if (categoryPriorityMap->value(tool->displayCategory()).isEmpty()) // remove from old category
categoryPriorityMap->remove(tool->displayCategory()); (*categoryMap)[tool->displayCategory()].removeAll(tool);
if (categoryMap->value(tool->displayCategory()).isEmpty())
categoryMap->remove(tool->displayCategory());
// add to new category
(*categoryMap)[category].append(tool);
} }
} }
settings->endArray();
} }
settings->endGroup(); settings->endGroup();
} }
@@ -884,10 +888,14 @@ void ExternalToolManager::writeSettings()
while (it.hasNext()) { while (it.hasNext()) {
it.next(); it.next();
const QString &category = it.key(); const QString &category = it.key();
settings->beginWriteArray(category, it.value().count());
int i = 0;
foreach (ExternalTool *tool, it.value()) { foreach (ExternalTool *tool, it.value()) {
if (tool->displayCategory() != category) settings->setArrayIndex(i);
settings->setValue(tool->id(), category); settings->setValue(QLatin1String("Tool"), tool->id());
++i;
} }
settings->endArray();
} }
settings->endGroup(); settings->endGroup();

View File

@@ -184,7 +184,7 @@ private:
QMap<QString, Internal::ExternalTool *> *tools, QMap<QString, Internal::ExternalTool *> *tools,
bool isPreset = false); bool isPreset = false);
void readSettings(const QMap<QString, Internal::ExternalTool *> &tools, void readSettings(const QMap<QString, Internal::ExternalTool *> &tools,
QMap<QString, QMultiMap<int, Internal::ExternalTool*> > *categoryPriorityMap); QMap<QString, QList<Internal::ExternalTool*> > *categoryPriorityMap);
void writeSettings(); void writeSettings();
static ExternalToolManager *m_instance; static ExternalToolManager *m_instance;