#ifndef AXSCRIPTENGINE_H #define AXSCRIPTENGINE_H #include #include #include #include #include #include class BridgeApp; class BridgeForm; class BridgeEvent; class BridgeMenu; class AbstractAxMenuItem; class AxScriptManager; struct AxEvent { QJSValue handler; QTimer* timer; QString event_id; QSet agents; QSet listeners; QSet os; QJSEngine* jsEngine; }; struct AxMenuItem { AbstractAxMenuItem* menu; QSet agents; QSet listeners; QSet os; }; struct ScriptContext { QString name; QJSValue scriptObject; QList objects; QList actions; QHash events; QHash> menus; }; class AxScriptEngine : public QObject { Q_OBJECT AxScriptManager* scriptManager; std::unique_ptr jsEngine; std::unique_ptr bridgeApp; std::unique_ptr bridgeForm; std::unique_ptr bridgeEvent; std::unique_ptr bridgeMenu; bool serverMode = false; bool scriptEnabled = true; public: ScriptContext context; explicit AxScriptEngine(AxScriptManager* script_manager, const QString &name = "", QObject *parent = nullptr); ~AxScriptEngine() override; QJSEngine* engine() const; BridgeApp* app() const; BridgeForm* form() const; BridgeEvent* event() const; BridgeMenu* menu() const; AxScriptManager* manager() const; void setServerMode(bool enabled); bool isServerMode() const; void setEnabled(bool enabled); bool isEnabled() const; void registerObject(QObject* obj); void registerAction(QAction* action); void registerEvent(const QString &type, const QJSValue &handler, QTimer* timer, const QSet &list_agents, const QSet &list_os, const QSet &list_listeners, const QString &id); void removeEvent(const QString &id); QStringList listEvent(); void registerMenu(const QString &type, AbstractAxMenuItem* menu, const QSet &list_agents, const QSet &list_os, const QSet &list_listeners); bool execute(const QString &code); QList getEvents(const QString &type); QList getMenuItems(const QString &type); public Q_SLOTS: void engineError(const QString &message); }; #endif