diff options
author | Alexander Lantsev <aunsane@gmail.com> | 2016-02-18 09:13:18 +0000 |
---|---|---|
committer | Alexander Lantsev <aunsane@gmail.com> | 2016-02-18 09:13:18 +0000 |
commit | 73a0b84498501c1e2907f1cdc5f222f1f400edfd (patch) | |
tree | 0317999b0f7b131b58eed6a25ffe6d2cb3dbe2e8 /plugins/MirLua/Modules/m_msg_buttonsbar/src | |
parent | 540ac837514edcd79a64ffaf582ce4d9d5f0e478 (diff) |
MirLua:
- m_msg_buttonsbar moved to separate lua library
- fixed loading of other c modules
git-svn-id: http://svn.miranda-ng.org/main/trunk@16300 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/MirLua/Modules/m_msg_buttonsbar/src')
-rw-r--r-- | plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp | 163 | ||||
-rw-r--r-- | plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx | 1 | ||||
-rw-r--r-- | plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h | 12 |
3 files changed, 176 insertions, 0 deletions
diff --git a/plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp b/plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp new file mode 100644 index 0000000000..00ba7a7419 --- /dev/null +++ b/plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp @@ -0,0 +1,163 @@ +#include "stdafx.h"
+
+static BBButton* MakeBBButton(lua_State *L)
+{
+ BBButton *bbb = (BBButton*)mir_calloc(sizeof(BBButton));
+ bbb->cbSize = sizeof(BBButton);
+ bbb->dwDefPos = 100;
+
+ lua_getfield(L, -1, "Module");
+ bbb->pszModuleName = mir_utf8decodeA(luaL_checkstring(L, -1));
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "ButtonID");
+ bbb->dwButtonID = luaL_checkinteger(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "Flags");
+ bbb->bbbFlags = lua_tointeger(L, -1);
+ lua_pop(L, 1);
+
+ if ((bbb->bbbFlags & BBBF_ANSITOOLTIP))
+ bbb->bbbFlags &= ~BBBF_ANSITOOLTIP;
+
+ lua_getfield(L, -1, "Tooltip");
+ bbb->ptszTooltip = mir_utf8decodeT(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "Icon");
+ bbb->hIcon = (HANDLE)lua_touserdata(L, -1);
+ lua_pop(L, 1);
+
+ return bbb;
+}
+
+static int lua_AddButton(lua_State *L)
+{
+ if (lua_type(L, 1) != LUA_TTABLE)
+ {
+ lua_pushlightuserdata(L, 0);
+ return 1;
+ }
+
+ BBButton* bbb = MakeBBButton(L);
+
+ INT_PTR res = CallService(MS_BB_ADDBUTTON, 0, (LPARAM)bbb);
+ lua_pushinteger(L, res);
+
+ return 1;
+}
+
+static int lua_ModifyButton(lua_State *L)
+{
+ if (lua_type(L, 1) != LUA_TTABLE)
+ {
+ lua_pushlightuserdata(L, 0);
+ return 1;
+ }
+
+ BBButton* bbb = MakeBBButton(L);
+
+ INT_PTR res = CallService(MS_BB_MODIFYBUTTON, 0, (LPARAM)bbb);
+ lua_pushinteger(L, res);
+
+ mir_free(bbb->pszModuleName);
+ mir_free(bbb->ptszTooltip);
+ mir_free(bbb);
+
+ return 1;
+}
+
+static int lua_RemoveButton(lua_State *L)
+{
+ ptrA szModuleName(mir_utf8decodeA(luaL_checkstring(L, 1)));
+
+ BBButton mbb = { sizeof(BBButton) };
+ mbb.pszModuleName = szModuleName;
+ mbb.dwButtonID = luaL_checkinteger(L, 2);
+
+ INT_PTR res = ::CallService(MS_BB_REMOVEBUTTON, 0, (LPARAM)&mbb);
+ lua_pushinteger(L, res);
+
+ return 1;
+}
+
+static luaL_Reg msgbuttinsbarApi[] =
+{
+ { "AddButton", lua_AddButton },
+ { "ModifyButton", lua_ModifyButton },
+ { "RemoveButton", lua_RemoveButton },
+
+ { NULL, NULL }
+};
+
+/***********************************************/
+
+#define MT_CUSTOMBUTTONCLICKDATA "CustomButtonClickData"
+
+static int bcd__call(lua_State *L)
+{
+ CustomButtonClickData *bcd = (CustomButtonClickData*)lua_touserdata(L, 1);
+ if (bcd == NULL)
+ {
+ lua_pushnil(L);
+ return 1;
+ }
+
+ CustomButtonClickData **udata = (CustomButtonClickData**)lua_newuserdata(L, sizeof(CustomButtonClickData*));
+ *udata = bcd;
+
+ luaL_setmetatable(L, MT_CUSTOMBUTTONCLICKDATA);
+
+ return 1;
+}
+
+static int bcd__index(lua_State *L)
+{
+ CustomButtonClickData *bcd = *(CustomButtonClickData**)luaL_checkudata(L, 1, MT_CUSTOMBUTTONCLICKDATA);
+ const char *key = lua_tostring(L, 2);
+
+ if (mir_strcmpi(key, "Module") == 0)
+ lua_pushstring(L, ptrA(mir_utf8encode(bcd->pszModule)));
+ else if (mir_strcmpi(key, "ButtonID") == 0)
+ lua_pushinteger(L, bcd->dwButtonId);
+ else if (mir_strcmpi(key, "hContact") == 0)
+ lua_pushinteger(L, bcd->hContact);
+ else if (mir_strcmpi(key, "Flags") == 0)
+ lua_pushinteger(L, bcd->flags);
+ else
+ lua_pushnil(L);
+
+ return 1;
+}
+
+static int bcd_topointer(lua_State *L)
+{
+ CustomButtonClickData *bcd = *(CustomButtonClickData**)luaL_checkudata(L, 1, MT_CUSTOMBUTTONCLICKDATA);
+
+ lua_pushlightuserdata(L, bcd);
+
+ return 1;
+}
+
+static luaL_Reg bcdMeta[] =
+{
+ { "__call", bcd__call },
+ { "__index", bcd__index },
+ { "topointer", bcd_topointer },
+
+ { NULL, NULL }
+};
+
+/***********************************************/
+
+extern "C" LUAMOD_API int luaopen_m_msg_buttonsbar(lua_State *L)
+{
+ luaL_newlib(L, msgbuttinsbarApi);
+
+ luaL_newmetatable(L, MT_CUSTOMBUTTONCLICKDATA);
+ luaL_setfuncs(L, bcdMeta, 0);
+ lua_pop(L, 1);
+
+ return 1;
+}
diff --git a/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx b/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx new file mode 100644 index 0000000000..fd4f341c7b --- /dev/null +++ b/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx @@ -0,0 +1 @@ +#include "stdafx.h" diff --git a/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h b/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h new file mode 100644 index 0000000000..600f0d955a --- /dev/null +++ b/plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h @@ -0,0 +1,12 @@ +#ifndef _COMMON_H_
+#define _COMMON_H_
+
+#include <windows.h>
+
+#include <m_lua.h>
+
+#include <m_core.h>
+#include <m_utils.h>
+#include <m_msg_buttonsbar.h>
+
+#endif //_COMMON_H_
\ No newline at end of file |