summaryrefslogtreecommitdiffstats
path: root/qmlscxml/qmlscxml.h
blob: b44b45f22c0858610d6ce914bfcab19fd4fbd0f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef QMLSCXML_H
#define QMLSCXML_H

#include <QObject>
#include <QSet>
#include "qml.h"

class QAbstractState;
class QmlScxml : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
    Q_PROPERTY(QObject* states READ states NOTIFY statesChanged)
    Q_PROPERTY(QObject* events READ events NOTIFY eventsChanged)
    Q_PROPERTY(QObject* data READ data NOTIFY dataChanged)
    Q_PROPERTY(QObject* current READ current NOTIFY currentChanged)
    Q_PROPERTY(bool running READ isRunning WRITE setRunning NOTIFY runningChanged)

public:
    QmlScxml(QObject* o = NULL);
    virtual ~QmlScxml();
    QObject* states() const;
    QObject* events() const;
    QObject* data() const;
    QObject* current() const;
    QUrl source() const;
    void setSource(const QUrl &);
    bool isRunning() const;
    void setRunning(bool);

public slots:
    void raise(const QString &);
    void stop();
    void start();

signals:
    void sourceChanged(const QUrl &);
    void statesChanged(QObject*);
    void eventsChanged(QObject*);
    void dataChanged(QObject*);
    void currentChanged(QObject*);
    void trigger(const QString & e);
    void runningChanged();
    void finished();
private slots:
    void onDataChanged(const QString &, const QVariant &);
    void onDataChanged(const QString &);
    void checkConfig();
private:
    class QmlPropertyMap* m_states;
    class QmlPropertyMap* m_events;
    class QmlPropertyMap* m_data;
    class QmlPropertyMap* m_cur;
    QMap<QAbstractState*,QString> m_idForState;
    QUrl m_source;
    QSet<QAbstractState*> m_oldConfig;
    class QScxml* scxml;
};

QML_DECLARE_TYPE(QmlScxml);

#endif // QMLSCXML_H