summaryrefslogtreecommitdiff
path: root/plugins/MirLua
diff options
context:
space:
mode:
authorAlexander Lantsev <aunsane@gmail.com>2016-02-18 09:13:18 +0000
committerAlexander Lantsev <aunsane@gmail.com>2016-02-18 09:13:18 +0000
commit73a0b84498501c1e2907f1cdc5f222f1f400edfd (patch)
tree0317999b0f7b131b58eed6a25ffe6d2cb3dbe2e8 /plugins/MirLua
parent540ac837514edcd79a64ffaf582ce4d9d5f0e478 (diff)
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
Diffstat (limited to 'plugins/MirLua')
-rw-r--r--plugins/MirLua/Modules/m_msg_buttonsbar/m_msg_buttonsbar.vcxproj28
-rw-r--r--plugins/MirLua/Modules/m_msg_buttonsbar/src/main.cpp163
-rw-r--r--plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.cxx1
-rw-r--r--plugins/MirLua/Modules/m_msg_buttonsbar/src/stdafx.h12
-rw-r--r--plugins/MirLua/Modules/m_popup/src/main.cpp2
-rw-r--r--plugins/MirLua/Modules/m_variables/src/main.cpp2
-rw-r--r--plugins/MirLua/Modules/module.props2
-rw-r--r--plugins/MirLua/src/m_core.cpp41
-rw-r--r--plugins/MirLua/src/m_msg_buttonsbar.cpp143
-rw-r--r--plugins/MirLua/src/m_msg_buttonsbar.h9
-rw-r--r--plugins/MirLua/src/mlua.cpp1
-rw-r--r--plugins/MirLua/src/mlua_module_loader.cpp1
-rw-r--r--plugins/MirLua/src/stdafx.h2
13 files changed, 248 insertions, 159 deletions
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>m_msg_buttonsbar</ProjectName>
+ <ProjectGuid>{DCBE5EC2-84B2-4C03-810C-BD13D975D8D9}</ProjectGuid>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(ProjectDir)..\module.props" />
+ </ImportGroup>
+</Project>
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 <windows.h>
+
+#include <m_lua.h>
+
+#include <m_core.h>
+#include <m_utils.h>
+#include <m_msg_buttonsbar.h>
+
+#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 @@
<AdditionalLibraryDirectories Condition="'$(VisualStudioVersion)' == '14.0'">$(ProjectDir)..\..\..\..\bin14\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<ClCompile>
- <PreprocessorDefinitions>LUA_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>LUA_BUILD_AS_DLL;LUA_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\include;$(ProjectDir)..\..\..\ExternalAPI;$(ProjectDir)..\..\..\..\libs\liblua\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
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<BBButton> 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<CustomButtonClickData>(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"