diff options
Diffstat (limited to 'src/scxml/qscxmlinvokableservice.h')
-rw-r--r-- | src/scxml/qscxmlinvokableservice.h | 94 |
1 files changed, 30 insertions, 64 deletions
diff --git a/src/scxml/qscxmlinvokableservice.h b/src/scxml/qscxmlinvokableservice.h index 36ebcd0..a3c09e8 100644 --- a/src/scxml/qscxmlinvokableservice.h +++ b/src/scxml/qscxmlinvokableservice.h @@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE class QScxmlEvent; class QScxmlStateMachine; +class QScxmlInvokableServiceFactory; class QScxmlInvokableServicePrivate; class Q_SCXML_EXPORT QScxmlInvokableService : public QObject { @@ -59,101 +60,66 @@ class Q_SCXML_EXPORT QScxmlInvokableService : public QObject public: QScxmlInvokableService(QScxmlStateMachine *parentStateMachine, - QObject *parent = nullptr); + QScxmlInvokableServiceFactory *parent); QScxmlStateMachine *parentStateMachine() const; - virtual bool start(const QScxmlExecutableContent::InvokeInfo &invokeInfo, - const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters, - const QVector<QScxmlExecutableContent::StringId> &names) = 0; + virtual bool start() = 0; virtual QString id() const = 0; virtual QString name() const = 0; virtual void postEvent(QScxmlEvent *event) = 0; - - void finalize(QScxmlExecutableContent::ContainerId finalize); - -protected: - QScxmlInvokableService(QScxmlInvokableServicePrivate &dd, QObject *parent = nullptr); }; class QScxmlInvokableServiceFactoryPrivate; -class Q_SCXML_EXPORT QScxmlInvokableServiceFactory +class Q_SCXML_EXPORT QScxmlInvokableServiceFactory : public QObject { + Q_OBJECT + Q_DECLARE_PRIVATE(QScxmlInvokableServiceFactory) + Q_PROPERTY(QScxmlExecutableContent::InvokeInfo invokeInfo READ invokeInfo CONSTANT) + Q_PROPERTY(QVector<QScxmlExecutableContent::ParameterInfo> parameters READ parameters CONSTANT) + Q_PROPERTY(QVector<QScxmlExecutableContent::StringId> names READ names CONSTANT) + public: QScxmlInvokableServiceFactory( const QScxmlExecutableContent::InvokeInfo &invokeInfo, const QVector<QScxmlExecutableContent::StringId> &names, - const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters); - virtual ~QScxmlInvokableServiceFactory(); + const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters, + QObject *parent = nullptr); virtual QScxmlInvokableService *invoke(QScxmlStateMachine *parentStateMachine) = 0; - QScxmlExecutableContent::InvokeInfo invokeInfo() const; - QVector<QScxmlExecutableContent::ParameterInfo> parameters() const; - QVector<QScxmlExecutableContent::StringId> names() const; + const QScxmlExecutableContent::InvokeInfo &invokeInfo() const; + const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters() const; + const QVector<QScxmlExecutableContent::StringId> &names() const; protected: - QScxmlInvokableServiceFactoryPrivate *d; + QScxmlInvokableServiceFactory(QScxmlInvokableServiceFactoryPrivate &dd, QObject *parent); }; -class QScxmlScxmlServicePrivate; -class Q_SCXML_EXPORT QScxmlScxmlService: public QScxmlInvokableService +class QScxmlStaticScxmlServiceFactoryPrivate; +class Q_SCXML_EXPORT QScxmlStaticScxmlServiceFactory: public QScxmlInvokableServiceFactory { Q_OBJECT - Q_DECLARE_PRIVATE(QScxmlScxmlService) - Q_PROPERTY(QScxmlStateMachine *stateMachine READ stateMachine CONSTANT) -public: - QScxmlScxmlService(QScxmlStateMachine *stateMachine, - QScxmlStateMachine *parentStateMachine, - QObject *parent = nullptr); - - bool start(const QScxmlExecutableContent::InvokeInfo &invokeInfo, - const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters, - const QVector<QScxmlExecutableContent::StringId> &names) Q_DECL_OVERRIDE; - QString id() const Q_DECL_OVERRIDE; - QString name() const Q_DECL_OVERRIDE; - void postEvent(QScxmlEvent *event) Q_DECL_OVERRIDE; - - QScxmlStateMachine *stateMachine() const; -}; - -class Q_SCXML_EXPORT QScxmlScxmlServiceFactory: public QScxmlInvokableServiceFactory -{ -public: - QScxmlScxmlServiceFactory(const QScxmlExecutableContent::InvokeInfo &invokeInfo, - const QVector<QScxmlExecutableContent::StringId> &names, - const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters); - -protected: - QScxmlScxmlService *invokeDynamic(QScxmlStateMachine *parentStateMachine, - const QString &sourceUrl); - QScxmlScxmlService *invokeStatic(QScxmlStateMachine *childStateMachine, - QScxmlStateMachine *parentStateMachine); -}; - -template<class T> -class QScxmlStaticScxmlServiceFactory: public QScxmlScxmlServiceFactory -{ + Q_DECLARE_PRIVATE(QScxmlStaticScxmlServiceFactory) public: QScxmlStaticScxmlServiceFactory( - const QScxmlExecutableContent::InvokeInfo &newInvokeInfo, - const QVector<QScxmlExecutableContent::StringId> &newNameList, - const QVector<QScxmlExecutableContent::ParameterInfo> &newParameters) - : QScxmlScxmlServiceFactory(newInvokeInfo, newNameList, newParameters) - {} - - QScxmlInvokableService *invoke(QScxmlStateMachine *parentStateMachine) Q_DECL_OVERRIDE - { - return invokeStatic(new T, parentStateMachine); - } + const QMetaObject *metaObject, + const QScxmlExecutableContent::InvokeInfo &invokeInfo, + const QVector<QScxmlExecutableContent::StringId> &nameList, + const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters, + QObject *parent = nullptr); + + QScxmlInvokableService *invoke(QScxmlStateMachine *parentStateMachine) Q_DECL_OVERRIDE; }; -class Q_SCXML_EXPORT QScxmlDynamicScxmlServiceFactory: public QScxmlScxmlServiceFactory +class Q_SCXML_EXPORT QScxmlDynamicScxmlServiceFactory: public QScxmlInvokableServiceFactory { + Q_OBJECT public: QScxmlDynamicScxmlServiceFactory( const QScxmlExecutableContent::InvokeInfo &invokeInfo, const QVector<QScxmlExecutableContent::StringId> &names, - const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters); + const QVector<QScxmlExecutableContent::ParameterInfo> ¶meters, + QObject *parent = nullptr); QScxmlInvokableService *invoke(QScxmlStateMachine *parentStateMachine) Q_DECL_OVERRIDE; }; |