From dca935f6ff8481e0cd15732f2b92ec40fcd7d68a Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Thu, 8 Mar 2012 15:42:46 +0000 Subject: [PATCH] Script: Added measure:ReadString(), measure:ReadNumber(), measure:ReadFormula() --- Library/lua/glue/LuaMeasure.cpp | 55 ++++++++++++++++++++++------- Library/lua/glue/LuaMeter.cpp | 7 +--- Library/lua/glue/LuaMeterWindow.cpp | 1 - 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/Library/lua/glue/LuaMeasure.cpp b/Library/lua/glue/LuaMeasure.cpp index 2b4b3e12..7db9d909 100644 --- a/Library/lua/glue/LuaMeasure.cpp +++ b/Library/lua/glue/LuaMeasure.cpp @@ -37,23 +37,51 @@ static int Measure_GetOption(lua_State* L) CConfigParser& parser = meterWindow->GetParser(); std::wstring strTmp = LuaManager::ToWide(L, 2); - strTmp = parser.GetValue(self->GetOriginalName(), strTmp, L""); - - if (strTmp.size() >= 3) - { - if (strTmp.find(L'#') != std::wstring::npos) - { - parser.SetCurrentSection(self->GetOriginalName()); // Set temporarily - parser.ReplaceVariables(strTmp); - parser.ClearCurrentSection(); // Reset - } - parser.ReplaceMeasures(strTmp); - } + strTmp = parser.ReadString(self->GetName(), strTmp.c_str(), L""); LuaManager::PushWide(L, strTmp.c_str()); return 1; } +static int Measure_ReadString(lua_State* L) +{ + CMeasure* self = (CMeasure*)tolua_tousertype(L, 1, 0); + CMeterWindow* meterWindow = self->GetMeterWindow(); + CConfigParser& parser = meterWindow->GetParser(); + + std::wstring strTmp = LuaManager::ToWide(L, 2); + strTmp = parser.ReadString(self->GetName(), strTmp.c_str(), LuaManager::ToWide(L, 3).c_str()); + + LuaManager::PushWide(L, strTmp.c_str()); + return 1; +} + +static int Measure_ReadNumber(lua_State* L) +{ + CMeasure* self = (CMeasure*)tolua_tousertype(L, 1, 0); + CMeterWindow* meterWindow = self->GetMeterWindow(); + CConfigParser& parser = meterWindow->GetParser(); + + std::wstring strTmp = LuaManager::ToWide(L, 2); + double value = parser.ReadFloat(self->GetName(), strTmp.c_str(), tolua_tonumber(L, 3, 0)); + + lua_pushnumber(L, value); + return 1; +} + +static int Measure_ReadFormula(lua_State* L) +{ + CMeasure* self = (CMeasure*)tolua_tousertype(L, 1, 0); + CMeterWindow* meterWindow = self->GetMeterWindow(); + CConfigParser& parser = meterWindow->GetParser(); + + 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; +} + static int Measure_Disable(lua_State* L) { CMeasure* self = (CMeasure*)tolua_tousertype(L, 1, 0); @@ -137,6 +165,9 @@ void LuaManager::RegisterMeasure(lua_State* L) tolua_beginmodule(L, "CMeasure"); tolua_function(L, "GetName", Measure_GetName); tolua_function(L, "GetOption", Measure_GetOption); + tolua_function(L, "ReadString", Measure_ReadString); + tolua_function(L, "ReadNumber", Measure_ReadNumber); + tolua_function(L, "ReadFormula", Measure_ReadFormula); tolua_function(L, "Disable", Measure_Disable); tolua_function(L, "Enable", Measure_Enable); tolua_function(L, "GetValue", Measure_GetValue); diff --git a/Library/lua/glue/LuaMeter.cpp b/Library/lua/glue/LuaMeter.cpp index 3f1de2a9..b9f12dc1 100644 --- a/Library/lua/glue/LuaMeter.cpp +++ b/Library/lua/glue/LuaMeter.cpp @@ -37,12 +37,7 @@ static int Meter_GetOption(lua_State* L) CConfigParser& parser = meterWindow->GetParser(); std::wstring strTmp = LuaManager::ToWide(L, 2); - strTmp = parser.GetValue(self->GetOriginalName(), strTmp, L""); - - parser.SetBuiltInVariable(L"CURRENTSECTION", self->GetOriginalName()); // Set temporarily - parser.ReplaceVariables(strTmp); - parser.SetBuiltInVariable(L"CURRENTSECTION", L""); // Reset - parser.ReplaceMeasures(strTmp); + strTmp = parser.ReadString(self->GetName(), strTmp.c_str(), L""); LuaManager::PushWide(L, strTmp.c_str()); return 1; diff --git a/Library/lua/glue/LuaMeterWindow.cpp b/Library/lua/glue/LuaMeterWindow.cpp index be78d418..1ae325a3 100644 --- a/Library/lua/glue/LuaMeterWindow.cpp +++ b/Library/lua/glue/LuaMeterWindow.cpp @@ -172,7 +172,6 @@ static int MeterWindow_Bang(lua_State* L) CConfigParser& parser = self->GetParser(); parser.ReplaceVariables(strTmp); - parser.ReplaceMeasures(strTmp); self->GetMainObject()->ExecuteCommand(strTmp.c_str(), self); return 0;