From df8bc2304a8afe0319f8909f397bdf1a0670b710 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Tue, 9 Jun 2015 20:42:18 +0000 Subject: MirLua: - renamed m_clist module to m_menus - added m_icons module - added examples with comments git-svn-id: http://svn.miranda-ng.org/main/trunk@14091 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirLua/src/mlua.cpp | 3 +- plugins/MirLua/src/mlua_clist.cpp | 37 ------------------- plugins/MirLua/src/mlua_icons.cpp | 75 +++++++++++++++++++++++++++++++++++++++ plugins/MirLua/src/mlua_menus.cpp | 64 +++++++++++++++++++++++++++++++++ plugins/MirLua/src/resource.h | 4 ++- plugins/MirLua/src/stdafx.h | 10 ++++-- 6 files changed, 152 insertions(+), 41 deletions(-) delete mode 100644 plugins/MirLua/src/mlua_clist.cpp create mode 100644 plugins/MirLua/src/mlua_icons.cpp create mode 100644 plugins/MirLua/src/mlua_menus.cpp (limited to 'plugins/MirLua/src') diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp index 382591e919..fc73ee3496 100644 --- a/plugins/MirLua/src/mlua.cpp +++ b/plugins/MirLua/src/mlua.cpp @@ -7,7 +7,8 @@ CMLua::CMLua() luaopen_m(L); - Preload(LUA_CLISTLIBNAME, luaopen_m_clist); + Preload(M_ICONSLIBNAME, luaopen_m_icons); + Preload(M_MENUSLIBNAME, luaopen_m_menus); } CMLua::~CMLua() diff --git a/plugins/MirLua/src/mlua_clist.cpp b/plugins/MirLua/src/mlua_clist.cpp deleted file mode 100644 index 82a36f8241..0000000000 --- a/plugins/MirLua/src/mlua_clist.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "stdafx.h" - -static int lua_AddContactMenuItem(lua_State *L) -{ - CLISTMENUITEM mi = { sizeof(CLISTMENUITEM) }; - mi.pszName = LPGEN((char*)luaL_checkstring(L, 1)); - mi.flags = lua_tointeger(L, 2); - mi.position = lua_tointeger(L, 3); - mi.icolibItem = (HANDLE)lua_touserdata(L, 4); - mi.pszService = (char*)lua_tostring(L, 5); - - HGENMENU res = Menu_AddContactMenuItem(&mi); - lua_pushlightuserdata(L, res); - - return 1; -} - -static luaL_Reg clistLib[] = -{ - { "AddContactMenuItem", lua_AddContactMenuItem }, - - { NULL, NULL } -}; - -int luaopen_m_clist(lua_State *L) -{ - //luaL_newlib(L, CMLua::clistLib); - - lua_getglobal(L, "M"); - luaL_checktype(L, -1, LUA_TTABLE); - - lua_newtable(L); - luaL_setfuncs(L, clistLib, 0); - lua_setfield(L, -2, "CList"); - - return 1; -} diff --git a/plugins/MirLua/src/mlua_icons.cpp b/plugins/MirLua/src/mlua_icons.cpp new file mode 100644 index 0000000000..71219e4b96 --- /dev/null +++ b/plugins/MirLua/src/mlua_icons.cpp @@ -0,0 +1,75 @@ +#include "stdafx.h" + +static int lua_AddIcon(lua_State *L) +{ + TCHAR filePath[MAX_PATH]; + GetModuleFileName(g_hInstance, filePath, SIZEOF(filePath)); + + char iconName[MAX_PATH]; + mir_snprintf(iconName, SIZEOF(iconName), "%s_%s", MODULE, luaL_checkstring(L, 1)); + + SKINICONDESC si = { 0 }; + si.flags = SIDF_PATH_TCHAR; + si.pszName = iconName; + si.description.a = (char*)lua_tostring(L, 2); + si.section.a = lua_isnone(L, 3) ? "MirLua" : (char*)lua_tostring(L, 3); + si.defaultFile.t = filePath; + si.iDefaultIndex = -IDI_ICON; + + HANDLE res = ::Skin_AddIcon(&si); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_GetIcon(lua_State *L) +{ + char iconName[MAX_PATH]; + mir_snprintf(iconName, SIZEOF(iconName), "%s_%s", MODULE, luaL_checkstring(L, 1)); + + HANDLE res = ::Skin_GetIconHandle(iconName); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_RemoveIcon(lua_State *L) +{ + INT_PTR res = 0; + + if (lua_isuserdata(L, 1)) + res = ::CallService(MS_SKIN2_REMOVEICON, (WPARAM)lua_touserdata(L, 1), 0); + else if (lua_isstring(L, 1)) + { + char iconName[MAX_PATH]; + mir_snprintf(iconName, SIZEOF(iconName), "%s_%s", MODULE, lua_tostring(L, 1)); + res = ::CallService(MS_SKIN2_REMOVEICON, 0, (LPARAM)iconName); + } + else + res = 1; + + lua_pushinteger(L, res); + + return 1; +} + +static luaL_Reg iconsLib[] = +{ + { "AddIcon", lua_AddIcon }, + { "GetIcon", lua_GetIcon }, + { "RemoveIcon", lua_RemoveIcon }, + + { NULL, NULL } +}; + +int luaopen_m_icons(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"); + + return 1; +} diff --git a/plugins/MirLua/src/mlua_menus.cpp b/plugins/MirLua/src/mlua_menus.cpp new file mode 100644 index 0000000000..d3078fc5b3 --- /dev/null +++ b/plugins/MirLua/src/mlua_menus.cpp @@ -0,0 +1,64 @@ +#include "stdafx.h" + +static int lua_AddMainMenuItem(lua_State *L) +{ + CLISTMENUITEM mi = { sizeof(mi) }; + mi.pszName = LPGEN((char*)luaL_checkstring(L, 1)); + mi.flags = lua_tointeger(L, 2); + mi.position = lua_tointeger(L, 3); + mi.icolibItem = (HANDLE)lua_touserdata(L, 4); + mi.pszService = (char*)lua_tostring(L, 5); + + HGENMENU res = ::Menu_AddMainMenuItem(&mi); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_AddContactMenuItem(lua_State *L) +{ + CLISTMENUITEM mi = { sizeof(mi) }; + mi.pszName = LPGEN((char*)luaL_checkstring(L, 1)); + mi.flags = lua_tointeger(L, 2); + mi.position = lua_tointeger(L, 3); + mi.icolibItem = (HANDLE)lua_touserdata(L, 4); + mi.pszService = (char*)lua_tostring(L, 5); + + HGENMENU res = ::Menu_AddContactMenuItem(&mi); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_RemoveMenuItem(lua_State *L) +{ + HGENMENU hMenuItem = (HGENMENU)lua_touserdata(L, 1); + + INT_PTR res = ::CallService(MO_REMOVEMENUITEM, (WPARAM)hMenuItem, 0); + lua_pushinteger(L, res); + + return 1; +} + +static luaL_Reg menusLib[] = +{ + { "AddMainMenuItem", lua_AddMainMenuItem }, + { "AddContactMenuItem", lua_AddContactMenuItem }, + { "RemoveMenuItem", lua_RemoveMenuItem }, + + { NULL, NULL } +}; + +int luaopen_m_menus(lua_State *L) +{ + //luaL_newlib(L, CMLua::clistLib); + + lua_getglobal(L, "M"); + luaL_checktype(L, -1, LUA_TTABLE); + + lua_newtable(L); + luaL_setfuncs(L, menusLib, 0); + lua_setfield(L, -2, "Menus"); + + return 1; +} diff --git a/plugins/MirLua/src/resource.h b/plugins/MirLua/src/resource.h index 069755a7c8..6a43423102 100644 --- a/plugins/MirLua/src/resource.h +++ b/plugins/MirLua/src/resource.h @@ -2,11 +2,13 @@ // Microsoft Visual C++ generated include file. // Used by E:\Projects\C++\MirandaNG\plugins\MirLua\res\resource.rc // +#define IDI_ICON 100 + // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1011 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h index c596d6c029..ef742b73ad 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -9,6 +9,9 @@ #include #include #include +#include +#include +#include extern "C" { @@ -36,7 +39,10 @@ extern HINSTANCE g_hInstance; #define CUSTOM_SCRIPTS_PATHT MIRANDA_USERDATA "\\Scripts" #endif -#define LUA_CLISTLIBNAME "m_clist" -int luaopen_m_clist(lua_State *L); +#define M_ICONSLIBNAME "m_icons" +int luaopen_m_icons(lua_State *L); + +#define M_MENUSLIBNAME "m_menus" +int luaopen_m_menus(lua_State *L); #endif //_COMMON_H_ -- cgit v1.2.3