aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/toolchainoptionspage.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2016-07-12 13:56:52 +0200
committerTobias Hunger <tobias.hunger@qt.io>2016-07-14 15:33:52 +0000
commitd4624b92970ebe216f1f8fb6da4c7861acfd19df (patch)
treed3eae781865ec6936449fe2048f520ebdc482299 /src/plugins/projectexplorer/toolchainoptionspage.cpp
parentca04c4c264220c3a42acb7dca20b5c7765faf4f5 (diff)
ToolChainOptionsPage: Handle toolchain languages
Properly display toolchain languages in the tree view of the tool chains options page. Change-Id: I27cb42cd2c5bf0cd7be8da921b94d8da10110841 Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Diffstat (limited to 'src/plugins/projectexplorer/toolchainoptionspage.cpp')
-rw-r--r--src/plugins/projectexplorer/toolchainoptionspage.cpp76
1 files changed, 53 insertions, 23 deletions
diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp
index 190d2f52b4..b9ec5bca34 100644
--- a/src/plugins/projectexplorer/toolchainoptionspage.cpp
+++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp
@@ -114,15 +114,26 @@ public:
[](ToolChainFactory *factory) { return factory->canCreate();});
m_model.setHeader({ ToolChainOptionsPage::tr("Name"), ToolChainOptionsPage::tr("Type") });
- m_autoRoot = new StaticTreeItem(ToolChainOptionsPage::tr("Auto-detected"));
- m_manualRoot = new StaticTreeItem(ToolChainOptionsPage::tr("Manual"));
- m_model.rootItem()->appendChild(m_autoRoot);
- m_model.rootItem()->appendChild(m_manualRoot);
- foreach (ToolChain *tc, ToolChainManager::toolChains()) {
- TreeItem *parent = tc->isAutoDetected() ? m_autoRoot : m_manualRoot;
- parent->appendChild(new ToolChainTreeItem(tc, false));
+ auto autoRoot = new StaticTreeItem(ToolChainOptionsPage::tr("Auto-detected"));
+ auto manualRoot = new StaticTreeItem(ToolChainOptionsPage::tr("Manual"));
+
+ foreach (const ToolChain::Language l, ToolChain::allLanguages()) {
+ const QString dn = ToolChain::languageDisplayName(l);
+ auto autoNode = new StaticTreeItem(dn);
+ auto manualNode = new StaticTreeItem(dn);
+
+ autoRoot->appendChild(autoNode);
+ manualRoot->appendChild(manualNode);
+
+ m_languageMap.insert(l, qMakePair(autoNode, manualNode));
}
+ m_model.rootItem()->appendChild(autoRoot);
+ m_model.rootItem()->appendChild(manualRoot);
+
+ foreach (ToolChain *tc, ToolChainManager::toolChains())
+ insertToolChain(tc);
+
m_toolChainView = new QTreeView(this);
m_toolChainView->setUniformRowHeights(true);
m_toolChainView->setSelectionMode(QAbstractItemView::SingleSelection);
@@ -192,9 +203,12 @@ public:
ToolChainTreeItem *currentTreeItem();
void markForRemoval(ToolChainTreeItem *item);
+ ToolChainTreeItem *insertToolChain(ProjectExplorer::ToolChain *tc, bool changed = false); // Insert directly into model
void addToolChain(ProjectExplorer::ToolChain *);
void removeToolChain(ProjectExplorer::ToolChain *);
+ StaticTreeItem *parentForToolChain(ToolChain *tc);
+
void apply();
public:
@@ -209,6 +223,8 @@ public:
TreeItem *m_autoRoot;
TreeItem *m_manualRoot;
+ QHash<ToolChain::Language, QPair<StaticTreeItem *, StaticTreeItem *>> m_languageMap;
+
QList<ToolChainTreeItem *> m_toAddList;
QList<ToolChainTreeItem *> m_toRemoveList;
};
@@ -226,6 +242,14 @@ void ToolChainOptionsWidget::markForRemoval(ToolChainTreeItem *item)
}
}
+ToolChainTreeItem *ToolChainOptionsWidget::insertToolChain(ToolChain *tc, bool changed)
+{
+ StaticTreeItem *parent = parentForToolChain(tc);
+ auto item = new ToolChainTreeItem(tc, changed);
+ parent->appendChild(item);
+ return item;
+}
+
void ToolChainOptionsWidget::addToolChain(ToolChain *tc)
{
foreach (ToolChainTreeItem *n, m_toAddList) {
@@ -236,8 +260,7 @@ void ToolChainOptionsWidget::addToolChain(ToolChain *tc)
}
}
- TreeItem *parent = m_model.rootItem()->childAt(tc->isAutoDetected() ? 0 : 1);
- parent->appendChild(new ToolChainTreeItem(tc, false));
+ insertToolChain(tc);
updateState();
}
@@ -252,14 +275,21 @@ void ToolChainOptionsWidget::removeToolChain(ToolChain *tc)
}
}
- auto item = m_model.findSecondLevelItem([tc](ToolChainTreeItem *item) {
- return tc->isAutoDetected() && item->toolChain == tc;
+ StaticTreeItem *parent = parentForToolChain(tc);
+ auto item = parent->findFirstLevelChild<ToolChainTreeItem *>([tc](ToolChainTreeItem *item) {
+ return item->toolChain == tc;
});
m_model.destroyItem(item);
updateState();
}
+StaticTreeItem *ToolChainOptionsWidget::parentForToolChain(ToolChain *tc)
+{
+ QPair<StaticTreeItem *, StaticTreeItem *> nodes = m_languageMap.value(tc->language());
+ return tc->isAutoDetected() ? nodes.first : nodes.second;
+}
+
void ToolChainOptionsWidget::toolChainSelectionChanged()
{
ToolChainTreeItem *item = currentTreeItem();
@@ -284,15 +314,17 @@ void ToolChainOptionsWidget::apply()
Q_ASSERT(m_toRemoveList.isEmpty());
// Update tool chains:
- m_model.forSecondLevelItems([this](ToolChainTreeItem *item) {
- if (item->parent() == m_manualRoot && item->changed) {
- Q_ASSERT(item->toolChain);
- if (item->widget)
- item->widget->apply();
- item->changed = false;
- item->update();
+ foreach (ToolChain::Language l, m_languageMap.keys()) {
+ StaticTreeItem *parent = m_languageMap.value(l).second;
+ foreach (TreeItem *item, parent->children()) {
+ auto tcItem = static_cast<ToolChainTreeItem *>(item);
+ Q_ASSERT(tcItem->toolChain);
+ if (tcItem->widget)
+ tcItem->widget->apply();
+ tcItem->changed = false;
+ tcItem->update();
}
- });
+ }
// Add new (and already updated) tool chains
QStringList removedTcs;
@@ -344,11 +376,9 @@ void ToolChainOptionsWidget::createToolChain(ToolChainFactory *factory)
if (!tc)
return;
- auto item = new ToolChainTreeItem(tc, true);
+ auto item = insertToolChain(tc, true);
m_toAddList.append(item);
- m_manualRoot->appendChild(item);
-
m_toolChainView->setCurrentIndex(m_model.indexForItem(item));
}
@@ -370,7 +400,7 @@ ToolChainTreeItem *ToolChainOptionsWidget::currentTreeItem()
{
QModelIndex index = m_toolChainView->currentIndex();
TreeItem *item = m_model.itemForIndex(index);
- return (item && item->level() == 2) ? static_cast<ToolChainTreeItem *>(item) : nullptr;
+ return (item && item->level() == 3) ? static_cast<ToolChainTreeItem *>(item) : nullptr;
}
// --------------------------------------------------------------------------