blob: 3e70b69a7acc72525048a8f3d8ee3a69deb1ae1f (
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
|
#pragma once
#include <QFileSystemWatcher>
#include <QJSEngine>
#include <QJSValue>
#include <QMessageBox>
#include "controllers/legacycontrollermapping.h"
#include "controllers/scripting/controllerscriptenginebase.h"
/// ControllerScriptEngineLegacy loads and executes controller scripts for the legacy
/// JS/XML hybrid controller mapping system.
class ControllerScriptEngineLegacy : public ControllerScriptEngineBase {
Q_OBJECT
public:
explicit ControllerScriptEngineLegacy(
Controller* controller, const RuntimeLoggingCategory& logger);
~ControllerScriptEngineLegacy() override;
bool initialize() override;
bool handleIncomingData(const QByteArray& data);
/// Wrap a string of JS code in an anonymous function. This allows any JS
/// string that evaluates to a function to be used in MIDI mapping XML files
/// and ensures the function is executed with the correct 'this' object.
QJSValue wrapFunctionCode(const QString& codeSnippet, int numberOfArgs);
public slots:
void setScriptFiles(const QList<LegacyControllerMapping::ScriptFileInfo>& scripts);
private:
bool evaluateScriptFile(const QFileInfo& scriptFile);
void shutdown() override;
QJSValue wrapArrayBufferCallback(const QJSValue& callback);
bool callFunctionOnObjects(const QList<QString>& scriptFunctionPrefixes,
const QString&,
const QJSValueList& args = QJSValueList(),
bool bFatalError = false);
QJSValue m_makeArrayBufferWrapperFunction;
QList<QString> m_scriptFunctionPrefixes;
QList<QJSValue> m_incomingDataFunctions;
QHash<QString, QJSValue> m_scriptWrappedFunctionCache;
QList<LegacyControllerMapping::ScriptFileInfo> m_scriptFiles;
QFileSystemWatcher m_fileWatcher;
// There is lots of tight coupling between ControllerScriptEngineLegacy
// and ControllerScriptInterface. This is probably not worth improving in legacy code.
friend class ControllerScriptInterfaceLegacy;
std::shared_ptr<QJSEngine> jsEngine() const {
return m_pJSEngine;
}
friend class ControllerScriptEngineLegacyTest;
};
|