summaryrefslogtreecommitdiff
path: root/plugins/MirLua/src/m_toptoolbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirLua/src/m_toptoolbar.cpp')
-rw-r--r--plugins/MirLua/src/m_toptoolbar.cpp125
1 files changed, 125 insertions, 0 deletions
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<TTBButton> 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;
+}