1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-23 16:25:16 +03:00

[Companion] Show custom channel, G-Var, and Curve names throughout UI. (#4874)

* [Companion] Move RadioData constructor.

* [Companion] Move getCapability(SwitchPositions) to Boards class.

* [Companion] Show custom channel, g-var, & curve names throughout UI; Remove redundant name formatting and other unused functions in ModelPrinter and Helpers; Add CustomFunctionData::isEmpty().

* [Companion] Add LogicalSwitchData::isEmpty().

* [Companion] Fix small bug in HardwarePanel.

* [Companion] Rename logical switches to "LSw##" in selections lists to avoid confusion with "L#" and "LS" hardware controls; remove unused RotaryEncoderString().
This commit is contained in:
Max Paperno 2017-04-29 03:03:53 -04:00 committed by Bertrand Songis
parent 04bcc70422
commit 72b1ad085f
19 changed files with 180 additions and 199 deletions

View file

@ -211,6 +211,11 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
return 8; return 8;
else else
return 7; return 7;
case SwitchPositions:
if (IS_HORUS_OR_TARANIS(board))
return getCapability(board, Switches) * 3;
else
return 9;
case NumTrims: case NumTrims:
if (IS_HORUS(board)) if (IS_HORUS(board))
return 6; return 6;

View file

@ -111,6 +111,7 @@ namespace Board {
Sliders, Sliders,
MouseAnalogs, MouseAnalogs,
Switches, Switches,
SwitchPositions,
FactoryInstalledSwitches, FactoryInstalledSwitches,
NumTrims, NumTrims,
NumTrimSwitches NumTrimSwitches

View file

@ -134,27 +134,6 @@ int TimToVal(float value)
return (temp-129); return (temp-129);
} }
QString getSignedStr(int value)
{
return value > 0 ? QString("+%1").arg(value) : QString("%1").arg(value);
}
QString getGVarString(int16_t val, bool sign)
{
if (val >= -10000 && val <= 10000) {
if (sign)
return QString("%1%").arg(getSignedStr(val));
else
return QString("%1%").arg(val);
}
else {
if (val<0)
return QObject::tr("-GV%1").arg(-val-10000);
else
return QObject::tr("GV%1").arg(val-10000);
}
}
void SensorData::updateUnit() void SensorData::updateUnit()
{ {
if (type == TELEM_TYPE_CALCULATED) { if (type == TELEM_TYPE_CALCULATED) {
@ -494,17 +473,6 @@ RawSourceRange RawSource::getRange(const ModelData * model, const GeneralSetting
return result; return result;
} }
QString RotaryEncoderString(int index)
{
static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
return CHECK_IN_ARRAY(rotary, index);
}
/*
* RawSource
*/
QString RawSource::toString(const ModelData * model, const GeneralSettings * const generalSettings) const QString RawSource::toString(const ModelData * model, const GeneralSettings * const generalSettings) const
{ {
static const QString trims[] = { static const QString trims[] = {
@ -530,6 +498,8 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
QObject::tr("ACC"), QObject::tr("GPS Time"), QObject::tr("ACC"), QObject::tr("GPS Time"),
}; };
static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
if (index<0) { if (index<0) {
return QObject::tr("----"); return QObject::tr("----");
} }
@ -539,8 +509,8 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
switch (type) { switch (type) {
case SOURCE_TYPE_VIRTUAL_INPUT: case SOURCE_TYPE_VIRTUAL_INPUT:
result = QObject::tr("[I%1]").arg(index+1); result = QObject::tr("[I%1]").arg(index+1);
if (model) if (model && model->inputNames[index][0])
result += QString(model->inputNames[index]); result.append(":" + QString(model->inputNames[index]).trimmed());
return result; return result;
case SOURCE_TYPE_LUA_OUTPUT: case SOURCE_TYPE_LUA_OUTPUT:
@ -562,7 +532,7 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
case SOURCE_TYPE_TRIM: case SOURCE_TYPE_TRIM:
return CHECK_IN_ARRAY(trims, index); return CHECK_IN_ARRAY(trims, index);
case SOURCE_TYPE_ROTARY_ENCODER: case SOURCE_TYPE_ROTARY_ENCODER:
return RotaryEncoderString(index); return CHECK_IN_ARRAY(rotary, index);
case SOURCE_TYPE_MAX: case SOURCE_TYPE_MAX:
return QObject::tr("MAX"); return QObject::tr("MAX");
@ -574,7 +544,7 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
return result; return result;
case SOURCE_TYPE_CUSTOM_SWITCH: case SOURCE_TYPE_CUSTOM_SWITCH:
return QObject::tr("L%1").arg(index+1); return QObject::tr("LSw%1").arg(index+1, 2, 10, QChar('0'));
case SOURCE_TYPE_CYC: case SOURCE_TYPE_CYC:
return QObject::tr("CYC%1").arg(index+1); return QObject::tr("CYC%1").arg(index+1);
@ -583,7 +553,10 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
return QObject::tr("TR%1").arg(index+1); return QObject::tr("TR%1").arg(index+1);
case SOURCE_TYPE_CH: case SOURCE_TYPE_CH:
return QObject::tr("CH%1").arg(index+1); result = QObject::tr("CH%1").arg(index+1, 2, 10, QChar('0'));
if (getCurrentFirmware()->getCapability(ChannelsName) && model && model->limitData[index].name[0])
result.append(":" + QString(model->limitData[index].name).trimmed());
return result;
case SOURCE_TYPE_SPECIAL: case SOURCE_TYPE_SPECIAL:
return CHECK_IN_ARRAY(special, index); return CHECK_IN_ARRAY(special, index);
@ -601,7 +574,10 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
} }
case SOURCE_TYPE_GVAR: case SOURCE_TYPE_GVAR:
return QObject::tr("GV%1").arg(index+1); result = QObject::tr("GV%1").arg(index+1);
if (getCurrentFirmware()->getCapability(GvarsName) && model && model->gvars_names[index][0])
result.append(":" + QString(model->gvars_names[index]).trimmed());
return result;
default: default:
return QObject::tr("----"); return QObject::tr("----");
@ -706,7 +682,7 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen
} }
case SWITCH_TYPE_VIRTUAL: case SWITCH_TYPE_VIRTUAL:
return QObject::tr("L%1").arg(index); return QObject::tr("LSw%1").arg(index, 2, 10, QChar('0'));
case SWITCH_TYPE_MULTIPOS_POT: case SWITCH_TYPE_MULTIPOS_POT:
if (!getCurrentFirmware()->getCapability(MultiposPotsPositions)) if (!getCurrentFirmware()->getCapability(MultiposPotsPositions))
@ -753,23 +729,48 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen
* CurveReference * CurveReference
*/ */
QString CurveReference::toString() const QString CurveReference::toString(const ModelData * model, bool verbose) const
{ {
if (value == 0) { if (value == 0) {
return "----"; return "----";
} }
else {
QString ret;
unsigned idx = abs(value) - 1;
switch(type) { switch(type) {
case CURVE_REF_DIFF: case CURVE_REF_DIFF:
return QObject::tr("Diff(%1)").arg(getGVarString(value)); ret = QObject::tr("Diff(%1)").arg(Helpers::getAdjustmentString(value, model));
break;
case CURVE_REF_EXPO: case CURVE_REF_EXPO:
return QObject::tr("Expo(%1)").arg(getGVarString(value)); ret = QObject::tr("Expo(%1)").arg(Helpers::getAdjustmentString(value, model));
break;
case CURVE_REF_FUNC: case CURVE_REF_FUNC:
return QObject::tr("Function(%1)").arg(QString("x>0" "x<0" "|x|" "f>0" "f<0" "|f|").mid(3*(value-1), 3)); ret = QString("x>0" "x<0" "|x|" "f>0" "f<0" "|f|").mid(3*(value-1), 3);
if (verbose)
ret = QObject::tr("Function(%1)").arg(ret);
break;
default: default:
return QString(value > 0 ? QObject::tr("Curve(%1)") : QObject::tr("!Curve(%1)")).arg(abs(value)); if (model)
ret = model->curves[idx].nameToString(idx);
else
ret = CurveData().nameToString(idx);
if (verbose)
ret = QObject::tr("Curve(%1)").arg(ret);
if (value < 0)
ret.prepend(CPN_STR_SW_INDICATOR_REV);
break;
} }
return ret;
} }
bool LogicalSwitchData::isEmpty() const
{
return (func == 0);
} }
CSFunctionFamily LogicalSwitchData::getFunctionFamily() const CSFunctionFamily LogicalSwitchData::getFunctionFamily() const
@ -856,10 +857,15 @@ void CustomFunctionData::clear()
} }
} }
QString CustomFunctionData::funcToString() const bool CustomFunctionData::isEmpty() const
{
return (swtch.type == SWITCH_TYPE_NONE);
}
QString CustomFunctionData::funcToString(const ModelData * model) const
{ {
if (func >= FuncOverrideCH1 && func <= FuncOverrideCH32) if (func >= FuncOverrideCH1 && func <= FuncOverrideCH32)
return QObject::tr("Override %1").arg(RawSource(SOURCE_TYPE_CH, func).toString()); return QObject::tr("Override %1").arg(RawSource(SOURCE_TYPE_CH, func).toString(model));
else if (func == FuncTrainer) else if (func == FuncTrainer)
return QObject::tr("Trainer"); return QObject::tr("Trainer");
else if (func == FuncTrainerRUD) else if (func == FuncTrainerRUD)
@ -903,7 +909,7 @@ QString CustomFunctionData::funcToString() const
else if (func == FuncBackgroundMusicPause) else if (func == FuncBackgroundMusicPause)
return QObject::tr("Background Music Pause"); return QObject::tr("Background Music Pause");
else if (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast) else if (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast)
return QObject::tr("Adjust GV%1").arg(func-FuncAdjustGV1+1); return QObject::tr("Adjust %1").arg(RawSource(SOURCE_TYPE_GVAR, func-FuncAdjustGV1).toString(model));
else if (func == FuncSetFailsafeInternalModule) else if (func == FuncSetFailsafeInternalModule)
return QObject::tr("SetFailsafe Int. Module"); return QObject::tr("SetFailsafe Int. Module");
else if (func == FuncSetFailsafeExternalModule) else if (func == FuncSetFailsafeExternalModule)
@ -1078,6 +1084,14 @@ bool CurveData::isEmpty() const
return true; return true;
} }
QString CurveData::nameToString(const int idx) const
{
QString ret = QCoreApplication::translate("CurveData", "CV%1").arg(idx+1, 2, 10, QChar('0'));
if (name[0])
ret.append(":" + QString(name).trimmed());
return ret;
}
QString LimitData::minToString() const QString LimitData::minToString() const
{ {
return QString::number((qreal)min/10); return QString::number((qreal)min/10);
@ -1504,11 +1518,6 @@ void ModelData::clearMixes()
mixData[i].clear(); mixData[i].clear();
} }
RadioData::RadioData()
{
models.resize(getCurrentFirmware()->getCapability(Models));
}
void ModelData::clear() void ModelData::clear()
{ {
memset(this, 0, sizeof(ModelData)); memset(this, 0, sizeof(ModelData));

View file

@ -30,8 +30,6 @@
#include <iostream> #include <iostream>
#include <QDebug> #include <QDebug>
QString RotaryEncoderString(int index);
const uint8_t modn12x3[4][4]= { const uint8_t modn12x3[4][4]= {
{1, 2, 3, 4}, {1, 2, 3, 4},
{1, 3, 2, 4}, {1, 3, 2, 4},
@ -52,7 +50,6 @@ enum Capability {
VoicesMaxLength, VoicesMaxLength,
MultiLangVoice, MultiLangVoice,
ModelImage, ModelImage,
SwitchesPositions,
CustomFunctions, CustomFunctions,
SafetyChannelCustomFunction, SafetyChannelCustomFunction,
LogicalSwitches, LogicalSwitches,
@ -187,9 +184,6 @@ void getEEPROMString(char *dst, const char *src, int size);
float ValToTim(int value); float ValToTim(int value);
int TimToVal(float value); int TimToVal(float value);
QString getSignedStr(int value);
QString getGVarString(int16_t val, bool sign=false);
inline int applyStickMode(int stick, unsigned int mode) inline int applyStickMode(int stick, unsigned int mode)
{ {
if (mode == 0 || mode > 4) { if (mode == 0 || mode > 4) {

View file

@ -489,11 +489,6 @@ int OpenTxFirmware::getCapability(::Capability capability)
return 0; return 0;
case PermTimers: case PermTimers:
return (IS_2560(board) || IS_ARM(board)); return (IS_2560(board) || IS_ARM(board));
case SwitchesPositions:
if (IS_HORUS_OR_TARANIS(board))
return getBoardCapability(board, Board::Switches) * 3;
else
return 9;
case CustomFunctions: case CustomFunctions:
if (IS_ARM(board)) if (IS_ARM(board))
return 64; return 64;

View file

@ -21,7 +21,7 @@
#include "hardware.h" #include "hardware.h"
#include "ui_hardware.h" #include "ui_hardware.h"
void HardwarePanel::setupSwitchType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type, bool threePos = true) void HardwarePanel::setupSwitchType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type, bool threePos)
{ {
Board::Type board = getCurrentBoard(); Board::Type board = getCurrentBoard();
if (IS_STM32(board) && index < getBoardCapability(board, Board::Switches)) { if (IS_STM32(board) && index < getBoardCapability(board, Board::Switches)) {

View file

@ -56,7 +56,7 @@ class HardwarePanel : public GeneralPanel
protected: protected:
void setupPotType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type); void setupPotType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type);
void setupSliderType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type); void setupSliderType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type);
void setupSwitchType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type, bool threePos); void setupSwitchType(int index, QLabel * label, AutoLineEdit * name, AutoComboBox * type, bool threePos = true);
private: private:
Ui::Hardware *ui; Ui::Hardware *ui;

View file

@ -225,7 +225,7 @@ void CurveGroup::update()
lastType = curve.type; lastType = curve.type;
curveValueCB->clear(); curveValueCB->clear();
for (int i=0; i<=6/*TODO constant*/; i++) { for (int i=0; i<=6/*TODO constant*/; i++) {
curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_FUNC, i).toString()); curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_FUNC, i).toString(&model, false));
} }
} }
curveValueCB->setCurrentIndex(curve.value); curveValueCB->setCurrentIndex(curve.value);
@ -237,7 +237,7 @@ void CurveGroup::update()
lastType = curve.type; lastType = curve.type;
curveValueCB->clear(); curveValueCB->clear();
for (int i= ((flags & HIDE_NEGATIVE_CURVES) ? 0 : -numcurves); i<=numcurves; i++) { for (int i= ((flags & HIDE_NEGATIVE_CURVES) ? 0 : -numcurves); i<=numcurves; i++) {
curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString(), i); curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString(&model, false), i);
if (i == curve.value) { if (i == curve.value) {
curveValueCB->setCurrentIndex(curveValueCB->count() - 1); curveValueCB->setCurrentIndex(curveValueCB->count() - 1);
} }
@ -324,38 +324,43 @@ void CurveGroup::valuesChanged()
void Helpers::populateGVCB(QComboBox & b, int value, const ModelData & model) void Helpers::populateGVCB(QComboBox & b, int value, const ModelData & model)
{ {
bool selected = false; int count = getCurrentFirmware()->getCapability(Gvars);
b.clear(); b.clear();
int count = getCurrentFirmware()->getCapability(Gvars);
for (int i=-count; i<=-1; i++) { for (int i=-count; i<=-1; i++) {
int16_t gval = (int16_t)(-10000+i); int16_t gval = (int16_t)(-10000+i);
if (strlen(model.gvars_names[-i-1]) > 0) b.addItem("-" + RawSource(SOURCE_TYPE_GVAR, abs(i)-1).toString(&model), gval);
b.addItem(QObject::tr("-GV%1 (%2)").arg(-i).arg(model.gvars_names[-i-1]), gval);
else
b.addItem(QObject::tr("-GV%1").arg(-i), gval);
if (value == gval) {
b.setCurrentIndex(b.count()-1);
selected = true;
}
} }
for (int i=1; i<=count; i++) { for (int i=1; i<=count; i++) {
int16_t gval = (int16_t)(10000+i); int16_t gval = (int16_t)(10000+i);
if (strlen(model.gvars_names[i-1]) > 0) b.addItem(RawSource(SOURCE_TYPE_GVAR, i-1).toString(&model), gval);
b.addItem(QObject::tr("GV%1 (%2)").arg(i).arg(model.gvars_names[i-1]), gval);
else
b.addItem(QObject::tr("GV%1").arg(i), gval);
if (value == gval) {
b.setCurrentIndex(b.count()-1);
selected = true;
}
} }
if (!selected) { b.setCurrentIndex(b.findData(value));
if (b.currentIndex() == -1)
b.setCurrentIndex(count); b.setCurrentIndex(count);
} }
// Returns Diff/Expo/Weight/Offset adjustment value as either a percentage or a global variable name.
QString Helpers::getAdjustmentString(int16_t val, const ModelData * model, bool sign)
{
QString ret;
if (val >= -10000 && val <= 10000) {
ret = "%1%";
if (sign && val > 0)
ret.prepend("+");
ret = ret.arg(val);
}
else {
ret = RawSource(SOURCE_TYPE_GVAR, abs(val) - 10001).toString(model);
if (val < 0)
ret.prepend("-");
else if (sign)
ret.prepend("+");
}
return ret;
} }
void Helpers::populateGvarUseCB(QComboBox * b, unsigned int phase) void Helpers::populateGvarUseCB(QComboBox * b, unsigned int phase)
@ -368,29 +373,6 @@ void Helpers::populateGvarUseCB(QComboBox * b, unsigned int phase)
} }
} }
void Helpers::populateGvSourceCB(QComboBox * b, int value)
{
QString strings[] = { QObject::tr("---"), QObject::tr("Rud Trim"), QObject::tr("Ele Trim"), QObject::tr("Thr Trim"), QObject::tr("Ail Trim"), QObject::tr("Rot Enc"), QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail"), QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3")};
b->clear();
for (int i=0; i<= 12; i++) {
b->addItem(strings[i]);
}
b->setCurrentIndex(value);
}
void Helpers::populatePhasesCB(QComboBox * b, int value)
{
for (int i=-getCurrentFirmware()->getCapability(FlightModes); i<=getCurrentFirmware()->getCapability(FlightModes); i++) {
if (i < 0)
b->addItem(QObject::tr("!Flight mode %1").arg(-i-1), i);
else if (i > 0)
b->addItem(QObject::tr("Flight mode %1").arg(i-1), i);
else
b->addItem(QObject::tr("----"), 0);
}
b->setCurrentIndex(value + getCurrentFirmware()->getCapability(FlightModes));
}
void Helpers::populateFileComboBox(QComboBox * b, const QSet<QString> & set, const QString & current) void Helpers::populateFileComboBox(QComboBox * b, const QSet<QString> & set, const QString & current)
{ {
b->clear(); b->clear();
@ -456,21 +438,22 @@ void Helpers::addRawSwitchItems(QStandardItemModel * itemModel, const RawSwitchT
QStandardItemModel * Helpers::getRawSwitchItemModel(const GeneralSettings * const generalSettings, SwitchContext context) QStandardItemModel * Helpers::getRawSwitchItemModel(const GeneralSettings * const generalSettings, SwitchContext context)
{ {
QStandardItemModel * itemModel = new QStandardItemModel(); QStandardItemModel * itemModel = new QStandardItemModel();
Board::Type board = getCurrentBoard(); Boards board = Boards(getCurrentBoard());
Board::Type btype = board.getBoardType();
Firmware * fw = getCurrentFirmware(); Firmware * fw = getCurrentFirmware();
// Descending switch direction: NOT (!) switches // Descending switch direction: NOT (!) switches
if (context != MixesContext && context != GlobalFunctionsContext && IS_ARM(board)) { if (context != MixesContext && context != GlobalFunctionsContext && IS_ARM(btype)) {
addRawSwitchItems(itemModel, SWITCH_TYPE_FLIGHT_MODE, -fw->getCapability(FlightModes), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_FLIGHT_MODE, -fw->getCapability(FlightModes), generalSettings);
} }
if (context != GlobalFunctionsContext) { if (context != GlobalFunctionsContext) {
addRawSwitchItems(itemModel, SWITCH_TYPE_VIRTUAL, -fw->getCapability(LogicalSwitches), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_VIRTUAL, -fw->getCapability(LogicalSwitches), generalSettings);
} }
addRawSwitchItems(itemModel, SWITCH_TYPE_ROTARY_ENCODER, -fw->getCapability(RotaryEncoders), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_ROTARY_ENCODER, -fw->getCapability(RotaryEncoders), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_TRIM, -getBoardCapability(board, Board::NumTrimSwitches), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_TRIM, -board.getCapability(Board::NumTrimSwitches), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_MULTIPOS_POT, -(fw->getCapability(MultiposPots) * fw->getCapability(MultiposPotsPositions)), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_MULTIPOS_POT, -(fw->getCapability(MultiposPots) * fw->getCapability(MultiposPotsPositions)), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_SWITCH, -fw->getCapability(SwitchesPositions), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_SWITCH, -board.getCapability(Board::SwitchPositions), generalSettings);
// Ascending switch direction (including zero) // Ascending switch direction (including zero)
@ -481,14 +464,14 @@ QStandardItemModel * Helpers::getRawSwitchItemModel(const GeneralSettings * cons
addRawSwitchItems(itemModel, SWITCH_TYPE_NONE, 1); addRawSwitchItems(itemModel, SWITCH_TYPE_NONE, 1);
} }
addRawSwitchItems(itemModel, SWITCH_TYPE_SWITCH, fw->getCapability(SwitchesPositions), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_SWITCH, board.getCapability(Board::SwitchPositions), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_MULTIPOS_POT, fw->getCapability(MultiposPots) * fw->getCapability(MultiposPotsPositions), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_MULTIPOS_POT, fw->getCapability(MultiposPots) * fw->getCapability(MultiposPotsPositions), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_TRIM, getBoardCapability(board, Board::NumTrimSwitches), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_TRIM, board.getCapability(Board::NumTrimSwitches), generalSettings);
addRawSwitchItems(itemModel, SWITCH_TYPE_ROTARY_ENCODER, fw->getCapability(RotaryEncoders), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_ROTARY_ENCODER, fw->getCapability(RotaryEncoders), generalSettings);
if (context != GlobalFunctionsContext) { if (context != GlobalFunctionsContext) {
addRawSwitchItems(itemModel, SWITCH_TYPE_VIRTUAL, fw->getCapability(LogicalSwitches), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_VIRTUAL, fw->getCapability(LogicalSwitches), generalSettings);
} }
if (context != MixesContext && context != GlobalFunctionsContext && IS_ARM(board)) { if (context != MixesContext && context != GlobalFunctionsContext && IS_ARM(btype)) {
addRawSwitchItems(itemModel, SWITCH_TYPE_FLIGHT_MODE, fw->getCapability(FlightModes), generalSettings); addRawSwitchItems(itemModel, SWITCH_TYPE_FLIGHT_MODE, fw->getCapability(FlightModes), generalSettings);
} }
if (context == SpecialFunctionsContext || context == GlobalFunctionsContext) { if (context == SpecialFunctionsContext || context == GlobalFunctionsContext) {
@ -530,7 +513,7 @@ void Helpers::addRawSourceItems(QStandardItemModel * itemModel, const RawSourceT
QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * const generalSettings, const ModelData * const model, unsigned int flags) QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * const generalSettings, const ModelData * const model, unsigned int flags)
{ {
QStandardItemModel * itemModel = new QStandardItemModel(); QStandardItemModel * itemModel = new QStandardItemModel();
Board::Type board = getCurrentBoard(); Boards board = Boards(getCurrentBoard());
Firmware * fw = getCurrentFirmware(); Firmware * fw = getCurrentFirmware();
if (flags & POPULATE_NONE) { if (flags & POPULATE_NONE) {
@ -548,13 +531,13 @@ QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * cons
} }
if (flags & POPULATE_SOURCES) { if (flags & POPULATE_SOURCES) {
int totalSources = CPN_MAX_STICKS + getBoardCapability(board, Board::Pots) + getBoardCapability(board, Board::Sliders) + getBoardCapability(board, Board::MouseAnalogs); int totalSources = CPN_MAX_STICKS + board.getCapability(Board::Pots) + board.getCapability(Board::Sliders) + board.getCapability(Board::MouseAnalogs);
addRawSourceItems(itemModel, SOURCE_TYPE_STICK, totalSources, generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_STICK, totalSources, generalSettings, model);
addRawSourceItems(itemModel, SOURCE_TYPE_ROTARY_ENCODER, fw->getCapability(RotaryEncoders), generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_ROTARY_ENCODER, fw->getCapability(RotaryEncoders), generalSettings, model);
} }
if (flags & POPULATE_TRIMS) { if (flags & POPULATE_TRIMS) {
addRawSourceItems(itemModel, SOURCE_TYPE_TRIM, getBoardCapability(board, Board::NumTrims), generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_TRIM, board.getCapability(Board::NumTrims), generalSettings, model);
} }
if (flags & POPULATE_SOURCES) { if (flags & POPULATE_SOURCES) {
@ -562,7 +545,7 @@ QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * cons
} }
if (flags & POPULATE_SWITCHES) { if (flags & POPULATE_SWITCHES) {
addRawSourceItems(itemModel, SOURCE_TYPE_SWITCH, getBoardCapability(board, Board::Switches), generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_SWITCH, board.getCapability(Board::Switches), generalSettings, model);
addRawSourceItems(itemModel, SOURCE_TYPE_CUSTOM_SWITCH, fw->getCapability(LogicalSwitches), generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_CUSTOM_SWITCH, fw->getCapability(LogicalSwitches), generalSettings, model);
} }
@ -573,7 +556,7 @@ QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * cons
} }
if (flags & POPULATE_TELEMETRY) { if (flags & POPULATE_TELEMETRY) {
if (IS_ARM(board)) { if (IS_ARM(board.getBoardType())) {
addRawSourceItems(itemModel, SOURCE_TYPE_SPECIAL, 5, generalSettings, model); addRawSourceItems(itemModel, SOURCE_TYPE_SPECIAL, 5, generalSettings, model);
if (model) { if (model) {
@ -593,7 +576,7 @@ QStandardItemModel * Helpers::getRawSourceItemModel(const GeneralSettings * cons
exclude << TELEMETRY_SOURCE_TX_TIME; exclude << TELEMETRY_SOURCE_TX_TIME;
if (!fw->getCapability(SportTelemetry)) if (!fw->getCapability(SportTelemetry))
exclude << TELEMETRY_SOURCE_SWR; exclude << TELEMETRY_SOURCE_SWR;
if (!IS_ARM(board)) if (!IS_ARM(board.getBoardType()))
exclude << TELEMETRY_SOURCE_TIMER3; exclude << TELEMETRY_SOURCE_TIMER3;
int count = ((flags & POPULATE_TELEMETRYEXT) ? TELEMETRY_SOURCES_STATUS_COUNT : TELEMETRY_SOURCES_COUNT); int count = ((flags & POPULATE_TELEMETRYEXT) ? TELEMETRY_SOURCES_STATUS_COUNT : TELEMETRY_SOURCES_COUNT);
addRawSourceItems(itemModel, SOURCE_TYPE_TELEMETRY, count, generalSettings, model, 0, exclude); addRawSourceItems(itemModel, SOURCE_TYPE_TELEMETRY, count, generalSettings, model, 0, exclude);

View file

@ -146,9 +146,8 @@ namespace Helpers
QStandardItemModel * getRawSourceItemModel(const GeneralSettings * const generalSettings = NULL, const ModelData * const model = NULL, unsigned int flags = 0); QStandardItemModel * getRawSourceItemModel(const GeneralSettings * const generalSettings = NULL, const ModelData * const model = NULL, unsigned int flags = 0);
void populateGvarUseCB(QComboBox *b, unsigned int phase); void populateGvarUseCB(QComboBox *b, unsigned int phase);
void populateGvSourceCB(QComboBox *b, int value);
void populatePhasesCB(QComboBox *b, int value);
void populateGVCB(QComboBox & b, int value, const ModelData & model); void populateGVCB(QComboBox & b, int value, const ModelData & model);
QString getAdjustmentString(int16_t val, const ModelData * model = NULL, bool sign = false);
void populateFileComboBox(QComboBox * b, const QSet<QString> & set, const QString & current); void populateFileComboBox(QComboBox * b, const QSet<QString> & set, const QString & current);
void getFileComboBoxValue(QComboBox * b, char * dest, int length); void getFileComboBoxValue(QComboBox * b, char * dest, int length);

View file

@ -156,7 +156,7 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
curveCB->setProperty("index", i); curveCB->setProperty("index", i);
int numcurves = firmware->getCapability(NumCurves); int numcurves = firmware->getCapability(NumCurves);
for (int j=-numcurves; j<=numcurves; j++) { for (int j=-numcurves; j<=numcurves; j++) {
curveCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, j).toString(), j); curveCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, j).toString(&model, false), j);
} }
curveCB->setCurrentIndex(model.limitData[i].curve.value+numcurves); curveCB->setCurrentIndex(model.limitData[i].curve.value+numcurves);
connect(curveCB, SIGNAL(currentIndexChanged(int)), this, SLOT(curveEdited())); connect(curveCB, SIGNAL(currentIndexChanged(int)), this, SLOT(curveEdited()));

View file

@ -337,6 +337,7 @@ void CustomFunctionsPanel::playMusic()
#define CUSTOM_FUNCTION_REPEAT (1<<7) #define CUSTOM_FUNCTION_REPEAT (1<<7)
#define CUSTOM_FUNCTION_PLAY (1<<8) #define CUSTOM_FUNCTION_PLAY (1<<8)
#define CUSTOM_FUNCTION_BL_COLOR (1<<9) #define CUSTOM_FUNCTION_BL_COLOR (1<<9)
#define CUSTOM_FUNCTION_SHOW_FUNC (1<<10)
void CustomFunctionsPanel::customFunctionEdited() void CustomFunctionsPanel::customFunctionEdited()
{ {
@ -357,7 +358,7 @@ void CustomFunctionsPanel::functionEdited()
RawSwitch swtch = functions[index].swtch; RawSwitch swtch = functions[index].swtch;
functions[index].clear(); functions[index].clear();
functions[index].swtch = swtch; functions[index].swtch = swtch;
functions[index].func = (AssignFunc)fswtchFunc[index]->itemData(fswtchFunc[index]->currentIndex()).toInt(); functions[index].func = (AssignFunc)fswtchFunc[index]->currentData().toInt();
refreshCustomFunction(index); refreshCustomFunction(index);
emit modified(); emit modified();
lock = false; lock = false;
@ -382,7 +383,8 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
cfn.adjustMode = (AssignFunc)fswtchGVmode[i]->currentIndex(); cfn.adjustMode = (AssignFunc)fswtchGVmode[i]->currentIndex();
} }
if (cfn.swtch.toValue()) { if (!cfn.isEmpty()) {
widgetsMask |= CUSTOM_FUNCTION_SHOW_FUNC;
if (func>=FuncOverrideCH1 && func<=FuncOverrideCH32) { if (func>=FuncOverrideCH1 && func<=FuncOverrideCH32) {
if (model) { if (model) {
@ -395,7 +397,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
cfn.param = fswtchParam[i]->value(); cfn.param = fswtchParam[i]->value();
} }
fswtchParam[i]->setValue(cfn.param); fswtchParam[i]->setValue(cfn.param);
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_ENABLE; widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_ENABLE;
} }
} }
else if (func==FuncLogs) { else if (func==FuncLogs) {
@ -456,7 +458,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
if (modified) if (modified)
cfn.param = fswtchParamT[i]->currentData().toInt(); cfn.param = fswtchParamT[i]->currentData().toInt();
populateFuncParamCB(fswtchParamT[i], func, cfn.param); populateFuncParamCB(fswtchParamT[i], func, cfn.param);
widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM + CUSTOM_FUNCTION_ENABLE; widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE;
} }
else if (func==FuncPlaySound || func==FuncPlayHaptic || func==FuncPlayValue || func==FuncPlayPrompt || func==FuncPlayBoth || func==FuncBackgroundMusic) { else if (func==FuncPlaySound || func==FuncPlayHaptic || func==FuncPlayValue || func==FuncPlayPrompt || func==FuncPlayBoth || func==FuncBackgroundMusic) {
if (func != FuncBackgroundMusic) { if (func != FuncBackgroundMusic) {
@ -467,7 +469,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
if (modified) if (modified)
cfn.param = fswtchParamT[i]->currentData().toInt(); cfn.param = fswtchParamT[i]->currentData().toInt();
populateFuncParamCB(fswtchParamT[i], func, cfn.param); populateFuncParamCB(fswtchParamT[i], func, cfn.param);
widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM + CUSTOM_FUNCTION_REPEAT; widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_REPEAT;
} }
else if (func==FuncPlayPrompt || func==FuncPlayBoth) { else if (func==FuncPlayPrompt || func==FuncPlayBoth) {
if (firmware->getCapability(VoicesAsNumbers)) { if (firmware->getCapability(VoicesAsNumbers)) {
@ -475,10 +477,10 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
fswtchParam[i]->setSingleStep(1); fswtchParam[i]->setSingleStep(1);
fswtchParam[i]->setMinimum(0); fswtchParam[i]->setMinimum(0);
if (func==FuncPlayPrompt) { if (func==FuncPlayPrompt) {
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_REPEAT + CUSTOM_FUNCTION_GV_TOOGLE; widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_REPEAT | CUSTOM_FUNCTION_GV_TOOGLE;
} }
else { else {
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_REPEAT; widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM | CUSTOM_FUNCTION_REPEAT;
fswtchParamGV[i]->setChecked(false); fswtchParamGV[i]->setChecked(false);
} }
fswtchParam[i]->setMaximum(func==FuncPlayBoth ? 254 : 255); fswtchParam[i]->setMaximum(func==FuncPlayBoth ? 254 : 255);
@ -563,7 +565,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
} }
fswtchFunc[i]->setVisible(cfn.swtch.toValue()); fswtchFunc[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_SHOW_FUNC);
fswtchParam[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_NUMERIC_PARAM); fswtchParam[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_NUMERIC_PARAM);
fswtchParamTime[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_TIME_PARAM); fswtchParamTime[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_TIME_PARAM);
fswtchParamGV[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_GV_TOOGLE); fswtchParamGV[i]->setVisible(widgetsMask & CUSTOM_FUNCTION_GV_TOOGLE);
@ -678,7 +680,7 @@ void CustomFunctionsPanel::populateFuncCB(QComboBox *b, unsigned int value)
// b->model()->setData(index, v, Qt::UserRole - 1); // b->model()->setData(index, v, Qt::UserRole - 1);
} }
else { else {
b->addItem(CustomFunctionData(AssignFunc(i)).funcToString(), i); b->addItem(CustomFunctionData(AssignFunc(i)).funcToString(model), i);
if (i == value) { if (i == value) {
b->setCurrentIndex(b->count()-1); b->setCurrentIndex(b->count()-1);
} }

View file

@ -468,7 +468,7 @@ void LogicalSwitchesPanel::populateAndSwitchCB(QComboBox *b, const RawSwitch & v
b->addItem(item.toString(), item.toValue()); b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1); if (item == value) b->setCurrentIndex(b->count()-1);
for (int i=1; i<=firmware->getCapability(SwitchesPositions); i++) { for (int i=1; i <= Boards::getCapability(firmware->getBoard(), Board::SwitchPositions); i++) {
item = RawSwitch(SWITCH_TYPE_SWITCH, i); item = RawSwitch(SWITCH_TYPE_SWITCH, i);
b->addItem(item.toString(), item.toValue()); b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1); if (item == value) b->setCurrentIndex(b->count()-1);

View file

@ -140,7 +140,7 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch)
QString str; QString str;
bool newChannel = false; bool newChannel = false;
if (dest < 0) { if (dest < 0) {
str = modelPrinter.printMixerName(-dest); str = modelPrinter.printChannelName(abs(dest)-1);
//highlight channel if needed //highlight channel if needed
if (-dest == (int)highlightedSource) { if (-dest == (int)highlightedSource) {
str = "<b>" + str + "</b>"; str = "<b>" + str + "</b>";
@ -150,7 +150,7 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch)
else { else {
MixData & mix = model->mixData[dest]; MixData & mix = model->mixData[dest];
//mix->destCh from 1 to 32 //mix->destCh from 1 to 32
str = modelPrinter.printMixerName(mix.destCh); str = modelPrinter.printChannelName(mix.destCh-1);
if ((dest == 0) || (model->mixData[dest-1].destCh != mix.destCh)) { if ((dest == 0) || (model->mixData[dest-1].destCh != mix.destCh)) {
newChannel = true; newChannel = true;

View file

@ -1104,7 +1104,7 @@ void SetupPanel::populateThrottleSourceCB()
ui->throttleSource->addItem(firmware->getAnalogInputName(4+i), i); ui->throttleSource->addItem(firmware->getAnalogInputName(4+i), i);
} }
for (int i=0; i<firmware->getCapability(Outputs); i++) { for (int i=0; i<firmware->getCapability(Outputs); i++) {
ui->throttleSource->addItem(ModelPrinter::printChannelName(i)); ui->throttleSource->addItem(RawSource(SOURCE_TYPE_CH, i).toString(model, &generalSettings));
} }
ui->throttleSource->setCurrentIndex(model->thrTraceSrc); ui->throttleSource->setCurrentIndex(model->thrTraceSrc);
lock = false; lock = false;

View file

@ -76,18 +76,12 @@ QString ModelPrinter::printEEpromSize()
QString ModelPrinter::printChannelName(int idx) QString ModelPrinter::printChannelName(int idx)
{ {
return tr("CH%1").arg(idx+1, 2, 10, QChar('0')); QString str = RawSource(SOURCE_TYPE_CH, idx).toString(&model, &generalSettings);
} if (firmware->getCapability(ChannelsName)) {
str = str.leftJustified(firmware->getCapability(ChannelsName) + 5, ' ', false);
QString ModelPrinter::printOutputName(int idx)
{
QString name = QString(model.limitData[idx].name).trimmed();
if (firmware->getCapability(ChannelsName) > 0 && !name.isEmpty()) {
return name;
}
else {
return "";
} }
str.append(' ');
return str.toHtmlEscaped();
} }
QString ModelPrinter::printTrimIncrementMode() QString ModelPrinter::printTrimIncrementMode()
@ -368,9 +362,9 @@ QString ModelPrinter::printInputLine(const ExpoData & input)
str += input.srcRaw.toString(&model, &generalSettings).toHtmlEscaped(); str += input.srcRaw.toString(&model, &generalSettings).toHtmlEscaped();
} }
str += " " + tr("Weight").toHtmlEscaped() + QString("(%1)").arg(getGVarString(input.weight,true).toHtmlEscaped()); str += " " + tr("Weight").toHtmlEscaped() + QString("(%1)").arg(Helpers::getAdjustmentString(input.weight, &model, true).toHtmlEscaped());
if (input.curve.value) if (input.curve.value)
str += " " + input.curve.toString().toHtmlEscaped(); str += " " + input.curve.toString(&model).toHtmlEscaped();
QString flightModesStr = printFlightModes(input.flightModes); QString flightModesStr = printFlightModes(input.flightModes);
if (!flightModesStr.isEmpty()) if (!flightModesStr.isEmpty())
@ -388,7 +382,7 @@ QString ModelPrinter::printInputLine(const ExpoData & input)
} }
if (input.offset) if (input.offset)
str += " " + tr("Offset(%1)").arg(getGVarString(input.offset)).toHtmlEscaped(); str += " " + tr("Offset(%1)").arg(Helpers::getAdjustmentString(input.offset, &model)).toHtmlEscaped();
if (firmware->getCapability(HasExpoNames) && input.name[0]) if (firmware->getCapability(HasExpoNames) && input.name[0])
str += QString(" [%1]").arg(input.name).toHtmlEscaped(); str += QString(" [%1]").arg(input.name).toHtmlEscaped();
@ -396,25 +390,6 @@ QString ModelPrinter::printInputLine(const ExpoData & input)
return str; return str;
} }
QString ModelPrinter::printMixerName(int curDest)
{
QString str = printChannelName(curDest-1) + " ";
if (firmware->getCapability(ChannelsName) > 0) {
QString name = model.limitData[curDest-1].name;
if (!name.isEmpty()) {
name = QString("(") + name + QString(")");
}
name.append(" ");
str += name.left(8);
}
return str.toHtmlEscaped();
}
QString ModelPrinter::printMixerLine(int idx, bool showMultiplex, int highlightedSource)
{
return printMixerLine(model.mixData[idx], highlightedSource, showMultiplex);
}
QString ModelPrinter::printMixerLine(const MixData & mix, bool showMultiplex, int highlightedSource) QString ModelPrinter::printMixerLine(const MixData & mix, bool showMultiplex, int highlightedSource)
{ {
QString str = "&nbsp;"; QString str = "&nbsp;";
@ -439,7 +414,7 @@ QString ModelPrinter::printMixerLine(const MixData & mix, bool showMultiplex, in
if (mix.mltpx == MLTPX_MUL && !showMultiplex) if (mix.mltpx == MLTPX_MUL && !showMultiplex)
str += " " + QString("MULT!").toHtmlEscaped(); str += " " + QString("MULT!").toHtmlEscaped();
else else
str += " " + tr("Weight(%1)").arg(getGVarString(mix.weight, true)).toHtmlEscaped(); str += " " + tr("Weight(%1)").arg(Helpers::getAdjustmentString(mix.weight, &model, true)).toHtmlEscaped();
QString flightModesStr = printFlightModes(mix.flightModes); QString flightModesStr = printFlightModes(mix.flightModes);
if (!flightModesStr.isEmpty()) if (!flightModesStr.isEmpty())
@ -456,9 +431,9 @@ QString ModelPrinter::printMixerLine(const MixData & mix, bool showMultiplex, in
if (firmware->getCapability(HasNoExpo) && mix.noExpo) if (firmware->getCapability(HasNoExpo) && mix.noExpo)
str += " " + tr("No DR/Expo").toHtmlEscaped(); str += " " + tr("No DR/Expo").toHtmlEscaped();
if (mix.sOffset) if (mix.sOffset)
str += " " + tr("Offset(%1)").arg(getGVarString(mix.sOffset)).toHtmlEscaped(); str += " " + tr("Offset(%1)").arg(Helpers::getAdjustmentString(mix.sOffset, &model)).toHtmlEscaped();
if (mix.curve.value) if (mix.curve.value)
str += " " + mix.curve.toString().toHtmlEscaped(); str += " " + mix.curve.toString(&model).toHtmlEscaped();
int scale = firmware->getCapability(SlowScale); int scale = firmware->getCapability(SlowScale);
if (scale == 0) if (scale == 0)
scale = 1; scale = 1;
@ -519,7 +494,7 @@ QString ModelPrinter::printLogicalSwitchLine(int idx)
const QString sw1Name = RawSwitch(ls.val1).toString(getCurrentBoard(), &generalSettings); const QString sw1Name = RawSwitch(ls.val1).toString(getCurrentBoard(), &generalSettings);
const QString sw2Name = RawSwitch(ls.val2).toString(getCurrentBoard(), &generalSettings); const QString sw2Name = RawSwitch(ls.val2).toString(getCurrentBoard(), &generalSettings);
if (!ls.func) if (ls.isEmpty())
return result; return result;
if (ls.andsw!=0) { if (ls.andsw!=0) {
@ -642,7 +617,7 @@ QString ModelPrinter::printCustomFunctionLine(int idx)
return result; return result;
result += cf.swtch.toString(getCurrentBoard(), &generalSettings) + " - "; result += cf.swtch.toString(getCurrentBoard(), &generalSettings) + " - ";
result += cf.funcToString() + "("; result += cf.funcToString(&model) + " (";
result += cf.paramToString(&model) + ")"; result += cf.paramToString(&model) + ")";
if (!cf.repeatToString().isEmpty()) if (!cf.repeatToString().isEmpty())
result += " " + cf.repeatToString(); result += " " + cf.repeatToString();
@ -651,6 +626,11 @@ QString ModelPrinter::printCustomFunctionLine(int idx)
return result; return result;
} }
QString ModelPrinter::printCurveName(int idx)
{
return model.curves[idx].nameToString(idx).toHtmlEscaped();
}
QString ModelPrinter::printCurve(int idx) QString ModelPrinter::printCurve(int idx)
{ {
QString result; QString result;

View file

@ -75,13 +75,11 @@ class ModelPrinter: public QObject
QString printInputName(int idx); QString printInputName(int idx);
QString printInputLine(int idx); QString printInputLine(int idx);
QString printInputLine(const ExpoData & ed); QString printInputLine(const ExpoData & ed);
QString printMixerName(int curDest);
QString printMixerLine(int idx, bool showMultiplex, int highlightedSource = 0);
QString printMixerLine(const MixData & md, bool showMultiplex, int highlightedSource = 0); QString printMixerLine(const MixData & md, bool showMultiplex, int highlightedSource = 0);
QString printLogicalSwitchLine(int idx); QString printLogicalSwitchLine(int idx);
QString printCustomFunctionLine(int idx); QString printCustomFunctionLine(int idx);
static QString printChannelName(int idx); QString printChannelName(int idx);
QString printOutputName(int idx); QString printCurveName(int idx);
QString printCurve(int idx); QString printCurve(int idx);
QString createCurveImage(int idx, QTextDocument * document); QString createCurveImage(int idx, QTextDocument * document);

View file

@ -351,7 +351,6 @@ QString MultiModelPrinter::printLimits()
columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>" \ columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>" \
"<tr>" \ "<tr>" \
" <td><b>" + tr("Channel") + "</b></td>" \ " <td><b>" + tr("Channel") + "</b></td>" \
" <td><b>" + (firmware->getCapability(ChannelsName) > 0 ? tr("Name") : "") + "</b></td>" \
" <td><b>" + tr("Offset") + "</b></td>" \ " <td><b>" + tr("Offset") + "</b></td>" \
" <td><b>" + tr("Min") + "</b></td>" \ " <td><b>" + tr("Min") + "</b></td>" \
" <td><b>" + tr("Max") + "</b></td>" \ " <td><b>" + tr("Max") + "</b></td>" \
@ -365,8 +364,6 @@ QString MultiModelPrinter::printLimits()
continue; continue;
columns.append("<tr><td><b>"); columns.append("<tr><td><b>");
COMPARE(modelPrinter->printChannelName(i)); COMPARE(modelPrinter->printChannelName(i));
columns.append("</b></td><td>");
COMPARE(modelPrinter->printOutputName(i));
columns.append("</td><td>"); columns.append("</td><td>");
COMPARE(model->limitData[i].offsetToString()); COMPARE(model->limitData[i].offsetToString());
columns.append("</td><td>"); columns.append("</td><td>");
@ -441,7 +438,7 @@ QString MultiModelPrinter::printMixers()
} }
if (count > 0) { if (count > 0) {
columns.append("<tr><td width='20%'><b>"); columns.append("<tr><td width='20%'><b>");
COMPARE(modelPrinter->printMixerName(i+1)); COMPARE(modelPrinter->printChannelName(i));
columns.append("</b></td><td>"); columns.append("</b></td><td>");
for (int j=0; j<count; j++) { for (int j=0; j<count; j++) {
if (j > 0) if (j > 0)
@ -471,7 +468,9 @@ QString MultiModelPrinter::printCurves(QTextDocument * document)
} }
if (!curveEmpty) { if (!curveEmpty) {
count++; count++;
columns.append("<tr><td width='20%'><b>" + tr("CV%1").arg(i+1) + "</b></td><td>"); columns.append("<tr><td width='20%'><b>");
COMPARE(modelPrinter->printCurveName(i));
columns.append("</b></td><td>");
COMPARE(modelPrinter->printCurve(i)); COMPARE(modelPrinter->printCurve(i));
for (int k=0; k < modelPrinterMap.size(); k++) for (int k=0; k < modelPrinterMap.size(); k++)
columns.append(k, QString("<br/><img src='%1' border='0' />").arg(modelPrinterMap.value(k).second->createCurveImage(i, document))); columns.append(k, QString("<br/><img src='%1' border='0' />").arg(modelPrinterMap.value(k).second->createCurveImage(i, document)));
@ -495,7 +494,7 @@ QString MultiModelPrinter::printLogicalSwitches()
for (int i=0; i<firmware->getCapability(LogicalSwitches); i++) { for (int i=0; i<firmware->getCapability(LogicalSwitches); i++) {
bool lsEmpty = true; bool lsEmpty = true;
for (int k=0; k < modelPrinterMap.size(); k++) { for (int k=0; k < modelPrinterMap.size(); k++) {
if (!modelPrinterMap.value(k).second->printLogicalSwitchLine(i).isEmpty()) { if (!modelPrinterMap.value(k).first->logicalSw[i].isEmpty()) {
lsEmpty = false; lsEmpty = false;
break; break;
} }
@ -524,7 +523,7 @@ QString MultiModelPrinter::printCustomFunctions()
for (int i=0; i < firmware->getCapability(CustomFunctions); i++) { for (int i=0; i < firmware->getCapability(CustomFunctions); i++) {
bool sfEmpty = true; bool sfEmpty = true;
for (int k=0; k < modelPrinterMap.size(); k++) { for (int k=0; k < modelPrinterMap.size(); k++) {
if (modelPrinterMap.value(k).first->customFn[i].swtch.type != SWITCH_TYPE_NONE) { if (!modelPrinterMap.value(k).first->customFn[i].isEmpty()) {
sfEmpty = false; sfEmpty = false;
break; break;
} }

View file

@ -171,6 +171,16 @@ void GeneralSettings::convert(Board::Type before, Board::Type after)
} }
} }
/*
* RadioData
*/
RadioData::RadioData()
{
models.resize(getCurrentFirmware()->getCapability(Models));
}
void RadioData::setCurrentModel(unsigned int index) void RadioData::setCurrentModel(unsigned int index)
{ {
generalSettings.currModelIndex = index; generalSettings.currModelIndex = index;

View file

@ -316,7 +316,7 @@ class CurveReference {
CurveRefType type; CurveRefType type;
int value; int value;
QString toString() const; QString toString(const ModelData * model = NULL, bool verbose = true) const;
}; };
enum InputMode { enum InputMode {
@ -361,6 +361,8 @@ class CurveData {
CurveData(); CurveData();
void clear(int count); void clear(int count);
bool isEmpty() const; bool isEmpty() const;
QString nameToString(const int idx) const;
CurveType type; CurveType type;
bool smooth; bool smooth;
int count; int count;
@ -468,7 +470,9 @@ class LogicalSwitchData { // Logical Switches data
unsigned int delay; unsigned int delay;
unsigned int duration; unsigned int duration;
int andsw; int andsw;
void clear() { memset(this, 0, sizeof(LogicalSwitchData)); } void clear() { memset(this, 0, sizeof(LogicalSwitchData)); }
bool isEmpty() const;
CSFunctionFamily getFunctionFamily() const; CSFunctionFamily getFunctionFamily() const;
unsigned int getRangeFlags() const; unsigned int getRangeFlags() const;
QString funcToString() const; QString funcToString() const;
@ -531,8 +535,10 @@ class CustomFunctionData { // Function Switches data
unsigned int enabled; // TODO perhaps not any more the right name unsigned int enabled; // TODO perhaps not any more the right name
unsigned int adjustMode; unsigned int adjustMode;
int repeatParam; int repeatParam;
void clear(); void clear();
QString funcToString() const; bool isEmpty() const;
QString funcToString(const ModelData * model = NULL) const;
QString paramToString(const ModelData * model) const; QString paramToString(const ModelData * model) const;
QString repeatToString() const; QString repeatToString() const;
QString enabledToString() const; QString enabledToString() const;