summaryrefslogtreecommitdiffstats
path: root/src/corelib/statemachine/qabstracttransition.cpp
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-05-08 14:37:21 (GMT)
committerKent Hansen <khansen@trolltech.com>2009-05-08 14:37:21 (GMT)
commit98f3ebcf1f6751cb76f9268d33faf0bc5ac70f6e (patch)
treea3923f5ea068066999008eaea8d15a316b99592e /src/corelib/statemachine/qabstracttransition.cpp
parent110473e9eece3231c3df4fc50c3a958c6c25f2de (diff)
downloadQt-98f3ebcf1f6751cb76f9268d33faf0bc5ac70f6e.zip
Qt-98f3ebcf1f6751cb76f9268d33faf0bc5ac70f6e.tar.gz
Qt-98f3ebcf1f6751cb76f9268d33faf0bc5ac70f6e.tar.bz2
gracefully handle deletion of transition's target state
Diffstat (limited to 'src/corelib/statemachine/qabstracttransition.cpp')
-rw-r--r--src/corelib/statemachine/qabstracttransition.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp
index 696da9f..6ddb416 100644
--- a/src/corelib/statemachine/qabstracttransition.cpp
+++ b/src/corelib/statemachine/qabstracttransition.cpp
@@ -273,7 +273,13 @@ void QAbstractTransition::setTargetState(QAbstractState* target)
QList<QAbstractState*> QAbstractTransition::targetStates() const
{
Q_D(const QAbstractTransition);
- return d->targetStates;
+ QList<QAbstractState*> result;
+ for (int i = 0; i < d->targetStates.size(); ++i) {
+ QAbstractState *target = d->targetStates.at(i);
+ if (target)
+ result.append(target);
+ }
+ return result;
}
/*!
@@ -285,13 +291,19 @@ void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets)
for (int i=0; i<targets.size(); ++i) {
QAbstractState *target = targets.at(i);
+ if (!target) {
+ qWarning("QAbstractTransition::setTargetStates: target state(s) cannot be null");
+ return;
+ }
if (target->machine() != 0 && target->machine()->rootState() == target) {
qWarning("QAbstractTransition::setTargetStates: root state cannot be target of transition");
return;
}
}
- d->targetStates = targets;
+ d->targetStates.clear();
+ for (int i = 0; i < targets.size(); ++i)
+ d->targetStates.append(targets.at(i));
}
/*!