src/corelib/statemachine/qstatemachine.h
changeset 0 1918ee327afb
child 3 41300fa6a67c
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtCore module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #ifndef QSTATEMACHINE_H
       
    43 #define QSTATEMACHINE_H
       
    44 
       
    45 #include <QtCore/qstate.h>
       
    46 
       
    47 #include <QtCore/qcoreevent.h>
       
    48 #include <QtCore/qlist.h>
       
    49 #include <QtCore/qobject.h>
       
    50 #include <QtCore/qset.h>
       
    51 #include <QtCore/qvariant.h>
       
    52 
       
    53 QT_BEGIN_HEADER
       
    54 
       
    55 QT_BEGIN_NAMESPACE
       
    56 
       
    57 QT_MODULE(Core)
       
    58 
       
    59 #ifndef QT_NO_STATEMACHINE
       
    60 
       
    61 class QStateMachinePrivate;
       
    62 class QAbstractAnimation;
       
    63 class Q_CORE_EXPORT QStateMachine : public QState
       
    64 {
       
    65     Q_OBJECT
       
    66     Q_PROPERTY(QString errorString READ errorString)
       
    67     Q_PROPERTY(RestorePolicy globalRestorePolicy READ globalRestorePolicy WRITE setGlobalRestorePolicy)
       
    68     Q_ENUMS(RestorePolicy)
       
    69 #ifndef QT_NO_ANIMATION
       
    70     Q_PROPERTY(bool animationsEnabled READ animationsEnabled WRITE setAnimationsEnabled)
       
    71 #endif
       
    72 public:
       
    73     class SignalEvent : public QEvent
       
    74     {
       
    75     public:
       
    76         SignalEvent(QObject *sender, int signalIndex,
       
    77                      const QList<QVariant> &arguments);
       
    78         ~SignalEvent();
       
    79 
       
    80         inline QObject *sender() const { return m_sender; }
       
    81         inline int signalIndex() const { return m_signalIndex; }
       
    82         inline QList<QVariant> arguments() const { return m_arguments; }
       
    83 
       
    84     private:
       
    85         QObject *m_sender;
       
    86         int m_signalIndex;
       
    87         QList<QVariant> m_arguments;
       
    88 
       
    89         friend class QSignalTransitionPrivate;
       
    90     };
       
    91 
       
    92     class WrappedEvent : public QEvent
       
    93     {
       
    94     public:
       
    95         WrappedEvent(QObject *object, QEvent *event);
       
    96         ~WrappedEvent();
       
    97 
       
    98         inline QObject *object() const { return m_object; }
       
    99         inline QEvent *event() const { return m_event; }
       
   100 
       
   101     private:
       
   102         QObject *m_object;
       
   103         QEvent *m_event;
       
   104     };
       
   105 
       
   106     enum EventPriority {
       
   107         NormalPriority,
       
   108         HighPriority
       
   109     };
       
   110 
       
   111     enum RestorePolicy {
       
   112         DoNotRestoreProperties,
       
   113         RestoreProperties
       
   114     };
       
   115 
       
   116     enum Error {
       
   117         NoError, 
       
   118         NoInitialStateError,
       
   119         NoDefaultStateInHistoryStateError,
       
   120         NoCommonAncestorForTransitionError
       
   121     };
       
   122 
       
   123     QStateMachine(QObject *parent = 0);
       
   124     ~QStateMachine();
       
   125 
       
   126     void addState(QAbstractState *state);
       
   127     void removeState(QAbstractState *state);
       
   128 
       
   129     Error error() const;
       
   130     QString errorString() const;
       
   131     void clearError();
       
   132 
       
   133     bool isRunning() const;
       
   134 
       
   135 #ifndef QT_NO_ANIMATION
       
   136     bool animationsEnabled() const;
       
   137     void setAnimationsEnabled(bool enabled);
       
   138 
       
   139     void addDefaultAnimation(QAbstractAnimation *animation);
       
   140     QList<QAbstractAnimation *> defaultAnimations() const;
       
   141     void removeDefaultAnimation(QAbstractAnimation *animation);
       
   142 #endif // QT_NO_ANIMATION
       
   143 
       
   144     QStateMachine::RestorePolicy globalRestorePolicy() const;
       
   145     void setGlobalRestorePolicy(QStateMachine::RestorePolicy restorePolicy);
       
   146 
       
   147     void postEvent(QEvent *event, EventPriority priority = NormalPriority);
       
   148     int postDelayedEvent(QEvent *event, int delay);
       
   149     bool cancelDelayedEvent(int id);
       
   150 
       
   151     QSet<QAbstractState*> configuration() const;
       
   152 
       
   153 #ifndef QT_NO_STATEMACHINE_EVENTFILTER
       
   154     bool eventFilter(QObject *watched, QEvent *event);
       
   155 #endif
       
   156 
       
   157 public Q_SLOTS:
       
   158     void start();
       
   159     void stop();
       
   160 
       
   161 Q_SIGNALS:
       
   162     void started();
       
   163     void stopped();
       
   164 
       
   165 protected:
       
   166     void onEntry(QEvent *event);
       
   167     void onExit(QEvent *event);
       
   168 
       
   169     virtual void beginSelectTransitions(QEvent *event);
       
   170     virtual void endSelectTransitions(QEvent *event);
       
   171 
       
   172     virtual void beginMicrostep(QEvent *event);
       
   173     virtual void endMicrostep(QEvent *event);
       
   174 
       
   175     bool event(QEvent *e);
       
   176 
       
   177 protected:
       
   178     QStateMachine(QStateMachinePrivate &dd, QObject *parent);
       
   179 
       
   180 private:
       
   181     Q_DISABLE_COPY(QStateMachine)
       
   182     Q_DECLARE_PRIVATE(QStateMachine)
       
   183     Q_PRIVATE_SLOT(d_func(), void _q_start())
       
   184     Q_PRIVATE_SLOT(d_func(), void _q_process())
       
   185 #ifndef QT_NO_ANIMATION
       
   186     Q_PRIVATE_SLOT(d_func(), void _q_animationFinished())
       
   187 #endif
       
   188 };
       
   189 
       
   190 #endif //QT_NO_STATEMACHINE
       
   191 
       
   192 QT_END_NAMESPACE
       
   193 
       
   194 QT_END_HEADER
       
   195 
       
   196 #endif