diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 33b7d37076004bf1da020b539ddf8b51e39c4966..277b98e564d48465fa2969235c83140c6c10311c 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -141,20 +141,8 @@ QList<QWizardPage *> 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<Core::GeneratedFile> &files typedef QMultiMap<FileType, QString> 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 ff4d2b6060a1b9a2bda7302b16d87fb9596b6e2f..57c1d512c7faeb26f0b6a2650d973599168f3aeb 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 <QtCore/QDebug> +#include <QtCore/QFileInfo> #include <QtCore/QTextStream> 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<ProjectNode*> &projectNodes) { - QStringList list = l; - list.removeDuplicates(); - list.sort(); + QMap<QString,ProjectNode*> 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<ProjectNode*>(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<ProjectNode*>(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 cc018b5a932e78e1c22f8d5f8cc481e219a28289..7244a499ff823bbe6a8573240f129ead47d70179 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<ProjectNode *> &); + void setCurrentProject(ProjectNode *); + + ProjectNode *currentProject() const; void setAddToProjectEnabled(bool b); bool addToProject() const;