From 5dac5be47f2d9af8cbceead6511ff4c0fc40bab5 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Tue, 30 Jun 2015 15:31:44 +0000 Subject: MirLua: !api break - separated m_clist and m_genmenu modules - moved AddMainMenuItem, AddContactMenuItem, AddTrayMenuItem to m_clist - added BuildMainMenu, BuildContactMenu and BuildTrayMenu to m_clist - updated examples - version bump git-svn-id: http://svn.miranda-ng.org/main/trunk@14458 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirLua/docs/examples/core.lua | 6 +- plugins/MirLua/docs/examples/menus.lua | 21 ++--- plugins/MirLua/docs/examples/popup.lua | 6 +- plugins/MirLua/src/m_clist.cpp | 139 ++++++++++++++++++++++++++++++ plugins/MirLua/src/m_core.cpp | 3 + plugins/MirLua/src/mlua_module_loader.cpp | 1 + plugins/MirLua/src/mlua_utils.cpp | 6 ++ plugins/MirLua/src/stdafx.h | 6 +- plugins/MirLua/src/version.h | 2 +- 9 files changed, 172 insertions(+), 18 deletions(-) create mode 100644 plugins/MirLua/src/m_clist.cpp (limited to 'plugins/MirLua') diff --git a/plugins/MirLua/docs/examples/core.lua b/plugins/MirLua/docs/examples/core.lua index 064ab58fad..e18dc0577a 100644 --- a/plugins/MirLua/docs/examples/core.lua +++ b/plugins/MirLua/docs/examples/core.lua @@ -1,7 +1,7 @@ -- core module (m) is included by default --- include m_genmenu module +--- include m_clist module +local clist = require('m_clist') -- include m_icolib module -local genmenu = require('m_genmenu') local icolib = require('m_icolib') -- Add icon for menu items @@ -10,5 +10,5 @@ local hRestartIcon = icolib.AddIcon('restartIcon', 'Restart') -- Subscribe to [[Miranda/System/ModulesLoaded]] event m.OnModulesLoaded(function() -- Add menu item to main menu that allow to restart Miranda NG - genmenu.AddMainMenuItem("Restart", 0, 0, hRestartIcon, "Miranda/System/Restart") + clist.AddMainMenuItem("Restart", 0, 0, hRestartIcon, "Miranda/System/Restart") end) diff --git a/plugins/MirLua/docs/examples/menus.lua b/plugins/MirLua/docs/examples/menus.lua index 8480c2cbaf..52ec8e3173 100644 --- a/plugins/MirLua/docs/examples/menus.lua +++ b/plugins/MirLua/docs/examples/menus.lua @@ -1,3 +1,5 @@ +--- include m_clist module +local clist = require('m_clist') --- include m_genmenu module local genmenu = require('m_genmenu') --- include m_icolib module @@ -21,47 +23,46 @@ local hIcon = icolib.AddIcon('testMenuIcon', 'Lua icon for menus') menuItem.Name = "Main menu item" menuItem.Icon = hIcon menuItem.Service = "Srv/MMI" -genmenu.AddMainMenuItem(menuItem) +clist.AddMainMenuItem(menuItem) --- Add menu item to main menu menuItem.Name = "Tray menu item" menuItem.Service = "Srv/TMI" -genmenu.AddTrayMenuItem(menuItem) +clist.AddTrayMenuItem(menuItem) --- Add menu item to contact menu menuItem.Name = "Contact menu item" menuItem.Service = "Srv/CMI" -genmenu.AddContactMenuItem(menuItem) +clist.AddContactMenuItem(menuItem) --- Create the contact menu item which will be deleted below menuItem.Name = "testRemove" menuItem.Service = "Srv/TestRemove" -local hMenuItem = genmenu.AddContactMenuItem(menuItem) +local hMenuItem = clist.AddContactMenuItem(menuItem) --- Remove menu item from parent menu genmenu.RemoveMenuItem(hMenuItem) --- Add root menu item local CMIF_ROOTHANDLE = 384 -local hRoot = genmenu.AddMainMenuItem({ Name = "Main menu root", Flags = CMIF_ROOTHANDLE }) +local hRoot = clist.AddMainMenuItem({ Name = "Main menu root", Flags = CMIF_ROOTHANDLE }) --- Add child menu item menuItem.Name = "Main menu child wierd" menuItem.Flags = CMIF_ROOTHANDLE menuItem.Service = 'Srv/SMI' menuItem.Parent = hRoot -local hChild = genmenu.AddMainMenuItem(menuItem) +local hChild = clist.AddMainMenuItem(menuItem) --- Modify menu item local CMIM_NAME = tonumber("80000000", 16) genmenu.ModifyMenuItem(hChild, "Main menu child", hIcon, CMIM_NAME) - -local hDisabledMenuItem = genmenu.AddMainMenuItem({ Name = "Disabled main menu item" }) +local hDisabledMenuItem = clist.AddMainMenuItem({ Name = "Disabled main menu item" }) genmenu.EnableMenuItem(hDisabledMenuItem, false) -local hHiddenMenuItem = genmenu.AddMainMenuItem({ Name = "Hidden main menu item" }) +local hHiddenMenuItem = clist.AddMainMenuItem({ Name = "Hidden main menu item" }) genmenu.ShowMenuItem(hHiddenMenuItem, false) -local hCheckedMenuItem = genmenu.AddMainMenuItem({ Name = "Checked main menu item" }) +local hCheckedMenuItem = clist.AddMainMenuItem({ Name = "Checked main menu item" }) genmenu.CheckMenuItem(hCheckedMenuItem, true) diff --git a/plugins/MirLua/docs/examples/popup.lua b/plugins/MirLua/docs/examples/popup.lua index 395f650267..4d48ace8a3 100644 --- a/plugins/MirLua/docs/examples/popup.lua +++ b/plugins/MirLua/docs/examples/popup.lua @@ -1,7 +1,7 @@ --- include m_popup module local popup = require('m_popup') ---- include m_genmenu module -local genmenu = require('m_genmenu') +--- include m_clist module +local clist = require('m_clist') m.CreateServiceFunction('MirLua/ShowPopup', function() local popupData = @@ -15,5 +15,5 @@ m.CreateServiceFunction('MirLua/ShowPopup', function() end) m.OnModulesLoaded(function() - genmenu.AddMainMenuItem({ Name = "Show lua popup", Service = 'MirLua/ShowPopup' }) + clist.AddMainMenuItem({ Name = "Show lua popup", Service = 'MirLua/ShowPopup' }) end) diff --git a/plugins/MirLua/src/m_clist.cpp b/plugins/MirLua/src/m_clist.cpp new file mode 100644 index 0000000000..bc22237776 --- /dev/null +++ b/plugins/MirLua/src/m_clist.cpp @@ -0,0 +1,139 @@ +#include "stdafx.h" + +static void MakeMenuItem(lua_State *L, CMenuItem &mi) +{ + mi.hLangpack = hScriptsLangpack; + + lua_pushstring(L, "Flags"); + lua_gettable(L, -2); + mi.flags = lua_tointeger(L, -1); + lua_pop(L, 1); + + if (!(mi.flags & CMIF_UNICODE)) + mi.flags |= CMIF_UNICODE; + + lua_pushstring(L, "Name"); + lua_gettable(L, -2); + mi.name.t = mir_utf8decodeT((char*)luaL_checkstring(L, -1)); + lua_pop(L, 1); + + lua_pushstring(L, "Position"); + lua_gettable(L, -2); + mi.position = lua_tointeger(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "Icon"); + lua_gettable(L, -2); + mi.hIcolibItem = (HANDLE)lua_touserdata(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "Service"); + lua_gettable(L, -2); + mi.pszService = (char*)lua_tostring(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "Parent"); + lua_gettable(L, -2); + mi.root = (HGENMENU)lua_touserdata(L, -1); + lua_pop(L, 1); +} + +static int lua_AddMainMenuItem(lua_State *L) +{ + if (lua_type(L, 1) != LUA_TTABLE) + { + lua_pushlightuserdata(L, 0); + return 1; + } + + CMenuItem mi; + MakeMenuItem(L, mi); + + HGENMENU res = ::Menu_AddMainMenuItem(&mi); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_BuildMainMenu(lua_State *L) +{ + HMENU res = ::Menu_BuildMainMenu(); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_AddContactMenuItem(lua_State *L) +{ + if (lua_type(L, 1) != LUA_TTABLE) + { + lua_pushlightuserdata(L, 0); + return 1; + } + + CMenuItem mi; + MakeMenuItem(L, mi); + + ptrA szProto(mir_utf8decode((char*)lua_tostring(L, 2), NULL)); + + HGENMENU res = ::Menu_AddContactMenuItem(&mi, szProto); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_BuildContactMenu(lua_State *L) +{ + MCONTACT hContact = lua_tointeger(L, 1); + + HMENU res = ::Menu_BuildContactMenu(hContact); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_AddTrayMenuItem(lua_State *L) +{ + if (lua_type(L, 1) != LUA_TTABLE) + { + lua_pushlightuserdata(L, 0); + return 1; + } + + CMenuItem mi; + MakeMenuItem(L, mi); + + HGENMENU res = (HGENMENU)::CallService("CList/AddTrayMenuItem", 0, (LPARAM)&mi); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_BuildTrayMenu(lua_State *L) +{ + HMENU res = (HMENU)::CallService(MS_CLIST_MENUBUILDTRAY); + lua_pushlightuserdata(L, res); + + return 1; +} + +static luaL_Reg clistApi[] = +{ + { "AddMainMenuItem", lua_AddMainMenuItem }, + { "BuildMainMenu", lua_BuildMainMenu }, + + { "AddContactMenuItem", lua_AddContactMenuItem }, + { "BuildContactMenu", lua_BuildContactMenu }, + + { "AddTrayMenuItem", lua_AddTrayMenuItem }, + { "BuildTrayMenu", lua_BuildTrayMenu }, + + { NULL, NULL } +}; + +LUAMOD_API int luaopen_m_clist(lua_State *L) +{ + luaL_newlib(L, clistApi); + + return 1; +} diff --git a/plugins/MirLua/src/m_core.cpp b/plugins/MirLua/src/m_core.cpp index 90dffe5f7c..b022c013d6 100644 --- a/plugins/MirLua/src/m_core.cpp +++ b/plugins/MirLua/src/m_core.cpp @@ -306,6 +306,7 @@ luaL_Reg coreApi[] = { "ReplaceVariables", lua_ReplaceVariables }, { "NULL", NULL }, + { "INVALID_HANDLE_VALUE", NULL }, { NULL, NULL } }; @@ -315,6 +316,8 @@ LUAMOD_API int luaopen_m(lua_State *L) luaL_newlib(L, coreApi); lua_pushlightuserdata(L, NULL); lua_setfield(L, -2, "NULL"); + lua_pushlightuserdata(L, INVALID_HANDLE_VALUE); + lua_setfield(L, -2, "INVALID_HANDLE_VALUE"); lua_setglobal(L, "m"); return 1; diff --git a/plugins/MirLua/src/mlua_module_loader.cpp b/plugins/MirLua/src/mlua_module_loader.cpp index f25b69abde..5be361fce6 100644 --- a/plugins/MirLua/src/mlua_module_loader.cpp +++ b/plugins/MirLua/src/mlua_module_loader.cpp @@ -17,6 +17,7 @@ void CLuaModuleLoader::LoadModules() // load core module luaopen_m(L); // regirter delay loading of miranda modules + PreloadModule(MLUA_CLIST, luaopen_m_clist); PreloadModule(MLUA_DATABASE, luaopen_m_database); PreloadModule(MLUA_ICOLIB, luaopen_m_icolib); PreloadModule(MLUA_GENMENU, luaopen_m_genmenu); diff --git a/plugins/MirLua/src/mlua_utils.cpp b/plugins/MirLua/src/mlua_utils.cpp index aab6823b85..371b23d95b 100644 --- a/plugins/MirLua/src/mlua_utils.cpp +++ b/plugins/MirLua/src/mlua_utils.cpp @@ -1,5 +1,11 @@ #include "stdafx.h" +bool luaM_checkboolean(lua_State *L, int idx) +{ + luaL_checktype(L, 2, LUA_TBOOLEAN); + return lua_toboolean(L, idx); +} + WPARAM luaM_towparam(lua_State *L, int idx) { WPARAM wParam = NULL; diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h index 592640b3e6..b540a208be 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -12,8 +12,8 @@ #include #include -#include #include +#include #include #include @@ -62,6 +62,9 @@ extern HANDLE g_hCustomFolderPath; #define MLUA_CORE "m" LUAMOD_API int (luaopen_m)(lua_State *L); +#define MLUA_CLIST "m_clist" +LUAMOD_API int (luaopen_m_clist)(lua_State *L); + #define MLUA_DATABASE "m_database" LUAMOD_API int (luaopen_m_database)(lua_State *L); @@ -83,6 +86,7 @@ LUAMOD_API int (luaopen_m_toptoolbar)(lua_State *L); #define MLUA_VARIABLES "m_variables" LUAMOD_API int (luaopen_m_variables)(lua_State *L); +bool luaM_checkboolean(lua_State *L, int idx); WPARAM luaM_towparam(lua_State *L, int idx); LPARAM luaM_tolparam(lua_State *L, int idx); diff --git a/plugins/MirLua/src/version.h b/plugins/MirLua/src/version.h index ce9b61cf05..f2af4804d5 100644 --- a/plugins/MirLua/src/version.h +++ b/plugins/MirLua/src/version.h @@ -1,6 +1,6 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 11 -#define __RELEASE_NUM 1 +#define __RELEASE_NUM 2 #define __BUILD_NUM 0 #include -- cgit v1.2.3