mirror of
https://gitlab.com/Syping/luaengineapp.git
synced 2024-11-04 21:16:56 +01:00
move connect to LuaEngine
This commit is contained in:
parent
6cd4614371
commit
d277e0e8c5
4 changed files with 38 additions and 45 deletions
|
@ -18,12 +18,15 @@
|
|||
#define LUA_LIB
|
||||
#include "LuaEngine.h"
|
||||
#include <QTextStream>
|
||||
#include <QMetaMethod>
|
||||
|
||||
LuaEngine::LuaEngine(QObject *parent, bool loadBaseLibraries) : QObject(parent)
|
||||
{
|
||||
L = luaL_newstate();
|
||||
if (loadBaseLibraries)
|
||||
luaL_openlibs(L);
|
||||
pushPointer("__LuaEngine", (void*)this);
|
||||
pushFunction("connect", luaTriggerConnect_p);
|
||||
pushFunction("luaEngineVersion", luaEngineVersion_p);
|
||||
}
|
||||
|
||||
|
@ -281,3 +284,34 @@ int LuaEngine::getArgumentCount(lua_State *L_p)
|
|||
{
|
||||
return lua_gettop(L_p);
|
||||
}
|
||||
|
||||
int LuaEngine::luaTriggerConnect_p(lua_State *L_p)
|
||||
{
|
||||
if (getArgumentCount(L_p) >= 3) {
|
||||
QObject *object = (QObject*)getPointer(L_p, 1);
|
||||
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");
|
||||
int slotIndex = engine->metaObject()->indexOfSlot("luaTriggerSlot_p()");
|
||||
if (slotIndex != -1) {
|
||||
QMetaMethod signal = object->metaObject()->method(signalIndex);
|
||||
QMetaMethod slot = engine->metaObject()->method(slotIndex);
|
||||
QString funcStorage;
|
||||
QTextStream(&funcStorage) << "__ConnectFunc_" << object << "_" << signal.name();
|
||||
pushVariant(L_p, funcStorage.toUtf8().data(), getVariant(L_p, 3).toString());
|
||||
QObject::connect(object, signal, engine, slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void LuaEngine::luaTriggerSlot_p()
|
||||
{
|
||||
QMetaMethod signal = sender()->metaObject()->method(senderSignalIndex());
|
||||
QString funcStorage;
|
||||
QTextStream(&funcStorage) << "__ConnectFunc_" << sender() << "_" << signal.name();
|
||||
QString luaConnectFunc = getVariant(funcStorage.toUtf8().data()).toString();
|
||||
executeLuaFunction(luaConnectFunc.toUtf8().data(), QVariant::fromValue((void*)sender()));
|
||||
}
|
||||
|
|
|
@ -72,9 +72,13 @@ public:
|
|||
static QVariantList getArguments(lua_State *L_p);
|
||||
static int getArgumentCount(lua_State *L_p);
|
||||
|
||||
private slots:
|
||||
void luaTriggerSlot_p();
|
||||
|
||||
private:
|
||||
lua_State *L;
|
||||
static int luaEngineVersion_p(lua_State *L_p);
|
||||
static int luaTriggerConnect_p(lua_State *L_p);
|
||||
};
|
||||
|
||||
#endif // LUAENGINE_H
|
||||
|
|
|
@ -34,12 +34,6 @@ LuaEngineGui::LuaEngineGui(QObject *parent, bool loadBaseLibraries) : LuaEngine(
|
|||
{
|
||||
L = luaState();
|
||||
pushClass(L);
|
||||
pushEngine(L);
|
||||
}
|
||||
|
||||
void LuaEngineGui::pushEngine(lua_State *L_p)
|
||||
{
|
||||
pushPointer(L_p, "__LuaEngineGui", (void*)this);
|
||||
}
|
||||
|
||||
void LuaEngineGui::pushClass(lua_State *L_p)
|
||||
|
@ -81,9 +75,6 @@ void LuaEngineGui::pushClass(lua_State *L_p)
|
|||
pushFunction(L_p, "createMenu", createMenu);
|
||||
pushFunction(L_p, "createMenuBar", createMenuBar);
|
||||
pushFunction(L_p, "createMenuEntry", createMenuEntry);
|
||||
|
||||
// Connect
|
||||
pushFunction(L_p, "connect", connect_p);
|
||||
}
|
||||
|
||||
void LuaEngineGui::pushClass(LuaEngine *luaEngine)
|
||||
|
@ -356,37 +347,6 @@ int LuaEngineGui::setWidgetLayout(lua_State *L_p)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int LuaEngineGui::connect_p(lua_State *L_p)
|
||||
{
|
||||
if (getArgumentCount(L_p) >= 3) {
|
||||
QObject *object = (QObject*)getPointer(L_p, 1);
|
||||
QString signalString = getVariant(L_p, 2).toString();
|
||||
int signalIndex = object->metaObject()->indexOfSignal(signalString.toUtf8().data());
|
||||
if (signalIndex != -1) {
|
||||
LuaEngineGui *engine = (LuaEngineGui*)getPointer(L_p, "__LuaEngineGui");
|
||||
int slotIndex = engine->metaObject()->indexOfSlot("luaTriggerSlot()");
|
||||
if (slotIndex != -1) {
|
||||
QMetaMethod signal = object->metaObject()->method(signalIndex);
|
||||
QMetaMethod slot = engine->metaObject()->method(slotIndex);
|
||||
QString funcStorage;
|
||||
QTextStream(&funcStorage) << "__ConnectFunc_" << object << "_" << signal.name();
|
||||
pushVariant(L_p, funcStorage.toUtf8().data(), getVariant(L_p, 3).toString());
|
||||
QObject::connect(object, signal, engine, slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void LuaEngineGui::luaTriggerSlot()
|
||||
{
|
||||
QMetaMethod signal = sender()->metaObject()->method(senderSignalIndex());
|
||||
QString funcStorage;
|
||||
QTextStream(&funcStorage) << "__ConnectFunc_" << sender() << "_" << signal.name();
|
||||
QString luaConnectFunc = getVariant(funcStorage.toUtf8().data()).toString();
|
||||
executeLuaFunction(luaConnectFunc.toUtf8().data(), QVariant::fromValue((void*)sender()));
|
||||
}
|
||||
|
||||
QString LuaEngineGui::nameForPointer(void *pointer)
|
||||
{
|
||||
QString nameStorage;
|
||||
|
|
|
@ -28,7 +28,6 @@ class LUAENGINEGUISHARED_EXPORT LuaEngineGui : public LuaEngine
|
|||
Q_OBJECT
|
||||
public:
|
||||
LuaEngineGui(QObject *parent = nullptr, bool loadBaseLibraries = true);
|
||||
void pushEngine(lua_State *L_p);
|
||||
static void pushClass(lua_State *L_p);
|
||||
static void pushClass(LuaEngine *luaEngine);
|
||||
static int showMessageBox(lua_State *L_p);
|
||||
|
@ -43,10 +42,6 @@ public:
|
|||
static int createMenuBar(lua_State *L_p);
|
||||
static int createMenuEntry(lua_State *L_p);
|
||||
static int setWidgetLayout(lua_State *L_p);
|
||||
static int connect_p(lua_State *L_p);
|
||||
|
||||
public slots:
|
||||
void luaTriggerSlot();
|
||||
|
||||
private:
|
||||
lua_State *L;
|
||||
|
|
Loading…
Reference in a new issue