diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 33b7d370760..277b98e564d 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -141,20 +141,8 @@ QList ProjectFileWizardExtension::extensionPages(const Core::IWiz // Disable "add project to project" const bool hasProjects = !m_context->projects.empty(); if (hasProjects) { - // Compile list of names and find current project if there is one - QStringList projectNames; - ProjectNode *current = currentProject(); - int currentIndex = -1; - const int count = m_context->projects.size(); - for (int i = 0; i < count; i++) { - ProjectNode *pn = m_context->projects.at(i); - projectNames.push_back(QFileInfo(pn->path()).fileName()); - if (current == pn) - currentIndex = i; - } - m_context->page->setProjects(projectNames); - if (currentIndex != -1) - m_context->page->setCurrentProjectIndex(currentIndex); + m_context->page->setProjects(m_context->projects); + m_context->page->setCurrentProject(currentProject()); } m_context->page->setAddToProjectEnabled(hasProjects && wizard->kind() != Core::IWizard::ProjectWizard); @@ -166,7 +154,7 @@ bool ProjectFileWizardExtension::process(const QList &files typedef QMultiMap TypeFileMap; // Add files to project && version control if (m_context->page->addToProject()) { - ProjectNode *project = m_context->projects.at(m_context->page->currentProjectIndex()); + ProjectNode *project = m_context->page->currentProject(); // Split into lists by file type and add TypeFileMap typeFileMap; foreach (const Core::GeneratedFile &generatedFile, files) { diff --git a/src/plugins/projectexplorer/projectwizardpage.cpp b/src/plugins/projectexplorer/projectwizardpage.cpp index ff4d2b6060a..57c1d512c7f 100644 --- a/src/plugins/projectexplorer/projectwizardpage.cpp +++ b/src/plugins/projectexplorer/projectwizardpage.cpp @@ -29,13 +29,17 @@ #include "projectwizardpage.h" #include "ui_projectwizardpage.h" +#include "projectnodes.h" #include +#include #include using namespace ProjectExplorer; using namespace Internal; +Q_DECLARE_METATYPE(ProjectExplorer::ProjectNode*) + ProjectWizardPage::ProjectWizardPage(QWidget *parent) : QWizardPage(parent), m_ui(new Ui::WizardPage) @@ -51,13 +55,19 @@ ProjectWizardPage::~ProjectWizardPage() delete m_ui; } -void ProjectWizardPage::setProjects(const QStringList &l) +void ProjectWizardPage::setProjects(const QList &projectNodes) { - QStringList list = l; - list.removeDuplicates(); - list.sort(); + QMap projectMap; + foreach (ProjectNode *node, projectNodes) { + QString name = QFileInfo(node->path()).fileName(); + if (!projectMap.contains(name)) + projectMap.insert(name, node); + } + m_ui->projectComboBox->clear(); - m_ui->projectComboBox->addItems(list); + foreach (const QString &name, projectMap.keys()) { + m_ui->projectComboBox->addItem(name, qVariantFromValue(projectMap.value(name))); + } } void ProjectWizardPage::setAddToProjectEnabled(bool b) @@ -69,14 +79,22 @@ void ProjectWizardPage::setAddToProjectEnabled(bool b) m_ui->projectComboBox->setEnabled(b); } -int ProjectWizardPage::currentProjectIndex() const +ProjectNode *ProjectWizardPage::currentProject() const { - return m_ui->projectComboBox->currentIndex(); + QVariant variant = m_ui->projectComboBox->itemData(m_ui->projectComboBox->currentIndex()); + return qVariantValue(variant); } -void ProjectWizardPage::setCurrentProjectIndex(int i) +void ProjectWizardPage::setCurrentProject(ProjectNode *projectNode) { - m_ui->projectComboBox->setCurrentIndex(i); + if (!projectNode) + return; + for (int i = 0; i < m_ui->projectComboBox->count(); ++i) { + if (qVariantValue(m_ui->projectComboBox->itemData(i)) == projectNode) { + m_ui->projectComboBox->setCurrentIndex(i); + return; + } + } } bool ProjectWizardPage::addToProject() const diff --git a/src/plugins/projectexplorer/projectwizardpage.h b/src/plugins/projectexplorer/projectwizardpage.h index cc018b5a932..7244a499ff8 100644 --- a/src/plugins/projectexplorer/projectwizardpage.h +++ b/src/plugins/projectexplorer/projectwizardpage.h @@ -55,9 +55,10 @@ public: explicit ProjectWizardPage(QWidget *parent = 0); virtual ~ProjectWizardPage(); - void setProjects(const QStringList &); - void setCurrentProjectIndex(int); - int currentProjectIndex() const; + void setProjects(const QList &); + void setCurrentProject(ProjectNode *); + + ProjectNode *currentProject() const; void setAddToProjectEnabled(bool b); bool addToProject() const;