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/MirLua.vcxproj | 3 ++ plugins/MirLua/MirLua.vcxproj.filters | 2 +- plugins/MirLua/docs/examples/icons.lua | 22 ++++++++++ plugins/MirLua/docs/examples/menus.lua | 32 +++++++++++++- plugins/MirLua/res/icon.ico | Bin 0 -> 2550 bytes plugins/MirLua/res/resource.rc | 19 +++++++++ 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 ++++- 12 files changed, 227 insertions(+), 44 deletions(-) create mode 100644 plugins/MirLua/docs/examples/icons.lua create mode 100644 plugins/MirLua/res/icon.ico 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') diff --git a/plugins/MirLua/MirLua.vcxproj b/plugins/MirLua/MirLua.vcxproj index 479c78f425..66db483dd4 100644 --- a/plugins/MirLua/MirLua.vcxproj +++ b/plugins/MirLua/MirLua.vcxproj @@ -31,4 +31,7 @@ NotUsing + + + diff --git a/plugins/MirLua/MirLua.vcxproj.filters b/plugins/MirLua/MirLua.vcxproj.filters index de5ad9f66c..a8ab01c0e5 100644 --- a/plugins/MirLua/MirLua.vcxproj.filters +++ b/plugins/MirLua/MirLua.vcxproj.filters @@ -1,4 +1,4 @@  - \ No newline at end of file + diff --git a/plugins/MirLua/docs/examples/icons.lua b/plugins/MirLua/docs/examples/icons.lua new file mode 100644 index 0000000000..7b9f6dca6c --- /dev/null +++ b/plugins/MirLua/docs/examples/icons.lua @@ -0,0 +1,22 @@ +--- include m_icons module +require('m_icons') + +--- 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') + +--- Create the icon which will be deleted below +M.Icons.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') + +--- Remove icon from iconLib +-- @param handle The handle of icon (or name) +-- @return 0 on success +M.Icons.RemoveIcon('testRemoved') diff --git a/plugins/MirLua/docs/examples/menus.lua b/plugins/MirLua/docs/examples/menus.lua index 6a7d70912e..f3e279efad 100644 --- a/plugins/MirLua/docs/examples/menus.lua +++ b/plugins/MirLua/docs/examples/menus.lua @@ -1,3 +1,31 @@ -require('m_clist') +--- include m_menus module +require('m_menus') -M.CList.AddContactMenuItem('test', 0, 0, 0, 'Srv/Test') +--- Add icon for menu items +local hIcon = M.Icons.AddIcon('testMenuIcon', 'Lua icon for menus') + +--- Add menu item to main menu +-- @param name The name of menu item +-- @param flags The flugs that determine behaviour of menu item (default 0) +-- @param position The position of menu item in main menu (default 0) +-- @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') + +--- Add menu item to contact menu +-- @param name The name of menu item +-- @param flags The flugs that determine behaviour of menu item (default 0) +-- @param position The position of menu item in main menu (default 0) +-- @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') + +--- Create the contact menu item which will be deleted below +local hMenuItem = M.Menus.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); diff --git a/plugins/MirLua/res/icon.ico b/plugins/MirLua/res/icon.ico new file mode 100644 index 0000000000..db7c6adcf2 Binary files /dev/null and b/plugins/MirLua/res/icon.ico differ diff --git a/plugins/MirLua/res/resource.rc b/plugins/MirLua/res/resource.rc index 0bf3781247..3a6d9122bd 100644 --- a/plugins/MirLua/res/resource.rc +++ b/plugins/MirLua/res/resource.rc @@ -48,6 +48,25 @@ END ///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// English resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON ICON "icon.ico" +#endif // English resources +///////////////////////////////////////////////////////////////////////////// + + #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// 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