From 98e0b4b0b5fe8e329363e46a5bcff065681a2825 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 5 Dec 2016 16:39:38 +0100 Subject: 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 --- src/plugins/projectexplorer/projectwindow.cpp | 89 ++++++++++++++++++--------- 1 file changed, 59 insertions(+), 30 deletions(-) (limited to 'src/plugins/projectexplorer/projectwindow.cpp') 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 #include #include +#include #include #include #include @@ -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 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()) - 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 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 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); -- cgit v1.2.1 From c226d311b7401f272036952a83901493478ac88f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 8 Dec 2016 14:38:44 +0100 Subject: Projects mode: Disable "Import" button if not supported by project Task-number: QTCREATORBUG-17399 Change-Id: I79b64298c902776282d54d70efdc0eef03415a51 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/projectwindow.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/plugins/projectexplorer/projectwindow.cpp') diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index ae4338bd51..2c4bf79cc2 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -391,6 +391,9 @@ public: m_importBuild = new QPushButton(ProjectWindow::tr("Import Existing Build...")); connect(m_importBuild, &QPushButton::clicked, this, &SelectorModel::handleImportBuild); + connect(sessionManager, &SessionManager::startupProjectChanged, this, [this](Project *project) { + m_importBuild->setEnabled(project && project->projectImporter()); + }); m_manageKits = new QPushButton(ProjectWindow::tr("Manage Kits...")); connect(m_manageKits, &QPushButton::clicked, -- cgit v1.2.1