summaryrefslogtreecommitdiffstats
path: root/library/scriptadapter.h
diff options
context:
space:
mode:
Diffstat (limited to 'library/scriptadapter.h')
-rw-r--r--library/scriptadapter.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/library/scriptadapter.h b/library/scriptadapter.h
new file mode 100644
index 0000000..d17525e
--- /dev/null
+++ b/library/scriptadapter.h
@@ -0,0 +1,90 @@
+#ifndef SCRIPTADAPTER_H
+#define SCRIPTADAPTER_H
+
+#include "remotecontrolwidget_global.h"
+#include "fibers/fiber.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QTimer>
+#include <QtCore/QStringList>
+#include <QtCore/QHash>
+#include <QtScript/QScriptEngine>
+
+class ScriptFiber;
+class QMessageBox;
+
+class REMOTECONTROLWIDGETSHARED_EXPORT ScriptAdapter : public QObject
+{
+ Q_OBJECT
+public:
+ explicit ScriptAdapter(QObject *parent = 0);
+ virtual ~ScriptAdapter();
+
+ Q_INVOKABLE void yield(int ms);
+ Q_INVOKABLE void messageBox(const QString &text);
+
+ void runAutostartScripts();
+ ScriptFiber *script(int index);
+
+ void addScriptInterface(const QString &name, QObject *interface);
+
+public slots:
+ ScriptFiber *run(const QString &filePath);
+
+signals:
+ void scriptStart(ScriptFiber *script) const;
+ void scriptStop(int index) const;
+
+private slots:
+ void continueScripts();
+
+private:
+ QHash<QString, QObject *> mScriptInterfaces;
+ QList<ScriptFiber *> mActiveScripts;
+ QTimer *mScriptRunner;
+
+ QMessageBox *mMessageBox;
+
+ friend class ScriptFiber;
+};
+
+class ScriptFiber : public QObject, public Fiber
+{
+ Q_OBJECT
+public:
+ ScriptFiber(const QString &name, const QString &scriptCode,
+ ScriptAdapter *adapter);
+
+ QString name() const
+ { return mName; }
+
+ void requestTerminate();
+ bool isTerminating() const
+ { return mTerminate; }
+
+ void togglePause();
+ bool isPaused() const
+ { return mPaused; }
+
+ void beginBlocking();
+ void endBlocking();
+
+public slots:
+ void suspend();
+
+protected:
+ virtual void run();
+
+private:
+ QString mName;
+ QString mScriptCode;
+ ScriptAdapter *mAdapter;
+
+ bool mPaused;
+ bool mTerminate;
+
+ QScriptEngine mEngine;
+ QTimer mStopTimer;
+};
+
+#endif // SCRIPTADAPTER_H