diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index 8a4128f1ef741d224d0794ee8292baefed01a37e..d3835b69fbf989822a7626e0a51d9aeaedd9e99f 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -29,9 +29,11 @@ #include "targetsettingspanel.h" +#include "buildinfo.h" #include "buildsettingspropertiespage.h" #include "kitoptionspage.h" #include "project.h" +#include "projectimporter.h" #include "projectwindow.h" #include "runsettingspropertiespage.h" #include "target.h" @@ -48,6 +50,7 @@ #include <projectexplorer/runconfiguration.h> #include <utils/qtcassert.h> +#include <QFileDialog> #include <QLabel> #include <QMenu> #include <QMessageBox> @@ -69,11 +72,13 @@ namespace Internal { TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) : m_currentTarget(0), m_project(project), + m_importer(project->createProjectImporter()), m_selector(0), m_centralWidget(0), m_changeMenu(0), m_duplicateMenu(0), - m_lastAction(0) + m_lastAction(0), + m_importAction(0) { Q_ASSERT(m_project); @@ -83,6 +88,11 @@ TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) : m_addMenu = new QMenu(this); m_targetMenu = new QMenu(this); + if (m_importer) { + m_importAction = new QAction(tr("Import existing build..."), this); + connect(m_importAction, SIGNAL(triggered()), this, SLOT(importTarget())); + } + setFocusPolicy(Qt::NoFocus); setupUi(); @@ -101,6 +111,7 @@ TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) : TargetSettingsPanelWidget::~TargetSettingsPanelWidget() { + delete m_importer; } bool TargetSettingsPanelWidget::event(QEvent *event) @@ -551,6 +562,11 @@ void TargetSettingsPanelWidget::updateTargetButtons() m_addMenu->clear(); m_targetMenu->clear(); + if (m_importAction) { + m_addMenu->addAction(m_importAction); + m_addMenu->addSeparator(); + } + m_changeMenu = m_targetMenu->addMenu(tr("Change Kit")); m_duplicateMenu = m_targetMenu->addMenu(tr("Copy to Kit")); QAction *removeAction = m_targetMenu->addAction(tr("Remove Kit")); @@ -605,6 +621,37 @@ void TargetSettingsPanelWidget::openTargetPreferences() Constants::KITS_SETTINGS_PAGE_ID); } +void TargetSettingsPanelWidget::importTarget() +{ + QString toImport = QFileDialog::getExistingDirectory(this, tr("Import directory"), m_project->projectDirectory()); + importTarget(Utils::FileName::fromString(toImport)); +} + +void TargetSettingsPanelWidget::importTarget(const Utils::FileName &path) +{ + if (!m_importer) + return; + + Target *target = 0; + BuildConfiguration *bc = 0; + QList<BuildInfo *> toImport = m_importer->import(path, false); + foreach (BuildInfo *info, toImport) { + target = m_project->target(info->kitId); + if (!target) { + target = new Target(m_project, KitManager::find(info->kitId)); + m_project->addTarget(target); + } + bc = info->factory()->create(target, info); + QTC_ASSERT(bc, continue); + target->addBuildConfiguration(bc); + } + m_project->setActiveTarget(target); + if (target && bc) + target->setActiveBuildConfiguration(bc); + + qDeleteAll(toImport); +} + int TargetSettingsPanelWidget::currentSubIndex() const { return m_selector->currentSubIndex(); diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h index da784732147ddc978798ed267fcaf7c7eefb740c..2de991f48a9fe3213b5c3310220ee729861673a6 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.h +++ b/src/plugins/projectexplorer/targetsettingspanel.h @@ -38,10 +38,13 @@ class QMenu; class QStackedWidget; QT_END_NAMESPACE +namespace Utils { class FileName; } + namespace ProjectExplorer { class Target; class Project; +class ProjectImporter; class Kit; class PanelsWidget; @@ -72,6 +75,7 @@ private slots: void updateTargetButtons(); void renameTarget(); void openTargetPreferences(); + void importTarget(); void removeTarget(); void menuShown(int targetIndex); @@ -81,10 +85,12 @@ private slots: private: Target *cloneTarget(Target *sourceTarget, Kit *k); void removeTarget(Target *t); + void importTarget(const Utils::FileName &path); void createAction(Kit *k, QMenu *menu); Target *m_currentTarget; Project *m_project; + ProjectImporter *m_importer; TargetSettingsWidget *m_selector; QStackedWidget *m_centralWidget; QWidget *m_noTargetLabel; @@ -95,6 +101,7 @@ private: QMenu *m_duplicateMenu; QMenu *m_addMenu; QAction *m_lastAction; + QAction *m_importAction; int m_menuTargetIndex; };