CalibrationPanel::CalibrationPanel(QWidget * parent, GeneralSettings & generalSettings, Firmware * firmware): GeneralPanel(parent, generalSettings, firmware) { tableWidget = new QTableWidget(); QVBoxLayout * layout = new QVBoxLayout(); layout->addWidget(tableWidget); layout->setContentsMargins(0, 0, 0, 0); this->setLayout(layout); tableWidget->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); tableWidget->setColumnCount(3); tableWidget->setShowGrid(false); tableWidget->setSelectionMode(QAbstractItemView::NoSelection); tableWidget->setFrameStyle(QFrame::NoFrame | QFrame::Plain); tableWidget->setStyleSheet("QTableWidget {background-color: transparent;}"); QStringList headerLabels; headerLabels << QObject::tr("Negative span") << QObject::tr("Mid value") << QObject::tr("Positive span"); tableWidget->setHorizontalHeaderLabels(headerLabels); int rows = NUM_STICKS + GetCurrentFirmware()->getCapability(Pots) + GetCurrentFirmware()->getCapability(Sliders); tableWidget->setRowCount(rows); for(int i = 0; i < rows; ++i) { QTableWidgetItem *newItem = new QTableWidgetItem(AnalogString(i)); newItem->setTextAlignment(Qt::AlignLeft); tableWidget->setVerticalHeaderItem(i, newItem); for(int j = 0; j < 3; ++j) { QSpinBox * newItem = new QSpinBox(); newItem->setMinimum(-9999); newItem->setMaximum(9999); newItem->setSingleStep(1); newItem->setValue(getCalibrationValue(i, j)); newItem->setProperty("row", i); newItem->setProperty("column", j); tableWidget->setCellWidget(i, j, newItem); connect(newItem, SIGNAL(valueChanged(int)), this, SLOT(onCellChanged(int))); } } disableMouseScrolling(); }
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware) : QDialog(parent), ui(new Ui::MixerDialog), model(model), generalSettings(generalSettings), firmware(firmware), md(mixdata), lock(false) { ui->setupUi(this); QRegExp rx(CHAR_FOR_NAMES_REGEX); QLabel * lb_fp[] = {ui->lb_FP0,ui->lb_FP1,ui->lb_FP2,ui->lb_FP3,ui->lb_FP4,ui->lb_FP5,ui->lb_FP6,ui->lb_FP7,ui->lb_FP8 }; QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 }; this->setWindowTitle(tr("DEST -> CH%1").arg(md->destCh)); populateSourceCB(ui->sourceCB, md->srcRaw, generalSettings, &model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->sourceCB->removeItem(0); int limit = firmware->getCapability(OffsetWeight); gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, 100, -limit, limit); gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, 0, -limit, limit); curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, md->curve, firmware->getCapability(HasMixerExpo) ? 0 : HIDE_EXPO); ui->MixDR_CB->setChecked(md->noExpo == 0); if (!firmware->getCapability(HasNoExpo)) { ui->MixDR_CB->hide(); ui->label_MixDR->hide(); } if (!firmware->getCapability(VirtualInputs)) { for(int i=0; i < NUM_STICKS; i++) { ui->trimCB->addItem(AnalogString(i)); } } ui->trimCB->setCurrentIndex(1 - md->carryTrim); int namelength = firmware->getCapability(HasMixerNames); if (!namelength) { ui->label_name->hide(); ui->mixerName->hide(); } else { ui->mixerName->setMaxLength(namelength); } ui->mixerName->setValidator(new QRegExpValidator(rx, this)); ui->mixerName->setText(md->name); if (!firmware->getCapability(FlightModes)) { ui->label_phases->hide(); for (int i=0; i<9; i++) { lb_fp[i]->hide(); cb_fp[i]->hide(); } } else { int mask = 1; for (int i=0; i<9 ; i++) { if ((md->flightModes & mask) == 0) { cb_fp[i]->setChecked(true); } mask <<= 1; } for (int i=firmware->getCapability(FlightModes); i<9; i++) { lb_fp[i]->hide(); cb_fp[i]->hide(); } } populateSwitchCB(ui->switchesCB, md->swtch, generalSettings, MixesContext); ui->warningCB->setCurrentIndex(md->mixWarn); ui->mltpxCB->setCurrentIndex(md->mltpx); int scale=firmware->getCapability(SlowScale); float range=firmware->getCapability(SlowRange); ui->slowDownSB->setMaximum(range/scale); ui->slowDownSB->setSingleStep(1.0/scale); ui->slowDownSB->setDecimals((scale==1 ? 0 :1)); ui->slowDownSB->setValue((float)md->speedDown/scale); ui->slowUpSB->setMaximum(range/scale); ui->slowUpSB->setSingleStep(1.0/scale); ui->slowUpSB->setDecimals((scale==1 ? 0 :1)); ui->slowUpSB->setValue((float)md->speedUp/scale); ui->delayDownSB->setMaximum(range/scale); ui->delayDownSB->setSingleStep(1.0/scale); ui->delayDownSB->setDecimals((scale==1 ? 0 :1)); ui->delayDownSB->setValue((float)md->delayDown/scale); ui->delayUpSB->setMaximum(range/scale); ui->delayUpSB->setSingleStep(1.0/scale); ui->delayUpSB->setDecimals((scale==1 ? 0 :1)); ui->delayUpSB->setValue((float)md->delayUp/scale); QTimer::singleShot(0, this, SLOT(shrink())); valuesChanged(); connect(ui->mixerName,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); connect(ui->sourceCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->trimCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->MixDR_CB,SIGNAL(toggled(bool)),this,SLOT(valuesChanged())); connect(ui->switchesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->warningCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->mltpxCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->delayDownSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); connect(ui->delayUpSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); connect(ui->slowDownSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); connect(ui->slowUpSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); for (int i=0; i<9; i++) { connect(cb_fp[i],SIGNAL(toggled(bool)),this,SLOT(valuesChanged())); } }
QString RawSource::toString(const ModelData & model) { static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA") }; static const QString telemetry[] = { QObject::tr("Batt"), QObject::tr("Time"), QObject::tr("Timer1"), QObject::tr("Timer2"), QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"), QObject::tr("A1"), QObject::tr("A2"), QObject::tr("A3"), QObject::tr("A4"), QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), QObject::tr("T2"), QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"), QObject::tr("Cell"), QObject::tr("Cells"), QObject::tr("Vfas"), QObject::tr("Curr"), QObject::tr("Cnsp"), QObject::tr("Powr"), QObject::tr("AccX"), QObject::tr("AccY"), QObject::tr("AccZ"), QObject::tr("Hdg "), QObject::tr("VSpd"), QObject::tr("AirSpeed"), QObject::tr("dTE"), QObject::tr("A1-"), QObject::tr("A2-"), QObject::tr("A3-"), QObject::tr("A4-"), QObject::tr("Alt-"), QObject::tr("Alt+"), QObject::tr("Rpm+"), QObject::tr("T1+"), QObject::tr("T2+"), QObject::tr("Speed+"), QObject::tr("Dist+"), QObject::tr("AirSpeed+"), QObject::tr("Cell-"), QObject::tr("Cells-"), QObject::tr("Vfas-"), QObject::tr("Curr+"), QObject::tr("Powr+"), QObject::tr("ACC"), QObject::tr("GPS Time"), }; static const QString logicalSwitches[] = { QObject::tr("L1"), QObject::tr("L2"), QObject::tr("L3"), QObject::tr("L4"), QObject::tr("L5"), QObject::tr("L6"), QObject::tr("L7"), QObject::tr("L8"), QObject::tr("L9"), QObject::tr("L10"), QObject::tr("L11"), QObject::tr("L12"), QObject::tr("L13"), QObject::tr("L14"), QObject::tr("L15"), QObject::tr("L16"), QObject::tr("L17"), QObject::tr("L18"), QObject::tr("L19"), QObject::tr("L20"), QObject::tr("L21"), QObject::tr("L22"), QObject::tr("L23"), QObject::tr("L24"), QObject::tr("L25"), QObject::tr("L26"), QObject::tr("L27"), QObject::tr("L28"), QObject::tr("L29"), QObject::tr("L30"), QObject::tr("L31"), QObject::tr("L32") }; if (index<0) { return QObject::tr("----"); } switch (type) { case SOURCE_TYPE_VIRTUAL_INPUT: { QString result = QObject::tr("[I%1]").arg(index+1); if (strlen(model.inputNames[index]) > 0) { result += QString(model.inputNames[index]); } return result; } case SOURCE_TYPE_LUA_OUTPUT: return QObject::tr("LUA%1%2").arg(index/16+1).arg(QChar('a'+index%16)); case SOURCE_TYPE_STICK: return AnalogString(index); case SOURCE_TYPE_TRIM: return CHECK_IN_ARRAY(trims, index); case SOURCE_TYPE_ROTARY_ENCODER: return RotaryEncoderString(index); case SOURCE_TYPE_MAX: return QObject::tr("MAX"); case SOURCE_TYPE_SWITCH: return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(switchesX9D, index) : CHECK_IN_ARRAY(switches9X, index)); case SOURCE_TYPE_CUSTOM_SWITCH: return logicalSwitches[index]; case SOURCE_TYPE_CYC: return QObject::tr("CYC%1").arg(index+1); case SOURCE_TYPE_PPM: return QObject::tr("TR%1").arg(index+1); case SOURCE_TYPE_CH: return QObject::tr("CH%1").arg(index+1); case SOURCE_TYPE_TELEMETRY: return CHECK_IN_ARRAY(telemetry, index); case SOURCE_TYPE_GVAR: return QObject::tr("GV%1").arg(index+1); default: return QObject::tr("----"); } }
ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings, Firmware * firmware, QString & inputName) : QDialog(parent), ui(new Ui::ExpoDialog), model(model), generalSettings(generalSettings), firmware(firmware), ed(expoData), inputName(inputName), modelPrinter(firmware, generalSettings, model) { ui->setupUi(this); QLabel * lb_fp[] = {ui->lb_FP0,ui->lb_FP1,ui->lb_FP2,ui->lb_FP3,ui->lb_FP4,ui->lb_FP5,ui->lb_FP6,ui->lb_FP7,ui->lb_FP8 }; QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 }; setWindowTitle(tr("Edit %1").arg(modelPrinter.printInputName(ed->chn))); QRegExp rx(CHAR_FOR_NAMES_REGEX); if (IS_TARANIS(GetEepromInterface()->getBoard())) { gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, -100, 100); gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, 0, -100, 100); } else { gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100); gvOffsetGroup = NULL; ui->offsetLabel->hide(); ui->offsetGV->hide(); ui->offsetSB->hide(); ui->offsetCB->hide(); } curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve, firmware->getCapability(HasInputDiff) ? 0 : (HIDE_DIFF | HIDE_NEGATIVE_CURVES)); populateSwitchCB(ui->switchesCB, ed->swtch, generalSettings, MixesContext); ui->sideCB->setCurrentIndex(ed->mode-1); if (!firmware->getCapability(FlightModes)) { ui->label_phases->hide(); for (int i=0; i<9; i++) { lb_fp[i]->hide(); cb_fp[i]->hide(); } } else { int mask = 1; for (int i=0; i<9; i++) { if ((ed->flightModes & mask) == 0) { cb_fp[i]->setChecked(true); } mask <<= 1; } for (int i=firmware->getCapability(FlightModes); i<9; i++) { lb_fp[i]->hide(); cb_fp[i]->hide(); } } if (firmware->getCapability(VirtualInputs)) { ui->inputName->setMaxLength(4); populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); ui->sourceCB->removeItem(0); ui->inputName->setValidator(new QRegExpValidator(rx, this)); ui->inputName->setText(inputName); } else { ui->inputNameLabel->hide(); ui->inputName->hide(); ui->sourceLabel->hide(); ui->sourceCB->hide(); ui->trimLabel->hide(); ui->trimCB->hide(); } for(int i=0; i < NUM_STICKS; i++) { ui->trimCB->addItem(AnalogString(i), i+1); } ui->trimCB->setCurrentIndex(1 - ed->carryTrim); int expolength = firmware->getCapability(HasExpoNames); if (!expolength) { ui->lineNameLabel->hide(); ui->lineName->hide(); } else { ui->lineName->setMaxLength(expolength); } ui->lineName->setValidator(new QRegExpValidator(rx, this)); ui->lineName->setText(ed->name); updateScale(); valuesChanged(); connect(ui->lineName, SIGNAL(editingFinished()), this, SLOT(valuesChanged())); connect(ui->sourceCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged())); connect(ui->scale, SIGNAL(editingFinished()), this, SLOT(valuesChanged())); connect(ui->trimCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged())); connect(ui->switchesCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged())); connect(ui->sideCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged())); for (int i=0; i<9; i++) { connect(cb_fp[i], SIGNAL(toggled(bool)), this, SLOT(valuesChanged())); } if (firmware->getCapability(VirtualInputs)) connect(ui->inputName, SIGNAL(editingFinished()), this, SLOT(valuesChanged())); QTimer::singleShot(0, this, SLOT(shrink())); }
QString MultiModelPrinter::printFlightModes() { QString str = printTitle(tr("Flight modes")); // Trims { MultiColumns columns(models.size()); columns.append("<table cellspacing='0' cellpadding='1' width='100%' border='0' style='border-collapse:collapse'>"); columns.append("<tr>"); columns.append("<td><b>" + tr("Flight mode") + "</b></td>"); columns.append("<td><b>" + tr("Switch") + "</b></td>"); columns.append("<td><b>" + tr("Fade IN") + "</b></td>"); columns.append("<td><b>" + tr("Fade OUT") + "</b></td>"); for (int i=0; i<NUM_STICKS; i++) { columns.append("<td><b>" + AnalogString(i) + " trim</b></td>"); } columns.append("</tr>"); for (int i=0; i<firmware->getCapability(FlightModes); i++) { columns.append("<tr><td><b>" + tr("FM%1").arg(i) + "</b> "); COMPARE(model->flightModeData[i].name); columns.append("</td><td>"); COMPARE(model->flightModeData[i].swtch.toString()); columns.append("</td><td>"); COMPARE(model->flightModeData[i].fadeIn); columns.append("</td><td>"); COMPARE(model->flightModeData[i].fadeOut); columns.append("</td>"); for (int k=0; k<NUM_STICKS; k++) { columns.append("<td>"); COMPARE(modelPrinter->printTrim(i, k)); columns.append("</td>"); } columns.append("</tr>"); } columns.append("</table>"); str.append(columns.print()); } // GVars and Rotary Encoders int gvars = firmware->getCapability(Gvars); if ((gvars && firmware->getCapability(GvarsFlightModes)) || firmware->getCapability(RotaryEncoders)) { MultiColumns columns(models.size()); columns.append("<table cellspacing='0' cellpadding='1' width='100%' border='0' style='border-collapse:collapse'>"); columns.append("<tr><td><b>" + tr("Flight mode") + "</b></td>"); if (firmware->getCapability(GvarsFlightModes)) { for (int i=0; i<gvars; i++) { columns.append("<td><b>" + tr("GV%1").arg(i+1) + "</b><br/>"); COMPARE(model->gvars_names[i]); columns.append("</td>"); } } for (int i=0; i<firmware->getCapability(RotaryEncoders); i++) { columns.append("<td><b>" + tr("RE%1").arg(i+1) + "</b></td>"); } columns.append("</tr>"); for (int i=0; i<firmware->getCapability(FlightModes); i++) { columns.append("<tr><td><b>" + tr("FM%1").arg(i) + "</b> "); COMPARE(model->flightModeData[i].name); columns.append("</td>"); if (firmware->getCapability(GvarsFlightModes)) { for (int k=0; k<gvars; k++) { columns.append("<td>"); COMPARE(modelPrinter->printGlobalVar(i, k)); columns.append("</td>"); } } for (int k=0; k<firmware->getCapability(RotaryEncoders); k++) { columns.append("<td>"); COMPARE(modelPrinter->printRotaryEncoder(i, k)); columns.append("</td>"); } columns.append("</tr>"); } columns.append("</table>"); str.append(columns.print()); } return str; }