diff options
author | Alexander Lantsev <aunsane@gmail.com> | 2015-06-10 21:00:17 +0000 |
---|---|---|
committer | Alexander Lantsev <aunsane@gmail.com> | 2015-06-10 21:00:17 +0000 |
commit | 031b81f8764de5e566490248dbc4bb466c0b03e9 (patch) | |
tree | b68acf9b7ff269aae2f81ad46ed6c6975414d114 | |
parent | 02dc801c6e29d5dad184baff51be70a1c8b2b897 (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.lua | 12 | ||||
-rw-r--r-- | plugins/MirLua/docs/examples/menus.lua | 14 | ||||
-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.cpp | 8 | ||||
-rw-r--r-- | plugins/MirLua/src/mlua.h | 2 | ||||
-rw-r--r-- | plugins/MirLua/src/stdafx.h | 8 |
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_
|