diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2016-07-12 15:08:53 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2016-07-14 15:34:00 +0000 |
commit | ce9ca1f0ef4af4695e6c57983fc89a8bbc49976d (patch) | |
tree | 2ff2f2ef417159f35ff081af7528d0d1382880ab /src/plugins/projectexplorer/toolchainoptionspage.cpp | |
parent | c071f68942d2fcdf5955db516404a79d346c6135 (diff) |
ToolChain: Create toolchains for different languages
Enable creation of toolchains for different languages and wire
up the logic in the ToolChain Options Page.
Change-Id: I9fbd95607d30cc1aa10f73d6532338f07f3e2b4e
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Diffstat (limited to 'src/plugins/projectexplorer/toolchainoptionspage.cpp')
-rw-r--r-- | src/plugins/projectexplorer/toolchainoptionspage.cpp | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 2ff25cbf4b..3ef0228a8f 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -152,27 +152,20 @@ public: continue; if (languages.count() == 1) { - QAction *action = new QAction(addMenu); - action->setText(factory->displayName()); - connect(action, &QAction::triggered, [this, factory] { createToolChain(factory); }); - addMenu->addAction(action); + addMenu->addAction(createAction(factory->displayName(), factory, languages.at(0))); } else { Utils::sort(languages, [](ToolChain::Language l1, ToolChain::Language l2) { return ToolChain::languageDisplayName(l1) < ToolChain::languageDisplayName(l2); }); auto subMenu = addMenu->addMenu(factory->displayName()); - foreach (ToolChain::Language l, languages) { - auto action = new QAction(subMenu); - action->setText(ToolChain::languageDisplayName(l)); - connect(action, &QAction::triggered, [this, factory] { createToolChain(factory); }); - subMenu->addAction(action); - } + foreach (ToolChain::Language l, languages) + subMenu->addAction(createAction(ToolChain::languageDisplayName(l), factory, l)); } } m_addButton->setMenu(addMenu); m_cloneButton = new QPushButton(ToolChainOptionsPage::tr("Clone"), this); - connect(m_cloneButton, &QAbstractButton::clicked, [this] { createToolChain(nullptr); }); + connect(m_cloneButton, &QAbstractButton::clicked, [this] { cloneToolChain(); }); m_delButton = new QPushButton(ToolChainOptionsPage::tr("Remove"), this); @@ -216,7 +209,8 @@ public: void toolChainSelectionChanged(); void updateState(); - void createToolChain(ToolChainFactory *factory); + void createToolChain(ToolChainFactory *factory, ToolChain::Language l); + void cloneToolChain(); ToolChainTreeItem *currentTreeItem(); void markForRemoval(ToolChainTreeItem *item); @@ -225,6 +219,12 @@ public: void removeToolChain(ProjectExplorer::ToolChain *); StaticTreeItem *parentForToolChain(ToolChain *tc); + QAction *createAction(const QString &name, ToolChainFactory *factory, ToolChain::Language l) + { + auto action = new QAction(name, nullptr); + connect(action, &QAction::triggered, [this, factory, l] { createToolChain(factory, l); }); + return action; + } void apply(); @@ -374,21 +374,28 @@ void ToolChainOptionsWidget::apply() } } -void ToolChainOptionsWidget::createToolChain(ToolChainFactory *factory) +void ToolChainOptionsWidget::createToolChain(ToolChainFactory *factory, ToolChain::Language l) { - ToolChain *tc = nullptr; + QTC_ASSERT(factory, return); + QTC_ASSERT(factory->canCreate(), return); + QTC_ASSERT(l != ToolChain::Language::None, return); - if (factory) { - // Clone. - QTC_CHECK(factory->canCreate()); - tc = factory->create(); - } else { - // Copy. - ToolChainTreeItem *current = currentTreeItem(); - if (!current) - return; - tc = current->toolChain->clone(); - } + ToolChain *tc = factory->create(l); + if (!tc) + return; + + auto item = insertToolChain(tc, true); + m_toAddList.append(item); + + m_toolChainView->setCurrentIndex(m_model.indexForItem(item)); +} + +void ToolChainOptionsWidget::cloneToolChain() +{ + ToolChainTreeItem *current = currentTreeItem(); + if (!current) + return; + ToolChain *tc = current->toolChain->clone(); if (!tc) return; |