diff options
Diffstat (limited to 'plugins/MirLua/src')
| -rw-r--r-- | plugins/MirLua/src/m_msg_buttonsbar.cpp | 164 | ||||
| -rw-r--r-- | plugins/MirLua/src/mlua.cpp | 1 | ||||
| -rw-r--r-- | plugins/MirLua/src/stdafx.h | 4 | 
3 files changed, 169 insertions, 0 deletions
diff --git a/plugins/MirLua/src/m_msg_buttonsbar.cpp b/plugins/MirLua/src/m_msg_buttonsbar.cpp new file mode 100644 index 0000000000..1e779714e2 --- /dev/null +++ b/plugins/MirLua/src/m_msg_buttonsbar.cpp @@ -0,0 +1,164 @@ +#include "stdafx.h"
 +
 +static BBButton* MakeBBButton(lua_State *L)
 +{
 +	BBButton *tbb = (BBButton*)mir_calloc(sizeof(BBButton));
 +	tbb->cbSize = sizeof(BBButton);
 +	tbb->dwDefPos = 100;
 +
 +	lua_pushstring(L, "Module");
 +	lua_gettable(L, -2);
 +	tbb->pszModuleName = mir_utf8decode((char*)luaL_checkstring(L, -1), NULL);
 +	lua_pop(L, 1);
 +
 +	lua_pushstring(L, "ButtonID");
 +	lua_gettable(L, -2);
 +	tbb->dwButtonID = luaL_checkinteger(L, -1);
 +	lua_pop(L, 1);
 +
 +	lua_pushstring(L, "Flags");
 +	lua_gettable(L, -2);
 +	tbb->bbbFlags = BBBF_ISLSIDEBUTTON | lua_tointeger(L, -1);
 +	lua_pop(L, 1);
 +
 +	lua_pushstring(L, "Tooltip");
 +	lua_gettable(L, -2);
 +	tbb->ptszTooltip = mir_utf8decodeT((char*)lua_tostring(L, -1));
 +	lua_pop(L, 1);
 +
 +	lua_pushstring(L, "Icon");
 +	lua_gettable(L, -2);
 +	tbb->hIcon = (HANDLE)lua_touserdata(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<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;
 +	}
 +
 +	mir_ptr<BBButton> bbb(MakeBBButton(L));
 +
 +	INT_PTR res = ::CallService(MS_BB_MODIFYBUTTON, 0, (LPARAM)bbb);
 +	lua_pushinteger(L, res);
 +
 +	return 1;
 +}
 +
 +static int lua_RemoveButton(lua_State *L)
 +{
 +	BBButton bbb = { sizeof(BBButton) };
 +	bbb.pszModuleName = mir_utf8decode((char*)luaL_checkstring(L, 1), NULL);
 +	bbb.dwButtonID = luaL_checkinteger(L, 2);
 +
 +	INT_PTR res = ::CallService(MS_BB_REMOVEBUTTON, 0, (LPARAM)&bbb);
 +	lua_pushinteger(L, res);
 +
 +	return 1;
 +}
 +
 +static int lua_OnMsgToolBarLoaded(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_MSG_TOOLBARLOADED, CMLua::HookEventObjParam, L, ref);
 +	lua_pushlightuserdata(L, res);
 +
 +	return 1;
 +}
 +
 +int ButtonPressedHookEventObjParam(void *obj, WPARAM wParam, LPARAM lParam, LPARAM param)
 +{
 +	lua_State *L = (lua_State*)obj;
 +
 +	int ref = param;
 +	lua_rawgeti(L, LUA_REGISTRYINDEX, ref);
 +
 +	lua_pushnumber(L, wParam);
 +	
 +	CustomButtonClickData *bcd = (CustomButtonClickData*)lParam;
 +
 +	lua_newtable(L);
 +	lua_pushstring(L, "Module");
 +	lua_pushstring(L, bcd->pszModule);
 +	lua_settable(L, -3);
 +	lua_pushstring(L, "ButtonID");
 +	lua_pushinteger(L, bcd->dwButtonId);
 +	lua_settable(L, -3);
 +	lua_pushstring(L, "Flags");
 +	lua_pushinteger(L, bcd->flags);
 +	lua_settable(L, -3);
 +
 +	if (lua_pcall(L, 2, 1, 0))
 +		printf("%s\n", lua_tostring(L, -1));
 +
 +	int res = (int)lua_tointeger(L, 1);
 +
 +	//luaL_unref(L, LUA_REGISTRYINDEX, ref);
 +
 +	return res;
 +}
 +
 +static int lua_OnMsgToolBarButtonPressed(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_MSG_BUTTONPRESSED, ButtonPressedHookEventObjParam, L, ref);
 +	lua_pushlightuserdata(L, res);
 +
 +	return 1;
 +}
 +
 +static luaL_Reg msgbuttinsbarApi[] =
 +{
 +	{ "AddButton", lua_AddButton },
 +	{ "ModifyButtonButton", lua_ModifyButton },
 +	{ "RemoveButton", lua_RemoveButton },
 +	
 +	{ "OnMsgToolBarLoaded", lua_OnMsgToolBarLoaded },
 +	{ "OnMsgToolBarButtonPressed", lua_OnMsgToolBarButtonPressed },
 +
 +	{ NULL, NULL }
 +};
 +
 +LUAMOD_API int luaopen_m_msg_buttonsbar(lua_State *L)
 +{
 +	luaL_newlib(L, msgbuttinsbarApi);
 +
 +	return 1;
 +}
 diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp index e731c151a8..a389e155f1 100644 --- a/plugins/MirLua/src/mlua.cpp +++ b/plugins/MirLua/src/mlua.cpp @@ -18,6 +18,7 @@ CMLua::CMLua()  	Preload(MLUA_DATABASE, luaopen_m_database);
  	Preload(MLUA_ICOLIB, luaopen_m_icolib);
  	Preload(MLUA_GENMENU, luaopen_m_genmenu);
 +	Preload(MLUA_MSGBUTTONSBAR, luaopen_m_msg_buttonsbar);
  	Preload(MLUA_TOPTOOLBAR, luaopen_m_toptoolbar);
  }
 diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h index eea0740b9b..b26ae3db4e 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -14,6 +14,7 @@  #include <m_folders.h>
  #include <m_toptoolbar.h>
 +#include <m_msg_buttonsbar.h>
  extern "C"
  {
 @@ -50,6 +51,9 @@ LUAMOD_API int (luaopen_m_icolib)(lua_State *L);  #define MLUA_GENMENU	"m_genmenu"
  LUAMOD_API int (luaopen_m_genmenu)(lua_State *L);
 +#define MLUA_MSGBUTTONSBAR	"m_msg_buttonsbar"
 +LUAMOD_API int (luaopen_m_msg_buttonsbar)(lua_State *L);
 +
  #define MLUA_TOPTOOLBAR	"m_toptoolbar"
  LUAMOD_API int (luaopen_m_toptoolbar)(lua_State *L);
  | 
