diff options
Diffstat (limited to 'src/corelib/statemachine/qstatemachine.cpp')
-rw-r--r-- | src/corelib/statemachine/qstatemachine.cpp | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index a79f9d30d2..0e6fad48df 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -163,6 +163,13 @@ QT_BEGIN_NAMESPACE QState::DontRestoreProperties. */ +/*! + \property QStateMachine::running + \since 5.4 + + \brief the running state of this state machine +*/ + #ifndef QT_NO_ANIMATION /*! \property QStateMachine::animated @@ -1358,6 +1365,11 @@ void QStateMachinePrivate::_q_start() { Q_Q(QStateMachine); Q_ASSERT(state == Starting); + foreach (QAbstractState *state, configuration) { + QAbstractStatePrivate *abstractStatePrivate = QAbstractStatePrivate::get(state); + abstractStatePrivate->active = false; + emit state->activeChanged(false); + } configuration.clear(); qDeleteAll(internalEventQueue); internalEventQueue.clear(); @@ -1405,6 +1417,7 @@ void QStateMachinePrivate::_q_start() #endif emit q->started(QStateMachine::QPrivateSignal()); + emit q->runningChanged(true); if (stopProcessingReason == Finished) { // The state machine immediately reached a final state. @@ -1412,6 +1425,7 @@ void QStateMachinePrivate::_q_start() state = NotRunning; unregisterAllTransitions(); emitFinished(); + emit q->runningChanged(false); } else { _q_process(); } @@ -1494,12 +1508,14 @@ void QStateMachinePrivate::_q_process() cancelAllDelayedEvents(); unregisterAllTransitions(); emitFinished(); + emit q->runningChanged(false); break; case Stopped: state = NotRunning; cancelAllDelayedEvents(); unregisterAllTransitions(); emit q->stopped(QStateMachine::QPrivateSignal()); + emit q->runningChanged(false); break; } } @@ -2113,7 +2129,7 @@ bool QStateMachine::isRunning() const the main application event loop started with QCoreApplication::exec() or QApplication::exec(). - \sa started(), finished(), stop(), initialState() + \sa started(), finished(), stop(), initialState(), setRunning() */ void QStateMachine::start() { @@ -2141,7 +2157,7 @@ void QStateMachine::start() Stops this state machine. The state machine will stop processing events and then emit the stopped() signal. - \sa stopped(), start() + \sa stopped(), start(), setRunning() */ void QStateMachine::stop() { @@ -2161,6 +2177,19 @@ void QStateMachine::stop() } /*! + Convenience functions to start/stop this state machine. + + \sa start(), stop(), started(), finished(), stopped() +*/ +void QStateMachine::setRunning(bool running) +{ + if (running) + start(); + else + stop(); +} + +/*! \threadsafe Posts the given \a event of the given \a priority for processing by this @@ -2708,6 +2737,15 @@ QStateMachine::WrappedEvent::~WrappedEvent() Returns a clone of the original event. */ +/*! + \fn QStateMachine::runningChanged(bool running) + \since 5.4 + + This signal is emitted when the running property is changed. + + \sa QStateMachine::running +*/ + QT_END_NAMESPACE #include "qstatemachine.moc" |