Fixes #4136 - Reset all logical switch fields on change of function type - By @elecpower

This commit is contained in:
Bertrand Songis
2017-03-02 20:24:01 +01:00
parent 40dae8a8a7
commit d724ec1128
4 changed files with 22 additions and 21 deletions
+3 -12
View File
@@ -25,7 +25,7 @@ LogicalSwitchesPanel::LogicalSwitchesPanel(QWidget * parent, ModelData & model,
ModelPanel(parent, model, generalSettings, firmware),
selectedSwitch(0)
{
Stopwatch s1("LogicalSwitchesPanel");
Stopwatch s1("LogicalSwitchesPanel");
int channelsMax = model.getChannelsMax(true);
@@ -213,23 +213,14 @@ void LogicalSwitchesPanel::edited()
CSFunctionFamily newFuncFamily = model->logicalSw[i].getFunctionFamily();
if (oldFuncFamily != newFuncFamily) {
model->logicalSw[i].clear();
model->logicalSw[i].func = csw[i]->itemData(csw[i]->currentIndex()).toInt();
if (newFuncFamily == LS_FAMILY_TIMER) {
model->logicalSw[i].val1 = -119;
model->logicalSw[i].val2 = -119;
}
else if (newFuncFamily == LS_FAMILY_EDGE) {
model->logicalSw[i].val1 = 0;
model->logicalSw[i].val2 = -129;
model->logicalSw[i].val3 = 0;
}
else if (newFuncFamily == LS_FAMILY_STICKY) {
model->logicalSw[i].val1 = 0;
model->logicalSw[i].val2 = 0;
model->logicalSw[i].delay = 0;
}
else {
model->logicalSw[i].val1 = 0;
model->logicalSw[i].val2 = 0;
}
setSwitchWidgetVisibility(i);
}
@@ -445,7 +445,17 @@ void menuModelLogicalSwitches(event_t event)
CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, LS_FUNC_MAX);
uint8_t new_cstate = lswFamily(cs->func);
if (cstate != new_cstate) {
cs->v1 = cs->v2 = (new_cstate==LS_FAMILY_TIMER ? -119/*1.0*/ : 0);
#if defined(CPUARM)
unsigned int save_func = cs->func;
memset(cs, 0, sizeof(LogicalSwitchData));
cs->func = save_func;
#else
cs->v1 = cs->v2 = 0;
cs->andsw = 0;
#endif
if (new_cstate == LS_FAMILY_TIMER) {
cs->v1 = cs->v2 = -119; // 1.0
}
}
break;
}
@@ -212,14 +212,14 @@ void menuModelLogicalSwitches(event_t event)
cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable);
uint8_t new_cstate = lswFamily(cs->func);
if (cstate != new_cstate) {
unsigned int save_func = cs->func;
memset(cs, 0, sizeof(LogicalSwitchData));
cs->func = save_func;
if (new_cstate == LS_FAMILY_TIMER) {
cs->v1 = cs->v2 = -119;
}
else if (new_cstate == LS_FAMILY_EDGE) {
cs->v1 = 0; cs->v2 = -129; cs->v3 = 0;
}
else {
cs->v1 = cs->v2 = 0;
cs->v2 = -129;
}
}
break;
@@ -204,14 +204,14 @@ bool menuModelLogicalSwitches(event_t event)
cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable);
uint8_t new_cstate = lswFamily(cs->func);
if (cstate != new_cstate) {
unsigned int save_func = cs->func;
memset(cs, 0, sizeof(LogicalSwitchData));
cs->func = save_func;
if (new_cstate == LS_FAMILY_TIMER) {
cs->v1 = cs->v2 = -119;
}
else if (new_cstate == LS_FAMILY_EDGE) {
cs->v1 = 0; cs->v2 = -129; cs->v3 = 0;
}
else {
cs->v1 = cs->v2 = 0;
cs->v2 = -129;
}
}
break;