From 51a5c41f5d438be84cfefb74a113a4557a871b4a Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 30 Mar 2011 16:33:31 +0200 Subject: [PATCH] Target Selector: Make project names unique If the displayName() is not unique we include the filename. Task-Nr: QTCREATORBUG-329 --- .../miniprojecttargetselector.cpp | 50 +++++++++++++++++-- .../miniprojecttargetselector.h | 1 + .../projectexplorer/projectexplorer.cpp | 2 +- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index 673292a1631..58950363a12 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -398,7 +399,8 @@ MiniProjectTargetSelector::MiniProjectTargetSelector(QAction *targetSelectorActi m_projectsBox->setFixedHeight(panelHeight); m_projectsBox->setProperty("hideborder", true); m_projectsBox->setObjectName(QString::fromUtf8("ProjectsBox")); - m_projectsBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + m_projectsBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + m_projectsBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); toolLayout->addWidget(lbl); toolLayout->addWidget(new Utils::StyledSeparator); @@ -441,7 +443,12 @@ void MiniProjectTargetSelector::mousePressEvent(QMouseEvent *e) QWidget::mousePressEvent(e); } -void MiniProjectTargetSelector::addProject(ProjectExplorer::Project* project) +QString MiniProjectTargetSelector::fullName(ProjectExplorer::Project *project) +{ + return project->displayName() + " (" + project->file()->fileName() + ")"; +} + +void MiniProjectTargetSelector::addProject(ProjectExplorer::Project *project) { QTC_ASSERT(project, return); ProjectListWidget *targetList = new ProjectListWidget(project); @@ -450,14 +457,28 @@ void MiniProjectTargetSelector::addProject(ProjectExplorer::Project* project) m_ignoreIndexChange = true; + QString sortName = fullName(project); int pos = 0; - for (int i=0; i < m_projectsBox->count(); ++i) - if (m_projectsBox->itemText(i) > project->displayName()) + for (int i=0; i < m_projectsBox->count(); ++i) { + Project *p = m_projectsBox->itemData(i).value(); + QString itemSortName = fullName(p); + if (itemSortName > sortName) pos = i; + } m_widgetStack->insertWidget(pos, targetList); - m_projectsBox->insertItem(pos, project->displayName(), QVariant::fromValue(project)); + bool useFullName = false; + for (int i = 0; i < m_projectsBox->count(); ++i) { + Project *p = m_projectsBox->itemData(i).value(); + if (p->displayName() == project->displayName()) { + useFullName = true; + m_projectsBox->setItemText(i, fullName(p)); + } + } + + QString displayName = useFullName ? fullName(project) : project->displayName(); + m_projectsBox->insertItem(pos, displayName, QVariant::fromValue(project)); connect(project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), SLOT(updateAction())); @@ -480,6 +501,7 @@ void MiniProjectTargetSelector::addProject(ProjectExplorer::Project* project) addTarget(t, t == project->activeTarget()); m_projectsBox->setEnabled(m_projectsBox->count() > 1); + m_projectsBox->parentWidget()->layout()->activate(); } void MiniProjectTargetSelector::removeProject(ProjectExplorer::Project* project) @@ -495,7 +517,25 @@ void MiniProjectTargetSelector::removeProject(ProjectExplorer::Project* project) m_projectsBox->removeItem(index); m_projectsBox->setEnabled(m_projectsBox->count() > 1); delete plw; + + // Update display names + QString name = project->displayName(); + int count = 0; + int otherIndex; + for (int i = 0; i < m_projectsBox->count(); ++i) { + Project *p = m_projectsBox->itemData(i).value(); + if (p->displayName() == name) { + ++count; + otherIndex = i; + } + } + if (count == 1) { + Project *p = m_projectsBox->itemData(otherIndex).value(); + m_projectsBox->setItemText(otherIndex, p->displayName()); + } + m_ignoreIndexChange = false; + m_projectsBox->parentWidget()->layout()->activate(); } void MiniProjectTargetSelector::addTarget(ProjectExplorer::Target *target, bool activeTarget) diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.h b/src/plugins/projectexplorer/miniprojecttargetselector.h index ee4e3b4500d..e5f5d8d0ed7 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.h +++ b/src/plugins/projectexplorer/miniprojecttargetselector.h @@ -136,6 +136,7 @@ private slots: void mousePressEvent(QMouseEvent *); private: + QString fullName(ProjectExplorer::Project *project); int indexFor(ProjectExplorer::Project *project) const; QAction *m_projectAction; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 9ae92ebfef9..06f9dc4901b 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -847,7 +847,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er connect(d->m_session, SIGNAL(projectAdded(ProjectExplorer::Project*)), d->m_targetSelector, SLOT(addProject(ProjectExplorer::Project*))); - connect(d->m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)), + connect(d->m_session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), d->m_targetSelector, SLOT(removeProject(ProjectExplorer::Project*))); connect(d->m_targetSelector, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), this, SLOT(setStartupProject(ProjectExplorer::Project*)));