diff options
author | hjk <hjk@qt.io> | 2016-12-05 16:39:38 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2016-12-06 11:53:15 +0000 |
commit | 98e0b4b0b5fe8e329363e46a5bcff065681a2825 (patch) | |
tree | 3741a7d1e53069453b7b3ab327083c1b3b64d442 | |
parent | e351c693c666f7e8f245b257bad7a80562abf8bd (diff) | |
download | qt-creator-98e0b4b0b5fe8e329363e46a5bcff065681a2825.tar.gz |
ProjectWindow: Add a buttons to import builds to project tree
... to a shortcut to the Kits setup page.
This duplicates the functionality from the context menu but can
be directly spotted.
Change-Id: Ia5c2e1208346dc7191a04fbb9c2569ccab9aab31
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/plugins/projectexplorer/projectwindow.cpp | 89 |
1 files changed, 59 insertions, 30 deletions
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index b1642c91b0..ae4338bd51 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -58,6 +58,7 @@ #include <QHeaderView> #include <QLabel> #include <QMenu> +#include <QPushButton> #include <QStyledItemDelegate> #include <QTimer> #include <QTreeView> @@ -386,6 +387,14 @@ public: this, &SelectorModel::deregisterProject); connect(sessionManager, &SessionManager::startupProjectChanged, this, &SelectorModel::startupProjectChanged); + + m_importBuild = new QPushButton(ProjectWindow::tr("Import Existing Build...")); + connect(m_importBuild, &QPushButton::clicked, + this, &SelectorModel::handleImportBuild); + + m_manageKits = new QPushButton(ProjectWindow::tr("Manage Kits...")); + connect(m_manageKits, &QPushButton::clicked, + this, &SelectorModel::handleManageKits); } void updatePanel() @@ -457,7 +466,6 @@ public: ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0); Project *project = projectItem ? projectItem->project() : 0; - ProjectImporter *projectImporter = project ? project->projectImporter() : 0; QModelIndex index = m_selectorTree->indexAt(pos); TreeItem *item = m_projectsModel.itemForIndex(index); @@ -468,47 +476,65 @@ public: menu.addSeparator(); QAction *importBuild = menu.addAction(ProjectWindow::tr("Import Existing Build...")); - importBuild->setEnabled(projectImporter != 0); + importBuild->setEnabled(project && project->projectImporter()); QAction *manageKits = menu.addAction(ProjectWindow::tr("Manage Kits...")); QAction *act = menu.exec(m_selectorTree->mapToGlobal(pos)); - if (act == importBuild) { - QString dir = project->projectDirectory().toString(); - QString importDir = QFileDialog::getExistingDirectory(ICore::mainWindow(), - ProjectWindow::tr("Import directory"), - dir); - FileName path = FileName::fromString(importDir); - - const QList<BuildInfo *> toImport = projectImporter->import(path, false); - for (BuildInfo *info : toImport) { - Target *target = project->target(info->kitId); - if (!target) { - target = project->createTarget(KitManager::find(info->kitId)); - if (target) - project->addTarget(target); - } - if (target) { - projectImporter->makePersistent(target->kit()); - BuildConfiguration *bc = info->factory()->create(target, info); - QTC_ASSERT(bc, continue); - target->addBuildConfiguration(bc); - } - } - qDeleteAll(toImport); - } else if (act == manageKits) { + if (act == importBuild) + handleImportBuild(); + else if (act == manageKits) + handleManageKits(); + } + + void handleManageKits() + { + if (ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0)) { if (KitOptionsPage *page = ExtensionSystem::PluginManager::getObject<KitOptionsPage>()) - page->showKit(KitManager::find(Id::fromSetting(item->data(0, KitIdRole)))); - ICore::showOptionsDialog(Constants::KITS_SETTINGS_PAGE_ID, ICore::mainWindow()); - }; + page->showKit(KitManager::find(Id::fromSetting(projectItem->data(0, KitIdRole)))); + } + ICore::showOptionsDialog(Constants::KITS_SETTINGS_PAGE_ID, ICore::mainWindow()); } -public: + void handleImportBuild() + { + ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0); + Project *project = projectItem ? projectItem->project() : 0; + ProjectImporter *projectImporter = project ? project->projectImporter() : 0; + QTC_ASSERT(projectImporter, return); + + QString dir = project->projectDirectory().toString(); + QString importDir = QFileDialog::getExistingDirectory(ICore::mainWindow(), + ProjectWindow::tr("Import directory"), + dir); + FileName path = FileName::fromString(importDir); + + const QList<BuildInfo *> toImport = projectImporter->import(path, false); + for (BuildInfo *info : toImport) { + Target *target = project->target(info->kitId); + if (!target) { + target = project->createTarget(KitManager::find(info->kitId)); + if (target) + project->addTarget(target); + } + if (target) { + projectImporter->makePersistent(target->kit()); + BuildConfiguration *bc = info->factory()->create(target, info); + QTC_ASSERT(bc, continue); + target->addBuildConfiguration(bc); + } + } + qDeleteAll(toImport); + } + + std::function<void (QWidget *)> m_changeListener; ProjectsModel m_projectsModel; ComboBoxModel m_comboBoxModel; QComboBox *m_projectSelection; SelectorTree *m_selectorTree; + QPushButton *m_importBuild; + QPushButton *m_manageKits; }; // @@ -545,6 +571,9 @@ ProjectWindow::ProjectWindow() auto innerLayout = new QVBoxLayout; innerLayout->setSpacing(10); innerLayout->setContentsMargins(14, innerLayout->spacing(), 14, 0); + innerLayout->addWidget(selectorModel->m_manageKits); + innerLayout->addWidget(selectorModel->m_importBuild); + innerLayout->addSpacerItem(new QSpacerItem(10, 30, QSizePolicy::Maximum, QSizePolicy::Maximum)); innerLayout->addWidget(activeLabel); innerLayout->addWidget(selectorModel->m_projectSelection); innerLayout->addWidget(selectorModel->m_selectorTree); |