diff --git a/src/plugins/projectexplorer/targetselector.cpp b/src/plugins/projectexplorer/targetselector.cpp index 8650bf6f96324f7c69418ef971ac64dc20338c0f..63d82fe3447b9f671380bf4c6f1912ec22687b01 100644 --- a/src/plugins/projectexplorer/targetselector.cpp +++ b/src/plugins/projectexplorer/targetselector.cpp @@ -1,5 +1,7 @@ #include "targetselector.h" +#include <utils/qtcassert.h> + #include <QtGui/QPainter> #include <QtGui/QMouseEvent> #include <QtGui/QFontMetrics> @@ -29,20 +31,29 @@ TargetSelector::TargetSelector(QWidget *parent) : void TargetSelector::addTarget(const QString &name) { + insertTarget(m_targets.count(), name); +} + +void TargetSelector::insertTarget(int index, const QString &name) +{ + QTC_ASSERT(index >= 0 && index <= m_targets.count(), return); + Target target; target.name = name; target.currentSubIndex = 0; target.isActive = false; - m_targets.append(target); + + m_targets.insert(index, target); + if (m_currentTargetIndex == -1) - setCurrentIndex(m_targets.size() - 1); + setCurrentIndex(index); update(); } void TargetSelector::markActive(int index) { - if (index < 0 || index >= m_targets.count()) - return; + QTC_ASSERT(index >= 0 && index < m_targets.count(), return); + for (int i = 0; i < m_targets.count(); ++i) m_targets[i].isActive = (i == index); update(); @@ -50,9 +61,13 @@ void TargetSelector::markActive(int index) void TargetSelector::removeTarget(int index) { + QTC_ASSERT(index >= 0 && index < m_targets.count(), return); + m_targets.removeAt(index); - if (m_currentTargetIndex == index) - setCurrentIndex(m_targets.size() - 1); + if (m_currentTargetIndex > index) + setCurrentIndex(m_currentTargetIndex - 1); + if (m_currentTargetIndex == m_targets.count()) + setCurrentIndex(m_currentTargetIndex - 1); update(); } @@ -63,6 +78,9 @@ void TargetSelector::setCurrentIndex(int index) index == m_currentTargetIndex) return; + if (index == -1 && !m_targets.isEmpty()) + return; + m_currentTargetIndex = index; update(); @@ -84,6 +102,7 @@ void TargetSelector::setCurrentSubIndex(int subindex) { if (subindex < 0 || subindex >= 2 || + m_currentTargetIndex < 0 || subindex == m_targets.at(m_currentTargetIndex).currentSubIndex) return; m_targets[m_currentTargetIndex].currentSubIndex = subindex; diff --git a/src/plugins/projectexplorer/targetselector.h b/src/plugins/projectexplorer/targetselector.h index 84a1c0d4b30e21096711bd4432f1760fe5eb99ff..1c06f6dc1713d13a3ed6496cb56fc28fd880db60 100644 --- a/src/plugins/projectexplorer/targetselector.h +++ b/src/plugins/projectexplorer/targetselector.h @@ -31,6 +31,7 @@ public: public slots: void addTarget(const QString &name); + void insertTarget(int index, const QString &name); void markActive(int index); void removeTarget(int index); void setCurrentIndex(int index); diff --git a/src/plugins/projectexplorer/targetsettingswidget.cpp b/src/plugins/projectexplorer/targetsettingswidget.cpp index 9ae34358942ffb16b0160eb0302bebb8716c6de5..8290e128b457393914bc872a2260caec6f5f31ec 100644 --- a/src/plugins/projectexplorer/targetsettingswidget.cpp +++ b/src/plugins/projectexplorer/targetsettingswidget.cpp @@ -35,6 +35,12 @@ void TargetSettingsWidget::addTarget(const QString &name) updateTargetSelector(); } +void TargetSettingsWidget::insertTarget(int index, const QString &name) +{ + m_targetSelector->insertTarget(index, name); + updateTargetSelector(); +} + void TargetSettingsWidget::markActive(int index) { m_targetSelector->markActive(index); @@ -43,6 +49,7 @@ void TargetSettingsWidget::markActive(int index) void TargetSettingsWidget::removeTarget(int index) { m_targetSelector->removeTarget(index); + updateTargetSelector(); } void TargetSettingsWidget::setCurrentIndex(int index) diff --git a/src/plugins/projectexplorer/targetsettingswidget.h b/src/plugins/projectexplorer/targetsettingswidget.h index ae1b1b2b0b652d684eaf82bb5bc4acf192bc2302..bdfefac9221ea5ff003c7b5e6be297635b341b84 100644 --- a/src/plugins/projectexplorer/targetsettingswidget.h +++ b/src/plugins/projectexplorer/targetsettingswidget.h @@ -30,6 +30,7 @@ public: public slots: void addTarget(const QString &name); + void insertTarget(int index, const QString &name); void markActive(int index); void removeTarget(int index); void setCurrentIndex(int index);