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_BelowCommitted(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)
{
m_ConditionMode = parser.ReadBool(section, L"IfConditionMode", false);
std::wstring condition = parser.ReadString(section, L"IfCondition", L"");
if (!condition.empty())
{
@ -178,11 +181,23 @@ void IfActions::DoIfActions(Measure& measure, double value)
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"
{
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;
}
for (auto& item : m_Conditions)
{
item.tCommitted = false;
item.fCommitted = false;
}
}

View File

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