1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-22 15:55:26 +03:00

Stay function added in Companion

This commit is contained in:
Bertrand Songis 2014-02-07 18:24:25 +01:00
parent 9894fda194
commit 55f600a63c
5 changed files with 50 additions and 90 deletions

View file

@ -337,7 +337,9 @@ QString CurveReference::toString()
CSFunctionFamily CustomSwData::getFunctionFamily() CSFunctionFamily CustomSwData::getFunctionFamily()
{ {
if (func == CS_FN_TIMER) if (func == CS_FN_STAY)
return CS_FAMILY_STAY;
else if (func == CS_FN_TIMER)
return CS_FAMILY_TIMER; return CS_FAMILY_TIMER;
else if (func == CS_FN_STICKY) else if (func == CS_FN_STICKY)
return CS_FAMILY_STICKY; return CS_FAMILY_STICKY;

View file

@ -1032,11 +1032,13 @@ class CustomSwitchesFunctionsTable: public ConversionTable {
addConversion(CS_FN_VEQUAL, val++); addConversion(CS_FN_VEQUAL, val++);
addConversion(CS_FN_VPOS, val++); addConversion(CS_FN_VPOS, val++);
addConversion(CS_FN_VNEG, val++); addConversion(CS_FN_VNEG, val++);
if (IS_ARM(board) && version >= 216) val++; // later RANGE
addConversion(CS_FN_APOS, val++); addConversion(CS_FN_APOS, val++);
addConversion(CS_FN_ANEG, val++); addConversion(CS_FN_ANEG, val++);
addConversion(CS_FN_AND, val++); addConversion(CS_FN_AND, val++);
addConversion(CS_FN_OR, val++); addConversion(CS_FN_OR, val++);
addConversion(CS_FN_XOR, val++); addConversion(CS_FN_XOR, val++);
if (IS_ARM(board) && version >= 216) addConversion(CS_FN_STAY, val++);
addConversion(CS_FN_EQUAL, val++); addConversion(CS_FN_EQUAL, val++);
if (!release21March2013) if (!release21March2013)
addConversion(CS_FN_NEQUAL, val++); addConversion(CS_FN_NEQUAL, val++);

View file

@ -673,11 +673,13 @@ void populateCSWCB(QComboBox *b, int value)
CS_FN_VEQUAL, // added at the end to avoid everything renumbered CS_FN_VEQUAL, // added at the end to avoid everything renumbered
CS_FN_VPOS, CS_FN_VPOS,
CS_FN_VNEG, CS_FN_VNEG,
// CS_FN_RANGE,
CS_FN_APOS, CS_FN_APOS,
CS_FN_ANEG, CS_FN_ANEG,
CS_FN_AND, CS_FN_AND,
CS_FN_OR, CS_FN_OR,
CS_FN_XOR, CS_FN_XOR,
CS_FN_STAY,
CS_FN_EQUAL, CS_FN_EQUAL,
CS_FN_NEQUAL, CS_FN_NEQUAL,
CS_FN_GREATER, CS_FN_GREATER,

View file

@ -180,16 +180,19 @@ void CustomSwitchesPanel::edited()
if (!lock) { if (!lock) {
lock = true; lock = true;
int i = sender()->property("index").toInt(); int i = sender()->property("index").toInt();
bool chAr; int newFunc = csw[i]->itemData(csw[i]->currentIndex()).toInt();
float value, step; bool chAr = (model.customSw[i].getFunctionFamily() != CustomSwData(newFunc).getFunctionFamily());
int newval; model.customSw[i].func = newFunc;
chAr = (model.customSw[i].getFunctionFamily() != CustomSwData(csw[i]->itemData(csw[i]->currentIndex()).toInt()).getFunctionFamily()); if (chAr) {
model.customSw[i].func = csw[i]->itemData(csw[i]->currentIndex()).toInt();
if(chAr) {
if (model.customSw[i].getFunctionFamily() == CS_FAMILY_TIMER) { if (model.customSw[i].getFunctionFamily() == CS_FAMILY_TIMER) {
model.customSw[i].val1 = -119; model.customSw[i].val1 = -119;
model.customSw[i].val2 = -119; model.customSw[i].val2 = -119;
} }
else if (model.customSw[i].getFunctionFamily() == CS_FAMILY_STAY) {
model.customSw[i].val1 = 0;
model.customSw[i].val2 = -129;
model.customSw[i].val3 = 0;
}
else { else {
model.customSw[i].val1 = 0; model.customSw[i].val1 = 0;
model.customSw[i].val2 = 0; model.customSw[i].val2 = 0;
@ -216,65 +219,15 @@ void CustomSwitchesPanel::edited()
} }
break; break;
case CS_FAMILY_TIMER: case CS_FAMILY_TIMER:
{ model.customSw[i].val1 = TimToVal(cswitchValue[i]->value());
value = cswitchOffset[i]->value(); model.customSw[i].val2 = TimToVal(cswitchOffset[i]->value());
newval=TimToVal(value); updateTimerParam(cswitchValue[i], model.customSw[i].val1);
if (newval>model.customSw[i].val2) { updateTimerParam(cswitchOffset[i], model.customSw[i].val2);
if (value >=60) { break;
value=round(value); case CS_FAMILY_STAY:
step=1; model.customSw[i].val2 = TimToVal(cswitchOffset[i]->value());
} else if (value>=2) { updateTimerParam(cswitchOffset[i], model.customSw[i].val2, true);
value=(round(value*2.0)/2);
step=0.5;
} else {
step=0.1;
}
}
else {
if (value <=2) {
step=0.1;
} else if (value<=60) {
value=(round(value*2.0)/2);
step=0.5;
} else {
value=round(value);
step=1;
}
}
model.customSw[i].val2=TimToVal(value);
value=ValToTim(model.customSw[i].val2);
cswitchOffset[i]->setValue(value);
cswitchOffset[i]->setSingleStep(step);
value=cswitchValue[i]->value();
newval=TimToVal(value);
if (newval>model.customSw[i].val1) {
if (value >=60) {
value=round(value);
step=1;
} else if (value>=2) {
value=(round(value*2.0)/2);
step=0.5;
} else {
step=0.1;
}
} else {
if (value <=2) {
step=0.1;
} else if (value<=60) {
value=(round(value*2.0)/2);
step=0.5;
} else {
value=round(value);
step=1;
}
}
model.customSw[i].val1=TimToVal(value);
value=ValToTim(model.customSw[i].val1);
cswitchValue[i]->setValue(value);
cswitchValue[i]->setSingleStep(step);
break; break;
}
default: default:
break; break;
} }
@ -283,6 +236,22 @@ void CustomSwitchesPanel::edited()
} }
} }
void CustomSwitchesPanel::updateTimerParam(QDoubleSpinBox *sb, int timer, bool allowZero)
{
sb->setVisible(true);
sb->setDecimals(1);
sb->setMinimum(allowZero ? 0.0 : 0.1);
sb->setMaximum(175);
float value = ValToTim(timer);
if (value>60)
sb->setSingleStep(1);
else if (value>2)
sb->setSingleStep(0.5);
else
sb->setSingleStep(0.1);
sb->setValue(value);
}
void CustomSwitchesPanel::setSwitchWidgetVisibility(int i) void CustomSwitchesPanel::setSwitchWidgetVisibility(int i)
{ {
lock = true; lock = true;
@ -320,6 +289,13 @@ void CustomSwitchesPanel::setSwitchWidgetVisibility(int i)
populateSwitchCB(cswitchSource1[i], RawSwitch(model.customSw[i].val1)); populateSwitchCB(cswitchSource1[i], RawSwitch(model.customSw[i].val1));
populateSwitchCB(cswitchSource2[i], RawSwitch(model.customSw[i].val2)); populateSwitchCB(cswitchSource2[i], RawSwitch(model.customSw[i].val2));
break; break;
case CS_FAMILY_STAY:
cswitchSource1[i]->setVisible(true);
cswitchSource2[i]->setVisible(false);
cswitchValue[i]->setVisible(false);
populateSwitchCB(cswitchSource1[i], RawSwitch(model.customSw[i].val1));
updateTimerParam(cswitchOffset[i], model.customSw[i].val2, true);
break;
case CS_FAMILY_VCOMP: case CS_FAMILY_VCOMP:
cswitchSource1[i]->setVisible(true); cswitchSource1[i]->setVisible(true);
cswitchSource2[i]->setVisible(true); cswitchSource2[i]->setVisible(true);
@ -331,31 +307,8 @@ void CustomSwitchesPanel::setSwitchWidgetVisibility(int i)
case CS_FAMILY_TIMER: case CS_FAMILY_TIMER:
cswitchSource1[i]->setVisible(false); cswitchSource1[i]->setVisible(false);
cswitchSource2[i]->setVisible(false); cswitchSource2[i]->setVisible(false);
cswitchValue[i]->setVisible(true); updateTimerParam(cswitchValue[i], model.customSw[i].val1);
cswitchOffset[i]->setVisible(true); updateTimerParam(cswitchOffset[i], model.customSw[i].val2);
cswitchOffset[i]->setDecimals(1);
cswitchOffset[i]->setMinimum(0.1);
cswitchOffset[i]->setMaximum(175);
float value=ValToTim(model.customSw[i].val2);
cswitchOffset[i]->setSingleStep(0.1);
if (value>60) {
cswitchOffset[i]->setSingleStep(1);
} else if (value>2) {
cswitchOffset[i]->setSingleStep(0.5);
}
cswitchOffset[i]->setValue(value);
cswitchValue[i]->setDecimals(1);
cswitchValue[i]->setMinimum(0.1);
cswitchValue[i]->setMaximum(175);
value=ValToTim(model.customSw[i].val1);
cswitchValue[i]->setSingleStep(0.1);
if (value>60) {
cswitchValue[i]->setSingleStep(1);
} else if (value>2) {
cswitchValue[i]->setSingleStep(0.5);
}
cswitchValue[i]->setValue(value);
break; break;
} }

View file

@ -42,6 +42,7 @@ class CustomSwitchesPanel : public ModelPanel
void updateSelectedSwitch(); void updateSelectedSwitch();
void updateV2(int index); void updateV2(int index);
void updateTimerParam(QDoubleSpinBox *sb, int timer, bool allowZero=false);
}; };