diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 983e73a7e..b00b7c32c 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -513,36 +513,43 @@ QString LogicalSwitchData::toString(const ModelData & model) } switch (getFunctionFamily()) { case LS_FAMILY_STAY: - result = QObject::tr("STAY(%1, [%2:%3])").arg(RawSwitch(val1).toString()).arg(ValToTim(val2)).arg(ValToTim(val2+val3)); + result += QObject::tr("Edge(%1, [%2:%3])").arg(RawSwitch(val1).toString()).arg(ValToTim(val2)).arg(ValToTim(val2+val3)); break; case LS_FAMILY_STICKY: - result = QObject::tr("STICKY(%1, %2)").arg(RawSwitch(val1).toString()).arg(RawSwitch(val2).toString()); + result += QObject::tr("Sticky(%1, %2)").arg(RawSwitch(val1).toString()).arg(RawSwitch(val2).toString()); break; case LS_FAMILY_TIMER: - result = QObject::tr("TIMER(%1, %2)").arg(ValToTim(val1)).arg(ValToTim(val2)); + result += QObject::tr("Timer(%1, %2)").arg(ValToTim(val1)).arg(ValToTim(val2)); break; case LS_FAMILY_VOFS: { RawSource source = RawSource(val1, &model); RawSourceRange range = source.getRange(); + QString res; if (val1) - result += source.toString(); + res += source.toString(); else - result += "0"; - result.remove(" "); + res += "0"; + res.remove(" "); if (func == LS_FN_APOS || func == LS_FN_ANEG) - result = "|" + result + "|"; + res = "|" + res + "|"; else if (func == LS_FN_DAPOS) - result = "|d(" + result + ")|"; - else if (func == LS_FN_DPOS) result = "d(" + result + ")"; + res = "|d(" + res + ")|"; + else if (func == LS_FN_DPOS) result = "d(" + res + ")"; + result += res; + if (func == LS_FN_APOS || func == LS_FN_VPOS || func == LS_FN_DAPOS || func == LS_FN_DPOS) result += " > "; else if (func == LS_FN_ANEG || func == LS_FN_VNEG) result += " < "; + else if (func == LS_FN_VALMOSTEQUAL) + result += " ~ "; + else + result += " missing"; result += QString::number(range.step * (val2 /*TODO+ source.getRawOffset(model)*/) + range.offset); break; } case LS_FAMILY_VBOOL: - result = RawSwitch(val1).toString(); + result += RawSwitch(val1).toString(); switch (func) { case LS_FN_AND: result += " AND "; @@ -553,7 +560,8 @@ QString LogicalSwitchData::toString(const ModelData & model) case LS_FN_XOR: result += " XOR "; break; - default: + default: + result += " bar "; break; } result += RawSwitch(val2).toString(); @@ -566,6 +574,7 @@ QString LogicalSwitchData::toString(const ModelData & model) result += "0"; switch (func) { case LS_FN_EQUAL: + case LS_FN_VEQUAL: result += " = "; break; case LS_FN_NEQUAL: @@ -584,6 +593,7 @@ QString LogicalSwitchData::toString(const ModelData & model) result += " <= "; break; default: + result += " foo "; break; } if (val2) @@ -599,10 +609,10 @@ QString LogicalSwitchData::toString(const ModelData & model) } if (GetCurrentFirmware()->getCapability(LogicalSwitchesExt)) { - if (delay) - result += QObject::tr(" Delay %1 sec").arg(delay/10.0); if (duration) - result += QObject::tr(" Duration %1 sec").arg(duration/10.0); + result += QObject::tr(" Duration (%1s)").arg(duration/10.0); + if (delay) + result += QObject::tr(" Delay (%1s)").arg(delay/10.0); } return result; diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index a871457f6..d9d6fdde6 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -40,7 +40,7 @@ const QColor colors[C9X_MAX_CURVES] = { QColor(255,127,0), }; -QString getPhaseName(int val, char * phasename) +QString getPhaseName(int val, const char * phasename) { if (!val) return "---"; if (!phasename) { diff --git a/companion/src/helpers.h b/companion/src/helpers.h index ceb3a2e22..d368c7ae7 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -37,6 +37,8 @@ class CompanionIcon: public QIcon { CompanionIcon(QString baseimage); }; +bool gvarsEnabled(); + class GVarGroup : public QObject { Q_OBJECT @@ -105,7 +107,7 @@ QString getPhasesStr(unsigned int phases, ModelData & model); void populateGVCB(QComboBox *b, int value); void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData & model, unsigned int flags); void populateCSWCB(QComboBox *b, int value); -QString getPhaseName(int val, char * phasename=NULL); +QString getPhaseName(int val, const char * phasename=NULL); QString getInputStr(ModelData & model, int index); QString image2qstring(QImage image); QImage qstring2image(QString imagestr); diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 0308d0137..046ea3b9c 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -1563,7 +1563,12 @@ MdiChild *MainWindow::createMdiChild() return child; } -QAction * MainWindow::addAct(QString icon, QString sName, QString lName, QKeySequence::StandardKey shortcut, const char *slot, QObject *slotObj) +QAction * MainWindow::addAct(const QString & icon, const QString & sName, const QString & lName, enum QKeySequence::StandardKey shortcut, const char *slot, QObject *slotObj) +{ + return addAct(icon, sName, lName, QKeySequence(shortcut), slot, slotObj); +} + +QAction * MainWindow::addAct(const QString & icon, const QString & sName, const QString & lName, const QKeySequence & shortcut, const char *slot, QObject *slotObj) { QAction * newAction = new QAction( this ); if (!icon.isEmpty()) @@ -1572,20 +1577,20 @@ QAction * MainWindow::addAct(QString icon, QString sName, QString lName, QKeySeq newAction->setText(sName); if (!lName.isEmpty()) newAction->setStatusTip(lName); - if (shortcut != 0) - newAction->setShortcuts(shortcut); + newAction->setShortcut(shortcut); if (slotObj == NULL) slotObj = this; connect(newAction, SIGNAL(triggered()), slotObj, slot); return newAction; } -QAction * MainWindow::addAct(QString icon, QString sName, QString lName, const char *slot) + +QAction * MainWindow::addAct(const QString & icon, const QString & sName, const QString & lName, const char *slot) { return addAct(icon, sName, lName, QKeySequence::UnknownKey, slot); } -QAction * MainWindow::addAct(QActionGroup *aGroup, QString sName, QString lName, const char *slot) +QAction * MainWindow::addAct(QActionGroup *aGroup, const QString & sName, const QString & lName, const char *slot) { QAction *action = addAct("", sName, lName, QKeySequence::UnknownKey, slot); action->setCheckable(true); @@ -1653,8 +1658,8 @@ void MainWindow::createActions() // dutchLangAct = addAct( langAlignGroup, tr("Dutch"), tr("Use Dutch in menus"), SLOT(setNLLanguage())); aboutAct = addAct("information.png", tr("About..."), tr("Show the application's About box"), SLOT(about())); - printAct = addAct("print.png", tr("Print..."), tr("Print current model"), SLOT(print())); - simulateAct = addAct("simulate.png", tr("Simulate..."), tr("Simulate current model"), SLOT(simulate())); + printAct = addAct("print.png", tr("Print..."), tr("Print current model"), QKeySequence::Print, SLOT(print())); + simulateAct = addAct("simulate.png", tr("Simulate..."), tr("Simulate current model"), QKeySequence(tr("Alt+S")), SLOT(simulate())); loadbackupAct = addAct("open.png", tr("Load Backup..."), tr("Load backup from file"), SLOT(loadBackup())); logsAct = addAct("logs.png", tr("View Log File..."), tr("Open and view log file"), SLOT(logFile())); appPrefsAct = addAct("apppreferences.png",tr("Settings..."), tr("Edit Settings"), SLOT(appPrefs())); diff --git a/companion/src/mainwindow.h b/companion/src/mainwindow.h index c6c2d2003..3d5ba1f1a 100644 --- a/companion/src/mainwindow.h +++ b/companion/src/mainwindow.h @@ -159,9 +159,10 @@ class MainWindow : public QMainWindow private: void createActions(); - QAction * addAct(QString, QString, QString, QKeySequence::StandardKey, const char *, QObject *slotObj=NULL); - QAction * addAct(QActionGroup *, QString, QString, const char *); - QAction * addAct(QString, QString, QString, const char *); + QAction * addAct(const QString &, const QString &, const QString &, enum QKeySequence::StandardKey, const char *, QObject *slotObj=NULL); + QAction * addAct(const QString &, const QString &, const QString &, const QKeySequence &, const char *, QObject *slotObj=NULL); + QAction * addAct(QActionGroup *, const QString &, const QString &, const char *); + QAction * addAct(const QString &, const QString &, const QString &, const char *); void createMenus(); void createToolBars(); diff --git a/companion/src/modeledit/inputs.cpp b/companion/src/modeledit/inputs.cpp index 9c7d8d5f3..2b7a7b9e7 100644 --- a/companion/src/modeledit/inputs.cpp +++ b/companion/src/modeledit/inputs.cpp @@ -155,16 +155,6 @@ QString InputsPanel::getInputText(int dest, bool * new_ch) str = " "; } - if (firmware->getCapability(VirtualInputs)) { - str += " " + tr("Source(%1)").arg(md->srcRaw.toString()); - if (md->carryTrim>0) { - str += " " + tr("No Trim"); - } - else if (md->carryTrim<0) { - str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(); - } - } - switch (md->mode) { case (1): str += " <-"; break; case (2): str += " ->"; break; @@ -173,7 +163,17 @@ QString InputsPanel::getInputText(int dest, bool * new_ch) str += " " + tr("Weight(%1)").arg(getGVarString(md->weight)); - if (md->curve.value) str += " " + md->curve.toString(); + if (firmware->getCapability(VirtualInputs)) { + str += " " + tr("Source(%1)").arg(md->srcRaw.toString()); + if (md->carryTrim>0) { + str += " " + tr("NoTrim"); + } + else if (md->carryTrim<0) { + str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(); + } + } + + if (md->curve.value) str += " " + Qt::escape(md->curve.toString()); QString phasesStr = getPhasesStr(md->phases, model); if (!phasesStr.isEmpty()) str += " " + phasesStr; diff --git a/companion/src/modeledit/mixes.cpp b/companion/src/modeledit/mixes.cpp index 7b01d83e6..57b59c927 100644 --- a/companion/src/modeledit/mixes.cpp +++ b/companion/src/modeledit/mixes.cpp @@ -191,11 +191,8 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch) str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString())); } - if (md->carryTrim>0) { - str += " " + Qt::escape(tr("No Trim")); - } - else if (md->carryTrim<0) { - str += " " + Qt::escape(RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString()); + if (md->carryTrim) { + str += " " + Qt::escape(tr("NoTrim")); } if (md->noExpo) str += " " + Qt::escape(tr("No DR/Expo")); @@ -214,7 +211,7 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch) QString MixerName; MixerName.append(md->name); if (!MixerName.isEmpty()) { - str += Qt::escape(QString("(%1)").arg(MixerName)); + str += " " + Qt::escape(QString("(%1)").arg(MixerName)); } } } diff --git a/companion/src/modelslist.cpp b/companion/src/modelslist.cpp index 3d7fb8de1..26d99e9e7 100644 --- a/companion/src/modelslist.cpp +++ b/companion/src/modelslist.cpp @@ -97,7 +97,7 @@ void ModelsListWidget::ShowContextMenu(const QPoint& pos) contextMenu.addSeparator(); contextMenu.addAction(CompanionIcon("currentmodel.png"), tr("&Use as default"),this,SLOT(setdefault())); contextMenu.addSeparator(); - contextMenu.addAction(CompanionIcon("print.png"), tr("P&rint model"),this, SLOT(print()),tr("Alt+R")); + contextMenu.addAction(CompanionIcon("print.png"), tr("P&rint model"),this, SLOT(print()),QKeySequence(tr("Ctrl+P"))); contextMenu.addSeparator(); contextMenu.addAction(CompanionIcon("simulate.png"), tr("&Simulate model"),this, SLOT(simulate()),tr("Alt+S")); contextMenu.exec(globalPos); diff --git a/companion/src/printdialog.cpp b/companion/src/printdialog.cpp index 37771105a..21128b213 100644 --- a/companion/src/printdialog.cpp +++ b/companion/src/printdialog.cpp @@ -20,51 +20,47 @@ PrintDialog::PrintDialog(QWidget *parent, FirmwareInterface * firmware, GeneralS g_eeGeneral(gg), g_model(gm), printfilename(filename), - ui(new Ui::PrintDialog) + ui(new Ui::PrintDialog), + gvars(gvarsEnabled()), + gvarnum (0) { - ui->setupUi(this); - this->setWindowIcon(CompanionIcon("print.png")); - te = ui->textEdit; + if (gvars) { + gvarnum=firmware->getCapability(Gvars); + } - setWindowTitle(tr("Setup for: ") + g_model->name); - ui->textEdit->clear(); - QString modelname=g_model->name; - if (modelname.isEmpty()) { - curvefile5=QString("%1/curve5.png").arg(qd->tempPath()); - curvefile9=QString("%1/curve9.png").arg(qd->tempPath()); - } - else { - curvefile5=QString("%1/%2-curve5.png").arg(qd->tempPath()).arg(modelname); - curvefile9=QString("%1/%2-curve9.png").arg(qd->tempPath()).arg(modelname); - } - printSetup(); - int gvars=0; - if (firmware->getCapability(HasVariants)) { - if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) { - gvars=1; - } - } - else { - gvars=1; - } - - if (gvars) { - te->append(printPhases()+"
"); - } - printExpo(); - printMixes(); - printLimits(); - printCurves(); - printGvars(); - printSwitches(); - printFSwitches(); - printFrSky(); - - te->scrollToAnchor("1"); - if (!printfilename.isEmpty()) { - printToFile(); - QTimer::singleShot(0, this, SLOT(autoClose())); - } + ui->setupUi(this); + this->setWindowIcon(CompanionIcon("print.png")); + te = ui->textEdit; + + setWindowTitle(tr("Setup for: ") + g_model->name); + te->clear(); + QString modelname=g_model->name; + if (modelname.isEmpty()) { + curvefile5=QString("%1/curve5.png").arg(qd->tempPath()); + curvefile9=QString("%1/curve9.png").arg(qd->tempPath()); + } + else { + curvefile5=QString("%1/%2-curve5.png").arg(qd->tempPath()).arg(modelname); + curvefile9=QString("%1/%2-curve9.png").arg(qd->tempPath()).arg(modelname); + } + printSetup(); + if (gvars) { + te->append(printFlightModes()+"
"); + } + printInputs(); + printMixes(); + printLimits(); + printCurves(); + printGvars(); + printSwitches(); + printFSwitches(); + printFrSky(); + + te->scrollToAnchor("1"); + if (!printfilename.isEmpty()) { + printToFile(); + QTimer::singleShot(0, this, SLOT(autoClose())); + } } void PrintDialog::closeEvent(QCloseEvent *event) @@ -115,16 +111,8 @@ QString PrintDialog::fv(const QString name, const QString value) void PrintDialog::printSetup() { - int gvars=0; - if (firmware->getCapability(HasVariants)) { - if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) { - gvars=1; - } - } else { - gvars=1; - } QString str = ""; - str.append(QString("
"); if (!gvars) { str.append(""); } str.append("

").arg((firmware->getCapability(FlightModes) && gvars==0) ? 2 : 1)); + str.append(QString("

"); str.append("

").arg((firmware->getCapability(FlightModes) && !gvars) ? 2 : 1)); str.append(g_model->name); str.append(" ("); str.append(firmware->getEepromInterface()->getName()); @@ -132,40 +120,31 @@ void PrintDialog::printSetup() str.append("

"+tr("General Model Settings")+"

"); str.append(fv(tr("Name"), g_model->name)); - str.append(""+tr("EEprom Size")+QString(": %1
").arg(firmware->getEepromInterface()->getSize(*g_model))); + str.append(fv(tr("EEprom Size"), QString("%1").arg(firmware->getEepromInterface()->getSize(*g_model)))); str.append(fv(tr("Timer1"), getTimerStr(g_model->timers[0]))); //value, mode, count up/down str.append(fv(tr("Timer2"), getTimerStr(g_model->timers[1]))); //value, mode, count up/down str.append(fv(tr("Protocol"), getProtocol(g_model))); //proto, numch, delay, str.append(fv(tr("Pulse Polarity"), g_model->moduleData[0].ppmPulsePol ? "NEG" : "POS")); str.append(fv(tr("Throttle Trim"), g_model->thrTrim ? tr("Enabled") : tr("Disabled"))); str.append(fv(tr("Throttle Expo"), g_model->thrExpo ? tr("Enabled") : tr("Disabled"))); - // TODO str.append(fv(tr("Trim Switch"), getSWName(g_model->trimSw))); + // TODO str.append(fv(tr("Trim Switch"), getSWName(g_model->trimSw))); str.append(fv(tr("Trim Increment"), getTrimInc(g_model))); str.append(fv(tr("Center Beep"), getCenterBeep(g_model))); // specify which channels beep str.append("
"); - str.append(printPhases()); + str.append(printFlightModes()); str.append("

"); te->append(str); } -QString PrintDialog::printPhases() +QString PrintDialog::printFlightModes() { - int gvars=0; - int gvarnum=0; - if ((GetCurrentFirmwareVariant() & GVARS_VARIANT ) || (!firmware->getCapability(HasVariants) && firmware->getCapability(Gvars))) { - if (firmware->getCapability(GvarsFlightModes)) { - gvars=1; - gvarnum=firmware->getCapability(Gvars); - } - } - QString str=""; - str.append(QString(""); @@ -351,57 +330,42 @@ void PrintDialog::printMixes() case (2): str += " R"; break; default: str += "  "; break; }; - str += QString(" %1").arg(getGVarString(md->weight, true)).rightJustified(6, ' '); - str += md->srcRaw.toString(); - if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); - if (md->carryTrim) str += " " + tr("noTrim"); - if (md->sOffset) str += " "+ tr("Offset") + QString(" %1").arg(getGVarString(md->sOffset)); - str += md->curve.toString().replace("<", "<").replace(">", ">"); - float scale=firmware->getCapability(SlowScale); - if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale); - if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale); - if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn); - if (firmware->getCapability(FlightModes)) { - if(md->phases) { - if (md->phases!=(unsigned int)(1<getCapability(FlightModes))-1) { - int mask=1; - int first=0; - for (int i=0; igetCapability(FlightModes); i++) { - if (!(md->phases & mask)) { - first++; - } - mask <<=1; - } - if (first>1) { - str += " " + tr("Flight modes") + QString("("); - } else { - str += " " + tr("Flight mode") + QString("("); - } - mask=1; - first=1; - for (int j=0; jgetCapability(FlightModes);j++) { - if (!(md->phases & mask)) { - PhaseData *pd = &g_model->phaseData[j]; - if (!first) { - str += QString(", ")+ QString("%1").arg(getPhaseName(j+1, pd->name)); - } else { - str += QString("%1").arg(getPhaseName(j+1,pd->name)); - first=0; - } - } - mask <<=1; - } - str += QString(")"); - } else { - str += tr("DISABLED")+QString(" !!!"); - } - } + //set mixer src model if it is unset (srcRaw needs this to generate proper toString() for input source type) + if (md->srcRaw.model == 0) + md->srcRaw.model = g_model; + str += " " + md->srcRaw.toString(); + + str += " " + Qt::escape(tr("Weight(%1)").arg(getGVarString(md->weight, true))); + + QString phasesStr = getPhasesStr(md->phases, *g_model); + if (!phasesStr.isEmpty()) str += " " + Qt::escape(phasesStr); + + if (md->swtch.type != SWITCH_TYPE_NONE) { + str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString())); } + + if (md->carryTrim) { + str += " " + Qt::escape(tr("NoTrim")); + } + + if (md->noExpo) str += " " + Qt::escape(tr("No DR/Expo")); + if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset))); + if (md->curve.value) str += " " + Qt::escape(md->curve.toString()); + + + int scale = firmware->getCapability(SlowScale); + if (scale == 0) + scale = 1; + if (md->delayDown || md->delayUp) + str += Qt::escape(tr(" Delay(u%1:d%2)").arg((double)md->delayUp/scale).arg((double)md->delayDown/scale)); + if (md->speedDown || md->speedUp) + str += Qt::escape(tr(" Slow(u%1:d%2)").arg((double)md->speedUp/scale).arg((double)md->speedDown/scale)); + if (md->mixWarn) str += Qt::escape(tr(" Warn(%1)").arg(md->mixWarn)); if (firmware->getCapability(HasMixerNames)) { QString MixerName; MixerName.append(md->name); if (!MixerName.isEmpty()) { - str+=QString(" (%1)").arg(MixerName); + str += " " + Qt::escape(QString("(%1)").arg(MixerName)); } } str.append(""); @@ -435,12 +399,12 @@ void PrintDialog::printLimits() str.append(""); str.append(""); for(int i=0; igetCapability(Outputs); i++) { - str.append(doTR(QString::number(g_model->limitData[i].min),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].min/10),"green")); } str.append(""); str.append(""); for(int i=0; igetCapability(Outputs); i++) { - str.append(doTR(QString::number(g_model->limitData[i].max),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].max/10),"green")); } str.append(""); str.append(""); @@ -465,12 +429,12 @@ void PrintDialog::printLimits() str.append(""); str.append(""); for(int i=0; i<16; i++) { - str.append(doTR(QString::number(g_model->limitData[i].min),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].min/10),"green")); } str.append(""); str.append(""); for(int i=0; i<16; i++) { - str.append(doTR(QString::number(g_model->limitData[i].max),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].max/10),"green")); } str.append(""); str.append(""); @@ -497,12 +461,12 @@ void PrintDialog::printLimits() str.append(""); str.append(""); for(int i=16; igetCapability(Outputs); i++) { - str.append(doTR(QString::number(g_model->limitData[i].min),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].min/10),"green")); } str.append(""); str.append(""); for(int i=16; igetCapability(Outputs); i++) { - str.append(doTR(QString::number(g_model->limitData[i].max),"green")); + str.append(doTR(QString::number((qreal)g_model->limitData[i].max/10),"green")); } str.append(""); str.append(""); @@ -633,13 +597,9 @@ void PrintDialog::printSwitches() for (int i=0; igetCapability(LogicalSwitches); i++) { if (g_model->customSw[i].func) { str.append(""); - if (i<9) { - str.append("").arg(i+1)); - } else { - str.append(""); - } + str.append("").arg(i+1)); QString tstr = g_model->customSw[i].toString(*g_model); - str.append(doTC(tstr,"green")); + str.append(doTL(tstr,"green")); str.append(""); sc++; } @@ -652,25 +612,19 @@ void PrintDialog::printSwitches() void PrintDialog::printGvars() { - int gvars=0; - int gvarnum=0; - if ((GetCurrentFirmwareVariant() & GVARS_VARIANT ) || (!firmware->getCapability(HasVariants) && firmware->getCapability(Gvars))) { - gvars=1; - gvarnum=firmware->getCapability(Gvars); - } - if (!firmware->getCapability(GvarsFlightModes) && (gvars==1 && firmware->getCapability(Gvars))) { + if (!firmware->getCapability(GvarsFlightModes) && (gvars && firmware->getCapability(Gvars))) { QString str = "

").arg(gvars==0 ? 8+firmware->getCapability(RotaryEncoders) : 8+gvarnum+firmware->getCapability(RotaryEncoders))); - str.append(tr("Flight modes Settings")); + str.append(QString(""); str.append(""); @@ -175,14 +154,16 @@ QString PrintDialog::printPhases() if (firmware->getCapability(RotaryEncoders)) { str.append(QString(""); } - str.append(""); + str.append(""); + QString labels[] = { tr("Rud"), tr("Ele"), tr("Thr"), tr("Ail") }; // TODO is elsewhere for sure for (int i=0; i<4; i++) { - str.append(QString("").arg(getInputStr(*g_model, i))); + GeneralSettings generalSettings = *g_eeGeneral; + str.append(QString("").arg(labels[CONVERT_MODE(i+1)-1])); } - if (gvars==1) { - for (int i=0; iGV%1
%2").arg(i+1).arg(g_model->gvars_names[i])); + if (gvars) { + for (unsigned int i=0; iGV%1
%2").arg(i+1).arg(g_model->gvars_names[i])); } } for (int i=0; igetCapability(RotaryEncoders); i++) { @@ -191,23 +172,26 @@ QString PrintDialog::printPhases() str.append("
"); for (int i=0; igetCapability(FlightModes); i++) { PhaseData *pd=&g_model->phaseData[i]; - str.append("").arg(i).arg(pd->name).arg(pd->fadeIn).arg(pd->fadeOut)); + str.append("").arg(i).arg(pd->name)); + str.append(QString("").arg((qreal)pd->fadeIn/firmware->getCapability(SlowScale))); + str.append(QString("").arg((qreal)pd->fadeOut/firmware->getCapability(SlowScale))); for (int k=0; k<4; k++) { + //TODO trim values if (pd->trimRef[k]==-1) { - str.append(QString("").arg(pd->trim[k])); + str.append(QString("").arg(pd->trim[k])); } else { - str.append("").arg(pd->trimRef[k])); + str.append("").arg(pd->trimRef[k])); } } - if (gvars==1) { - for (int k=0; kgvars[k]<=1024) { - str.append(QString(""); + str.append(QString(""); } else { int num = pd->gvars[k] - 1025; if (num>=i) num++; - str.append("").arg(num)); + str.append("").arg(num)); } } } @@ -228,10 +212,10 @@ QString PrintDialog::printPhases() return(str); } -void PrintDialog::printExpo() +void PrintDialog::printInputs() { QString str = "

").arg(!gvars ? 8+firmware->getCapability(RotaryEncoders) : 8+gvarnum+firmware->getCapability(RotaryEncoders))); + str.append(tr("Flight modes")); str.append("

 "); str.append(tr("Fades")+""+tr("Trims")+"").arg(firmware->getCapability(RotaryEncoders))+tr("Rot.Enc.")+""+tr("Switch")+"
"+tr("Flight mode name")); - str.append(""+tr("IN")+""+tr("OUT")+""+tr("Switch")+"
"+tr("Flight mode name")); + str.append(""+tr("IN")+""+tr("OUT")+"%1%1
"+tr("FM")+QString("%1 %2%3%4
"+tr("FM")+QString("%1 %2%1%1%1%1"+tr("FM")+QString("%1"+tr("FM")+QString("%1%1").arg(pd->gvars[k])+"%1").arg(pd->gvars[k])+""+tr("FM")+QString("%1"+tr("FM")+QString("%1

"; - str.append(tr("Expo/Dr Settings")); + str.append(tr("Inputs")); str.append("

"); int ec=0; unsigned int lastCHN = 255; @@ -245,72 +229,61 @@ void PrintDialog::printExpo() lastCHN=ed->chn; str.append(""+getInputStr(*g_model, ed->chn)+""); } - else - str.append(" "); str.append(""); str.append(""; } str += "
"); switch(ed->mode) { case (1): - str += "<- "; + str += "<-"; break; case (2): - str += "-> "; + str += "->"; break; default: - str += "   "; + str += "  "; break; }; - str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight,true)).rightJustified(6, ' '); - str += ed->curve.toString().replace("<", "<").replace(">", ">"); + str += " " + tr("Weight") + QString("(%1)").arg(getGVarString(ed->weight,true)); + + if (firmware->getCapability(VirtualInputs)) { + str += " " + tr("Source") + QString("(%1)").arg(ed->srcRaw.toString()); + if (ed->carryTrim>0) str += " " + tr("NoTrim"); + else if (ed->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(ed->carryTrim)-1)).toString(); + } + if (ed->curve.value) str += " " + Qt::escape(ed->curve.toString()); if (firmware->getCapability(FlightModes)) { if(ed->phases) { if (ed->phases!=(unsigned int)(1<getCapability(FlightModes))-1) { - int mask=1; - int first=0; - for (int i=0; igetCapability(FlightModes);i++) { - if (!(ed->phases & mask)) { - first++; - } - mask <<=1; - } - if (first>1) { - str += " " + tr("Flight modes") + QString("("); - } else { - str += " " + tr("Flight mode") + QString("("); - } - mask=1; - first=1; + unsigned int mask=1; + bool first = true; + bool multiple = false; + QString strModes; for (int j=0; jgetCapability(FlightModes);j++) { if (!(ed->phases & mask)) { - PhaseData *pd = &g_model->phaseData[j]; - if (!first) { - str += QString(", ")+ QString("%1").arg(getPhaseName(j+1, pd->name)); + //PhaseData *pd = &g_model->phaseData[j]; + const char * pdName = g_model->phaseData[j].name; + if (first) { + strModes += Qt::escape(QString("%1").arg(getPhaseName(j+1,pdName))); + first = false; } else { - str += QString("%1").arg(getPhaseName(j+1,pd->name)); - first=0; + strModes += Qt::escape(QString(", %1").arg(getPhaseName(j+1, pdName))); + multiple = true; } } - mask <<=1; + mask <<= 1; + } + if (!strModes.isEmpty()) { + str += " " + tr(multiple?"Flight modes":"Flight mode") + "(" + strModes + ")"; } - str += QString(")"); } else { str += tr("DISABLED")+QString(" !!!"); } } } - if (ed->swtch.type) - str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); - str += ed->curve.toString().replace("<", "<").replace(">", ">"); - if (firmware->getCapability(HasExpoNames)) { - QString ExpoName; - ExpoName.append(ed->name); - if (!ExpoName.isEmpty()) { - str+=QString(" (%1)").arg(ExpoName); - } - } + if (ed->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); + if (firmware->getCapability(HasExpoNames) && ed->name[0]) str += Qt::escape(QString(" [%1]").arg(ed->name)); str += "

"; @@ -332,16 +305,22 @@ void PrintDialog::printMixes() str.append("

"); if(lastCHN!=md->destCh) { lastCHN=md->destCh; - QString chname=tr("CH")+QString("%1 ").arg(lastCHN,2,10,QChar('0')); + + QString chname = QObject::tr("CH%1").arg(lastCHN); + // TODO not nice, Qt brings a function for that, I don't remember right now + (chname.length() < 4) ? chname.append(" ") : chname.append(" "); if (firmware->getCapability(HasChNames)) { - QString name=g_model->limitData[md->destCh-1].name; + QString name = g_model->limitData[lastCHN-1].name; if (!name.isEmpty()) { - name.append(" "); - chname=name.left(6); + name = QString("(") + name + QString(")"); } + name.append(" "); + chname += name.left(8); } - str.append(chname); - } else { + chname = Qt::escape(chname); + str.append(chname.replace(" ", " ")); + } + else { str.append(" "); } str.append("
"+tr("Min")+"
"+tr("Max")+"
"+tr("Invert")+"
"+tr("Min")+"
"+tr("Max")+"
"+tr("Invert")+"
"+tr("Min")+"
"+tr("Max")+"
"+tr("Invert")+"
"+tr("LS")+QString("%1"+tr("LS")+('A'+(i-9))+""+tr("L")+QString("%1
"; str.append(""); str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append("

"+tr("Global Variables")+"

"); PhaseData *pd=&g_model->phaseData[0]; int width=100/gvarnum; str.append(""); - for(int i=0; i").arg(width)+tr("GV")+QString("%1").arg(i+1)); } str.append(""); str.append(""); - for(int i=0; i").arg(width)+QString("%1").arg(pd->gvars[i])); } str.append(""); @@ -686,7 +640,8 @@ void PrintDialog::printFSwitches() QString str = "
"; str.append(""); str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + FrSkyData *fd=&g_model->frsky; + for (int i=0; i<2; i++) { + if (fd->channels[i].ratio!=0) { + tc++; + float ratio=(fd->channels[i].ratio/(fd->channels[i].type==0 ?10.0:1)); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + } + } + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append(""); + str.append("

"+tr("Special Functions")+"

"); - str.append(doTC(tr("Switch"), "", true)); + str.append(""); + str.append(doTL(tr("Switch"), "", true)); str.append(doTL(tr("Function"), "", true)); str.append(doTL(tr("Parameter"), "", true)); str.append(doTL(tr("Repeat"), "", true)); @@ -695,19 +650,21 @@ void PrintDialog::printFSwitches() for(int i=0; igetCapability(CustomFunctions); i++) { if (g_model->funcSw[i].swtch.type!=SWITCH_TYPE_NONE) { str.append(""); - str.append(doTC(g_model->funcSw[i].swtch.toString(),"green")); - str.append(doTC(g_model->funcSw[i].funcToString(),"green")); - str.append(doTC(g_model->funcSw[i].paramToString(),"green")); + str.append(doTL(tr("SF%1").arg(i+1),"", true)); + str.append(doTL(g_model->funcSw[i].swtch.toString(),"green")); + str.append(doTL(g_model->funcSw[i].funcToString(),"green")); + str.append(doTL(g_model->funcSw[i].paramToString(),"green")); int index=g_model->funcSw[i].func; - if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) { - str.append(doTC(QString("%1").arg(g_model->funcSw[i].repeatParam),"green")); + if ((g_model->funcSw[i].repeatParam>0) && + (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic)) { + str.append(doTL(QString("%1").arg(g_model->funcSw[i].repeatParam),"green")); } else { - str.append(doTC( " ","green")); + str.append(doTL( " ","green")); } if ((index<=FuncInstantTrim) || (index>FuncBackgroundMusicPause)) { - str.append(doTC((g_model->funcSw[i].enabled ? "ON" : "OFF"),"green")); + str.append(doTL((g_model->funcSw[i].enabled ? "ON" : "OFF"),"green")); } else { - str.append(doTC( "---","green")); + str.append(doTL( "---","green")); } str.append(""); sc++; @@ -723,39 +680,94 @@ void PrintDialog::printFrSky() { int tc=0; QString str = "
#
"; - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - FrSkyData *fd=&g_model->frsky; - for (int i=0; i<2; i++) { - if (fd->channels[i].ratio!=0) { - tc++; - float ratio=(fd->channels[i].ratio/(fd->channels[i].type==0 ?10.0:1)); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); + + if (IS_TARANIS(GetEepromInterface()->getBoard())) { + str.append(""); + str.append(""); + str.append(doTC(tr("Analog"),"", true)); + str.append(doTC(tr("Range"),"", true)); + str.append(doTC(tr("Offset"),"", true)); + str.append(""); + + FrSkyData *fd=&g_model->frsky; + for (int i=0; i<2; i++) { + if (fd->channels[i].ratio!=0) { + tc++; + float ratio=(fd->channels[i].ratio/(fd->channels[i].type==0 ?10.0:1)); + QString unit = " " + getFrSkyUnits(fd->channels[i].type); + str.append(""); + str.append(doTL(tr("A%1").arg(i+1), "", true)); + str.append(doTC(QString::number(ratio,10,(fd->channels[i].type==0 ? 1:0))+unit, "green")); + str.append(doTC(QString::number((fd->channels[i].offset*ratio)/255,10,(fd->channels[i].type==0 ? 1:0))+unit, "green")); + str.append(""); + } } + + str.append(""); + str.append(""); + str.append(doTC(tr("Alarms"),"", true)); + str.append(doTC(tr("Low Alarm"),"", true)); + str.append(doTC(tr("Critical Alarm"),"", true)); + str.append(""); + str.append(""); + str.append(doTL(tr("RSSI"),"", true)); + str.append(doTC(QString::number(fd->rssiAlarms[0].value,10),"green")); + str.append(doTC(QString::number(fd->rssiAlarms[1].value,10),"green")); + str.append(""); + for (int i=0; i<2; i++) { + if (fd->channels[i].ratio!=0) { + float ratio=(fd->channels[i].ratio/(fd->channels[i].type==0 ?10.0:1)); + QString unit = " " + getFrSkyUnits(fd->channels[i].type); + str.append(""); + str.append(doTL(tr("A%1").arg(i+1), "", true)); + str.append(doTC(QString::number(ratio*(fd->channels[i].alarms[0].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+unit, "green")); + str.append(doTC(QString::number(ratio*(fd->channels[i].alarms[1].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+unit, "green")); + str.append(""); + } + } + + //TODO preferrably in new tables + str.append(""); + //str.append(""); + //str.append(""); + str.append(""); + str.append("

"+tr("Telemetry Settings")+"

 "+tr("Alarm 1")+""+tr("Alarm 2")+"
"+tr("Analog")+""+tr("Unit")+""+tr("Scale")+""+tr("Offset")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+"
"+tr("A%1").arg(i+1)+""+getFrSkyUnits(fd->channels[i].type)+""+QString::number(ratio,10,(fd->channels[i].type==0 ? 1:0))+""+QString::number((fd->channels[i].offset*ratio)/255,10,(fd->channels[i].type==0 ? 1:0))+""+getFrSkyAlarmType(fd->channels[i].alarms[0].level)+""); - str.append((fd->channels[i].alarms[0].greater==1) ? ">" : "<"); - str.append(""+QString::number(ratio*(fd->channels[i].alarms[0].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+""+getFrSkyAlarmType(fd->channels[i].alarms[1].level)+""); - str.append((fd->channels[i].alarms[1].greater==1) ? ">" : "<"); - str.append(""+QString::number(ratio*(fd->channels[i].alarms[1].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+"

"+tr("Telemetry Settings")+"

"+tr("Frsky serial protocol")+""+getFrSkyProtocol(fd->usrProto)+"
"+tr("Units system")+""+getFrSkyMeasure(fd->imperial)+"
"+tr("Blades")+""+QString("%1").arg(fd->blades)+"
"); + } + else { //other boards + str.append("

"+tr("Telemetry Settings")+"

 "+tr("Alarm 1")+""+tr("Alarm 2")+"
"+tr("Analog")+""+tr("Unit")+""+tr("Scale")+""+tr("Offset")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+"
"+tr("A%1").arg(i+1)+""+getFrSkyUnits(fd->channels[i].type)+""+QString::number(ratio,10,(fd->channels[i].type==0 ? 1:0))+""+QString::number((fd->channels[i].offset*ratio)/255,10,(fd->channels[i].type==0 ? 1:0))+""+getFrSkyAlarmType(fd->channels[i].alarms[0].level)+""); + str.append((fd->channels[i].alarms[0].greater==1) ? ">" : "<"); + str.append(""+QString::number(ratio*(fd->channels[i].alarms[0].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+""+getFrSkyAlarmType(fd->channels[i].alarms[1].level)+""); + str.append((fd->channels[i].alarms[1].greater==1) ? ">" : "<"); + str.append(""+QString::number(ratio*(fd->channels[i].alarms[1].value/255.0+fd->channels[i].offset/255.0),10,(fd->channels[i].type==0 ? 1:0))+"
 "+tr("Alarm 1")+""+tr("Alarm 2")+"
"+tr("Type")+""+tr("Condition")+""+tr("Value")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+"
"+tr("RSSI Alarm")+""+getFrSkyAlarmType(fd->rssiAlarms[0].level)+"<"+QString::number(fd->rssiAlarms[0].value,10)+""+getFrSkyAlarmType(fd->rssiAlarms[1].level)+"<"+QString::number(fd->rssiAlarms[1].value,10)+"
"+tr("Frsky serial protocol")+""+getFrSkyProtocol(fd->usrProto)+"
"+tr("Units system")+""+getFrSkyMeasure(fd->imperial)+"
"+tr("Blades")+""+fd->blades+"
"); } - str.append("
 "+tr("Alarm 1")+""+tr("Alarm 2")+"
"+tr("Type")+""+tr("Condition")+""+tr("Value")+""+tr("Type")+""+tr("Condition")+""+tr("Value")+"
"+tr("RSSI Alarm")+""+getFrSkyAlarmType(fd->rssiAlarms[0].level)+"<"+QString::number(fd->rssiAlarms[0].value,10)+""+getFrSkyAlarmType(fd->rssiAlarms[1].level)+"<"+QString::number(fd->rssiAlarms[1].value,10)+"
"+tr("Frsky serial protocol")+""+getFrSkyProtocol(fd->usrProto)+"
"+tr("Units system")+""+getFrSkyMeasure(fd->imperial)+"
"+tr("Blades")+""+fd->blades+"
"); #if 0 if (firmware->getCapability(TelemetryBars) || (firmware->getCapability(TelemetryCSFields))) { int cols=firmware->getCapability(TelemetryColsCSFields); diff --git a/companion/src/printdialog.h b/companion/src/printdialog.h index 8209db326..a6c717d7b 100644 --- a/companion/src/printdialog.h +++ b/companion/src/printdialog.h @@ -28,10 +28,12 @@ public: private: Ui::PrintDialog *ui; + bool gvars; + unsigned int gvarnum; void printSetup(); - QString printPhases(); - void printExpo(); + QString printFlightModes(); + void printInputs(); void printMixes(); void printLimits(); void printCurves();