From 55a1ec7e2705aa4a05b5454130be7d6fe84d1396 Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Thu, 8 Mar 2012 15:46:36 +0000 Subject: [PATCH] Script: Added SKIN:ParseFormula() --- Library/lua/glue/LuaMeasure.cpp | 2 +- Library/lua/glue/LuaMeterWindow.cpp | 176 ++++++++++++++-------------- 2 files changed, 87 insertions(+), 91 deletions(-) diff --git a/Library/lua/glue/LuaMeasure.cpp b/Library/lua/glue/LuaMeasure.cpp index 7db9d909..d956ac6e 100644 --- a/Library/lua/glue/LuaMeasure.cpp +++ b/Library/lua/glue/LuaMeasure.cpp @@ -77,7 +77,7 @@ static int Measure_ReadFormula(lua_State* L) std::wstring strTmp = LuaManager::ToWide(L, 2); double value = parser.ReadFormula(self->GetName(), strTmp.c_str(), tolua_tonumber(L, 3, 0)); - + lua_pushnumber(L, value); return 1; } diff --git a/Library/lua/glue/LuaMeterWindow.cpp b/Library/lua/glue/LuaMeterWindow.cpp index 1ae325a3..24be573e 100644 --- a/Library/lua/glue/LuaMeterWindow.cpp +++ b/Library/lua/glue/LuaMeterWindow.cpp @@ -22,92 +22,18 @@ #include "../../MeterWindow.h" #include "../../MeterString.h" -static int MeterWindow_MoveWindow(lua_State* L) +static int MeterWindow_Bang(lua_State* L) { CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int x = (int)tolua_tonumber(L, 2, 0); - int y = (int)tolua_tonumber(L, 3, 0); + std::wstring strTmp = LuaManager::ToWide(L, 2); - self->MoveWindow(x, y); + CConfigParser& parser = self->GetParser(); + parser.ReplaceVariables(strTmp); + self->GetMainObject()->ExecuteCommand(strTmp.c_str(), self); return 0; } -static int MeterWindow_FadeWindow(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int from = (int)tolua_tonumber(L, 2, 0); - int to = (int)tolua_tonumber(L, 3, 0); - self->FadeWindow(from, to); - - return 0; -} - -static int MeterWindow_GetSkinName(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - const std::wstring& val = self->GetSkinName(); - LuaManager::PushWide(L, val.c_str()); - - return 1; -} - -static int MeterWindow_GetSkinIniFile(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - const std::wstring& val = self->GetSkinIniFile(); - LuaManager::PushWide(L, val.c_str()); - - return 1; -} - -static int MeterWindow_GetW(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int val = (int)self->GetW(); - lua_pushnumber(L, (lua_Number)val); - - return 1; -} - -static int MeterWindow_GetH(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int val = (int)self->GetH(); - lua_pushnumber(L, (lua_Number)val); - - return 1; -} - -static int MeterWindow_GetX(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int val = (int)self->GetX(); - lua_pushnumber(L, (lua_Number)val); - - return 1; -} - -static int MeterWindow_GetY(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - int val = (int)self->GetY(); - lua_pushnumber(L, (lua_Number)val); - - return 1; -} - -static int MeterWindow_MakePathAbsolute(lua_State* L) -{ - CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); - std::wstring path = LuaManager::ToWide(L, 2); - - self->MakePathAbsolute(path); - LuaManager::PushWide(L, path.c_str()); - - return 1; -} - static int MeterWindow_GetMeter(lua_State* L) { CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); @@ -165,37 +91,107 @@ static int MeterWindow_ReplaceVariables(lua_State* L) return 1; } -static int MeterWindow_Bang(lua_State* L) +static int MeterWindow_ParseFormula(lua_State* L) { CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); std::wstring strTmp = LuaManager::ToWide(L, 2); - CConfigParser& parser = self->GetParser(); - parser.ReplaceVariables(strTmp); - self->GetMainObject()->ExecuteCommand(strTmp.c_str(), self); + double result; + if (self->GetParser().ParseFormula(strTmp, &result)) + { + lua_pushnumber(L, result); + return 1; + } return 0; } +static int MeterWindow_MoveWindow(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int x = (int)tolua_tonumber(L, 2, 0); + int y = (int)tolua_tonumber(L, 3, 0); + + self->MoveWindow(x, y); + + return 0; +} + +static int MeterWindow_FadeWindow(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int from = (int)tolua_tonumber(L, 2, 0); + int to = (int)tolua_tonumber(L, 3, 0); + self->FadeWindow(from, to); + + return 0; +} + +static int MeterWindow_GetW(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int val = (int)self->GetW(); + lua_pushnumber(L, (lua_Number)val); + + return 1; +} + +static int MeterWindow_GetH(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int val = (int)self->GetH(); + lua_pushnumber(L, (lua_Number)val); + + return 1; +} + +static int MeterWindow_GetX(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int val = (int)self->GetX(); + lua_pushnumber(L, (lua_Number)val); + + return 1; +} + +static int MeterWindow_GetY(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + int val = (int)self->GetY(); + lua_pushnumber(L, (lua_Number)val); + + return 1; +} + +static int MeterWindow_MakePathAbsolute(lua_State* L) +{ + CMeterWindow* self = (CMeterWindow*)tolua_tousertype(L, 1, 0); + std::wstring path = LuaManager::ToWide(L, 2); + + self->MakePathAbsolute(path); + LuaManager::PushWide(L, path.c_str()); + + return 1; +} + void LuaManager::RegisterMeterWindow(lua_State* L) { tolua_usertype(L, "CMeterWindow"); tolua_cclass(L, "CMeterWindow", "CMeterWindow", "", NULL); tolua_beginmodule(L, "CMeterWindow"); + tolua_function(L, "Bang", MeterWindow_Bang); + tolua_function(L, "GetMeter", MeterWindow_GetMeter); + tolua_function(L, "GetMeasure", MeterWindow_GetMeasure); + tolua_function(L, "GetVariable", MeterWindow_GetVariable); + tolua_function(L, "ReplaceVariables", MeterWindow_ReplaceVariables); + tolua_function(L, "ParseFormula", MeterWindow_ParseFormula); tolua_function(L, "MoveWindow", MeterWindow_MoveWindow); tolua_function(L, "FadeWindow", MeterWindow_FadeWindow); - tolua_function(L, "GetSkinName", MeterWindow_GetSkinName); - tolua_function(L, "GetSkinIniFile", MeterWindow_GetSkinIniFile); tolua_function(L, "GetW", MeterWindow_GetW); tolua_function(L, "GetH", MeterWindow_GetH); tolua_function(L, "GetX", MeterWindow_GetX); tolua_function(L, "GetY", MeterWindow_GetY); tolua_function(L, "MakePathAbsolute", MeterWindow_MakePathAbsolute); - tolua_function(L, "GetMeter", MeterWindow_GetMeter); - tolua_function(L, "GetMeasure", MeterWindow_GetMeasure); - tolua_function(L, "GetVariable", MeterWindow_GetVariable); - tolua_function(L, "ReplaceVariables", MeterWindow_ReplaceVariables); - tolua_function(L, "Bang", MeterWindow_Bang); tolua_endmodule(L); }