MeasureScript::~MeasureScript() { UninitializeLuaScript(); LuaManager::Finalize(); }
/* ** Read the options specified in the ini file. ** */ void MeasureScript::ReadOptions(ConfigParser& parser, const WCHAR* section) { Measure::ReadOptions(parser, section); std::wstring scriptFile = parser.ReadString(section, L"ScriptFile", L""); if (!scriptFile.empty()) { if (m_Skin) { m_Skin->MakePathAbsolute(scriptFile); } if (!m_Initialized || wcscmp(scriptFile.c_str(), m_LuaScript.GetFile().c_str()) != 0) { UninitializeLuaScript(); if (m_LuaScript.Initialize(scriptFile)) { bool hasInitializeFunction = m_LuaScript.IsFunction(g_InitializeFunctionName); m_HasUpdateFunction = m_LuaScript.IsFunction(g_UpdateFunctionName); auto L = m_LuaScript.GetState(); lua_rawgeti(L, LUA_GLOBALSINDEX, m_LuaScript.GetRef()); *(Skin**)lua_newuserdata(L, sizeof(Skin*)) = m_Skin; lua_getglobal(L, "MeterWindow"); lua_setmetatable(L, -2); lua_setfield(L, -2, "SKIN"); *(Measure**)lua_newuserdata(L, sizeof(Measure*)) = this; lua_getglobal(L, "Measure"); lua_setmetatable(L, -2); lua_setfield(L, -2, "SELF"); if (!m_LuaScript.IsUnicode()) { // For backwards compatibility. m_HasGetStringFunction = m_LuaScript.IsFunction(g_GetStringFunctionName); if (m_HasGetStringFunction) { LogWarningF(this, L"Script: Using deprecated GetStringValue()"); } lua_getfield(L, -1, "PROPERTIES"); if (lua_isnil(L, -1) == 0) { lua_pushnil(L); // Look in the table for values to read from the section while (lua_next(L, -2)) { lua_pop(L, 1); const char* strKey = lua_tostring(L, -1); const std::wstring wstrKey = StringUtil::Widen(strKey); const std::wstring& wstrValue = parser.ReadString(section, wstrKey.c_str(), L""); if (!wstrValue.empty()) { const std::string strStrVal = StringUtil::Narrow(wstrValue); lua_pushstring(L, strStrVal.c_str()); lua_setfield(L, -3, strKey); } } } // Pop PROPERTIES table. lua_pop(L, 1); } // Pop our table. lua_pop(L, 1); if (m_Initialized) { // If the measure is already initialized and the script has changed, we need to // manually call Initialize(). Initialize(); } // Valid script. return; } } else if (m_LuaScript.IsInitialized()) { // Already initialized. return; } } LogErrorF(this, L"Script: File not valid"); UninitializeLuaScript(); }
MeasureScript::~MeasureScript() { UninitializeLuaScript(); }