From 6302d6eef7247ed65fc1d07ac57bfec9c6b0f27a Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 24 Jun 2014 13:09:59 +0300 Subject: Export QStateMachine running property. It is needed to control a QStateMachine object from QML. Change-Id: I19271d97718af2d688c477647d6341f70fdef3ea Reviewed-by: Alan Alpert --- src/corelib/statemachine/qstatemachine.cpp | 37 ++++++++++++++++++++++++++++-- src/corelib/statemachine/qstatemachine.h | 4 ++++ 2 files changed, 39 insertions(+), 2 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index d2e2368ca9..d46fa357ae 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 @@ -1409,6 +1416,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. @@ -1416,6 +1424,7 @@ void QStateMachinePrivate::_q_start() state = NotRunning; unregisterAllTransitions(); emitFinished(); + emit q->runningChanged(false); } else { _q_process(); } @@ -1498,12 +1507,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; } } @@ -2117,7 +2128,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() { @@ -2145,7 +2156,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() { @@ -2164,6 +2175,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 @@ -2712,6 +2736,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" diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h index 9305676bb5..0092c4d0c5 100644 --- a/src/corelib/statemachine/qstatemachine.h +++ b/src/corelib/statemachine/qstatemachine.h @@ -62,6 +62,7 @@ class Q_CORE_EXPORT QStateMachine : public QState Q_OBJECT Q_PROPERTY(QString errorString READ errorString) Q_PROPERTY(QState::RestorePolicy globalRestorePolicy READ globalRestorePolicy WRITE setGlobalRestorePolicy) + Q_PROPERTY(bool running READ isRunning WRITE setRunning NOTIFY runningChanged) #ifndef QT_NO_ANIMATION Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated) #endif @@ -149,6 +150,7 @@ public: public Q_SLOTS: void start(); void stop(); + void setRunning(bool running); Q_SIGNALS: void started( @@ -161,6 +163,8 @@ Q_SIGNALS: QPrivateSignal #endif ); + void runningChanged(bool running); + protected: void onEntry(QEvent *event); -- cgit v1.2.3