Added IfConditionMode. If 1, will execute the True/False action on every update of the measure. If 0, will only execute the True/False action once until it switches case and back again (like IfActions).

This commit is contained in:
Brian Ferguson 2013-11-08 08:36:43 -07:00
parent 1be1381e7b
commit fc96387105
2 changed files with 30 additions and 4 deletions

View File

@ -32,7 +32,8 @@ IfActions::IfActions() :
m_AboveCommitted(false), m_AboveCommitted(false),
m_BelowCommitted(false), m_BelowCommitted(false),
m_EqualCommitted(false), m_EqualCommitted(false),
m_Conditions() m_Conditions(),
m_ConditionMode(false)
{ {
} }
@ -54,6 +55,8 @@ void IfActions::ReadOptions(ConfigParser& parser, const WCHAR* section)
void IfActions::ReadConditionOptions(ConfigParser& parser, const WCHAR* section) void IfActions::ReadConditionOptions(ConfigParser& parser, const WCHAR* section)
{ {
m_ConditionMode = parser.ReadBool(section, L"IfConditionMode", false);
std::wstring condition = parser.ReadString(section, L"IfCondition", L""); std::wstring condition = parser.ReadString(section, L"IfCondition", L"");
if (!condition.empty()) if (!condition.empty())
{ {
@ -178,11 +181,23 @@ void IfActions::DoIfActions(Measure& measure, double value)
if (result == 1.0f) // "True" if (result == 1.0f) // "True"
{ {
GetRainmeter().ExecuteCommand(item.tAction.c_str(), measure.GetMeterWindow()); item.fCommitted = false;
if (m_ConditionMode || !item.tCommitted)
{
item.tCommitted = true;
GetRainmeter().ExecuteCommand(item.tAction.c_str(), measure.GetMeterWindow());
}
} }
else if (result == 0.0f) // "False" else if (result == 0.0f) // "False"
{ {
GetRainmeter().ExecuteCommand(item.fAction.c_str(), measure.GetMeterWindow()); item.tCommitted = false;
if (m_ConditionMode || !item.fCommitted)
{
item.fCommitted = true;
GetRainmeter().ExecuteCommand(item.fAction.c_str(), measure.GetMeterWindow());
}
} }
} }
} }
@ -206,4 +221,10 @@ void IfActions::SetState(double value)
{ {
m_BelowCommitted = false; m_BelowCommitted = false;
} }
for (auto& item : m_Conditions)
{
item.tCommitted = false;
item.fCommitted = false;
}
} }

View File

@ -34,7 +34,9 @@ public:
condition(), condition(),
tAction(), tAction(),
fAction(), fAction(),
parseError(false) parseError(false),
tCommitted(false),
fCommitted(false)
{ {
Set(value, trueAction, falseAction); Set(value, trueAction, falseAction);
} }
@ -50,6 +52,8 @@ public:
std::wstring tAction; // IfTrueAction std::wstring tAction; // IfTrueAction
std::wstring fAction; // IfFalseAction std::wstring fAction; // IfFalseAction
bool parseError; bool parseError;
bool tCommitted;
bool fCommitted;
}; };
class IfActions class IfActions
@ -77,5 +81,6 @@ private:
bool m_EqualCommitted; bool m_EqualCommitted;
std::vector<IfCondition> m_Conditions; std::vector<IfCondition> m_Conditions;
bool m_ConditionMode;
}; };
#endif #endif