From 73a0b84498501c1e2907f1cdc5f222f1f400edfd Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Thu, 18 Feb 2016 09:13:18 +0000 Subject: 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 --- .../m_msg_buttonsbar/m_msg_buttonsbar.vcxproj | 28 ++++ .../MirLua/Modules/m_msg_buttonsbar/src/main.cpp | 163 +++++++++++++++++++++ .../MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx | 1 + .../MirLua/Modules/m_msg_buttonsbar/src/stdafx.h | 12 ++ plugins/MirLua/Modules/m_popup/src/main.cpp | 2 +- plugins/MirLua/Modules/m_variables/src/main.cpp | 2 +- plugins/MirLua/Modules/module.props | 2 +- plugins/MirLua/src/m_core.cpp | 41 ++++++ plugins/MirLua/src/m_msg_buttonsbar.cpp | 143 ------------------ plugins/MirLua/src/m_msg_buttonsbar.h | 9 -- plugins/MirLua/src/mlua.cpp | 1 - plugins/MirLua/src/mlua_module_loader.cpp | 1 - plugins/MirLua/src/stdafx.h | 2 - 13 files changed, 248 insertions(+), 159 deletions(-) create mode 100644 plugins/MirLua/Modules/m_msg_buttonsbar/m_msg_buttonsbar.vcxproj create mode 100644 plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp create mode 100644 plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx create mode 100644 plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h delete mode 100644 plugins/MirLua/src/m_msg_buttonsbar.cpp delete mode 100644 plugins/MirLua/src/m_msg_buttonsbar.h (limited to 'plugins/MirLua') diff --git a/plugins/MirLua/Modules/m_msg_buttonsbar/m_msg_buttonsbar.vcxproj b/plugins/MirLua/Modules/m_msg_buttonsbar/m_msg_buttonsbar.vcxproj new file mode 100644 index 0000000000..6a92549a59 --- /dev/null +++ b/plugins/MirLua/Modules/m_msg_buttonsbar/m_msg_buttonsbar.vcxproj @@ -0,0 +1,28 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + m_msg_buttonsbar + {DCBE5EC2-84B2-4C03-810C-BD13D975D8D9} + + + + + 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 + +#include + +#include +#include +#include + +#endif //_COMMON_H_ \ No newline at end of file diff --git a/plugins/MirLua/Modules/m_popup/src/main.cpp b/plugins/MirLua/Modules/m_popup/src/main.cpp index c99ea7c146..288f03c1ca 100644 --- a/plugins/MirLua/Modules/m_popup/src/main.cpp +++ b/plugins/MirLua/Modules/m_popup/src/main.cpp @@ -121,7 +121,7 @@ static luaL_Reg popupApi[] = { NULL, NULL } }; -LUAMOD_API int luaopen_m_popup(lua_State *L) +extern "C" LUAMOD_API int luaopen_m_popup(lua_State *L) { luaL_newlib(L, popupApi); diff --git a/plugins/MirLua/Modules/m_variables/src/main.cpp b/plugins/MirLua/Modules/m_variables/src/main.cpp index 1fb6dd29bb..8eac605407 100644 --- a/plugins/MirLua/Modules/m_variables/src/main.cpp +++ b/plugins/MirLua/Modules/m_variables/src/main.cpp @@ -24,7 +24,7 @@ static luaL_Reg variablesApi[] = { NULL, NULL } }; -LUAMOD_API int luaopen_m_variables(lua_State *L) +extern "C" LUAMOD_API int luaopen_m_variables(lua_State *L) { luaL_newlib(L, variablesApi); diff --git a/plugins/MirLua/Modules/module.props b/plugins/MirLua/Modules/module.props index 6def4559a2..ed148c0039 100644 --- a/plugins/MirLua/Modules/module.props +++ b/plugins/MirLua/Modules/module.props @@ -18,7 +18,7 @@ $(ProjectDir)..\..\..\..\bin14\lib;%(AdditionalLibraryDirectories) - LUA_LIB;%(PreprocessorDefinitions) + LUA_BUILD_AS_DLL;LUA_LIB;%(PreprocessorDefinitions) $(ProjectDir)..\..\..\..\include;$(ProjectDir)..\..\..\ExternalAPI;$(ProjectDir)..\..\..\..\libs\liblua\include;%(AdditionalIncludeDirectories) diff --git a/plugins/MirLua/src/m_core.cpp b/plugins/MirLua/src/m_core.cpp index 042b628f4f..6ec526101e 100644 --- a/plugins/MirLua/src/m_core.cpp +++ b/plugins/MirLua/src/m_core.cpp @@ -402,6 +402,47 @@ luaL_Reg coreApi[] = { NULL, NULL } }; +/***********************************************/ + +#define MT_WPARAM "WPARAM" +#define MT_LPARAM "LPARAM" + +/*static int mp__call(lua_State *L) +{ + switch (lua_type(L, idx)) + { + case LUA_TBOOLEAN: + return lua_toboolean(L, idx); + case LUA_TNUMBER: + return lua_tonumber(L, idx); + case LUA_TSTRING: + return (LPARAM)lua_tostring(L, idx); + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + return (LPARAM)lua_touserdata(L, idx); + default: + return NULL; + } +} + +static int mp__toboolean(lua_State *L) +{ +} + +static int mp__tonumber(lua_State *L) +{ +} + +static int mp__tostring(lua_State *L) +{ +} + +static int mp__topointer(lua_State *L) +{ +}*/ + +/***********************************************/ + LUAMOD_API int luaopen_m_core(lua_State *L) { luaL_newlib(L, coreApi); diff --git a/plugins/MirLua/src/m_msg_buttonsbar.cpp b/plugins/MirLua/src/m_msg_buttonsbar.cpp deleted file mode 100644 index c960e6dc69..0000000000 --- a/plugins/MirLua/src/m_msg_buttonsbar.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "stdafx.h" - -static int CompareMBButtons(const BBButton* p1, const BBButton* p2) -{ - if (int res = mir_strcmpi(p1->pszModuleName, p2->pszModuleName)) - return res; - return p1->dwButtonID - p2->dwButtonID; -} - -static LIST MBButtons(1, CompareMBButtons); - -void KillModuleMBButtons() -{ - while (MBButtons.getCount()) - { - BBButton* bbb = MBButtons[0]; - ::CallService(MS_BB_REMOVEBUTTON, 0, (LPARAM)bbb); - MBButtons.remove(0); - mir_free(bbb->pszModuleName); - mir_free(bbb->ptszTooltip); - mir_free(bbb); - } -} - -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); - - if (!res) - MBButtons.insert(bbb); - - 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); - - if (!res) - { - BBButton* bbb = MBButtons.find(&mbb); - if (bbb) - { - MBButtons.remove(bbb); - mir_free(bbb->pszModuleName); - mir_free(bbb->ptszTooltip); - mir_free(bbb); - } - } - - return 1; -} - -static luaL_Reg msgbuttinsbarApi[] = -{ - { "AddButton", lua_AddButton }, - { "ModifyButton", lua_ModifyButton }, - { "RemoveButton", lua_RemoveButton }, - - { NULL, NULL } -}; - -LUAMOD_API int luaopen_m_msg_buttonsbar(lua_State *L) -{ - luaL_newlib(L, msgbuttinsbarApi); - - MT(L, "CustomButtonClickData") - .Field(&CustomButtonClickData::pszModule, "Module", LUA_TSTRINGA) - .Field(&CustomButtonClickData::dwButtonId, "ButtonID", LUA_TINTEGER) - .Field(&CustomButtonClickData::hContact, "hContact", LUA_TINTEGER) - .Field(&CustomButtonClickData::flags, "Flags", LUA_TINTEGER); - lua_pop(L, 1); - - return 1; -} diff --git a/plugins/MirLua/src/m_msg_buttonsbar.h b/plugins/MirLua/src/m_msg_buttonsbar.h deleted file mode 100644 index a4cbccbbdc..0000000000 --- a/plugins/MirLua/src/m_msg_buttonsbar.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _LUA_M_MSG_BUTTONSBAR_H_ -#define _LUA_M_MSG_BUTTONSBAR_H_ - -#define MLUA_MSGBUTTONSBAR "m_msg_buttonsbar" -LUAMOD_API int (luaopen_m_msg_buttonsbar)(lua_State *L); - -void KillModuleMBButtons(); - -#endif //_LUA_M_MSG_BUTTONSBAR_H_ \ No newline at end of file diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp index 917fa26631..da56eeb902 100644 --- a/plugins/MirLua/src/mlua.cpp +++ b/plugins/MirLua/src/mlua.cpp @@ -68,7 +68,6 @@ void CMLua::Unload() } KillModuleScheduleTasks(); - KillModuleMBButtons(); KillModuleTTBButton(); KillModuleIcons(hLangpack); diff --git a/plugins/MirLua/src/mlua_module_loader.cpp b/plugins/MirLua/src/mlua_module_loader.cpp index 33068165ab..ef0c7572e3 100644 --- a/plugins/MirLua/src/mlua_module_loader.cpp +++ b/plugins/MirLua/src/mlua_module_loader.cpp @@ -38,7 +38,6 @@ void CLuaModuleLoader::LoadModules() Preload(MLUA_SCHEDULE, luaopen_m_schedule); Preload(MLUA_SOUNDS, luaopen_m_sounds); // regirter delay loading of other modules - 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 7e6f966375..58cfb263ed 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -86,8 +86,6 @@ LUAMOD_API int (luaopen_m_hotkeys)(lua_State *L); #define MLUA_MESSAGE "m_message" LUAMOD_API int (luaopen_m_message)(lua_State *L); -#include "m_msg_buttonsbar.h" - #include "m_protocols.h" #include "m_schedule.h" -- cgit v1.2.3