add LuaEngineRegistry

This commit is contained in:
Syping 2019-11-04 14:00:10 +01:00
parent eb7ad50299
commit 3598028ded
4 changed files with 86 additions and 5 deletions

View file

@ -17,6 +17,7 @@
#define LUA_LIB
#include "LuaEngine.h"
#include "LuaEngineRegistry.h"
#include <QTextStream>
#include <QMetaMethod>
@ -25,7 +26,8 @@ LuaEngine::LuaEngine(QObject *parent, bool loadBaseLibraries) : QObject(parent)
L = luaL_newstate();
if (loadBaseLibraries)
luaL_openlibs(L);
pushPointer("__LuaEngine", (void*)this);
engineRegistry->registerEngine((void*)L, (void*)this);
pushVariant("DeleteInstant", 0);
pushVariant("DeleteLater", 1);
pushFunction("delete", luaObjectDelete_p);
@ -38,6 +40,7 @@ LuaEngine::LuaEngine(QObject *parent, bool loadBaseLibraries) : QObject(parent)
LuaEngine::~LuaEngine()
{
engineRegistry->unregisterEngine(L);
lua_close(L);
}
@ -445,7 +448,7 @@ int LuaEngine::luaTriggerConnect_p(lua_State *L_p)
QString signalString = getVariant(L_p, 2).toString();
int signalIndex = object->metaObject()->indexOfSignal(signalString.toUtf8().data());
if (signalIndex != -1) {
LuaEngine *engine = (LuaEngine*)getPointer(L_p, "__LuaEngine");
LuaEngine *engine = (LuaEngine*)engineRegistry->getEngine(L_p);
int slotIndex = engine->metaObject()->indexOfSlot("luaTriggerSlot_p()");
if (slotIndex != -1) {
QMetaMethod signal = object->metaObject()->method(signalIndex);
@ -470,7 +473,7 @@ int LuaEngine::luaTriggerDisconnect_p(lua_State *L_p)
QString signalString = getVariant(L_p, 2).toString();
int signalIndex = object->metaObject()->indexOfSignal(signalString.toUtf8().data());
if (signalIndex != -1) {
LuaEngine *engine = (LuaEngine*)getPointer(L_p, "__LuaEngine");
LuaEngine *engine = (LuaEngine*)engineRegistry->getEngine(L_p);
int slotIndex = engine->metaObject()->indexOfSlot("luaTriggerSlot_p()");
if (slotIndex != -1) {
QMetaMethod signal = object->metaObject()->method(signalIndex);