Fix crash when deleting targets

* Update signal names to be more in sync with those found on the QTabBar

Reviewed-by: con
This commit is contained in:
Tobias Hunger
2010-02-26 13:45:07 +01:00
parent 07d025603c
commit 37ec59f96c
6 changed files with 31 additions and 24 deletions

View File

@@ -49,6 +49,8 @@ void TargetSelector::insertTarget(int index, const QString &name)
if (m_currentTargetIndex == -1) if (m_currentTargetIndex == -1)
setCurrentIndex(index); setCurrentIndex(index);
else if (m_currentTargetIndex >= index)
setCurrentIndex(m_currentTargetIndex + 1);
update(); update();
} }
@@ -66,10 +68,13 @@ void TargetSelector::removeTarget(int index)
QTC_ASSERT(index >= 0 && index < m_targets.count(), return); QTC_ASSERT(index >= 0 && index < m_targets.count(), return);
m_targets.removeAt(index); m_targets.removeAt(index);
if (m_currentTargetIndex > index)
setCurrentIndex(m_currentTargetIndex - 1); if (m_currentTargetIndex >= m_targets.count())
if (m_currentTargetIndex == m_targets.count()) setCurrentIndex(m_targets.count() - 1);
setCurrentIndex(m_currentTargetIndex - 1); else if (m_currentTargetIndex >= index)
// force a signal since the target pointed to has changed:
emit currentChanged(m_currentTargetIndex, m_targets.at(m_currentTargetIndex).currentSubIndex);
update(); update();
} }
@@ -86,7 +91,7 @@ void TargetSelector::setCurrentIndex(int index)
m_currentTargetIndex = index; m_currentTargetIndex = index;
update(); update();
emit currentIndexChanged(m_currentTargetIndex, emit currentChanged(m_currentTargetIndex,
m_currentTargetIndex >= 0 ? m_targets.at(m_currentTargetIndex).currentSubIndex : -1); m_currentTargetIndex >= 0 ? m_targets.at(m_currentTargetIndex).currentSubIndex : -1);
} }
@@ -110,7 +115,7 @@ void TargetSelector::setCurrentSubIndex(int subindex)
m_targets[m_currentTargetIndex].currentSubIndex = subindex; m_targets[m_currentTargetIndex].currentSubIndex = subindex;
update(); update();
emit currentIndexChanged(m_currentTargetIndex, emit currentChanged(m_currentTargetIndex,
m_targets.at(m_currentTargetIndex).currentSubIndex); m_targets.at(m_currentTargetIndex).currentSubIndex);
} }
@@ -169,7 +174,7 @@ void TargetSelector::mousePressEvent(QMouseEvent *event)
m_currentTargetIndex = index; m_currentTargetIndex = index;
//TODO don't emit if nothing changed! //TODO don't emit if nothing changed!
update(); update();
emit currentIndexChanged(m_currentTargetIndex, m_targets.at(m_currentTargetIndex).currentSubIndex); emit currentChanged(m_currentTargetIndex, m_targets.at(m_currentTargetIndex).currentSubIndex);
} else { } else {
event->ignore(); event->ignore();
} }

View File

@@ -42,7 +42,9 @@ public slots:
signals: signals:
void addButtonClicked(); void addButtonClicked();
void removeButtonClicked(); void removeButtonClicked();
void currentIndexChanged(int targetIndex, int subIndex); // This signal is emited whenever the target pointed to by the indices
// has changed.
void currentChanged(int targetIndex, int subIndex);
protected: protected:
void paintEvent(QPaintEvent *event); void paintEvent(QPaintEvent *event);

View File

