From 297a4ecf64fd16ac6b6616e6938ca86554f46c42 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Fri, 12 Jun 2015 10:42:43 +0000 Subject: MirLua: added toptoolbar module git-svn-id: http://svn.miranda-ng.org/main/trunk@14132 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirLua/src/m_toptoolbar.cpp | 125 ++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 plugins/MirLua/src/m_toptoolbar.cpp (limited to 'plugins/MirLua/src/m_toptoolbar.cpp') diff --git a/plugins/MirLua/src/m_toptoolbar.cpp b/plugins/MirLua/src/m_toptoolbar.cpp new file mode 100644 index 0000000000..7b0efcbc7c --- /dev/null +++ b/plugins/MirLua/src/m_toptoolbar.cpp @@ -0,0 +1,125 @@ +#include "stdafx.h" + +static TTBButton* MakeTBButton(lua_State *L) +{ + TTBButton *tbb = (TTBButton*)mir_calloc(sizeof(TTBButton)); + tbb->cbSize = sizeof(TTBButton); + + lua_pushstring(L, "Name"); + lua_gettable(L, -2); + tbb->name = mir_utf8decode((char*)luaL_checkstring(L, -1), NULL); + lua_pop(L, 1); + + lua_pushstring(L, "Service"); + lua_gettable(L, -2); + tbb->pszService = (char*)lua_tostring(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "Flags"); + lua_gettable(L, -2); + tbb->dwFlags = lua_tointeger(L, -1); + lua_pop(L, 1); + + // up state + lua_pushstring(L, "IconUp"); + lua_gettable(L, -2); + tbb->hIconHandleUp = (HANDLE)lua_touserdata(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "TooltipUp"); + lua_gettable(L, -2); + tbb->pszTooltipUp = mir_utf8decode((char*)lua_tostring(L, -1), NULL); + lua_pop(L, 1); + + lua_pushstring(L, "wParamUp"); + lua_gettable(L, -2); + tbb->wParamUp = CMLua::GetWParam(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "lParamUp"); + lua_gettable(L, -2); + tbb->lParamUp = CMLua::GetLParam(L, -1); + lua_pop(L, 1); + + // dn state + lua_pushstring(L, "IconDown"); + lua_gettable(L, -2); + tbb->hIconHandleDn = (HANDLE)lua_touserdata(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "TooltipDown"); + lua_gettable(L, -2); + tbb->pszTooltipDn = mir_utf8decode((char*)lua_tostring(L, -1), NULL); + lua_pop(L, 1); + + lua_pushstring(L, "wParamDown"); + lua_gettable(L, -2); + tbb->wParamDown = CMLua::GetWParam(L, -1); + lua_pop(L, 1); + + lua_pushstring(L, "lParamDown"); + lua_gettable(L, -2); + tbb->lParamDown = CMLua::GetLParam(L, -1); + lua_pop(L, 1); + + return tbb; +} + +static int lua_AddButton(lua_State *L) +{ + if (lua_type(L, 1) != LUA_TTABLE) + { + lua_pushlightuserdata(L, 0); + return 1; + } + + mir_ptr tbb(MakeTBButton(L)); + + HANDLE res = ::TopToolbar_AddButton(tbb); + lua_pushlightuserdata(L, res); + + return 1; +} + +static int lua_RemoveButton(lua_State *L) +{ + HANDLE hTTButton = (HANDLE)lua_touserdata(L, 1); + + INT_PTR res = ::CallService(MS_TTB_REMOVEBUTTON, (WPARAM)hTTButton, 0); + lua_pushinteger(L, res); + + return 1; +} + +static int lua_OnTopToolBarLoaded(lua_State *L) +{ + if (!lua_isfunction(L, 1)) + { + lua_pushlightuserdata(L, NULL); + return 1; + } + + lua_pushvalue(L, 1); + int ref = luaL_ref(L, LUA_REGISTRYINDEX); + + HANDLE res = ::HookEventObjParam(ME_TTB_MODULELOADED, CMLua::HookEventObjParam, L, ref); + lua_pushlightuserdata(L, res); + + return 1; +} + +static luaL_Reg toptoolbarApi[] = +{ + { "AddButton", lua_AddButton }, + { "RemoveButton", lua_RemoveButton }, + { "OnTopToolBarLoaded", lua_OnTopToolBarLoaded }, + + { NULL, NULL } +}; + +LUAMOD_API int luaopen_m_toptoolbar(lua_State *L) +{ + luaL_newlib(L, toptoolbarApi); + + return 1; +} -- cgit v1.2.3