From b492c264faba030b1b234776cfbc5a1d844768c1 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Mon, 22 Feb 2010 14:42:37 +0100
Subject: [PATCH] Sort targets on displayname in project mode

Reviewed-by: con
---
 .../projectexplorer/targetsettingspanel.cpp   | 24 +++++++++++++------
 .../projectexplorer/targetsettingspanel.h     |  1 +
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index f38e26c57ef..98522e228ca 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -172,7 +172,7 @@ void TargetSettingsPanelWidget::setupUi()
 
     foreach (Target *t, m_project->targets())
         targetAdded(t);
-    m_selector->markActive(m_project->targets().indexOf(m_project->activeTarget()));
+    m_selector->markActive(m_targets.indexOf(m_project->activeTarget()));
 
     connect(m_selector, SIGNAL(currentIndexChanged(int,int)),
             this, SLOT(currentTargetIndexChanged(int,int)));
@@ -182,7 +182,7 @@ void TargetSettingsPanelWidget::setupUi()
             this, SLOT(removeTarget()));
 
     if (m_project->targets().count())
-        currentTargetIndexChanged(m_project->targets().indexOf(m_project->activeTarget()), 0);
+        currentTargetIndexChanged(m_targets.indexOf(m_project->activeTarget()), 0);
 }
 
 void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int subIndex)
@@ -194,7 +194,7 @@ void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int s
     m_selector->setCurrentIndex(targetIndex);
     m_selector->setCurrentSubIndex(subIndex);
 
-    Target *target(m_project->targets().at(targetIndex));
+    Target *target(m_targets.at(targetIndex));
 
     // Target was not actually changed:
     if (m_currentIndex == targetIndex) {
@@ -246,7 +246,7 @@ void TargetSettingsPanelWidget::addTarget()
 void TargetSettingsPanelWidget::removeTarget()
 {
     int index = m_selector->currentIndex();
-    Target *t = m_project->targets().at(index);
+    Target *t = m_targets.at(index);
     // TODO: Ask before removal?
     m_project->removeTarget(t);
 }
@@ -256,7 +256,15 @@ void TargetSettingsPanelWidget::targetAdded(ProjectExplorer::Target *target)
     Q_ASSERT(m_project == target->project());
     Q_ASSERT(m_selector);
 
-    m_selector->addTarget(target->displayName());
+    for (int pos = 0; pos <= m_targets.count(); ++pos) {
+        if (m_targets.count() == pos ||
+            m_targets.at(pos)->displayName() > target->displayName()) {
+            m_targets.insert(pos, target);
+            m_selector->insertTarget(pos, target->displayName());
+            break;
+        }
+    }
+
     m_selector->setAddButtonEnabled(m_project->possibleTargetIds().count() > 0);
     m_selector->setRemoveButtonEnabled(m_project->targets().count() > 1);
 }
@@ -266,9 +274,11 @@ void TargetSettingsPanelWidget::aboutToRemoveTarget(ProjectExplorer::Target *tar
     Q_ASSERT(m_project == target->project());
     Q_ASSERT(m_selector);
 
-    int index(m_project->targets().indexOf(target));
+    int index(m_targets.indexOf(target));
     if (index < 0)
         return;
+    m_targets.removeAt(index);
+
     m_selector->removeTarget(index);
     m_selector->setAddButtonEnabled(m_project->possibleTargetIds().count() > 0);
     m_selector->setRemoveButtonEnabled(m_project->targets().count() > 2); // target is not yet removed!
@@ -279,6 +289,6 @@ void TargetSettingsPanelWidget::activeTargetChanged(ProjectExplorer::Target *tar
     Q_ASSERT(m_project == target->project());
     Q_ASSERT(m_selector);
 
-    int index(m_project->targets().indexOf(target));
+    int index(m_targets.indexOf(target));
     m_selector->markActive(index);
 }
diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h
index 3c801feef0d..9b596bbdd2b 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.h
+++ b/src/plugins/projectexplorer/targetsettingspanel.h
@@ -97,6 +97,7 @@ private:
     QStackedWidget *m_centralWidget;
     QWidget *m_noTargetLabel;
     PanelsWidget *m_panelWidgets[2];
+    QList<Target *> m_targets;
 };
 
 } // namespace Internal
-- 
GitLab