summaryrefslogtreecommitdiff
path: root/plugins/MirLua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirLua')
-rw-r--r--plugins/MirLua/MirLua.vcxproj3
-rw-r--r--plugins/MirLua/MirLua.vcxproj.filters2
-rw-r--r--plugins/MirLua/docs/examples/icons.lua22
-rw-r--r--plugins/MirLua/docs/examples/menus.lua32
-rw-r--r--plugins/MirLua/res/icon.icobin0 -> 2550 bytes
-rw-r--r--plugins/MirLua/res/resource.rc19
-rw-r--r--plugins/MirLua/src/mlua.cpp3
-rw-r--r--plugins/MirLua/src/mlua_clist.cpp37
-rw-r--r--plugins/MirLua/src/mlua_icons.cpp75
-rw-r--r--plugins/MirLua/src/mlua_menus.cpp64
-rw-r--r--plugins/MirLua/src/resource.h4
-rw-r--r--plugins/MirLua/src/stdafx.h10
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
new file mode 100644
index 0000000000..db7c6adcf2
--- /dev/null
+++ b/plugins/MirLua/res/icon.ico
Binary files 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 <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_