- SetOption: Fixed that new image isn't loaded if DynamicVariables=0.

- SetOption: Fixed that Rainmeter crashes if !SetOption is executed to Measure=Plugin.
- Code cleanup and cosmetic changes.
This commit is contained in:
spx 2011-07-27 14:18:02 +00:00
parent a76e8d1765
commit fb004083d2
6 changed files with 34 additions and 21 deletions

View File

@ -1208,10 +1208,10 @@ void CConfigParser::DeleteValue(const std::wstring& strSection, const std::wstri
std::wstring strTmp = strSection + L"::"; std::wstring strTmp = strSection + L"::";
strTmp += strKey; strTmp += strKey;
std::unordered_map<std::wstring, std::wstring>::iterator i = m_Values.find(StrToLower(strTmp)); std::unordered_map<std::wstring, std::wstring>::iterator iter = m_Values.find(StrToLower(strTmp));
if (i != m_Values.end()) if (iter != m_Values.end())
{ {
m_Values.erase(i); m_Values.erase(iter);
} }
} }

View File

@ -62,6 +62,8 @@ void CMeasureScript::DeleteLuaScript()
m_HasInitializeFunction = false; m_HasInitializeFunction = false;
m_HasUpdateFunction = false; m_HasUpdateFunction = false;
m_HasGetStringFunction = false; m_HasGetStringFunction = false;
m_ScriptFile.clear();
} }
/* /*
@ -125,9 +127,6 @@ const WCHAR* CMeasureScript::GetStringValue(AUTOSCALE autoScale, double scale, i
*/ */
void CMeasureScript::ReadConfig(CConfigParser& parser, const WCHAR* section) void CMeasureScript::ReadConfig(CConfigParser& parser, const WCHAR* section)
{ {
// Store the current values
std::string oldScriptFile = m_ScriptFile;
// Read common configs // Read common configs
CMeasure::ReadConfig(parser, section); CMeasure::ReadConfig(parser, section);
@ -135,15 +134,15 @@ void CMeasureScript::ReadConfig(CConfigParser& parser, const WCHAR* section)
if (!file.empty()) if (!file.empty())
{ {
file = m_MeterWindow->MakePathAbsolute(file); std::string scriptFile = ConvertToAscii(m_MeterWindow->MakePathAbsolute(file).c_str());
m_ScriptFile = ConvertToAscii(file.c_str());
if (!m_Initialized || if (!m_Initialized ||
oldScriptFile != m_ScriptFile) scriptFile != m_ScriptFile)
{ {
lua_State* L = LuaManager::GetState();
DeleteLuaScript(); DeleteLuaScript();
lua_State* L = LuaManager::GetState();
m_ScriptFile = scriptFile;
m_LuaScript = new LuaScript(LuaManager::GetState(), m_ScriptFile.c_str()); m_LuaScript = new LuaScript(LuaManager::GetState(), m_ScriptFile.c_str());
if (m_LuaScript->IsInitialized()) if (m_LuaScript->IsInitialized())

View File

@ -45,7 +45,6 @@ protected:
std::wstring m_StringValue; std::wstring m_StringValue;
std::string m_ScriptFile; std::string m_ScriptFile;
std::string m_TableName;
}; };
#endif #endif

View File

@ -33,7 +33,7 @@ using namespace Gdiplus;
** **
*/ */
CMeterImage::CMeterImage(CMeterWindow* meterWindow, const WCHAR* name) : CMeter(meterWindow, name), CMeterImage::CMeterImage(CMeterWindow* meterWindow, const WCHAR* name) : CMeter(meterWindow, name),
m_NeedsReload(false), m_NeedsRedraw(false),
m_WidthDefined(false), m_WidthDefined(false),
m_HeightDefined(false), m_HeightDefined(false),
m_PreserveAspectRatio(false), m_PreserveAspectRatio(false),
@ -157,6 +157,13 @@ void CMeterImage::ReadConfig(CConfigParser& parser, const WCHAR* section)
// Read tinting configs // Read tinting configs
m_Image.ReadConfig(parser, section); m_Image.ReadConfig(parser, section);
if (m_Initialized &&
!m_Measure && !m_DynamicVariables)
{
Initialize();
m_NeedsRedraw = true;
}
} }
/* /*
@ -216,6 +223,11 @@ bool CMeterImage::Update()
LoadImage(m_ImageNameResult, oldResult != m_ImageNameResult); LoadImage(m_ImageNameResult, oldResult != m_ImageNameResult);
return true; return true;
} }
else if (m_NeedsRedraw)
{
m_NeedsRedraw = false;
return true;
}
} }
return false; return false;
} }

View File

@ -42,7 +42,7 @@ protected:
std::wstring m_ImageNameResult; // Name of the image (as absolute path) std::wstring m_ImageNameResult; // Name of the image (as absolute path)
std::wstring m_Path; std::wstring m_Path;
bool m_NeedsReload; bool m_NeedsRedraw;
bool m_WidthDefined; bool m_WidthDefined;
bool m_HeightDefined; bool m_HeightDefined;
bool m_PreserveAspectRatio; // If true, aspect ratio of the image is preserved when the image is scaled bool m_PreserveAspectRatio; // If true, aspect ratio of the image is preserved when the image is scaled

View File

@ -1461,27 +1461,29 @@ void CMeterWindow::SetOption(const WCHAR* arg, bool group)
if (group) if (group)
{ {
for (std::list<CMeter*>::const_iterator i = m_Meters.begin(); i != m_Meters.end(); ++i) for (std::list<CMeter*>::const_iterator j = m_Meters.begin(); j != m_Meters.end(); ++j)
{ {
if ((*i)->BelongsToGroup(section)) if ((*j)->BelongsToGroup(section))
{ {
(*i)->SetDynamicVariables(true); // Force DynamicVariables temporarily (it will reset back to original setting in ReadConfig())
(*j)->SetDynamicVariables(true);
if (value.empty()) if (value.empty())
{ {
GetParser().DeleteValue((*i)->GetName(), option); GetParser().DeleteValue((*j)->GetName(), option);
} }
else else
{ {
GetParser().SetValue((*i)->GetName(), option, value); GetParser().SetValue((*j)->GetName(), option, value);
} }
} }
} }
for (std::list<CMeasure*>::const_iterator i = m_Measures.begin(); i != m_Measures.end(); ++i) for (std::list<CMeasure*>::const_iterator i = m_Measures.begin(); i != m_Measures.end(); ++i)
{ {
if ((*i)->BelongsToGroup(section)) if ((*i)->BelongsToGroup(section) && dynamic_cast<CMeasurePlugin*>(*i) == NULL)
{ {
// Force DynamicVariables temporarily (it will reset back to original setting in ReadConfig())
(*i)->SetDynamicVariables(true); (*i)->SetDynamicVariables(true);
if (value.empty()) if (value.empty())
@ -1516,8 +1518,9 @@ void CMeterWindow::SetOption(const WCHAR* arg, bool group)
} }
CMeasure* measure = GetMeasure(section); CMeasure* measure = GetMeasure(section);
if (measure) if (measure && dynamic_cast<CMeasurePlugin*>(measure) == NULL)
{ {
// Force DynamicVariables temporarily (it will reset back to original setting in ReadConfig())
measure->SetDynamicVariables(true); measure->SetDynamicVariables(true);
if (value.empty()) if (value.empty())