@@ -118,7 +118,7 @@ QIcon TargetSettingsPanel::icon() const
/// ///
TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) : TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) :
m_currentIndex(-1), m_currentTarget(0),
m_project(project), m_project(project),
m_selector(0), m_selector(0),
m_centralWidget(0) m_centralWidget(0)
@@ -171,34 +171,34 @@ void TargetSettingsPanelWidget::setupUi()
noTargetLayout->addStretch(10); noTargetLayout->addStretch(10);
m_centralWidget->addWidget(m_noTargetLabel); m_centralWidget->addWidget(m_noTargetLabel);
connect(m_selector, SIGNAL(currentChanged(int,int)),
this, SLOT(currentTargetChanged(int,int)));
foreach (Target *t, m_project->targets()) foreach (Target *t, m_project->targets())
targetAdded(t); targetAdded(t);
m_selector->markActive(m_targets.indexOf(m_project->activeTarget()));
connect(m_selector, SIGNAL(currentIndexChanged(int,int)),
this, SLOT(currentTargetIndexChanged(int,int)));
connect(m_selector, SIGNAL(addButtonClicked()), connect(m_selector, SIGNAL(addButtonClicked()),
this, SLOT(addTarget())); this, SLOT(addTarget()));
connect(m_selector, SIGNAL(removeButtonClicked()), connect(m_selector, SIGNAL(removeButtonClicked()),
this, SLOT(removeTarget())); this, SLOT(removeTarget()));
if (m_project->targets().count()) if (m_project->activeTarget()) {
currentTargetIndexChanged(m_targets.indexOf(m_project->activeTarget()), 0); m_selector->markActive(m_targets.indexOf(m_project->activeTarget()));
m_selector->setCurrentIndex(m_targets.indexOf(m_project->activeTarget()));
}
} }
void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int subIndex) void TargetSettingsPanelWidget::currentTargetChanged(int targetIndex, int subIndex)
{ {
if (targetIndex < -1 || targetIndex >= m_targets.count()) if (targetIndex < -1 || targetIndex >= m_targets.count())
return; return;
if (subIndex < -1 || subIndex >= 2) if (subIndex < -1 || subIndex >= 2)
return; return;
m_selector->setCurrentIndex(targetIndex);
m_selector->setCurrentSubIndex(subIndex);
Target *target(m_targets.at(targetIndex)); Target *target(m_targets.at(targetIndex));
// Target was not actually changed: // Target was not actually changed:
if (m_currentIndex == targetIndex) { if (m_currentTarget == target) {
if (m_panelWidgets[subIndex]) if (m_panelWidgets[subIndex])
m_centralWidget->setCurrentWidget(m_panelWidgets[subIndex]); m_centralWidget->setCurrentWidget(m_panelWidgets[subIndex]);
else else
@@ -206,7 +206,7 @@ void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int s
return; return;
} }
m_currentIndex = targetIndex; m_currentTarget = target;
// Target has changed: // Target has changed:
if (targetIndex == -1) { // no more targets! if (targetIndex == -1) { // no more targets!

View File

@@ -83,7 +83,7 @@ public:
void setupUi(); void setupUi();
private slots: private slots:
void currentTargetIndexChanged(int targetIndex, int subIndex); void currentTargetChanged(int targetIndex, int subIndex);
void addTarget(); void addTarget();
void removeTarget(); void removeTarget();
void targetAdded(ProjectExplorer::Target *target); void targetAdded(ProjectExplorer::Target *target);
@@ -91,7 +91,7 @@ private slots:
void activeTargetChanged(ProjectExplorer::Target *target); void activeTargetChanged(ProjectExplorer::Target *target);
private: private:
int m_currentIndex; Target *m_currentTarget;
Project *m_project; Project *m_project;
TargetSettingsWidget *m_selector; TargetSettingsWidget *m_selector;
QStackedWidget *m_centralWidget; QStackedWidget *m_centralWidget;

View File

@@ -19,8 +19,8 @@ TargetSettingsWidget::TargetSettingsWidget(QWidget *parent) :
this, SIGNAL(addButtonClicked())); this, SIGNAL(addButtonClicked()));
connect(m_targetSelector, SIGNAL(removeButtonClicked()), connect(m_targetSelector, SIGNAL(removeButtonClicked()),
this, SIGNAL(removeButtonClicked())); this, SIGNAL(removeButtonClicked()));
connect(m_targetSelector, SIGNAL(currentIndexChanged(int,int)), connect(m_targetSelector, SIGNAL(currentChanged(int,int)),
this, SIGNAL(currentIndexChanged(int,int))); this, SIGNAL(currentChanged(int,int)));
updateTargetSelector(); updateTargetSelector();
} }

View File

@@ -41,7 +41,7 @@ public slots:
signals: signals:
void addButtonClicked(); void addButtonClicked();
void removeButtonClicked(); void removeButtonClicked();
void currentIndexChanged(int targetIndex, int subIndex); void currentChanged(int targetIndex, int subIndex);
protected: protected:
void changeEvent(QEvent *e); void changeEvent(QEvent *e);