mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 00:05:17 +03:00
[Taranis] Issue #554 - Companion part done
This commit is contained in:
parent
cde59a2b22
commit
80a6c4727d
8 changed files with 139 additions and 93 deletions
|
@ -624,17 +624,57 @@ void ModelData::setDefault(uint8_t id)
|
||||||
sprintf(name, "MODEL%02d", id+1);
|
sprintf(name, "MODEL%02d", id+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ModelData::getTrimFlightPhase(uint8_t idx, int8_t phase)
|
int ModelData::getTrimValue(int phaseIdx, int trimIdx)
|
||||||
{
|
{
|
||||||
// if (phase == -1) phase = getFlightPhase();
|
int result = 0;
|
||||||
|
for (int i=0; i<C9X_MAX_PHASES; i++) {
|
||||||
for (uint8_t i=0; i<C9X_MAX_PHASES; i++) {
|
PhaseData & phase = phaseData[phaseIdx];
|
||||||
if (phase == 0 || phaseData[phase].trimRef[idx] < 0) return phase;
|
if (phase.trimMode[trimIdx] < 0) {
|
||||||
phase = phaseData[phase].trimRef[idx];
|
return result;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (phase.trimRef[trimIdx] == phaseIdx || phaseIdx == 0) {
|
||||||
|
return result + phase.trim[trimIdx];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
phaseIdx = phase.trimRef[trimIdx];
|
||||||
|
if (phase.trimMode[trimIdx] == 0)
|
||||||
|
result = 0;
|
||||||
|
else
|
||||||
|
result += phase.trim[trimIdx];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelData::setTrimValue(int phaseIdx, int trimIdx, int value)
|
||||||
|
{
|
||||||
|
for (uint8_t i=0; i<C9X_MAX_PHASES; i++) {
|
||||||
|
PhaseData & phase = phaseData[phaseIdx];
|
||||||
|
int mode = phase.trimMode[trimIdx];
|
||||||
|
int p = phase.trimRef[trimIdx];
|
||||||
|
int & trim = phase.trim[trimIdx];
|
||||||
|
if (mode < 0)
|
||||||
|
return;
|
||||||
|
if (p == phaseIdx || phaseIdx == 0) {
|
||||||
|
trim = value;
|
||||||
|
break;;
|
||||||
|
}
|
||||||
|
else if (mode == 0) {
|
||||||
|
phaseIdx = p;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
trim = value - getTrimValue(p, trimIdx);
|
||||||
|
if (trim < -500)
|
||||||
|
trim = -500;
|
||||||
|
if (trim > 500)
|
||||||
|
trim = 500;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ModelData::removeGlobalVar(int & var)
|
void ModelData::removeGlobalVar(int & var)
|
||||||
{
|
{
|
||||||
if (var >= 126 && var <= 130)
|
if (var >= 126 && var <= 130)
|
||||||
|
|
|
@ -655,7 +655,8 @@ class FuncSwData { // Function Switches data
|
||||||
class PhaseData {
|
class PhaseData {
|
||||||
public:
|
public:
|
||||||
PhaseData() { clear(); }
|
PhaseData() { clear(); }
|
||||||
int trimRef[NUM_STICKS]; //
|
int trimMode[NUM_STICKS];
|
||||||
|
int trimRef[NUM_STICKS];
|
||||||
int trim[NUM_STICKS];
|
int trim[NUM_STICKS];
|
||||||
RawSwitch swtch;
|
RawSwitch swtch;
|
||||||
char name[10+1];
|
char name[10+1];
|
||||||
|
@ -663,7 +664,7 @@ class PhaseData {
|
||||||
unsigned int fadeOut;
|
unsigned int fadeOut;
|
||||||
int rotaryEncoders[2];
|
int rotaryEncoders[2];
|
||||||
int gvars[C9X_MAX_GVARS];
|
int gvars[C9X_MAX_GVARS];
|
||||||
void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i<NUM_STICKS; i++) trimRef[i] = -1; }
|
void clear() { memset(this, 0, sizeof(PhaseData));}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SwashRingData { // Swash Ring data
|
class SwashRingData { // Swash Ring data
|
||||||
|
@ -891,8 +892,9 @@ class ModelData {
|
||||||
void clear();
|
void clear();
|
||||||
bool isempty();
|
bool isempty();
|
||||||
void setDefault(uint8_t id);
|
void setDefault(uint8_t id);
|
||||||
unsigned int getTrimFlightPhase(uint8_t idx, int8_t phase);
|
|
||||||
|
|
||||||
|
int getTrimValue(int phaseIdx, int trimIdx);
|
||||||
|
void setTrimValue(int phaseIdx, int trimIdx, int value);
|
||||||
ModelData removeGlobalVars();
|
ModelData removeGlobalVars();
|
||||||
|
|
||||||
void clearMixes();
|
void clearMixes();
|
||||||
|
@ -981,7 +983,6 @@ enum Capability {
|
||||||
GvarsInCS,
|
GvarsInCS,
|
||||||
GvarsAreNamed,
|
GvarsAreNamed,
|
||||||
GvarsFlightPhases,
|
GvarsFlightPhases,
|
||||||
GvarsHaveSources,
|
|
||||||
GvarsAsSources,
|
GvarsAsSources,
|
||||||
GvarsName,
|
GvarsName,
|
||||||
NoTelemetryProtocol,
|
NoTelemetryProtocol,
|
||||||
|
|
|
@ -281,7 +281,6 @@ int Er9xInterface::getCapability(const Capability capability)
|
||||||
case ModelVoice:
|
case ModelVoice:
|
||||||
case Gvars:
|
case Gvars:
|
||||||
return 7;
|
return 7;
|
||||||
case GvarsHaveSources:
|
|
||||||
case GvarsAsSources:
|
case GvarsAsSources:
|
||||||
return 1;
|
return 1;
|
||||||
case GetThrSwitch:
|
case GetThrSwitch:
|
||||||
|
|
|
@ -317,7 +317,6 @@ int Ersky9xInterface::getCapability(const Capability capability)
|
||||||
return 125;
|
return 125;
|
||||||
case MaxVolume:
|
case MaxVolume:
|
||||||
return 23;
|
return 23;
|
||||||
case GvarsHaveSources:
|
|
||||||
case GvarsAsSources:
|
case GvarsAsSources:
|
||||||
return 1;
|
return 1;
|
||||||
case TelemetryMaxMultiplier:
|
case TelemetryMaxMultiplier:
|
||||||
|
|
|
@ -425,6 +425,12 @@ class PhaseField: public TransformedField {
|
||||||
for (int i=0; i<NUM_STICKS; i++)
|
for (int i=0; i<NUM_STICKS; i++)
|
||||||
internalField.Append(new SignedField<2>(trimExt[i]));
|
internalField.Append(new SignedField<2>(trimExt[i]));
|
||||||
}
|
}
|
||||||
|
else if (board == BOARD_TARANIS && version >= 216) {
|
||||||
|
for (int i=0; i<NUM_STICKS; i++) {
|
||||||
|
internalField.Append(new SignedField<11>(phase.trim[i]));
|
||||||
|
internalField.Append(new UnsignedField<5>(trimMode[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
for (int i=0; i<NUM_STICKS; i++)
|
for (int i=0; i<NUM_STICKS; i++)
|
||||||
internalField.Append(new SignedField<16>(trimBase[i]));
|
internalField.Append(new SignedField<16>(trimBase[i]));
|
||||||
|
@ -459,13 +465,20 @@ class PhaseField: public TransformedField {
|
||||||
virtual void beforeExport()
|
virtual void beforeExport()
|
||||||
{
|
{
|
||||||
for (int i=0; i<NUM_STICKS; i++) {
|
for (int i=0; i<NUM_STICKS; i++) {
|
||||||
int trim;
|
if (board == BOARD_TARANIS && version >= 216) {
|
||||||
if (phase.trimRef[i] >= 0) {
|
if (phase.trimMode[i] < 0)
|
||||||
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] >= index ? 1 : 0);
|
trimMode[i] = 0b11111;
|
||||||
|
else
|
||||||
|
trimMode[i] = 2*phase.trimRef[i] + phase.trimMode[i];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
int trim;
|
||||||
|
if (phase.trimMode[i] < 0)
|
||||||
|
trim = 0;
|
||||||
|
else if (phase.trimRef[i] != index)
|
||||||
|
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
|
||||||
|
else
|
||||||
trim = std::max(-500, std::min(500, phase.trim[i]));
|
trim = std::max(-500, std::min(500, phase.trim[i]));
|
||||||
}
|
|
||||||
if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) {
|
if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) {
|
||||||
trimBase[i] = trim >> 2;
|
trimBase[i] = trim >> 2;
|
||||||
trimExt[i] = (trim & 0x03);
|
trimExt[i] = (trim & 0x03);
|
||||||
|
@ -475,10 +488,21 @@ class PhaseField: public TransformedField {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
virtual void afterImport()
|
virtual void afterImport()
|
||||||
{
|
{
|
||||||
for (int i=0; i<NUM_STICKS; i++) {
|
for (int i=0; i<NUM_STICKS; i++) {
|
||||||
|
if (board == BOARD_TARANIS && version >= 216) {
|
||||||
|
if (trimMode[i] == 0b11111) {
|
||||||
|
phase.trimMode[i] = -1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
phase.trimMode[i] = trimMode[i] % 2;
|
||||||
|
phase.trimRef[i] = trimMode[i] / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
int trim;
|
int trim;
|
||||||
if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215))
|
if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215))
|
||||||
trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
|
trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
|
||||||
|
@ -493,7 +517,7 @@ class PhaseField: public TransformedField {
|
||||||
else {
|
else {
|
||||||
phase.trim[i] = trim;
|
phase.trim[i] = trim;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,6 +530,7 @@ class PhaseField: public TransformedField {
|
||||||
int rotencCount;
|
int rotencCount;
|
||||||
int trimBase[NUM_STICKS];
|
int trimBase[NUM_STICKS];
|
||||||
int trimExt[NUM_STICKS];
|
int trimExt[NUM_STICKS];
|
||||||
|
unsigned int trimMode[NUM_STICKS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -682,19 +682,6 @@ void CurveGroup::valuesChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void populateTrimUseCB(QComboBox *b, unsigned int phase)
|
|
||||||
{
|
|
||||||
b->addItem(QObject::tr("Own trim"));
|
|
||||||
unsigned int num_phases = GetEepromInterface()->getCapability(FlightPhases);
|
|
||||||
if (num_phases>0) {
|
|
||||||
for (unsigned int i = 0; i < num_phases; i++) {
|
|
||||||
if (i != phase) {
|
|
||||||
b->addItem(QObject::tr("Flight mode %1 trim").arg(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void populateGvarUseCB(QComboBox *b, unsigned int phase)
|
void populateGvarUseCB(QComboBox *b, unsigned int phase)
|
||||||
{
|
{
|
||||||
b->addItem(QObject::tr("Own value"));
|
b->addItem(QObject::tr("Own value"));
|
||||||
|
|
|
@ -89,7 +89,6 @@ QString FuncParam(uint function, int value, QString paramT="",unsigned int adjus
|
||||||
void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode=0);
|
void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode=0);
|
||||||
void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QStringList & paramsList);
|
void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QStringList & paramsList);
|
||||||
void populatePhasesCB(QComboBox *b, int value);
|
void populatePhasesCB(QComboBox *b, int value);
|
||||||
void populateTrimUseCB(QComboBox *b, unsigned int phase);
|
|
||||||
void populateGvarUseCB(QComboBox *b, unsigned int phase);
|
void populateGvarUseCB(QComboBox *b, unsigned int phase);
|
||||||
void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last, int hubproto);
|
void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last, int hubproto);
|
||||||
void populateTimerSwitchCB(QComboBox *b, int value);
|
void populateTimerSwitchCB(QComboBox *b, int value);
|
||||||
|
|
|
@ -17,9 +17,11 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
int modesCount = GetEepromInterface()->getCapability(FlightPhases);
|
||||||
|
|
||||||
// Phase name
|
// Phase name
|
||||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||||
if (GetEepromInterface()->getCapability(FlightPhases)) {
|
if (modesCount) {
|
||||||
ui->name->setValidator(new QRegExpValidator(rx, this));
|
ui->name->setValidator(new QRegExpValidator(rx, this));
|
||||||
ui->name->setMaxLength(GetEepromInterface()->getCapability(FlightModesName));
|
ui->name->setMaxLength(GetEepromInterface()->getCapability(FlightModesName));
|
||||||
connect(ui->name, SIGNAL(editingFinished()), this, SLOT(phaseName_editingFinished()));
|
connect(ui->name, SIGNAL(editingFinished()), this, SLOT(phaseName_editingFinished()));
|
||||||
|
@ -66,14 +68,19 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
trimsLabel[i]->setText(labels[CONVERT_MODE(i+1)-1]);
|
trimsLabel[i]->setText(labels[CONVERT_MODE(i+1)-1]);
|
||||||
|
|
||||||
if (phaseIdx > 0) {
|
QComboBox * cb = trimsUse[i];
|
||||||
trimsUse[i]->setProperty("index", i);
|
cb->setProperty("index", i);
|
||||||
populateTrimUseCB(trimsUse[i], phaseIdx);
|
cb->addItem(QObject::tr("Trim disabled"), -1);
|
||||||
connect(trimsUse[i], SIGNAL(currentIndexChanged(int)), this, SLOT(phaseTrimUse_currentIndexChanged(int)));
|
for (int m=0; m<modesCount; m++) {
|
||||||
|
if (m == phaseIdx) {
|
||||||
|
cb->addItem(QObject::tr("Own Trim"), m*2);
|
||||||
}
|
}
|
||||||
else {
|
else if (phaseIdx > 0) {
|
||||||
trimsUse[i]->hide();
|
cb->addItem(QObject::tr("Use Trim from Flight mode %1").arg(m), m*2);
|
||||||
|
cb->addItem(QObject::tr("Use Trim from Flight mode %1 + Own Trim as an offset").arg(m), m*2+1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
connect(cb, SIGNAL(currentIndexChanged(int)), this, SLOT(phaseTrimUse_currentIndexChanged(int)));
|
||||||
|
|
||||||
trimsValue[i]->setProperty("index", i);
|
trimsValue[i]->setProperty("index", i);
|
||||||
connect(trimsValue[i], SIGNAL(valueChanged(int)), this, SLOT(phaseTrim_valueChanged()));
|
connect(trimsValue[i], SIGNAL(valueChanged(int)), this, SLOT(phaseTrim_valueChanged()));
|
||||||
|
@ -123,17 +130,6 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
QLabel *label = new QLabel(ui->gvGB);
|
QLabel *label = new QLabel(ui->gvGB);
|
||||||
label->setText(tr("GVAR%1").arg(i+1));
|
label->setText(tr("GVAR%1").arg(i+1));
|
||||||
gvLayout->addWidget(label, i, col++, 1, 1);
|
gvLayout->addWidget(label, i, col++, 1, 1);
|
||||||
#if 0
|
|
||||||
// TODO remove this capability?
|
|
||||||
// GVar source (er9x/ersky9x)
|
|
||||||
if (GetEepromInterface()->getCapability(GvarsHaveSources)) {
|
|
||||||
QComboBox *source = new QComboBox(ui->gvGB);
|
|
||||||
source->setProperty("index", i);
|
|
||||||
populateGvSourceCB(source, model.gvsource[i]);
|
|
||||||
// connect(source, SIGNAL(currentIndexChanged(int)), this, SLOT(phaseGVSource_currentIndexChanged(int)));
|
|
||||||
gvLayout->addWidget(source, i, col++, 1, 1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// GVar name
|
// GVar name
|
||||||
int nameLen = GetEepromInterface()->getCapability(GvarsName);
|
int nameLen = GetEepromInterface()->getCapability(GvarsName);
|
||||||
if (nameLen > 0) {
|
if (nameLen > 0) {
|
||||||
|
@ -193,7 +189,6 @@ void FlightMode::update()
|
||||||
int chn = CONVERT_MODE(i+1)-1;
|
int chn = CONVERT_MODE(i+1)-1;
|
||||||
if (chn == 2/*TODO constant*/ && model.throttleReversed)
|
if (chn == 2/*TODO constant*/ && model.throttleReversed)
|
||||||
trimsSlider[i]->setInvertedAppearance(true);
|
trimsSlider[i]->setInvertedAppearance(true);
|
||||||
|
|
||||||
trimUpdate(i);
|
trimUpdate(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,20 +259,19 @@ void FlightMode::trimUpdate(unsigned int trim)
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
int chn = CONVERT_MODE(trim+1)-1;
|
int chn = CONVERT_MODE(trim+1)-1;
|
||||||
int value = phase.trim[chn];
|
int value = model.getTrimValue(phaseIdx, chn);
|
||||||
if (phaseIdx > 0 && phase.trimRef[chn] >= 0) {
|
trimsSlider[trim]->setValue(value);
|
||||||
trimsUse[trim]->setCurrentIndex(1 + phase.trimRef[chn] - (phase.trimRef[chn] >= phaseIdx ? 1 : 0));
|
trimsValue[trim]->setValue(value);
|
||||||
value = model.phaseData[model.getTrimFlightPhase(chn, phaseIdx)].trim[chn];
|
if (phase.trimMode[chn] < 0) {
|
||||||
|
trimsUse[trim]->setCurrentIndex(0);
|
||||||
trimsValue[trim]->setEnabled(false);
|
trimsValue[trim]->setEnabled(false);
|
||||||
trimsSlider[trim]->setEnabled(false);
|
trimsSlider[trim]->setEnabled(false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (phaseIdx > 0) trimsUse[trim]->setCurrentIndex(0);
|
trimsUse[trim]->setCurrentIndex(1 + 2*phase.trimRef[chn] + phase.trimMode[chn] - (phase.trimRef[chn] > phaseIdx ? 1 : 0));
|
||||||
trimsValue[trim]->setEnabled(true);
|
trimsValue[trim]->setEnabled(true);
|
||||||
trimsSlider[trim]->setEnabled(true);
|
trimsSlider[trim]->setEnabled(true);
|
||||||
}
|
}
|
||||||
trimsSlider[trim]->setValue(value);
|
|
||||||
trimsValue[trim]->setValue(value);
|
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,15 +374,17 @@ void FlightMode::phaseTrimUse_currentIndexChanged(int index)
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||||
int trim = comboBox->property("index").toInt();
|
int trim = comboBox->property("index").toInt();
|
||||||
int chn = CONVERT_MODE(trim+1)-1;
|
int chn = CONVERT_MODE(trim+1)-1;
|
||||||
if (index == 0) {
|
int data = comboBox->itemData(index).toInt();
|
||||||
phase.trim[chn] = model.phaseData[model.getTrimFlightPhase(chn, phaseIdx)].trim[chn];
|
if (data < 0) {
|
||||||
phase.trimRef[chn] = -1;
|
phase.trimMode[chn] = -1;
|
||||||
|
phase.trimRef[chn] = 0;
|
||||||
|
phase.trim[chn] = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
phase.trimMode[chn] = data % 2;
|
||||||
|
phase.trimRef[chn] = data / 2;
|
||||||
phase.trim[chn] = 0;
|
phase.trim[chn] = 0;
|
||||||
phase.trimRef[chn] = index - 1 + (index > (int)phaseIdx ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trimUpdate(trim);
|
trimUpdate(trim);
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
@ -401,7 +397,7 @@ void FlightMode::phaseTrim_valueChanged()
|
||||||
int trim = spinBox->property("index").toInt();
|
int trim = spinBox->property("index").toInt();
|
||||||
int chn = CONVERT_MODE(trim+1)-1;
|
int chn = CONVERT_MODE(trim+1)-1;
|
||||||
int value = spinBox->value();
|
int value = spinBox->value();
|
||||||
phase.trim[chn] = value;
|
model.setTrimValue(phaseIdx, chn, value);
|
||||||
lock = true;
|
lock = true;
|
||||||
trimsSlider[trim]->setValue(value);
|
trimsSlider[trim]->setValue(value);
|
||||||
lock = false;
|
lock = false;
|
||||||
|
@ -416,7 +412,7 @@ void FlightMode::phaseTrimSlider_valueChanged()
|
||||||
int trim = slider->property("index").toInt();
|
int trim = slider->property("index").toInt();
|
||||||
int chn = CONVERT_MODE(trim+1)-1;
|
int chn = CONVERT_MODE(trim+1)-1;
|
||||||
int value = slider->value();
|
int value = slider->value();
|
||||||
phase.trim[chn] = value;
|
model.setTrimValue(phaseIdx, chn, value);
|
||||||
lock = true;
|
lock = true;
|
||||||
trimsValue[trim]->setValue(value);
|
trimsValue[trim]->setValue(value);
|
||||||
lock = false;
|
lock = false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue