diff options
Diffstat (limited to 'plugins/MirLua/Modules/m_toptoolbar/src/main.cpp')
-rw-r--r-- | plugins/MirLua/Modules/m_toptoolbar/src/main.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/plugins/MirLua/Modules/m_toptoolbar/src/main.cpp b/plugins/MirLua/Modules/m_toptoolbar/src/main.cpp new file mode 100644 index 0000000000..6e488ca8c7 --- /dev/null +++ b/plugins/MirLua/Modules/m_toptoolbar/src/main.cpp @@ -0,0 +1,103 @@ +#include "stdafx.h"
+
+int hLangpack;
+
+static TTBButton* MakeTBButton(lua_State *L)
+{
+ TTBButton *tbb = (TTBButton*)mir_calloc(sizeof(TTBButton));
+ tbb->dwFlags = TTBBF_ISLBUTTON;
+
+ lua_getfield(L, -1, "Name");
+ tbb->name = mir_utf8decodeA(luaL_checkstring(L, -1));
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "Service");
+ tbb->pszService = (char*)lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "Flags");
+ tbb->dwFlags = lua_tointeger(L, -1);
+ lua_pop(L, 1);
+
+ // up state
+ lua_getfield(L, -1, "IconUp");
+ tbb->hIconHandleUp = (HANDLE)lua_touserdata(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "TooltipUp");
+ tbb->pszTooltipUp = mir_utf8decodeA(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "wParamUp");
+ tbb->wParamUp = luaM_towparam(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "lParamUp");
+ tbb->lParamUp = luaM_tolparam(L, -1);
+ lua_pop(L, 1);
+
+ // dn state
+ lua_getfield(L, -1, "IconDown");
+ tbb->hIconHandleDn = (HANDLE)lua_touserdata(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "TooltipDown");
+ tbb->pszTooltipDn = mir_utf8decodeA(lua_tostring(L, -1));
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "wParamDown");
+ tbb->wParamDown = luaM_towparam(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "lParamDown");
+ tbb->lParamDown = luaM_tolparam(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;
+ }
+
+ TTBButton* tbb = MakeTBButton(L);
+
+ HANDLE res = ::TopToolbar_AddButton(tbb);
+ lua_pushlightuserdata(L, res);
+
+ mir_free(tbb->name);
+ mir_free(tbb->pszTooltipUp);
+ mir_free(tbb->pszTooltipDn);
+ mir_free(tbb);
+
+ 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 luaL_Reg toptoolbarApi[] =
+{
+ { "AddButton", lua_AddButton },
+ { "RemoveButton", lua_RemoveButton },
+
+ { NULL, NULL }
+};
+
+LUAMOD_API int luaopen_m_toptoolbar(lua_State *L)
+{
+ luaL_newlib(L, toptoolbarApi);
+
+ return 1;
+}
|