summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Lantsev <aunsane@gmail.com>2015-06-10 21:00:17 +0000
committerAlexander Lantsev <aunsane@gmail.com>2015-06-10 21:00:17 +0000
commit031b81f8764de5e566490248dbc4bb466c0b03e9 (patch)
treeb68acf9b7ff269aae2f81ad46ed6c6975414d114
parent02dc801c6e29d5dad184baff51be70a1c8b2b897 (diff)
MirLua:
- added OnModulesLoaded handler - added OnPreShutdown handler - renamed existing modules - changed modules loading - chaged examples git-svn-id: http://svn.miranda-ng.org/main/trunk@14107 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--plugins/MirLua/docs/examples/icons.lua12
-rw-r--r--plugins/MirLua/docs/examples/menus.lua14
-rw-r--r--plugins/MirLua/src/m_core.cpp (renamed from plugins/MirLua/src/mlua_core.cpp)48
-rw-r--r--plugins/MirLua/src/m_genmenu.cpp (renamed from plugins/MirLua/src/mlua_menus.cpp)13
-rw-r--r--plugins/MirLua/src/m_icolib.cpp (renamed from plugins/MirLua/src/mlua_icons.cpp)13
-rw-r--r--plugins/MirLua/src/mlua.cpp8
-rw-r--r--plugins/MirLua/src/mlua.h2
-rw-r--r--plugins/MirLua/src/stdafx.h8
8 files changed, 76 insertions, 42 deletions
diff --git a/plugins/MirLua/docs/examples/icons.lua b/plugins/MirLua/docs/examples/icons.lua
index 7b9f6dca6c..4d54cb8e8b 100644
--- a/plugins/MirLua/docs/examples/icons.lua
+++ b/plugins/MirLua/docs/examples/icons.lua
@@ -1,22 +1,22 @@
---- include m_icons module
-require('m_icons')
+--- include m_icolib module
+local icolib = require('m_icolib')
--- Add icon to icoLib
-- @param name The name of icon
-- @param description The description of icon
-- @param section The section in witch icon will be stored (default 'MirLua')
-- @return handle of icon
-M.Icons.AddIcon('testIcon', 'Lua icon', 'MirLua')
+icolib.AddIcon('testIcon', 'Lua icon', 'MirLua')
--- Create the icon which will be deleted below
-M.Icons.AddIcon('testRemoved', 'Lua temporary icon')
+icolib.AddIcon('testRemoved', 'Lua temporary icon')
--- Get icon by name
-- @param name The name of icon
-- @return handle of icon
-local hIcon = M.Icons.GetIcon('testRemoved')
+local hIcon = icolib.GetIcon('testRemoved')
--- Remove icon from iconLib
-- @param handle The handle of icon (or name)
-- @return 0 on success
-M.Icons.RemoveIcon('testRemoved')
+icolib.RemoveIcon('testRemoved')
diff --git a/plugins/MirLua/docs/examples/menus.lua b/plugins/MirLua/docs/examples/menus.lua
index b2a3f222d2..90ace6f6d9 100644
--- a/plugins/MirLua/docs/examples/menus.lua
+++ b/plugins/MirLua/docs/examples/menus.lua
@@ -1,9 +1,9 @@
--- include m_menus module
-require('m_menus')
-require('m_icons')
+local genmenu = require('m_genmenu')
+local icolib = require('m_icolib')
--- Add icon for menu items
-local hIcon = M.Icons.AddIcon('testMenuIcon', 'Lua icon for menus')
+local hIcon = icolib.AddIcon('testMenuIcon', 'Lua icon for menus')
--- Add menu item to main menu
-- @param name The name of menu item
@@ -12,7 +12,7 @@ local hIcon = M.Icons.AddIcon('testMenuIcon', 'Lua icon for menus')
-- @param icon The handle of icon of menu item (default NULL)
-- @param service The name of service which will be called (default '')
-- @return handle of menu item
-M.Menus.AddMainMenuItem('Main menu item', 0, 0, hIcon, 'Srv/MMI')
+genmenu.AddMainMenuItem('Main menu item', 0, 0, hIcon, 'Srv/MMI')
--- Add menu item to contact menu
-- @param name The name of menu item
@@ -21,12 +21,12 @@ M.Menus.AddMainMenuItem('Main menu item', 0, 0, hIcon, 'Srv/MMI')
-- @param icon The handle of icon of menu item (default NULL)
-- @param service The name of service which will be called (default '')
-- @return handle of menu item
-M.Menus.AddContactMenuItem('Contact menu item', 0, 0, hIcon, 'Srv/CMI')
+genmenu.AddContactMenuItem('Contact menu item', 0, 0, hIcon, 'Srv/CMI')
--- Create the contact menu item which will be deleted below
-local hMenuItem = M.Menus.AddContactMenuItem('testRemove', 0, 0, 0, 'Srv/TestRemove')
+local hMenuItem = genmenu.AddContactMenuItem('testRemove', 0, 0, 0, 'Srv/TestRemove')
--- Remove menu item from parent menu
-- @param handle The handle of menu item
-- @return 0 on success
-M.Menus.RemoveMenuItem(hMenuItem)
+genmenu.RemoveMenuItem(hMenuItem)
diff --git a/plugins/MirLua/src/mlua_core.cpp b/plugins/MirLua/src/m_core.cpp
index 7e26e8b354..21cd25ce80 100644
--- a/plugins/MirLua/src/mlua_core.cpp
+++ b/plugins/MirLua/src/m_core.cpp
@@ -55,6 +55,12 @@ static int lua_HookEvent(lua_State *L)
{
const char *name = luaL_checkstring(L, 1);
+ if (!lua_isfunction(L, 2))
+ {
+ lua_pushlightuserdata(L, NULL);
+ return 1;
+ }
+
lua_pushvalue(L, 2);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
@@ -74,6 +80,40 @@ static int lua_UnhookEvent(lua_State *L)
return 1;
}
+static int lua_OnModulesLoaded(lua_State *L)
+{
+ if (!lua_isfunction(L, 1))
+ {
+ lua_pushlightuserdata(L, NULL);
+ return 1;
+ }
+
+ lua_pushvalue(L, 1);
+ int ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ HANDLE res = ::HookEventObjParam(ME_SYSTEM_MODULESLOADED, HookEventObjParam, L, ref);
+ lua_pushlightuserdata(L, res);
+
+ return 1;
+}
+
+static int lua_OnPreShutdown(lua_State *L)
+{
+ if (!lua_isfunction(L, 1))
+ {
+ lua_pushlightuserdata(L, NULL);
+ return 1;
+ }
+
+ lua_pushvalue(L, 1);
+ int ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ HANDLE res = ::HookEventObjParam(ME_SYSTEM_PRESHUTDOWN, HookEventObjParam, L, ref);
+ lua_pushlightuserdata(L, res);
+
+ return 1;
+}
+
static INT_PTR ServiceFunctionObjParam(void *obj, WPARAM wParam, LPARAM lParam, LPARAM param)
{
lua_State *L = (lua_State*)obj;
@@ -97,6 +137,12 @@ static int lua_CreateServiceFunction(lua_State *L)
{
const char *name = luaL_checkstring(L, 1);
+ if (!lua_isfunction(L, 2))
+ {
+ lua_pushlightuserdata(L, NULL);
+ return 1;
+ }
+
lua_pushvalue(L, 2);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
@@ -148,6 +194,8 @@ luaL_Reg CMLua::coreLib[] =
{ "HookEvent", lua_HookEvent },
{ "UnhookEvent", lua_UnhookEvent },
+ { "OnModulesLoaded", lua_OnModulesLoaded },
+ { "OnPreShutdown", lua_OnPreShutdown },
{ "CreateServiceFunction", lua_CreateServiceFunction },
{ "DestroyServiceFunction", lua_DestroyServiceFunction },
diff --git a/plugins/MirLua/src/mlua_menus.cpp b/plugins/MirLua/src/m_genmenu.cpp
index e59bc33a0f..5a185f64bd 100644
--- a/plugins/MirLua/src/mlua_menus.cpp
+++ b/plugins/MirLua/src/m_genmenu.cpp
@@ -40,7 +40,7 @@ static int lua_RemoveMenuItem(lua_State *L)
return 1;
}
-static luaL_Reg menusLib[] =
+static luaL_Reg genmenuApi[] =
{
{ "AddMainMenuItem", lua_AddMainMenuItem },
{ "AddContactMenuItem", lua_AddContactMenuItem },
@@ -49,16 +49,9 @@ static luaL_Reg menusLib[] =
{ NULL, NULL }
};
-int luaopen_m_menus(lua_State *L)
+LUAMOD_API int luaopen_m_genmenu(lua_State *L)
{
- lua_getglobal(L, "M");
- luaL_checktype(L, -1, LUA_TTABLE);
-
- lua_newtable(L);
- luaL_setfuncs(L, menusLib, 0);
- lua_setfield(L, -2, "Menus");
-
- lua_pop(L, 1);
+ luaL_newlib(L, genmenuApi);
return 1;
}
diff --git a/plugins/MirLua/src/mlua_icons.cpp b/plugins/MirLua/src/m_icolib.cpp
index 5c53694f15..cc8808aa0e 100644
--- a/plugins/MirLua/src/mlua_icons.cpp
+++ b/plugins/MirLua/src/m_icolib.cpp
@@ -53,7 +53,7 @@ static int lua_RemoveIcon(lua_State *L)
return 1;
}
-static luaL_Reg iconsLib[] =
+static luaL_Reg icolibApi[] =
{
{ "AddIcon", lua_AddIcon },
{ "GetIcon", lua_GetIcon },
@@ -62,16 +62,9 @@ static luaL_Reg iconsLib[] =
{ NULL, NULL }
};
-int luaopen_m_icons(lua_State *L)
+LUAMOD_API int luaopen_m_icolib(lua_State *L)
{
- lua_getglobal(L, "M");
- luaL_checktype(L, -1, LUA_TTABLE);
-
- lua_newtable(L);
- luaL_setfuncs(L, iconsLib, 0);
- lua_setfield(L, -2, "Icons");
-
- lua_pop(L, 1);
+ luaL_newlib(L, icolibApi);
return 1;
}
diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp
index b6d3895940..c600ad058e 100644
--- a/plugins/MirLua/src/mlua.cpp
+++ b/plugins/MirLua/src/mlua.cpp
@@ -13,10 +13,10 @@ CMLua::CMLua()
lua_pop(L, 1);
luaL_newlib(L, coreLib);
- lua_setglobal(L, "M");
+ lua_setglobal(L, "m");
- Preload(M_ICONSLIBNAME, luaopen_m_icons);
- Preload(M_MENUSLIBNAME, luaopen_m_menus);
+ Preload(MLUA_ICOLIB, luaopen_m_icolib);
+ Preload(MLUA_GENMENU, luaopen_m_genmenu);
}
CMLua::~CMLua()
@@ -37,7 +37,7 @@ void CMLua::AddPath(const char *path)
void CMLua::Load(const char *path)
{
- if (luaL_dofile(L, path));
+ if (luaL_dofile(L, path))
printf("%s\n", lua_tostring(L, -1));
}
diff --git a/plugins/MirLua/src/mlua.h b/plugins/MirLua/src/mlua.h
index 54f6c4d987..8abc839bd0 100644
--- a/plugins/MirLua/src/mlua.h
+++ b/plugins/MirLua/src/mlua.h
@@ -5,7 +5,7 @@ class CMLua
{
private:
lua_State *L;
- static luaL_Reg coreLib[10];
+ static luaL_Reg coreLib[12];
void Preload(const char *name, lua_CFunction func);
diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h
index f2e484e579..6d206f7644 100644
--- a/plugins/MirLua/src/stdafx.h
+++ b/plugins/MirLua/src/stdafx.h
@@ -38,10 +38,10 @@ extern HINSTANCE g_hInstance;
#define CUSTOM_SCRIPTS_PATHT MIRANDA_USERDATA "\\Scripts"
#endif
-#define M_ICONSLIBNAME "m_icons"
-int luaopen_m_icons(lua_State *L);
+#define MLUA_ICOLIB "m_icolib"
+LUAMOD_API int (luaopen_m_icolib)(lua_State *L);
-#define M_MENUSLIBNAME "m_menus"
-int luaopen_m_menus(lua_State *L);
+#define MLUA_GENMENU "m_genmenu"
+LUAMOD_API int (luaopen_m_genmenu)(lua_State *L);
#endif //_COMMON_H_