diff options
Diffstat (limited to 'plugins/MirLua')
-rw-r--r-- | plugins/MirLua/MirLua.vcxproj | 3 | ||||
-rw-r--r-- | plugins/MirLua/MirLua.vcxproj.filters | 2 | ||||
-rw-r--r-- | plugins/MirLua/docs/examples/icons.lua | 22 | ||||
-rw-r--r-- | plugins/MirLua/docs/examples/menus.lua | 32 | ||||
-rw-r--r-- | plugins/MirLua/res/icon.ico | bin | 0 -> 2550 bytes | |||
-rw-r--r-- | plugins/MirLua/res/resource.rc | 19 | ||||
-rw-r--r-- | plugins/MirLua/src/mlua.cpp | 3 | ||||
-rw-r--r-- | plugins/MirLua/src/mlua_clist.cpp | 37 | ||||
-rw-r--r-- | plugins/MirLua/src/mlua_icons.cpp | 75 | ||||
-rw-r--r-- | plugins/MirLua/src/mlua_menus.cpp | 64 | ||||
-rw-r--r-- | plugins/MirLua/src/resource.h | 4 | ||||
-rw-r--r-- | plugins/MirLua/src/stdafx.h | 10 |
12 files changed, 227 insertions, 44 deletions
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 @@ <PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
</ItemGroup>
+ <ItemGroup>
+ <None Include="res\icon.ico" />
+ </ItemGroup>
</Project>
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 @@ <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(ProjectDir)..\..\build\vc.common\common.filters" />
-</Project>
\ No newline at end of file +</Project>
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 Binary files differnew file mode 100644 index 0000000000..db7c6adcf2 --- /dev/null +++ b/plugins/MirLua/res/icon.ico 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 <m_langpack.h>
#include <m_folders.h>
#include <m_clist.h>
+#include <m_genmenu.h>
+#include <m_icolib.h>
+#include <m_skin.h>
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_
|