diff --git a/companion/src/comparedialog.cpp b/companion/src/comparedialog.cpp index 140d7be52..ed6f18630 100644 --- a/companion/src/comparedialog.cpp +++ b/companion/src/comparedialog.cpp @@ -296,7 +296,7 @@ void CompareDialog::printPhases() str.append(""+tr("Switch")+""+tr("Flight mode name")); str.append(""+tr("IN")+""+tr("OUT")+""); for (i=0; i<4; i++) { - str.append(QString("%1").arg(getInputStr(*g_model1, i))); + str.append(QString("%1").arg(getInputStr(g_model1, i))); } str.append(""); for (i=0; igetCapability(FlightModes); i++) { @@ -385,7 +385,7 @@ void CompareDialog::printPhases() str.append(""+tr("Switch")+""+tr("Flight mode name")); str.append(""+tr("IN")+""+tr("OUT")+""); for (i=0; i<4; i++) { - str.append(QString("%1").arg(getInputStr(*g_model1, i))); + str.append(QString("%1").arg(getInputStr(g_model1, i))); } str.append(""); for (i=0; igetCapability(FlightModes); i++) { @@ -668,7 +668,7 @@ void CompareDialog::printExpos() } } str.append(""); - str.append(""+getInputStr(*g_model2, i)+""); + str.append(""+getInputStr(g_model2, i)+""); str.append(""); str.append(""); for (int j=0; jweight)).rightJustified(6, ' '); - str += md->srcRaw.toString(*g_model1); + str += md->srcRaw.toString(g_model1); 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)); @@ -871,7 +871,7 @@ void CompareDialog::printMixers() break; }; str += QString(" %1").arg(getGVarString(md->weight)).rightJustified(6, ' '); - str += md->srcRaw.toString(*g_model2); + str += md->srcRaw.toString(g_model2); 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)); diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index bcad0c347..5a956b81d 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -92,7 +92,7 @@ QString getGVarString(int16_t val, bool sign) } } -RawSourceRange RawSource::getRange(const ModelData & model, const GeneralSettings & settings, unsigned int flags) const +RawSourceRange RawSource::getRange(const ModelData * model, const GeneralSettings & settings, unsigned int flags) const { RawSourceRange result; @@ -137,13 +137,13 @@ RawSourceRange RawSource::getRange(const ModelData & model, const GeneralSetting case TELEMETRY_SOURCE_A2_MIN: case TELEMETRY_SOURCE_A3_MIN: case TELEMETRY_SOURCE_A4_MIN: - result = model.frsky.channels[index-TELEMETRY_SOURCE_A1_MIN].getRange(); + if (model) result = model->frsky.channels[index-TELEMETRY_SOURCE_A1_MIN].getRange(); break; case TELEMETRY_SOURCE_A1: case TELEMETRY_SOURCE_A2: case TELEMETRY_SOURCE_A3: case TELEMETRY_SOURCE_A4: - result = model.frsky.channels[index-TELEMETRY_SOURCE_A1].getRange(); + if (model) result = model->frsky.channels[index-TELEMETRY_SOURCE_A1].getRange(); break; case TELEMETRY_SOURCE_ALT: case TELEMETRY_SOURCE_ALT_MIN: @@ -302,8 +302,10 @@ RawSourceRange RawSource::getRange(const ModelData & model, const GeneralSetting break; default: - result.max = model.getChannelsMax(true); - result.min = -result.max; + if (model) { + result.max = model->getChannelsMax(true); + result.min = -result.max; + } break; } @@ -332,7 +334,7 @@ QString RotaryEncoderString(int index) return CHECK_IN_ARRAY(rotary, index); } -QString RawSource::toString(const ModelData & model) +QString RawSource::toString(const ModelData * model) { static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA") @@ -367,8 +369,8 @@ QString RawSource::toString(const ModelData & model) 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]); + if (model && strlen(model->inputNames[index]) > 0) { + result += QString(model->inputNames[index]); } return result; } @@ -618,10 +620,10 @@ QString LogicalSwitchData::toString(const ModelData & model, const GeneralSettin break; case LS_FAMILY_VOFS: { RawSource source = RawSource(val1); - RawSourceRange range = source.getRange(model, settings); + RawSourceRange range = source.getRange(&model, settings); QString res; if (val1) - res += source.toString(model); + res += source.toString(&model); else res += "0"; res.remove(" "); @@ -664,7 +666,7 @@ QString LogicalSwitchData::toString(const ModelData & model, const GeneralSettin case LS_FAMILY_VCOMP: if (val1) - result += RawSource(val1).toString(model); + result += RawSource(val1).toString(&model); else result += "0"; switch (func) { @@ -692,7 +694,7 @@ QString LogicalSwitchData::toString(const ModelData & model, const GeneralSettin break; } if (val2) - result += RawSource(val2).toString(model); + result += RawSource(val2).toString(&model); else result += "0"; break; @@ -723,9 +725,8 @@ void CustomFunctionData::clear() QString CustomFunctionData::funcToString() { - ModelData model; if (func >= FuncOverrideCH1 && func <= FuncOverrideCH32) - return QObject::tr("Override %1").arg(RawSource(SOURCE_TYPE_CH, func).toString(model)); + return QObject::tr("Override %1").arg(RawSource(SOURCE_TYPE_CH, func).toString()); else if (func == FuncTrainer) return QObject::tr("Trainer"); else if (func == FuncTrainerRUD) @@ -805,27 +806,26 @@ QString CustomFunctionData::paramToString() } else if ((func==FuncVolume)|| (func==FuncPlayValue)) { RawSource item(param); - ModelData model; - return item.toString(model); + return item.toString(); } else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) { if ( GetCurrentFirmware()->getCapability(VoicesAsNumbers)) { return QString("%1").arg(param); - } else { + } + else { return paramarm; } } else if ((func>FuncBackgroundMusicPause) && (funcmode = INPUT_MODE_BOTH; expo->srcRaw = settings.getDefaultSource(i); expo->weight = 100; - strncpy(inputNames[i], expo->srcRaw.toString(*this).toLatin1().constData(), sizeof(inputNames[i])-1); + strncpy(inputNames[i], expo->srcRaw.toString(this).toLatin1().constData(), sizeof(inputNames[i])-1); } } } diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 7c095fbf4..d6e7382ce 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -208,6 +208,9 @@ extern const char rightArrow[]; extern const char upArrow[]; extern const char downArrow[]; +class ModelData; +class GeneralSettings; + enum ThrottleSource { THROTTLE_SOURCE_THR, THROTTLE_SOURCE_P1, @@ -302,8 +305,6 @@ enum RawSourceType { MAX_SOURCE_TYPE }; -class ModelData; - QString AnalogString(int index); QString RotaryEncoderString(int index); @@ -335,7 +336,6 @@ class RawSourceRange #define RANGE_DELTA_FUNCTION 2 #define RANGE_DELTA_ABS_FUNCTION 4 -class GeneralSettings; class RawSource { public: RawSource(): @@ -361,9 +361,9 @@ class RawSource { return index >= 0 ? (type * 65536 + index) : -(type * 65536 - index); } - QString toString(const ModelData & model); + QString toString(const ModelData * model = NULL); - RawSourceRange getRange(const ModelData & model, const GeneralSettings & settings, unsigned int flags=0) const; + RawSourceRange getRange(const ModelData * model, const GeneralSettings & settings, unsigned int flags=0) const; bool operator == ( const RawSource & other) { return (this->type == other.type) && (this->index == other.index); @@ -434,121 +434,6 @@ class RawSwitch { int index; }; -class TrainerMix { - public: - TrainerMix() { clear(); } - unsigned int src; // 0-7 = ch1-8 - RawSwitch swtch; - int weight; - unsigned int mode; // off, add-mode, subst-mode - void clear() { memset(this, 0, sizeof(TrainerMix)); } -}; - -class TrainerData { - public: - TrainerData() { clear(); } - int calib[4]; - TrainerMix mix[4]; - void clear() { memset(this, 0, sizeof(TrainerData)); } -}; - -enum BeeperMode { - e_quiet = -2, - e_alarms_only = -1, - e_no_keys = 0, - e_all = 1 -}; - -class GeneralSettings { - public: - GeneralSettings(); - - int getDefaultStick(unsigned int channel) const; - RawSource getDefaultSource(unsigned int channel) const; - int getDefaultChannel(unsigned int stick) const; - - unsigned int version; - unsigned int variant; - int calibMid[NUM_STICKS+C9X_NUM_POTS]; - int calibSpanNeg[NUM_STICKS+C9X_NUM_POTS]; - int calibSpanPos[NUM_STICKS+C9X_NUM_POTS]; - unsigned int currModel; // 0..15 - unsigned int contrast; - unsigned int vBatWarn; - int vBatCalib; - int vBatMin; - int vBatMax; - int backlightMode; - TrainerData trainer; - unsigned int view; // main screen view // TODO enum - bool disableThrottleWarning; - bool fai; - int switchWarning; // -1=down, 0=off, 1=up - bool disableMemoryWarning; - BeeperMode beeperMode; - bool disableAlarmWarning; - bool enableTelemetryAlarm; - BeeperMode hapticMode; - unsigned int stickMode; // TODO enum - int timezone; - bool optrexDisplay; - unsigned int inactivityTimer; - bool minuteBeep; - bool preBeep; - bool flashBeep; - bool disablePotScroll; - bool frskyinternalalarm; - bool disableBG; - unsigned int splashMode; - int splashDuration; - unsigned int backlightDelay; - bool blightinv; - bool stickScroll; - unsigned int templateSetup; //RETA order according to chout_ar array - int PPM_Multiplier; - int hapticLength; - unsigned int reNavigation; - unsigned int stickReverse; - bool hideNameOnSplash; - bool enablePpmsim; - unsigned int speakerPitch; - int hapticStrength; - unsigned int speakerMode; - unsigned int lightOnStickMove; /* er9x / ersky9x only */ - char ownerName[10+1]; - unsigned int switchWarningStates; - int beeperLength; - unsigned int gpsFormat; - int speakerVolume; - unsigned int backlightBright; - int switchesDelay; - int currentCalib; - int temperatureCalib; - int temperatureWarn; - unsigned int mAhWarn; - unsigned int mAhUsed; - unsigned int globalTimer; - unsigned int btBaudrate; - unsigned int sticksGain; - unsigned int rotarySteps; - unsigned int countryCode; - unsigned int imperial; - bool crosstrim; - char ttsLanguage[2+1]; - int beepVolume; - int wavVolume; - int varioVolume; - int varioPitch; - int varioRange; - int varioRepeat; - int backgroundVolume; - unsigned int mavbaud; - unsigned int switchUnlockStates; - unsigned int hw_uartMode; - unsigned int potsType[8]; - unsigned int backlightColor; -}; - class CurveReference { public: enum CurveRefType { @@ -1067,6 +952,123 @@ class ModelData { void removeGlobalVar(int & var); }; + +class TrainerMix { + public: + TrainerMix() { clear(); } + unsigned int src; // 0-7 = ch1-8 + RawSwitch swtch; + int weight; + unsigned int mode; // off, add-mode, subst-mode + void clear() { memset(this, 0, sizeof(TrainerMix)); } +}; + +class TrainerData { + public: + TrainerData() { clear(); } + int calib[4]; + TrainerMix mix[4]; + void clear() { memset(this, 0, sizeof(TrainerData)); } +}; + +enum BeeperMode { + e_quiet = -2, + e_alarms_only = -1, + e_no_keys = 0, + e_all = 1 +}; + +class GeneralSettings { + public: + GeneralSettings(); + + int getDefaultStick(unsigned int channel) const; + RawSource getDefaultSource(unsigned int channel) const; + int getDefaultChannel(unsigned int stick) const; + + unsigned int version; + unsigned int variant; + int calibMid[NUM_STICKS+C9X_NUM_POTS]; + int calibSpanNeg[NUM_STICKS+C9X_NUM_POTS]; + int calibSpanPos[NUM_STICKS+C9X_NUM_POTS]; + unsigned int currModel; // 0..15 + unsigned int contrast; + unsigned int vBatWarn; + int vBatCalib; + int vBatMin; + int vBatMax; + int backlightMode; + TrainerData trainer; + unsigned int view; // main screen view // TODO enum + bool disableThrottleWarning; + bool fai; + int switchWarning; // -1=down, 0=off, 1=up + bool disableMemoryWarning; + BeeperMode beeperMode; + bool disableAlarmWarning; + bool enableTelemetryAlarm; + BeeperMode hapticMode; + unsigned int stickMode; // TODO enum + int timezone; + bool optrexDisplay; + unsigned int inactivityTimer; + bool minuteBeep; + bool preBeep; + bool flashBeep; + bool disablePotScroll; + bool frskyinternalalarm; + bool disableBG; + unsigned int splashMode; + int splashDuration; + unsigned int backlightDelay; + bool blightinv; + bool stickScroll; + unsigned int templateSetup; //RETA order according to chout_ar array + int PPM_Multiplier; + int hapticLength; + unsigned int reNavigation; + unsigned int stickReverse; + bool hideNameOnSplash; + bool enablePpmsim; + unsigned int speakerPitch; + int hapticStrength; + unsigned int speakerMode; + unsigned int lightOnStickMove; /* er9x / ersky9x only */ + char ownerName[10+1]; + unsigned int switchWarningStates; + int beeperLength; + unsigned int gpsFormat; + int speakerVolume; + unsigned int backlightBright; + int switchesDelay; + int currentCalib; + int temperatureCalib; + int temperatureWarn; + unsigned int mAhWarn; + unsigned int mAhUsed; + unsigned int globalTimer; + unsigned int btBaudrate; + unsigned int sticksGain; + unsigned int rotarySteps; + unsigned int countryCode; + unsigned int imperial; + bool crosstrim; + char ttsLanguage[2+1]; + int beepVolume; + int wavVolume; + int varioVolume; + int varioPitch; + int varioRange; + int varioRepeat; + int backgroundVolume; + unsigned int mavbaud; + unsigned int switchUnlockStates; + unsigned int hw_uartMode; + unsigned int potsType[8]; + unsigned int backlightColor; + CustomFunctionData customFn[C9X_MAX_CUSTOM_FUNCTIONS]; +}; + class RadioData { public: GeneralSettings generalSettings; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index daf47a631..d72916984 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -524,7 +524,7 @@ class SourceField: public ConversionField< UnsignedField > { public: SourceField(RawSource & source, BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0): ConversionField< UnsignedField >(_source, SourcesConversionTable::getInstance(board, version, variant, flags), - "Source", "Source "+ source.toString(ModelData())+" cannot be exported on this board!"), + "Source", "Source "+ source.toString()+" cannot be exported on this board!"), source(source), _source(0) { @@ -1888,12 +1888,14 @@ class ArmCustomFunctionField: public TransformedField { variant(variant), functionsConversionTable(board, version), sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), - _active(0) + _func(0), + _active(0), + _mode(0) { memset(_param, 0, sizeof(_param)); internalField.Append(new SwitchField<8>(fn.swtch, board, version)); - internalField.Append(new ConversionField< UnsignedField<8> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); + internalField.Append(new ConversionField< UnsignedField<8> >(_func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); if (IS_TARANIS(board) && version >= 216) internalField.Append(new CharField<8>(_param, false)); @@ -1917,86 +1919,90 @@ class ArmCustomFunctionField: public TransformedField { virtual void beforeExport() { - _mode = 0; + if (fn.swtch.type != SWITCH_TYPE_NONE) { + _func = fn.func; - if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic) - _active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5)); - else - _active = (fn.enabled ? 1 : 0); + if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic) + _active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5)); + else + _active = (fn.enabled ? 1 : 0); - if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { - if (version >= 216) { - *((uint16_t *)_param) = fn.param; - *((uint8_t *)(_param+3)) = fn.func - FuncOverrideCH1; + if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { + if (version >= 216) { + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncOverrideCH1; + } + else { + *((uint32_t *)_param) = fn.param; + } } - else { - *((uint32_t *)_param) = fn.param; + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + if (version >= 216) + *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; } - } - else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { - if (version >= 216) - *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; - } - else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer3) { - if (version >= 216) { - *((uint16_t *)_param) = fn.param; - *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; + else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer3) { + if (version >= 216) { + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; + } } - } - else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { - memcpy(_param, fn.paramarm, sizeof(_param)); - } - else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 216) { - *((uint8_t *)(_param+2)) = fn.adjustMode; - *((uint8_t *)(_param+3)) = fn.func - FuncAdjustGV1; - unsigned int value; - if (fn.adjustMode == 1) + else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { + memcpy(_param, fn.paramarm, sizeof(_param)); + } + else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { + if (version >= 216) { + *((uint8_t *)(_param+2)) = fn.adjustMode; + *((uint8_t *)(_param+3)) = fn.func - FuncAdjustGV1; + unsigned int value; + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)value); + else if (fn.adjustMode == 2) + value = RawSource(fn.param).index; + else + value = fn.param; + *((uint16_t *)_param) = value; + } + else if (version >= 214) { + unsigned int value; + _mode = fn.adjustMode; + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)value); + else if (fn.adjustMode == 2) + value = RawSource(fn.param).index; + else + value = fn.param; + *((uint32_t *)_param) = value; + } + else { + unsigned int value; sourcesConversionTable->exportValue(fn.param, (int &)value); - else if (fn.adjustMode == 2) - value = RawSource(fn.param).index; - else - value = fn.param; - *((uint16_t *)_param) = value; + *((uint32_t *)_param) = value; + } } - else if (version >= 214) { - unsigned int value; - _mode = fn.adjustMode; - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)value); - else if (fn.adjustMode == 2) - value = RawSource(fn.param).index; - else - value = fn.param; - *((uint32_t *)_param) = value; - } - else { + else if (fn.func == FuncPlayValue || fn.func == FuncVolume) { unsigned int value; sourcesConversionTable->exportValue(fn.param, (int &)value); - *((uint32_t *)_param) = value; + if (version >= 216) + *((uint16_t *)_param) = value; + else + *((uint32_t *)_param) = value; } - } - else if (fn.func == FuncPlayValue || fn.func == FuncVolume) { - unsigned int value; - sourcesConversionTable->exportValue(fn.param, (int &)value); - if (version >= 216) - *((uint16_t *)_param) = value; - else - *((uint32_t *)_param) = value; - } - else if (fn.func == FuncReset) { - if (version >= 217) + else if (fn.func == FuncReset) { + if (version >= 217) + *((uint32_t *)_param) = fn.param; + else + *((uint32_t *)_param) = (fn.param < 2 ? fn.param : fn.param-1); + } + else { *((uint32_t *)_param) = fn.param; - else - *((uint32_t *)_param) = (fn.param < 2 ? fn.param : fn.param-1); - } - else { - *((uint32_t *)_param) = fn.param; + } } } virtual void afterImport() { + fn.func = (AssignFunc)_func; + if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic) fn.repeatParam = (version >= 216 ? _active : (_active*5)); else @@ -2079,6 +2085,7 @@ class ArmCustomFunctionField: public TransformedField { unsigned int variant; CustomFunctionsConversionTable functionsConversionTable; SourcesConversionTable * sourcesConversionTable; + unsigned int _func; char _param[10]; int _active; unsigned int _mode; @@ -2978,6 +2985,14 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo } internalField.Append(new UnsignedField<8>(generalData.backlightColor)); } + if (version >= 216) { + internalField.Append(new SpareBitsField<16>()); + } + if (version >= 217) { + for (int i=0; igetBoard())) { + addTab(new CustomFunctionsPanel(this, NULL, generalSettings, firmware), tr("Global Functions")); + } addTab(new TrainerPanel(this, generalSettings, firmware), tr("Trainer")); addTab(new CalibrationPanel(this, generalSettings, firmware), tr("Calibration")); } @@ -57,7 +50,7 @@ GeneralEdit::~GeneralEdit() delete ui; } -void GeneralEdit::addTab(GeneralPanel *panel, QString text) +void GeneralEdit::addTab(GenericPanel *panel, QString text) { panels << panel; QWidget * widget = new QWidget(ui->tabWidget); @@ -75,6 +68,7 @@ void GeneralEdit::onTabModified() void GeneralEdit::on_tabWidget_currentChanged(int index) { + panels[index]->update(); g.generalEditTab(index); } diff --git a/companion/src/generaledit/generaledit.h b/companion/src/generaledit/generaledit.h index 11b821d2d..6483afb31 100644 --- a/companion/src/generaledit/generaledit.h +++ b/companion/src/generaledit/generaledit.h @@ -11,15 +11,11 @@ namespace Ui { class GeneralPanel : public GenericPanel { - Q_OBJECT - public: - GeneralPanel(QWidget *parent, GeneralSettings & generalSettings, FirmwareInterface * firmware); - virtual ~GeneralPanel(); - - protected: - GeneralSettings & generalSettings; - FirmwareInterface * firmware; + GeneralPanel(QWidget *parent, GeneralSettings & generalSettings, FirmwareInterface * firmware): + GenericPanel(parent, NULL, generalSettings, firmware) + { + } }; class GeneralEdit : public QDialog @@ -52,8 +48,8 @@ class GeneralEdit : public QDialog private: FirmwareInterface * firmware; - QVector panels; - void addTab(GeneralPanel *panel, QString text); + QVector panels; + void addTab(GenericPanel *panel, QString text); }; diff --git a/companion/src/generaledit/setup.cpp b/companion/src/generaledit/generalsetup.cpp similarity index 99% rename from companion/src/generaledit/setup.cpp rename to companion/src/generaledit/generalsetup.cpp index b93342390..9a839615e 100755 --- a/companion/src/generaledit/setup.cpp +++ b/companion/src/generaledit/generalsetup.cpp @@ -1,10 +1,10 @@ -#include "setup.h" -#include "ui_setup.h" +#include "generalsetup.h" +#include "ui_generalsetup.h" #include GeneralSetupPanel::GeneralSetupPanel(QWidget * parent, GeneralSettings & generalSettings, FirmwareInterface * firmware): GeneralPanel(parent, generalSettings, firmware), - ui(new Ui::Setup) + ui(new Ui::GeneralSetup) { ui->setupUi(this); diff --git a/companion/src/generaledit/setup.h b/companion/src/generaledit/generalsetup.h similarity index 95% rename from companion/src/generaledit/setup.h rename to companion/src/generaledit/generalsetup.h index efc46c4be..d256c877d 100755 --- a/companion/src/generaledit/setup.h +++ b/companion/src/generaledit/generalsetup.h @@ -1,11 +1,11 @@ -#ifndef SETUP_H -#define SETUP_H +#ifndef GENERALSETUP_H +#define GENERALSETUP_H #include "generaledit.h" #include "eeprominterface.h" namespace Ui { - class Setup; + class GeneralSetup; } class GeneralSetupPanel : public GeneralPanel @@ -63,7 +63,7 @@ class GeneralSetupPanel : public GeneralPanel private: - Ui::Setup *ui; + Ui::GeneralSetup *ui; void setValues(); void populateBacklightCB(); @@ -72,4 +72,4 @@ class GeneralSetupPanel : public GeneralPanel void updateVarioPitchRange(); }; -#endif // SETUP_H +#endif // GENERALSETUP_H diff --git a/companion/src/generaledit/setup.ui b/companion/src/generaledit/generalsetup.ui similarity index 99% rename from companion/src/generaledit/setup.ui rename to companion/src/generaledit/generalsetup.ui index c17b5f185..cd269787a 100755 --- a/companion/src/generaledit/setup.ui +++ b/companion/src/generaledit/generalsetup.ui @@ -1,7 +1,7 @@ - Setup - + GeneralSetup + 0 diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 29ba7b61f..fb89a918f 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -65,14 +65,14 @@ QString getPhaseName(int val, const char * phasename) } } -QString getInputStr(ModelData & model, int index) +QString getInputStr(ModelData * model, int index) { QString result; if (GetCurrentFirmware()->getCapability(VirtualInputs)) { - if (strlen(model.inputNames[index]) > 0) { + if (strlen(model->inputNames[index]) > 0) { result = QObject::tr("[I%1]").arg(index+1); - result += QString(model.inputNames[index]); + result += QString(model->inputNames[index]); } else { result = QObject::tr("Input%1").arg(index+1, 2, 10, QChar('0')); @@ -516,7 +516,7 @@ void populateGVCB(QComboBox *b, int value) } } -void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & model, unsigned int flags) +void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData * model, unsigned int flags) { BoardEnum board = GetCurrentFirmware()->getBoard(); RawSource item; @@ -539,10 +539,10 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & } } - if (flags & POPULATE_VIRTUAL_INPUTS) { + if (model && (flags & POPULATE_VIRTUAL_INPUTS)) { int virtualInputs = GetCurrentFirmware()->getCapability(VirtualInputs); for (int i=0; iisInputValid(i)) { item = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i); b->addItem(item.toString(model), item.toValue()); if (item == source) b->setCurrentIndex(b->count()-1); @@ -761,8 +761,7 @@ QString getFrSkyMeasure(int units) QString getFrSkySrc(int index) { - ModelData model; - return RawSource(SOURCE_TYPE_TELEMETRY, index-1).toString(model); + return RawSource(SOURCE_TYPE_TELEMETRY, index-1).toString(); } QString getTrimInc(ModelData * g_model) @@ -808,7 +807,7 @@ QString getProtocol(ModelData * g_model) return str; } -QString getPhasesStr(unsigned int phases, ModelData & model) +QString getPhasesStr(unsigned int phases, ModelData * model) { int numphases = GetCurrentFirmware()->getCapability(FlightModes); @@ -822,7 +821,7 @@ QString getPhasesStr(unsigned int phases, ModelData & model) for (int i=0; i 0) str += QString(", "); - str += getPhaseName(i+1, model.flightModeData[i].name); + str += getPhaseName(i+1, model->flightModeData[i].name); } } } @@ -998,8 +997,11 @@ QString generateProcessUniqueTempFileName(const QString & fileName) return QDir::tempPath() + QString("/%1-").arg(QCoreApplication::applicationPid()) + sanitizedFileName; } -GenericPanel::GenericPanel(QWidget * parent): +GenericPanel::GenericPanel(QWidget * parent, ModelData * model, GeneralSettings & generalSettings, FirmwareInterface * firmware): QWidget(parent), + model(model), + generalSettings(generalSettings), + firmware(firmware), lock(false) { } diff --git a/companion/src/helpers.h b/companion/src/helpers.h index a69f46f8c..6710fbb93 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -94,7 +94,7 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin void populatePhasesCB(QComboBox *b, int value); void populateGvarUseCB(QComboBox *b, unsigned int phase); QString getProtocolStr(const int proto); -QString getPhasesStr(unsigned int phases, ModelData & model); +QString getPhasesStr(unsigned int phases, ModelData * model); #define POPULATE_SOURCES (1<<0) #define POPULATE_TRIMS (1<<1) @@ -110,9 +110,9 @@ QString getPhasesStr(unsigned int phases, ModelData & model); // void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up void populateGVCB(QComboBox *b, int value); -void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData & model, unsigned int flags); +void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData * model, unsigned int flags); QString getPhaseName(int val, const char * phasename=NULL); -QString getInputStr(ModelData & model, int index); +QString getInputStr(ModelData * model, int index); QString image2qstring(QImage image); QImage qstring2image(QString imagestr); int findmult(float value, float base); @@ -157,7 +157,7 @@ class GenericPanel : public QWidget friend class QUnsignedAutoComboBox; public: - GenericPanel(QWidget *parent); + GenericPanel(QWidget *parent, ModelData * model, GeneralSettings & generalSettings, FirmwareInterface * firmware); virtual ~GenericPanel(); signals: @@ -167,6 +167,9 @@ class GenericPanel : public QWidget virtual void update(); protected: + ModelData * model; + GeneralSettings & generalSettings; + FirmwareInterface * firmware; bool lock; void addLabel(QGridLayout * gridLayout, QString text, int col, bool mimimize=false); void addEmptyLabel(QGridLayout * gridLayout, int col); diff --git a/companion/src/modeledit/CMakeLists.txt b/companion/src/modeledit/CMakeLists.txt index da739efc7..0125365e4 100644 --- a/companion/src/modeledit/CMakeLists.txt +++ b/companion/src/modeledit/CMakeLists.txt @@ -11,7 +11,6 @@ set(modeledit_NAMES ) set(modeledit_SRCS - modelpanel.cpp flightmodes.cpp inputs.cpp mixes.cpp @@ -25,7 +24,6 @@ set(modeledit_SRCS ) set(modeledit_HDRS - modelpanel.h flightmodes.h inputs.h mixes.h diff --git a/companion/src/modeledit/channels.cpp b/companion/src/modeledit/channels.cpp index aee91ee44..720501209 100644 --- a/companion/src/modeledit/channels.cpp +++ b/companion/src/modeledit/channels.cpp @@ -187,7 +187,7 @@ void Channels::symlimitsEdited() { QCheckBox * ckb = qobject_cast(sender()); int index = ckb->property("index").toInt(); - model.limitData[index].symetrical = (ckb->checkState() ? 1 : 0); + model->limitData[index].symetrical = (ckb->checkState() ? 1 : 0); emit modified(); } @@ -197,7 +197,7 @@ void Channels::nameEdited() lock = true; QLineEdit *le = qobject_cast(sender()); int index = le->property("index").toInt(); - strcpy(model.limitData[index].name, le->text().toAscii()); + strcpy(model->limitData[index].name, le->text().toAscii()); lock = false; emit modified(); } @@ -205,7 +205,7 @@ void Channels::nameEdited() void Channels::refreshExtendedLimits() { - int channelMax = model.getChannelsMax(); + int channelMax = model->getChannelsMax(); foreach(LimitsGroup *group, limitsGroups) { group->updateMinMax(10*channelMax); @@ -218,7 +218,7 @@ void Channels::invEdited() { QComboBox *cb = qobject_cast(sender()); int index = cb->property("index").toInt(); - model.limitData[index].revert = cb->currentIndex(); + model->limitData[index].revert = cb->currentIndex(); emit modified(); } @@ -226,7 +226,7 @@ void Channels::curveEdited() { QComboBox *cb = qobject_cast(sender()); int index = cb->property("index").toInt(); - model.limitData[index].curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, cb->itemData(cb->currentIndex()).toInt()); + model->limitData[index].curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, cb->itemData(cb->currentIndex()).toInt()); emit modified(); } @@ -234,7 +234,7 @@ void Channels::ppmcenterEdited() { QSpinBox *sb = qobject_cast(sender()); int index = sb->property("index").toInt(); - model.limitData[index].ppmCenter = sb->value() - 1500; + model->limitData[index].ppmCenter = sb->value() - 1500; emit modified(); } diff --git a/companion/src/modeledit/channels.h b/companion/src/modeledit/channels.h index 94aa6f20b..1e8b16fd0 100644 --- a/companion/src/modeledit/channels.h +++ b/companion/src/modeledit/channels.h @@ -1,7 +1,7 @@ #ifndef CHANNELS_H #define CHANNELS_H -#include "modelpanel.h" +#include "modeledit.h" #include class GVarGroup; diff --git a/companion/src/modeledit/curves.cpp b/companion/src/modeledit/curves.cpp index 0484560f6..e02a3885f 100644 --- a/companion/src/modeledit/curves.cpp +++ b/companion/src/modeledit/curves.cpp @@ -204,7 +204,7 @@ void Curves::resetCurve() int index = button->property("index").toInt(); int res = QMessageBox::question(this, "companion", tr("Are you sure you want to reset curve %1 ?").arg(index+1), QMessageBox::Yes | QMessageBox::No); if (res == QMessageBox::Yes) { - model.curves[index].clear(5); + model->curves[index].clear(5); update(); emit modified(); } @@ -223,7 +223,7 @@ void Curves::update() lock = true; if (firmware->getCapability(HasCvNames)) { - ui->curveName->setText(model.curves[currentCurve].name); + ui->curveName->setText(model->curves[currentCurve].name); } updateCurveType(); @@ -245,21 +245,21 @@ void Curves::updateCurveType() int index = 0; if (firmware->getCapability(EnhancedCurves)) { - index = model.curves[currentCurve].count - 2; + index = model->curves[currentCurve].count - 2; } else { ui->curveSmooth->hide(); - if (model.curves[currentCurve].count == 5) + if (model->curves[currentCurve].count == 5) index = 1; - else if (model.curves[currentCurve].count == 9) + else if (model->curves[currentCurve].count == 9) index = 2; - else if (model.curves[currentCurve].count == 17) + else if (model->curves[currentCurve].count == 17) index = 3; } ui->curvePoints->setCurrentIndex(index); - ui->curveCustom->setCurrentIndex(model.curves[currentCurve].type); - ui->curveSmooth->setCurrentIndex(model.curves[currentCurve].smooth); + ui->curveCustom->setCurrentIndex(model->curves[currentCurve].type); + ui->curveSmooth->setCurrentIndex(model->curves[currentCurve].smooth); lock = false; } @@ -295,36 +295,36 @@ void Curves::updateCurve() for (int k=0; kcurves[k].count; for (int i=0; iaddLine(centerX + (qreal)model.curves[k].points[i].x*width/200,centerY - (qreal)model.curves[k].points[i].y*height/200,centerX + (qreal)model.curves[k].points[i+1].x*width/200,centerY - (qreal)model.curves[k].points[i+1].y*height/200, pen); + if (model->curves[k].type == CurveData::CURVE_TYPE_CUSTOM) + scene->addLine(centerX + (qreal)model->curves[k].points[i].x*width/200,centerY - (qreal)model->curves[k].points[i].y*height/200,centerX + (qreal)model->curves[k].points[i+1].x*width/200,centerY - (qreal)model->curves[k].points[i+1].y*height/200, pen); else - scene->addLine(GFX_MARGIN + i*width/(numpoints-1),centerY - (qreal)model.curves[k].points[i].y*height/200,GFX_MARGIN + (i+1)*width/(numpoints-1),centerY - (qreal)model.curves[k].points[i+1].y*height/200, pen); + scene->addLine(GFX_MARGIN + i*width/(numpoints-1),centerY - (qreal)model->curves[k].points[i].y*height/200,GFX_MARGIN + (i+1)*width/(numpoints-1),centerY - (qreal)model->curves[k].points[i+1].y*height/200, pen); } } } - int numpoints = model.curves[currentCurve].count; + int numpoints = model->curves[currentCurve].count; for (int i=0; isetProperty("index", i); nodex->setColor(colors[currentCurve]); - if (model.curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { + if (model->curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { if (i>0 && isetFixedX(false); - nodex->setMinX(model.curves[currentCurve].points[i-1].x); - nodex->setMaxX(model.curves[currentCurve].points[i+1].x); + nodex->setMinX(model->curves[currentCurve].points[i-1].x); + nodex->setMaxX(model->curves[currentCurve].points[i+1].x); } else { nodex->setFixedX(true); } - nodex->setPos(centerX + (qreal)model.curves[currentCurve].points[i].x*width/200,centerY - (qreal)model.curves[currentCurve].points[i].y*height/200); + nodex->setPos(centerX + (qreal)model->curves[currentCurve].points[i].x*width/200,centerY - (qreal)model->curves[currentCurve].points[i].y*height/200); } else { nodex->setFixedX(true); - nodex->setPos(GFX_MARGIN + i*width/(numpoints-1), centerY - (qreal)model.curves[currentCurve].points[i].y*height/200); + nodex->setPos(GFX_MARGIN + i*width/(numpoints-1), centerY - (qreal)model->curves[currentCurve].points[i].y*height/200); } connect(nodex, SIGNAL(moved(int, int)), this, SLOT(onNodeMoved(int, int))); connect(nodex, SIGNAL(focus()), this, SLOT(onNodeFocus())); @@ -340,23 +340,23 @@ void Curves::updateCurvePoints() { lock = true; - int count = model.curves[currentCurve].count; + int count = model->curves[currentCurve].count; for (int i=0; ishow(); - spny[i]->setValue(model.curves[currentCurve].points[i].y); - if (model.curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { + spny[i]->setValue(model->curves[currentCurve].points[i].y); + if (model->curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { spnx[i]->show(); - if (i==0 || i==model.curves[currentCurve].count-1) { + if (i==0 || i==model->curves[currentCurve].count-1) { spnx[i]->setDisabled(true); spnx[i]->setMaximum(+100); spnx[i]->setMinimum(-100); } else { spnx[i]->setDisabled(false); - spnx[i]->setMaximum(model.curves[currentCurve].points[i+1].x); - spnx[i]->setMinimum(model.curves[currentCurve].points[i-1].x); + spnx[i]->setMaximum(model->curves[currentCurve].points[i+1].x); + spnx[i]->setMinimum(model->curves[currentCurve].points[i-1].x); } - spnx[i]->setValue(model.curves[currentCurve].points[i].x); + spnx[i]->setValue(model->curves[currentCurve].points[i].x); } else { spnx[i]->hide(); @@ -374,8 +374,8 @@ void Curves::onPointEdited() { if (!lock) { int index = sender()->property("index").toInt(); - model.curves[currentCurve].points[index].x = spnx[index]->value(); - model.curves[currentCurve].points[index].y = spny[index]->value(); + model->curves[currentCurve].points[index].x = spnx[index]->value(); + model->curves[currentCurve].points[index].y = spny[index]->value(); updateCurve(); emit modified(); } @@ -386,13 +386,13 @@ void Curves::onNodeMoved(int x, int y) if (!lock) { lock = true; int index = sender()->property("index").toInt(); - model.curves[currentCurve].points[index].x = x; - model.curves[currentCurve].points[index].y = y; + model->curves[currentCurve].points[index].x = x; + model->curves[currentCurve].points[index].y = y; spnx[index]->setValue(x); spny[index]->setValue(y); if (index > 0) spnx[index-1]->setMaximum(x); - if (index < model.curves[currentCurve].count-1) + if (index < model->curves[currentCurve].count-1) spnx[index+1]->setMinimum(x); emit modified(); lock = false; @@ -418,8 +418,8 @@ bool Curves::allowCurveType(int points, CurveData::CurveType type) int totalpoints = 0; for (int i=0; icurves[i].count); + CurveData::CurveType cvType = (i==currentCurve ? type : model->curves[i].type); totalpoints += cvPoints + (cvType==CurveData::CURVE_TYPE_CUSTOM ? cvPoints-2 : 0); } @@ -438,13 +438,13 @@ void Curves::on_curvePoints_currentIndexChanged(int index) if (!lock) { int numpoints = ((QComboBox *)sender())->itemData(index).toInt(); - if (allowCurveType(numpoints, model.curves[currentCurve].type)) { - model.curves[currentCurve].count = numpoints; + if (allowCurveType(numpoints, model->curves[currentCurve].type)) { + model->curves[currentCurve].count = numpoints; // TODO something better + reuse! for (int i=0; i= numpoints-1 ? +100 : -100 + (200*i)/(numpoints-1)); - model.curves[currentCurve].points[i].y = 0; + model->curves[currentCurve].points[i].x = (i >= numpoints-1 ? +100 : -100 + (200*i)/(numpoints-1)); + model->curves[currentCurve].points[i].y = 0; } update(); @@ -461,13 +461,13 @@ void Curves::on_curveCustom_currentIndexChanged(int index) if (!lock) { CurveData::CurveType type = (CurveData::CurveType)index; int numpoints = ui->curvePoints->itemData(ui->curvePoints->currentIndex()).toInt(); - if (allowCurveType(model.curves[currentCurve].count, type)) { - model.curves[currentCurve].type = type; + if (allowCurveType(model->curves[currentCurve].count, type)) { + model->curves[currentCurve].type = type; // TODO something better + reuse! for (int i=0; i= numpoints-1 ? +100 : -100 + (200*i)/(numpoints-1)); - model.curves[currentCurve].points[i].y = 0; + model->curves[currentCurve].points[i].x = (i >= numpoints-1 ? +100 : -100 + (200*i)/(numpoints-1)); + model->curves[currentCurve].points[i].y = 0; } update(); @@ -481,14 +481,14 @@ void Curves::on_curveCustom_currentIndexChanged(int index) void Curves::on_curveSmooth_currentIndexChanged(int index) { - model.curves[currentCurve].smooth = index; + model->curves[currentCurve].smooth = index; update(); } void Curves::on_curveName_editingFinished() { - memset(model.curves[currentCurve].name, 0, sizeof(model.curves[currentCurve].name)); - strcpy(model.curves[currentCurve].name, ui->curveName->text().toAscii()); + memset(model->curves[currentCurve].name, 0, sizeof(model->curves[currentCurve].name)); + strcpy(model->curves[currentCurve].name, ui->curveName->text().toAscii()); emit modified(); } @@ -528,12 +528,12 @@ void Curves::addTemplate(QString name, unsigned int flags, curveFunction functio void Curves::on_curveApply_clicked() { int index = ui->curveType->currentIndex(); - int numpoints = model.curves[currentCurve].count; + int numpoints = model->curves[currentCurve].count; for (int i=0; icurves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) + x = model->curves[currentCurve].points[i].x; else x = -100.0 + (200.0/(numpoints-1))*i; @@ -553,7 +553,7 @@ void Curves::on_curveApply_clicked() } if (apply) { - model.curves[currentCurve].points[i].y = templates[index].function(x, ui->curveCoeff->value(), ui->yMin->value(), ui->yMid->value(), ui->yMax->value()); + model->curves[currentCurve].points[i].y = templates[index].function(x, ui->curveCoeff->value(), ui->yMin->value(), ui->yMid->value(), ui->yMax->value()); } } @@ -571,12 +571,12 @@ void ModelEdit::clearCurves(bool ask) } curvesLock=true; for (int j=0; j<16; j++) { - model.curves[j].count = 5; - model.curves[j].custom = false; - memset(model.curves[j].name, 0, sizeof(model.curves[j].name)); + model->curves[j].count = 5; + model->curves[j].custom = false; + memset(model->curves[j].name, 0, sizeof(model->curves[j].name)); for (int i=0; i<17; i++) { - model.curves[j].points[i].x = 0; - model.curves[j].points[i].y = 0; + model->curves[j].points[i].x = 0; + model->curves[j].points[i].y = 0; } } for (int i=0; i<17; i++) { diff --git a/companion/src/modeledit/curves.h b/companion/src/modeledit/curves.h index 57a39504a..acc9818e8 100644 --- a/companion/src/modeledit/curves.h +++ b/companion/src/modeledit/curves.h @@ -1,7 +1,7 @@ #ifndef CURVES_H #define CURVES_H -#include "modelpanel.h" +#include "modeledit.h" #include namespace Ui { diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index f536d835c..b8c5d4253 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -47,8 +47,9 @@ void RepeatComboBox::update() setCurrentIndex(value); } -CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware): - ModelPanel(parent, model, generalSettings, firmware), +CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model, GeneralSettings & generalSettings, FirmwareInterface * firmware): + GenericPanel(parent, model, generalSettings, firmware), + functions(model ? model->customFn : generalSettings.customFn), initialized(false) #if defined(PHONON) , @@ -70,8 +71,8 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model, if (!firmware->getCapability(VoicesAsNumbers)) { for (int i=0; isetProperty("index", i); fswtchSwtch[i]->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum); + fswtchSwtch[i]->setMaxVisibleItems(10); connect(fswtchSwtch[i], SIGNAL(currentIndexChanged(int)), this, SLOT(customFunctionEdited())); gridLayout->addWidget(fswtchSwtch[i], i+1, 1); @@ -181,7 +183,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model, QHBoxLayout *repeatLayout = new QHBoxLayout(); gridLayout->addLayout(repeatLayout, i+1, 4); - fswtchRepeat[i] = new RepeatComboBox(this, model.customFn[i].repeatParam); + fswtchRepeat[i] = new RepeatComboBox(this, functions[i].repeatParam); repeatLayout->addWidget(fswtchRepeat[i], i+1); connect(fswtchRepeat[i], SIGNAL(modified()), this, SLOT(onChildModified())); @@ -308,31 +310,32 @@ void CustomFunctionsPanel::onChildModified() void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) { - CustomFunctionData & cfn = model.customFn[i]; + CustomFunctionData & cfn = functions[i]; + AssignFunc func = (AssignFunc)fswtchFunc[i]->itemData(fswtchFunc[i]->currentIndex()).toInt(); unsigned int widgetsMask = 0; if (modified) { cfn.swtch = RawSwitch(fswtchSwtch[i]->itemData(fswtchSwtch[i]->currentIndex()).toInt()); - cfn.func = (AssignFunc)fswtchFunc[i]->currentIndex(); + cfn.func = func; cfn.enabled = fswtchEnable[i]->isChecked(); cfn.adjustMode = (AssignFunc)fswtchGVmode[i]->currentIndex(); } - int index = fswtchFunc[i]->currentIndex(); - - if (index>=FuncOverrideCH1 && index<=FuncOverrideCH32) { - int channelsMax = model.getChannelsMax(true); - fswtchParam[i]->setDecimals(0); - fswtchParam[i]->setSingleStep(1); - fswtchParam[i]->setMinimum(-channelsMax); - fswtchParam[i]->setMaximum(channelsMax); - if (modified) { - cfn.param = fswtchParam[i]->value(); + if (func>=FuncOverrideCH1 && func<=FuncOverrideCH32) { + if (model) { + int channelsMax = model->getChannelsMax(true); + fswtchParam[i]->setDecimals(0); + fswtchParam[i]->setSingleStep(1); + fswtchParam[i]->setMinimum(-channelsMax); + fswtchParam[i]->setMaximum(channelsMax); + if (modified) { + cfn.param = fswtchParam[i]->value(); + } + fswtchParam[i]->setValue(cfn.param); + widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_ENABLE; } - fswtchParam[i]->setValue(cfn.param); - widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_ENABLE; } - else if (index==FuncLogs) { + else if (func==FuncLogs) { fswtchParam[i]->setDecimals(1); fswtchParam[i]->setMinimum(0); fswtchParam[i]->setMaximum(25.5); @@ -341,7 +344,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) fswtchParam[i]->setValue(cfn.param/10.0); widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM; } - else if (index>=FuncAdjustGV1 && index<=FuncAdjustGVLast) { + else if (func>=FuncAdjustGV1 && func<=FuncAdjustGVLast) { if (modified) cfn.adjustMode = fswtchGVmode[i]->currentIndex(); widgetsMask |= CUSTOM_FUNCTION_GV_MODE + CUSTOM_FUNCTION_ENABLE; if (cfn.adjustMode==0) { @@ -361,16 +364,16 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) } else { if (modified) cfn.param = fswtchParamT[i]->itemData(fswtchParamT[i]->currentIndex()).toInt(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param, cfn.adjustMode); + populateFuncParamCB(fswtchParamT[i], func, cfn.param, cfn.adjustMode); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } } - else if (index==FuncReset) { + else if (func==FuncReset) { if (modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param); + populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE; } - else if (index>=FuncSetTimer1 && index<=FuncSetTimer2) { + else if (func>=FuncSetTimer1 && func<=FuncSetTimer2) { if (modified) cfn.param = fswtchParam[i]->value(); fswtchParam[i]->setDecimals(0); fswtchParam[i]->setSingleStep(1); @@ -379,34 +382,34 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) fswtchParam[i]->setValue(cfn.param); widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_ENABLE; } - else if (index==FuncVolume) { + else if (func==FuncVolume) { if (modified) cfn.param = fswtchParamT[i]->itemData(fswtchParamT[i]->currentIndex()).toInt(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param); + populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM + CUSTOM_FUNCTION_ENABLE; } - else if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) { - if (index != FuncBackgroundMusic) { + else if (func==FuncPlaySound || func==FuncPlayHaptic || func==FuncPlayValue || func==FuncPlayPrompt || func==FuncPlayBoth || func==FuncBackgroundMusic) { + if (func != FuncBackgroundMusic) { widgetsMask |= CUSTOM_FUNCTION_REPEAT; fswtchRepeat[i]->update(); } - if (index==FuncPlayValue) { + if (func==FuncPlayValue) { if (modified) cfn.param = fswtchParamT[i]->itemData(fswtchParamT[i]->currentIndex()).toInt(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param); + populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM + CUSTOM_FUNCTION_REPEAT; } - else if (index==FuncPlayPrompt || index==FuncPlayBoth) { + else if (func==FuncPlayPrompt || func==FuncPlayBoth) { if (firmware->getCapability(VoicesAsNumbers)) { fswtchParam[i]->setDecimals(0); fswtchParam[i]->setSingleStep(1); fswtchParam[i]->setMinimum(0); - if (index==FuncPlayPrompt) { + if (func==FuncPlayPrompt) { widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_REPEAT + CUSTOM_FUNCTION_GV_TOOGLE; } else { widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_REPEAT; fswtchParamGV[i]->setChecked(false); } - fswtchParam[i]->setMaximum(index==FuncPlayBoth ? 254 : 255); + fswtchParam[i]->setMaximum(func==FuncPlayBoth ? 254 : 255); if (modified) { if (fswtchParamGV[i]->isChecked()) { fswtchParam[i]->setMinimum(1); @@ -416,7 +419,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) cfn.param = fswtchParam[i]->value(); } } - if (cfn.param>250 && (index!=FuncPlayBoth)) { + if (cfn.param>250 && (func!=FuncPlayBoth)) { fswtchParamGV[i]->setChecked(true); fswtchParam[i]->setValue(cfn.param-250); fswtchParam[i]->setMaximum(5); @@ -448,7 +451,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) } } } - else if (index==FuncBackgroundMusic) { + else if (func==FuncBackgroundMusic) { widgetsMask |= CUSTOM_FUNCTION_FILE_PARAM; if (modified) { memset(cfn.paramarm, 0, sizeof(cfn.paramarm)); @@ -461,18 +464,18 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) } } } - else if (index==FuncPlaySound) { + else if (func==FuncPlaySound) { if (modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param); + populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } - else if (index==FuncPlayHaptic) { + else if (func==FuncPlayHaptic) { if (modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); - populateFuncParamCB(fswtchParamT[i], model, index, cfn.param); + populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; } } - else if (index==FuncBacklight && IS_TARANIS_PLUS(GetEepromInterface()->getBoard())) { + else if (func==FuncBacklight && IS_TARANIS_PLUS(GetEepromInterface()->getBoard())) { if (modified) cfn.param = (uint8_t)fswtchBLcolor[i]->value(); fswtchBLcolor[i]->setValue(cfn.param); widgetsMask |= CUSTOM_FUNCTION_BL_COLOR; @@ -482,7 +485,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) fswtchParam[i]->setDecimals(0); fswtchParam[i]->setSingleStep(1); fswtchParam[i]->setValue(cfn.param); - if (index <= FuncInstantTrim) { + if (func <= FuncInstantTrim) { widgetsMask |= CUSTOM_FUNCTION_ENABLE; } } @@ -509,11 +512,11 @@ void CustomFunctionsPanel::update() lock = true; for (int i=0; igetCapability(CustomFunctions); i++) { if (!initialized) { - populateSwitchCB(fswtchSwtch[i], model.customFn[i].swtch, generalSettings, CustomFunctionsContext); - populateFuncCB(fswtchFunc[i], model.customFn[i].func); - populateGVmodeCB(fswtchGVmode[i], model.customFn[i].adjustMode); - populateFuncParamCB(fswtchParamT[i], model, model.customFn[i].func, model.customFn[i].param, model.customFn[i].adjustMode); - populateFuncParamArmTCB(fswtchParamArmT[i], model.customFn[i].paramarm, paramarmList); + populateSwitchCB(fswtchSwtch[i], functions[i].swtch, generalSettings, CustomFunctionsContext); + populateFuncCB(fswtchFunc[i], functions[i].func); + populateGVmodeCB(fswtchGVmode[i], functions[i].adjustMode); + populateFuncParamCB(fswtchParamT[i], functions[i].func, functions[i].param, functions[i].adjustMode); + populateFuncParamArmTCB(fswtchParamArmT[i], functions[i].paramarm, paramarmList); } refreshCustomFunction(i); } @@ -527,14 +530,14 @@ void CustomFunctionsPanel::fswPaste() const QMimeData *mimeData = clipboard->mimeData(); if (mimeData->hasFormat("application/x-companion-fsw")) { QByteArray fswData = mimeData->data("application/x-companion-fsw"); - CustomFunctionData *fsw = &model.customFn[selectedFunction]; + CustomFunctionData *fsw = &functions[selectedFunction]; memcpy(fsw, fswData.mid(0, sizeof(CustomFunctionData)).constData(), sizeof(CustomFunctionData)); lock = true; - populateSwitchCB(fswtchSwtch[selectedFunction], model.customFn[selectedFunction].swtch, generalSettings, CustomFunctionsContext); - populateFuncCB(fswtchFunc[selectedFunction], model.customFn[selectedFunction].func); - populateGVmodeCB(fswtchGVmode[selectedFunction], model.customFn[selectedFunction].adjustMode); - populateFuncParamCB(fswtchParamT[selectedFunction], model, model.customFn[selectedFunction].func, model.customFn[selectedFunction].param, model.customFn[selectedFunction].adjustMode); - populateFuncParamArmTCB(fswtchParamArmT[selectedFunction], model.customFn[selectedFunction].paramarm, paramarmList); + populateSwitchCB(fswtchSwtch[selectedFunction], functions[selectedFunction].swtch, generalSettings, CustomFunctionsContext); + populateFuncCB(fswtchFunc[selectedFunction], functions[selectedFunction].func); + populateGVmodeCB(fswtchGVmode[selectedFunction], functions[selectedFunction].adjustMode); + populateFuncParamCB(fswtchParamT[selectedFunction], functions[selectedFunction].func, functions[selectedFunction].param, functions[selectedFunction].adjustMode); + populateFuncParamArmTCB(fswtchParamArmT[selectedFunction], functions[selectedFunction].paramarm, paramarmList); refreshCustomFunction(selectedFunction); lock = false; emit modified(); @@ -543,11 +546,11 @@ void CustomFunctionsPanel::fswPaste() void CustomFunctionsPanel::fswDelete() { - model.customFn[selectedFunction].clear(); + functions[selectedFunction].clear(); // TODO update switch and func lock = true; - populateSwitchCB(fswtchSwtch[selectedFunction], model.customFn[selectedFunction].swtch, generalSettings, CustomFunctionsContext); - populateFuncCB(fswtchFunc[selectedFunction], model.customFn[selectedFunction].func); + populateSwitchCB(fswtchSwtch[selectedFunction], functions[selectedFunction].swtch, generalSettings, CustomFunctionsContext); + populateFuncCB(fswtchFunc[selectedFunction], functions[selectedFunction].func); refreshCustomFunction(selectedFunction); lock = false; emit modified(); @@ -556,7 +559,7 @@ void CustomFunctionsPanel::fswDelete() void CustomFunctionsPanel::fswCopy() { QByteArray fswData; - fswData.append((char*)&model.customFn[selectedFunction], sizeof(CustomFunctionData)); + fswData.append((char*)&functions[selectedFunction], sizeof(CustomFunctionData)); QMimeData *mimeData = new QMimeData; mimeData->setData("application/x-companion-fsw", fswData); QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); @@ -592,21 +595,26 @@ void CustomFunctionsPanel::populateFuncCB(QComboBox *b, unsigned int value) { b->clear(); for (unsigned int i=0; iaddItem(CustomFunctionData(AssignFunc(i)).funcToString()); - if (((i>=FuncOverrideCH1 && i<=FuncOverrideCH32) && !firmware->getCapability(SafetyChannelCustomFunction)) || + if (((i>=FuncOverrideCH1 && i<=FuncOverrideCH32) && (!model || !firmware->getCapability(SafetyChannelCustomFunction))) || ((i==FuncVolume || i==FuncBackgroundMusic || i==FuncBackgroundMusicPause) && !firmware->getCapability(HasVolume)) || ((i==FuncPlayHaptic) && !firmware->getCapability(Haptic)) || ((i==FuncPlayBoth) && !firmware->getCapability(HasBeeper)) || ((i==FuncLogs) && !firmware->getCapability(HasSDLogs)) || ((i>=FuncAdjustGV1 && i<=FuncAdjustGVLast) && !firmware->getCapability(Gvars)) ) { - QModelIndex index = b->model()->index(i, 0); - QVariant v(0); - b->model()->setData(index, v, Qt::UserRole - 1); + // skipped + // b->addItem(CustomFunctionData(AssignFunc(i)).funcToString(), i); + // QModelIndex index = b->model()->index(i, 0); + // QVariant v(0); + // b->model()->setData(index, v, Qt::UserRole - 1); + } + else { + b->addItem(CustomFunctionData(AssignFunc(i)).funcToString(), i); + if (i == value) { + b->setCurrentIndex(b->count()-1); + } } } - b->setCurrentIndex(value); - b->setMaxVisibleItems(10); } void CustomFunctionsPanel::populateGVmodeCB(QComboBox *b, unsigned int value) @@ -640,7 +648,7 @@ void CustomFunctionsPanel::populateFuncParamArmTCB(QComboBox *b, char * value, Q } } -void CustomFunctionsPanel::populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode) +void CustomFunctionsPanel::populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode) { QStringList qs; b->clear(); diff --git a/companion/src/modeledit/customfunctions.h b/companion/src/modeledit/customfunctions.h index 40d69cede..160c33804 100644 --- a/companion/src/modeledit/customfunctions.h +++ b/companion/src/modeledit/customfunctions.h @@ -1,7 +1,7 @@ #ifndef CUSTOMFUNCTIONS_H #define CUSTOMFUNCTIONS_H -#include "modelpanel.h" +#include "modeledit.h" #include #include #include @@ -31,16 +31,19 @@ class RepeatComboBox: public QComboBox int & repeatParam; }; -class CustomFunctionsPanel : public ModelPanel +class CustomFunctionsPanel : public GenericPanel { Q_OBJECT public: - CustomFunctionsPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware); + CustomFunctionsPanel(QWidget *parent, ModelData * mode, GeneralSettings & generalSettings, FirmwareInterface * firmware); ~CustomFunctionsPanel(); virtual void update(); + protected: + CustomFunctionData * functions; + private slots: void customFunctionEdited(); void fsw_customContextMenuRequested(QPoint pos); @@ -58,7 +61,7 @@ class CustomFunctionsPanel : public ModelPanel private: void populateFuncCB(QComboBox *b, unsigned int value); void populateGVmodeCB(QComboBox *b, unsigned int value); - void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode=0); + void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode=0); void populateFuncParamArmTCB(QComboBox *b, char * value, QStringList & paramsList); bool initialized; diff --git a/companion/src/modeledit/expodialog.cpp b/companion/src/modeledit/expodialog.cpp index 6586c6ef3..607986561 100644 --- a/companion/src/modeledit/expodialog.cpp +++ b/companion/src/modeledit/expodialog.cpp @@ -15,7 +15,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G 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(getInputStr(model, ed->chn))); + setWindowTitle(tr("Edit %1").arg(getInputStr(&model, ed->chn))); QRegExp rx(CHAR_FOR_NAMES_REGEX); if (IS_TARANIS(GetEepromInterface()->getBoard())) { @@ -60,7 +60,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G if (firmware->getCapability(VirtualInputs)) { ui->inputName->setMaxLength(4); - populateSourceCB(ui->sourceCB, ed->srcRaw, model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); + populateSourceCB(ui->sourceCB, ed->srcRaw, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); ui->sourceCB->removeItem(0); } else { @@ -122,7 +122,7 @@ ExpoDialog::~ExpoDialog() void ExpoDialog::updateScale() { if (firmware->getCapability(VirtualInputs) && ed->srcRaw.type == SOURCE_TYPE_TELEMETRY) { - RawSourceRange range = ed->srcRaw.getRange(model, generalSettings); + RawSourceRange range = ed->srcRaw.getRange(&model, generalSettings); ui->scaleLabel->show(); ui->scale->show(); ui->scale->setDecimals(range.decimals); @@ -146,7 +146,7 @@ void ExpoDialog::valuesChanged() updateScale(); } - RawSourceRange range = srcRaw.getRange(model, generalSettings); + RawSourceRange range = srcRaw.getRange(&model, generalSettings); ed->scale = round(float(ui->scale->value()) / range.step); ed->carryTrim = 1 - ui->trimCB->currentIndex(); ed->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt()); diff --git a/companion/src/modeledit/flightmodes.cpp b/companion/src/modeledit/flightmodes.cpp index c7b59a372..62e736c68 100644 --- a/companion/src/modeledit/flightmodes.cpp +++ b/companion/src/modeledit/flightmodes.cpp @@ -196,24 +196,24 @@ void FlightModePanel::update() for (int i=0; i<4; i++) { int trimsMax = firmware->getCapability(ExtendedTrims); - if (trimsMax == 0 || !model.extendedTrims) { + if (trimsMax == 0 || !model->extendedTrims) { trimsMax = 125; } trimsSlider[i]->setRange(-trimsMax, +trimsMax); trimsValue[i]->setRange(-trimsMax, +trimsMax); int chn = CONVERT_MODE(i+1)-1; - if (chn == 2/*TODO constant*/ && model.throttleReversed) + if (chn == 2/*TODO constant*/ && model->throttleReversed) trimsSlider[i]->setInvertedAppearance(true); trimUpdate(i); } if (ui->gvGB->isVisible()) { for (int i=0; isetText(model.gvars_names[i]); - gvValues[i]->setDisabled(model.isGVarLinked(phaseIdx, i)); - gvValues[i]->setValue(model.getGVarValue(phaseIdx, i)); + gvNames[i]->setText(model->gvars_names[i]); + gvValues[i]->setDisabled(model->isGVarLinked(phaseIdx, i)); + gvValues[i]->setValue(model->getGVarValue(phaseIdx, i)); if (IS_TARANIS(GetEepromInterface()->getBoard()) && phaseIdx == 0) { - gvPopups[i]->setChecked(model.gvars_popups[i]); + gvPopups[i]->setChecked(model->gvars_popups[i]); } } } @@ -224,7 +224,7 @@ void FlightModePanel::update() FlightModeData *phasere = &phase; while (idx > 1024) { idx -= 1025; - phasere = &model.flightModeData[idx]; + phasere = &model->flightModeData[idx]; idx = phasere->rotaryEncoders[i]; reValues[i]->setDisabled(true); } @@ -267,7 +267,7 @@ void FlightModePanel::trimUpdate(unsigned int trim) { lock = true; int chn = CONVERT_MODE(trim+1)-1; - int value = model.getTrimValue(phaseIdx, chn); + int value = model->getTrimValue(phaseIdx, chn); trimsSlider[trim]->setValue(value); trimsValue[trim]->setValue(value); if (phase.trimMode[chn] < 0) { @@ -302,8 +302,8 @@ void FlightModePanel::GVName_editingFinished() if (!lock) { QLineEdit *lineedit = qobject_cast(sender()); int gvar = lineedit->property("index").toInt(); - memset(&model.gvars_names[gvar], 0, sizeof(model.gvars_names[gvar])); - strcpy(model.gvars_names[gvar], lineedit->text().toAscii()); + memset(&model->gvars_names[gvar], 0, sizeof(model->gvars_names[gvar])); + strcpy(model->gvars_names[gvar], lineedit->text().toAscii()); emit modified(); } } @@ -330,7 +330,7 @@ void FlightModePanel::phaseGVPopupToggled(bool checked) { QCheckBox *cb = qobject_cast(sender()); int gvar = cb->property("index").toInt(); - model.gvars_popups[gvar] = checked; + model->gvars_popups[gvar] = checked; } void FlightModePanel::phaseREValue_editingFinished() @@ -397,7 +397,7 @@ void FlightModePanel::phaseTrim_valueChanged() int trim = spinBox->property("index").toInt(); int chn = CONVERT_MODE(trim+1)-1; int value = spinBox->value(); - model.setTrimValue(phaseIdx, chn, value); + model->setTrimValue(phaseIdx, chn, value); lock = true; trimsSlider[trim]->setValue(value); lock = false; @@ -412,7 +412,7 @@ void FlightModePanel::phaseTrimSlider_valueChanged() int trim = slider->property("index").toInt(); int chn = CONVERT_MODE(trim+1)-1; int value = slider->value(); - model.setTrimValue(phaseIdx, chn, value); + model->setTrimValue(phaseIdx, chn, value); lock = true; trimsValue[trim]->setValue(value); lock = false; @@ -452,7 +452,7 @@ void FlightModesPanel::onPhaseModified() QString FlightModesPanel::getTabName(int index) { QString result = tr("Flight Mode %1").arg(index); - const char *name = model.flightModeData[index].name; + const char *name = model->flightModeData[index].name; if (firmware->getCapability(FlightModesName) && strlen(name) > 0) { result += tr(" (%1)").arg(name); } diff --git a/companion/src/modeledit/flightmodes.h b/companion/src/modeledit/flightmodes.h index fc89e9dd2..9f215c9b4 100644 --- a/companion/src/modeledit/flightmodes.h +++ b/companion/src/modeledit/flightmodes.h @@ -1,7 +1,7 @@ #ifndef FLIGHTMODES_H #define FLIGHTMODES_H -#include "modelpanel.h" +#include "modeledit.h" #include #include #include diff --git a/companion/src/modeledit/heli.cpp b/companion/src/modeledit/heli.cpp index 3fda9f91e..d5034ecff 100644 --- a/companion/src/modeledit/heli.cpp +++ b/companion/src/modeledit/heli.cpp @@ -27,12 +27,12 @@ void HeliPanel::update() { lock = true; - ui->swashTypeCB->setCurrentIndex(model.swashRingData.type); - populateSourceCB(ui->swashCollectiveCB, model.swashRingData.collectiveSource, model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS); - ui->swashRingValSB->setValue(model.swashRingData.value); - ui->swashInvertELE->setChecked(model.swashRingData.invertELE); - ui->swashInvertAIL->setChecked(model.swashRingData.invertAIL); - ui->swashInvertCOL->setChecked(model.swashRingData.invertCOL); + ui->swashTypeCB->setCurrentIndex(model->swashRingData.type); + populateSourceCB(ui->swashCollectiveCB, model->swashRingData.collectiveSource, model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS); + ui->swashRingValSB->setValue(model->swashRingData.value); + ui->swashInvertELE->setChecked(model->swashRingData.invertELE); + ui->swashInvertAIL->setChecked(model->swashRingData.invertAIL); + ui->swashInvertCOL->setChecked(model->swashRingData.invertCOL); lock = false; } @@ -40,12 +40,12 @@ void HeliPanel::update() void HeliPanel::edited() { if (!lock) { - model.swashRingData.type = ui->swashTypeCB->currentIndex(); - model.swashRingData.collectiveSource = ui->swashCollectiveCB->itemData(ui->swashCollectiveCB->currentIndex()).toInt(); - model.swashRingData.value = ui->swashRingValSB->value(); - model.swashRingData.invertELE = ui->swashInvertELE->isChecked(); - model.swashRingData.invertAIL = ui->swashInvertAIL->isChecked(); - model.swashRingData.invertCOL = ui->swashInvertCOL->isChecked(); + model->swashRingData.type = ui->swashTypeCB->currentIndex(); + model->swashRingData.collectiveSource = ui->swashCollectiveCB->itemData(ui->swashCollectiveCB->currentIndex()).toInt(); + model->swashRingData.value = ui->swashRingValSB->value(); + model->swashRingData.invertELE = ui->swashInvertELE->isChecked(); + model->swashRingData.invertAIL = ui->swashInvertAIL->isChecked(); + model->swashRingData.invertCOL = ui->swashInvertCOL->isChecked(); emit modified(); } } diff --git a/companion/src/modeledit/heli.h b/companion/src/modeledit/heli.h index c04551b0f..4ac2cc53f 100644 --- a/companion/src/modeledit/heli.h +++ b/companion/src/modeledit/heli.h @@ -1,7 +1,7 @@ #ifndef HELI_H #define HELI_H -#include "modelpanel.h" +#include "modeledit.h" namespace Ui { class Heli; diff --git a/companion/src/modeledit/inputs.cpp b/companion/src/modeledit/inputs.cpp index cc93774d6..3c0003501 100644 --- a/companion/src/modeledit/inputs.cpp +++ b/companion/src/modeledit/inputs.cpp @@ -59,7 +59,7 @@ void InputsPanel::update() int curDest = -1; for (int i=0; iexpoData[i]; if (md->mode==0) break; @@ -104,7 +104,7 @@ bool InputsPanel::AddInputLine(int dest) QByteArray qba(1, (quint8)dest); if (dest >= 0) { //add input data - ExpoData *md = &model.expoData[dest]; + ExpoData *md = &model->expoData[dest]; qba.append((const char*)md, sizeof(ExpoData)); } itm->setData(Qt::UserRole, qba); @@ -139,9 +139,9 @@ QString InputsPanel::getInputText(int dest, bool * new_ch) if (new_ch) *new_ch = 1; } else { - ExpoData *md = &model.expoData[dest]; + ExpoData *md = &model->expoData[dest]; - if ((dest == 0) || (model.expoData[dest-1].chn != md->chn)) { + if ((dest == 0) || (model->expoData[dest-1].chn != md->chn)) { if (new_ch) *new_ch = 1; if (firmware->getCapability(VirtualInputs)) str = QString("%1").arg(getInputStr(model, md->chn), -10, ' '); @@ -191,14 +191,14 @@ QString InputsPanel::getInputText(int dest, bool * new_ch) bool InputsPanel::gm_insertExpo(int idx) { - if (idx<0 || idx>=C9X_MAX_EXPOS || model.expoData[C9X_MAX_EXPOS-1].mode > 0) { + if (idx<0 || idx>=C9X_MAX_EXPOS || model->expoData[C9X_MAX_EXPOS-1].mode > 0) { QMessageBox::information(this, "Companion", tr("Not enough available inputs!")); return false; } - int chn = model.expoData[idx].chn; + int chn = model->expoData[idx].chn; - ExpoData * newExpo = model.insertInput(idx); + ExpoData * newExpo = model->insertInput(idx); newExpo->chn = chn; newExpo->weight = 100; newExpo->mode = INPUT_MODE_BOTH; @@ -208,26 +208,27 @@ bool InputsPanel::gm_insertExpo(int idx) void InputsPanel::gm_deleteExpo(int index) { - model.removeInput(index); + model->removeInput(index); } void InputsPanel::gm_openExpo(int index) { if(index<0 || index>=C9X_MAX_EXPOS) return; - ExpoData mixd(model.expoData[index]); + ExpoData mixd(model->expoData[index]); char inputName[4+1]; emit modified(); update(); - if (firmware->getCapability(VirtualInputs)) - strcpy(inputName, model.inputNames[mixd.chn]); + if (firmware->getCapability(VirtualInputs)) { + strcpy(inputName, model->inputNames[mixd.chn]); + } - ExpoDialog *g = new ExpoDialog(this, model, &mixd, generalSettings, firmware, inputName); + ExpoDialog *g = new ExpoDialog(this, *model, &mixd, generalSettings, firmware, inputName); if (g->exec()) { - model.expoData[index] = mixd; + model->expoData[index] = mixd; if (firmware->getCapability(VirtualInputs)) - strcpy(model.inputNames[mixd.chn], inputName); + strcpy(model->inputNames[mixd.chn], inputName); emit modified(); update(); } @@ -244,7 +245,7 @@ void InputsPanel::gm_openExpo(int index) int InputsPanel::getExpoIndex(unsigned int dch) { unsigned int i = 0; - while (model.expoData[i].chn<=dch && model.expoData[i].mode && iexpoData[i].chn<=dch && model->expoData[i].mode && iexpoData[idx], sizeof(ExpoData)); } QMimeData *mimeData = new QMimeData; @@ -329,7 +330,7 @@ void InputsPanel::pasteExpoMimeData(const QMimeData * mimeData, int destIdx) idx = getExpoIndex(dch) - 1; //get expo index to insert } else { idx = destIdx; - dch = model.expoData[idx].chn; + dch = model->expoData[idx].chn; } QByteArray mxData = mimeData->data("application/x-companion-expo"); @@ -339,7 +340,7 @@ void InputsPanel::pasteExpoMimeData(const QMimeData * mimeData, int destIdx) idx++; if (!gm_insertExpo(idx)) break; - ExpoData *md = &model.expoData[idx]; + ExpoData *md = &model->expoData[idx]; memcpy(md, mxData.mid(i, sizeof(ExpoData)).constData(), sizeof(ExpoData)); md->chn = dch; i += sizeof(ExpoData); @@ -378,7 +379,7 @@ void InputsPanel::expoOpen(QListWidgetItem *item) idx = getExpoIndex(ch); // get expo index to insert if (!gm_insertExpo(idx)) return; - model.expoData[idx].chn = ch; + model->expoData[idx].chn = ch; expoInserted=true; } else { expoInserted=false; @@ -396,7 +397,7 @@ void InputsPanel::expoAdd() index++; if (!gm_insertExpo(index)) return; - model.expoData[index].chn = model.expoData[index-1].chn; + model->expoData[index].chn = model->expoData[index-1].chn; } gm_openExpo(index); } @@ -452,8 +453,8 @@ int InputsPanel::gm_moveExpo(int idx, bool dir) //true=inc=down false=dec=up int tdx = dir ? idx+1 : idx-1; ExpoData temp; temp.clear(); - ExpoData &src=model.expoData[idx]; - ExpoData &tgt=model.expoData[tdx]; + ExpoData &src=model->expoData[idx]; + ExpoData &tgt=model->expoData[tdx]; if (!dir && tdx<0 && src.chn>0) { src.chn--; return idx; @@ -524,7 +525,7 @@ void InputsPanel::exposDeleteList(QList list) void InputsPanel::clearExpos() { if (QMessageBox::question(this, tr("Clear Inputs?"), tr("Really clear all the inputs?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { - model.clearInputs(); + model->clearInputs(); emit modified(); update(); } diff --git a/companion/src/modeledit/inputs.h b/companion/src/modeledit/inputs.h index d7298f6ae..583d2d1f6 100644 --- a/companion/src/modeledit/inputs.h +++ b/companion/src/modeledit/inputs.h @@ -1,7 +1,7 @@ #ifndef INPUTS_H #define INPUTS_H -#include "modelpanel.h" +#include "modeledit.h" #include "mixerslist.h" class InputsPanel : public ModelPanel diff --git a/companion/src/modeledit/logicalswitches.cpp b/companion/src/modeledit/logicalswitches.cpp index db620fc3e..092923850 100644 --- a/companion/src/modeledit/logicalswitches.cpp +++ b/companion/src/modeledit/logicalswitches.cpp @@ -138,11 +138,11 @@ void LogicalSwitchesPanel::v1Edited(int value) { if (!lock) { int i = sender()->property("index").toInt(); - model.logicalSw[i].val1 = cswitchSource1[i]->itemData(value).toInt(); - if (model.logicalSw[i].getFunctionFamily() == LS_FAMILY_VOFS) { - RawSource source = RawSource(model.logicalSw[i].val1); - RawSourceRange range = source.getRange(model, generalSettings, model.logicalSw[i].getRangeFlags()); - model.logicalSw[i].val2 = (cswitchOffset[i]->value() - range.offset) / range.step; + model->logicalSw[i].val1 = cswitchSource1[i]->itemData(value).toInt(); + if (model->logicalSw[i].getFunctionFamily() == LS_FAMILY_VOFS) { + RawSource source = RawSource(model->logicalSw[i].val1); + RawSourceRange range = source.getRange(model, generalSettings, model->logicalSw[i].getRangeFlags()); + model->logicalSw[i].val2 = (cswitchOffset[i]->value() - range.offset) / range.step; setSwitchWidgetVisibility(i); } emit modified(); @@ -153,7 +153,7 @@ void LogicalSwitchesPanel::v2Edited(int value) { if (!lock) { int i = sender()->property("index").toInt(); - model.logicalSw[i].val2 = cswitchSource2[i]->itemData(value).toInt(); + model->logicalSw[i].val2 = cswitchSource2[i]->itemData(value).toInt(); emit modified(); } } @@ -162,7 +162,7 @@ void LogicalSwitchesPanel::andEdited(int value) { if (!lock) { int index = sender()->property("index").toInt(); - model.logicalSw[index].andsw = cswitchAnd[index]->itemData(value).toInt(); + model->logicalSw[index].andsw = cswitchAnd[index]->itemData(value).toInt(); emit modified(); } } @@ -171,7 +171,7 @@ void LogicalSwitchesPanel::durationEdited(double duration) { if (!lock) { int index = sender()->property("index").toInt(); - model.logicalSw[index].duration = (uint8_t)round(duration*10); + model->logicalSw[index].duration = (uint8_t)round(duration*10); emit modified(); } } @@ -180,7 +180,7 @@ void LogicalSwitchesPanel::delayEdited(double delay) { if (!lock) { int index = sender()->property("index").toInt(); - model.logicalSw[index].delay = (uint8_t)round(delay*10); + model->logicalSw[index].delay = (uint8_t)round(delay*10); emit modified(); } } @@ -190,30 +190,30 @@ void LogicalSwitchesPanel::edited() if (!lock) { lock = true; int i = sender()->property("index").toInt(); - CSFunctionFamily oldFuncFamily = model.logicalSw[i].getFunctionFamily(); - model.logicalSw[i].func = csw[i]->itemData(csw[i]->currentIndex()).toInt(); - CSFunctionFamily newFuncFamily = model.logicalSw[i].getFunctionFamily(); + CSFunctionFamily oldFuncFamily = model->logicalSw[i].getFunctionFamily(); + model->logicalSw[i].func = csw[i]->itemData(csw[i]->currentIndex()).toInt(); + CSFunctionFamily newFuncFamily = model->logicalSw[i].getFunctionFamily(); if (oldFuncFamily != newFuncFamily) { if (newFuncFamily == LS_FAMILY_TIMER) { - model.logicalSw[i].val1 = -119; - model.logicalSw[i].val2 = -119; + model->logicalSw[i].val1 = -119; + model->logicalSw[i].val2 = -119; } else if (newFuncFamily == LS_FAMILY_EDGE) { - model.logicalSw[i].val1 = 0; - model.logicalSw[i].val2 = -129; - model.logicalSw[i].val3 = 0; + model->logicalSw[i].val1 = 0; + model->logicalSw[i].val2 = -129; + model->logicalSw[i].val3 = 0; } else if (newFuncFamily == LS_FAMILY_STICKY) { - model.logicalSw[i].val1 = 0; - model.logicalSw[i].val2 = 0; - model.logicalSw[i].delay = 0; + model->logicalSw[i].val1 = 0; + model->logicalSw[i].val2 = 0; + model->logicalSw[i].delay = 0; } else { - model.logicalSw[i].val1 = 0; - model.logicalSw[i].val2 = 0; + model->logicalSw[i].val1 = 0; + model->logicalSw[i].val2 = 0; } - model.logicalSw[i].andsw = 0; + model->logicalSw[i].andsw = 0; setSwitchWidgetVisibility(i); } @@ -223,11 +223,11 @@ void LogicalSwitchesPanel::edited() { case LS_FAMILY_VOFS: { - source = RawSource(model.logicalSw[i].val1); - RawSourceRange range = source.getRange(model, generalSettings, model.logicalSw[i].getRangeFlags()); + source = RawSource(model->logicalSw[i].val1); + RawSourceRange range = source.getRange(model, generalSettings, model->logicalSw[i].getRangeFlags()); double value = source.isTimeBased() ? QTimeS(cswitchTOffset[i]->time()).seconds() : cswitchOffset[i]->value(); - model.logicalSw[i].val2 = round((value-range.offset)/range.step);; - value = model.logicalSw[i].val2*range.step + range.offset; + model->logicalSw[i].val2 = round((value-range.offset)/range.step);; + value = model->logicalSw[i].val2*range.step + range.offset; if (source.isTimeBased()) cswitchTOffset[i]->setTime(QTimeS(round(value))); else @@ -235,22 +235,22 @@ void LogicalSwitchesPanel::edited() break; } case LS_FAMILY_TIMER: - model.logicalSw[i].val1 = TimToVal(cswitchValue[i]->value()); - model.logicalSw[i].val2 = TimToVal(cswitchOffset[i]->value()); - updateTimerParam(cswitchValue[i], model.logicalSw[i].val1, 0.1); - updateTimerParam(cswitchOffset[i], model.logicalSw[i].val2, 0.1); + model->logicalSw[i].val1 = TimToVal(cswitchValue[i]->value()); + model->logicalSw[i].val2 = TimToVal(cswitchOffset[i]->value()); + updateTimerParam(cswitchValue[i], model->logicalSw[i].val1, 0.1); + updateTimerParam(cswitchOffset[i], model->logicalSw[i].val2, 0.1); break; case LS_FAMILY_EDGE: cswitchOffset2[i]->setSpecialValueText(tr("(no release)")); if (sender() == cswitchOffset[i]) { - model.logicalSw[i].val2 = TimToVal(cswitchOffset[i]->value()); - updateTimerParam(cswitchOffset[i], model.logicalSw[i].val2, 0.0); + model->logicalSw[i].val2 = TimToVal(cswitchOffset[i]->value()); + updateTimerParam(cswitchOffset[i], model->logicalSw[i].val2, 0.0); } else { - model.logicalSw[i].val3 = TimToVal(cswitchOffset2[i]->value()) - model.logicalSw[i].val2; + model->logicalSw[i].val3 = TimToVal(cswitchOffset2[i]->value()) - model->logicalSw[i].val2; } - updateTimerParam(cswitchOffset2[i], model.logicalSw[i].val2+model.logicalSw[i].val3, cswitchOffset[i]->value()-0.1); - if (model.logicalSw[i].val3 == 0) { + updateTimerParam(cswitchOffset2[i], model->logicalSw[i].val2+model->logicalSw[i].val3, cswitchOffset[i]->value()-0.1); + if (model->logicalSw[i].val3 == 0) { cswitchOffset2[i]->setSuffix("(infinite)"); } else { @@ -294,10 +294,10 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) lock = true; unsigned int mask = DELAY_ENABLED; - RawSource source = RawSource(model.logicalSw[i].val1); - RawSourceRange range = source.getRange(model, generalSettings, model.logicalSw[i].getRangeFlags()); + RawSource source = RawSource(model->logicalSw[i].val1); + RawSourceRange range = source.getRange(model, generalSettings, model->logicalSw[i].getRangeFlags()); - switch (model.logicalSw[i].getFunctionFamily()) + switch (model->logicalSw[i].getFunctionFamily()) { case LS_FAMILY_VOFS: mask |= SOURCE1_VISIBLE; @@ -307,7 +307,7 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) if (source.isTimeBased()) { mask |= VALUE_TO_VISIBLE; int maxTime = round(range.max); - int value = round(range.step*model.logicalSw[i].val2 + range.offset); + int value = round(range.step*model->logicalSw[i].val2 + range.offset); cswitchTOffset[i]->setMaximumTime(QTimeS(maxTime)); cswitchTOffset[i]->setDisplayFormat((maxTime>=3600)?"hh:mm:ss":"mm:ss"); cswitchTOffset[i]->setTime(QTimeS(value)); @@ -320,24 +320,24 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) cswitchOffset[i]->setSuffix(" " + range.unit); cswitchOffset[i]->setMinimum(range.min); cswitchOffset[i]->setMaximum(range.max); - cswitchOffset[i]->setValue(range.step*(model.logicalSw[i].val2/* TODO+source.getRawOffset(model)*/)+range.offset); + cswitchOffset[i]->setValue(range.step*(model->logicalSw[i].val2/* TODO+source.getRawOffset(model)*/)+range.offset); } break; case LS_FAMILY_STICKY: // no break case LS_FAMILY_VBOOL: mask |= SOURCE1_VISIBLE | SOURCE2_VISIBLE; - populateSwitchCB(cswitchSource1[i], RawSwitch(model.logicalSw[i].val1), generalSettings, LogicalSwitchesContext); - populateSwitchCB(cswitchSource2[i], RawSwitch(model.logicalSw[i].val2), generalSettings, LogicalSwitchesContext); + populateSwitchCB(cswitchSource1[i], RawSwitch(model->logicalSw[i].val1), generalSettings, LogicalSwitchesContext); + populateSwitchCB(cswitchSource2[i], RawSwitch(model->logicalSw[i].val2), generalSettings, LogicalSwitchesContext); break; case LS_FAMILY_EDGE: mask |= SOURCE1_VISIBLE | VALUE2_VISIBLE | VALUE3_VISIBLE; mask &= ~DELAY_ENABLED; - populateSwitchCB(cswitchSource1[i], RawSwitch(model.logicalSw[i].val1), generalSettings, LogicalSwitchesContext); - updateTimerParam(cswitchOffset[i], model.logicalSw[i].val2, 0.0); - updateTimerParam(cswitchOffset2[i], model.logicalSw[i].val2+model.logicalSw[i].val3, cswitchOffset[i]->value()-0.1); + populateSwitchCB(cswitchSource1[i], RawSwitch(model->logicalSw[i].val1), generalSettings, LogicalSwitchesContext); + updateTimerParam(cswitchOffset[i], model->logicalSw[i].val2, 0.0); + updateTimerParam(cswitchOffset2[i], model->logicalSw[i].val2+model->logicalSw[i].val3, cswitchOffset[i]->value()-0.1); cswitchOffset2[i]->setSpecialValueText(tr("(no release)")); - if (model.logicalSw[i].val3 == 0) { + if (model->logicalSw[i].val3 == 0) { cswitchOffset2[i]->setSuffix(tr("(infinite)")); } else { @@ -346,14 +346,13 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) break; case LS_FAMILY_VCOMP: mask |= SOURCE1_VISIBLE | SOURCE2_VISIBLE; - populateSourceCB(cswitchSource1[i], RawSource(model.logicalSw[i].val1), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); - populateSourceCB(cswitchSource2[i], RawSource(model.logicalSw[i].val2), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); break; case LS_FAMILY_TIMER: mask |= VALUE1_VISIBLE | VALUE2_VISIBLE; - updateTimerParam(cswitchValue[i], model.logicalSw[i].val1, 0.1); - updateTimerParam(cswitchOffset[i], model.logicalSw[i].val2, 0.1); - break; + updateTimerParam(cswitchValue[i], model->logicalSw[i].val1, 0.1); + updateTimerParam(cswitchOffset[i], model->logicalSw[i].val2, 0.1); } cswitchSource1[i]->setVisible(mask & SOURCE1_VISIBLE); @@ -364,8 +363,8 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) cswitchTOffset[i]->setVisible(mask & VALUE_TO_VISIBLE); if (firmware->getCapability(LogicalSwitchesExt)) { cswitchDelay[i]->setEnabled(mask & DELAY_ENABLED); - cswitchDuration[i]->setValue(model.logicalSw[i].duration/10.0); - cswitchDelay[i]->setValue(model.logicalSw[i].delay/10.0); + cswitchDuration[i]->setValue(model->logicalSw[i].duration/10.0); + cswitchDelay[i]->setValue(model->logicalSw[i].delay/10.0); } lock = false; } @@ -445,11 +444,11 @@ void LogicalSwitchesPanel::populateAndSwitchCB(QComboBox *b, const RawSwitch & v void LogicalSwitchesPanel::updateLine(int i) { lock = true; - populateCSWCB(csw[i], model.logicalSw[i].func); + populateCSWCB(csw[i], model->logicalSw[i].func); lock = true; setSwitchWidgetVisibility(i); lock = true; - populateAndSwitchCB(cswitchAnd[i], RawSwitch(model.logicalSw[i].andsw)); + populateAndSwitchCB(cswitchAnd[i], RawSwitch(model->logicalSw[i].andsw)); lock = false; } @@ -466,7 +465,7 @@ void LogicalSwitchesPanel::cswPaste() const QMimeData *mimeData = clipboard->mimeData(); if (mimeData->hasFormat("application/x-companion-csw")) { QByteArray cswData = mimeData->data("application/x-companion-csw"); - LogicalSwitchData *csw = &model.logicalSw[selectedSwitch]; + LogicalSwitchData *csw = &model->logicalSw[selectedSwitch]; memcpy(csw, cswData.mid(0, sizeof(LogicalSwitchData)).constData(), sizeof(LogicalSwitchData)); emit modified(); updateLine(selectedSwitch); @@ -475,7 +474,7 @@ void LogicalSwitchesPanel::cswPaste() void LogicalSwitchesPanel::cswDelete() { - model.logicalSw[selectedSwitch].clear(); + model->logicalSw[selectedSwitch].clear(); emit modified(); updateLine(selectedSwitch); } @@ -483,7 +482,7 @@ void LogicalSwitchesPanel::cswDelete() void LogicalSwitchesPanel::cswCopy() { QByteArray cswData; - cswData.append((char*)&model.logicalSw[selectedSwitch],sizeof(LogicalSwitchData)); + cswData.append((char*)&model->logicalSw[selectedSwitch],sizeof(LogicalSwitchData)); QMimeData *mimeData = new QMimeData; mimeData->setData("application/x-companion-csw", cswData); QApplication::clipboard()->setMimeData(mimeData,QClipboard::Clipboard); diff --git a/companion/src/modeledit/logicalswitches.h b/companion/src/modeledit/logicalswitches.h index af9e3e2f5..c96455f43 100644 --- a/companion/src/modeledit/logicalswitches.h +++ b/companion/src/modeledit/logicalswitches.h @@ -1,7 +1,7 @@ #ifndef CUSTOMSWITCHES_H #define CUSTOMSWITCHES_H -#include "modelpanel.h" +#include "modeledit.h" #include #include #include diff --git a/companion/src/modeledit/mixerdialog.cpp b/companion/src/modeledit/mixerdialog.cpp index 421d034f3..9f97c8d36 100644 --- a/companion/src/modeledit/mixerdialog.cpp +++ b/companion/src/modeledit/mixerdialog.cpp @@ -19,7 +19,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G this->setWindowTitle(tr("DEST -> CH%1").arg(md->destCh)); - populateSourceCB(ui->sourceCB, md->srcRaw, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->sourceCB, md->srcRaw, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->sourceCB->removeItem(0); int limit = firmware->getCapability(OffsetWeight); diff --git a/companion/src/modeledit/mixes.cpp b/companion/src/modeledit/mixes.cpp index 946668b1d..9b59da04c 100644 --- a/companion/src/modeledit/mixes.cpp +++ b/companion/src/modeledit/mixes.cpp @@ -50,7 +50,7 @@ QString MixesPanel::getChannelLabel(int curDest) // TODO not nice, Qt brings a function for that, I don't remember right now (str.length() < 4) ? str.append(" ") : str.append(" "); if (firmware->getCapability(HasChNames)) { - QString name = model.limitData[curDest-1].name; + QString name = model->limitData[curDest-1].name; if (!name.isEmpty()) { name = QString("(") + name + QString(")"); } @@ -72,7 +72,7 @@ void MixesPanel::update() unsigned int outputs = firmware->getCapability(Outputs); for (i=0; igetCapability(Mixes); i++) { - MixData *md = &model.mixData[i]; + MixData *md = &model->mixData[i]; // qDebug() << "md->destCh: " << md->destCh; if (md->destCh==0 || md->destCh>outputs) continue; QString str = ""; @@ -111,7 +111,7 @@ bool MixesPanel::AddMixerLine(int dest) QByteArray qba(1, (quint8)dest); if (dest >= 0) { //add mix data - MixData *md = &model.mixData[dest]; + MixData *md = &model->mixData[dest]; qba.append((const char*)md, sizeof(MixData)); } itm->setData(Qt::UserRole, qba); @@ -149,11 +149,11 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch) if (new_ch) *new_ch = 1; } else { - MixData *md = &model.mixData[dest]; + MixData *md = &model->mixData[dest]; //md->destCh from 1 to 32 str = getChannelLabel(md->destCh); - if ((dest == 0) || (model.mixData[dest-1].destCh != md->destCh)) { + if ((dest == 0) || (model->mixData[dest-1].destCh != md->destCh)) { if (new_ch) *new_ch = 1; //highlight channell if needed if (md->destCh == highlightedSource) { @@ -187,8 +187,10 @@ 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("NoTrim")); - else if (md->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(model); + if (md->carryTrim > 0) + str += " " + Qt::escape(tr("NoTrim")); + else if (md->carryTrim<0) + str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(model); if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo")); if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset))); @@ -215,39 +217,39 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch) bool MixesPanel::gm_insertMix(int idx) { - if (idx<0 || idx>=firmware->getCapability(Mixes) || model.mixData[firmware->getCapability(Mixes)-1].destCh > 0) { + if (idx<0 || idx>=firmware->getCapability(Mixes) || model->mixData[firmware->getCapability(Mixes)-1].destCh > 0) { QMessageBox::information(this, "companion", tr("Not enough available mixers!")); return false; } - int i = model.mixData[idx].destCh; - memmove(&model.mixData[idx+1],&model.mixData[idx], + int i = model->mixData[idx].destCh; + memmove(&model->mixData[idx+1],&model->mixData[idx], (firmware->getCapability(Mixes)-(idx+1))*sizeof(MixData) ); - memset(&model.mixData[idx],0,sizeof(MixData)); - model.mixData[idx].srcRaw = RawSource(SOURCE_TYPE_NONE); - model.mixData[idx].destCh = i; - model.mixData[idx].weight = 100; + memset(&model->mixData[idx],0,sizeof(MixData)); + model->mixData[idx].srcRaw = RawSource(SOURCE_TYPE_NONE); + model->mixData[idx].destCh = i; + model->mixData[idx].weight = 100; return true; } void MixesPanel::gm_deleteMix(int index) { - memmove(&model.mixData[index],&model.mixData[index+1], + memmove(&model->mixData[index],&model->mixData[index+1], (firmware->getCapability(Mixes)-(index+1))*sizeof(MixData)); - memset(&model.mixData[firmware->getCapability(Mixes)-1],0,sizeof(MixData)); + memset(&model->mixData[firmware->getCapability(Mixes)-1],0,sizeof(MixData)); } void MixesPanel::gm_openMix(int index) { if(index<0 || index>=firmware->getCapability(Mixes)) return; - MixData mixd(model.mixData[index]); + MixData mixd(model->mixData[index]); emit modified(); update(); - MixerDialog *g = new MixerDialog(this, model, &mixd, generalSettings, firmware); + MixerDialog *g = new MixerDialog(this, *model, &mixd, generalSettings, firmware); if(g->exec()) { - model.mixData[index] = mixd; + model->mixData[index] = mixd; emit modified(); update(); } else { @@ -263,7 +265,7 @@ void MixesPanel::gm_openMix(int index) int MixesPanel::getMixerIndex(unsigned int dch) { int i = 0; - while ((model.mixData[i].destCh<=dch) && (model.mixData[i].destCh) && (igetCapability(Mixes))) i++; + while ((model->mixData[i].destCh<=dch) && (model->mixData[i].destCh) && (igetCapability(Mixes))) i++; if(i==firmware->getCapability(Mixes)) return -1; return i; } @@ -276,7 +278,7 @@ void MixesPanel::mixerlistWidget_doubleClicked(QModelIndex index) idx = getMixerIndex(i); //get mixer index to insert if (!gm_insertMix(idx)) return; - model.mixData[idx].destCh = i; + model->mixData[idx].destCh = i; mixInserted=true; } else { mixInserted=false; @@ -349,7 +351,7 @@ void MixesPanel::mixersCopy() QByteArray mxData; foreach(int idx, list) { - mxData.append((char*)&model.mixData[idx],sizeof(MixData)); + mxData.append((char*)&model->mixData[idx],sizeof(MixData)); } QMimeData *mimeData = new QMimeData; @@ -368,7 +370,7 @@ void MixesPanel::pasteMixerMimeData(const QMimeData * mimeData, int destIdx) idx = getMixerIndex(dch) - 1; //get mixer index to insert } else { idx = destIdx; - dch = model.mixData[idx].destCh; + dch = model->mixData[idx].destCh; } QByteArray mxData = mimeData->data("application/x-companion-mix"); @@ -380,7 +382,7 @@ void MixesPanel::pasteMixerMimeData(const QMimeData * mimeData, int destIdx) if (!gm_insertMix(idx)) break; - MixData *md = &model.mixData[idx]; + MixData *md = &model->mixData[idx]; memcpy(md,mxData.mid(i,sizeof(MixData)).constData(),sizeof(MixData)); md->destCh = dch; i += sizeof(MixData); @@ -415,7 +417,7 @@ void MixesPanel::mixerOpen() idx = getMixerIndex(i); //get mixer index to insert if (!gm_insertMix(idx)) return; - model.mixData[idx].destCh = i; + model->mixData[idx].destCh = i; mixInserted=true; } else { mixInserted=false; @@ -432,7 +434,7 @@ void MixesPanel::mixerHighlight() dest = -idx; } else { - dest = model.mixData[idx].destCh; + dest = model->mixData[idx].destCh; } highlightedSource = ( (int)highlightedSource == dest) ? 0 : dest; // qDebug() << "MixesPanel::mixerHighlight(): " << highlightedSource ; @@ -453,13 +455,13 @@ void MixesPanel::mixerAdd() index = getMixerIndex(i); //get mixer index to insert if (!gm_insertMix(index)) return; - model.mixData[index].destCh = i; + model->mixData[index].destCh = i; mixInserted=true; } else { index++; if (!gm_insertMix(index)) return; - model.mixData[index].destCh = model.mixData[index-1].destCh; + model->mixData[index].destCh = model->mixData[index-1].destCh; mixInserted=true; } gm_openMix(index); @@ -523,7 +525,7 @@ int MixesPanel::gm_moveMix(int idx, bool dir) //true=inc=down false=dec=up { if(idx>firmware->getCapability(Mixes) || (idx==firmware->getCapability(Mixes) && dir)) return idx; - MixData &src=model.mixData[idx]; + MixData &src=model->mixData[idx]; if (idx==0 && !dir) { //special case: topmost mixer moving up @@ -532,7 +534,7 @@ int MixesPanel::gm_moveMix(int idx, bool dir) //true=inc=down false=dec=up } int tdx = dir ? idx+1 : idx-1; - MixData &tgt=model.mixData[tdx]; + MixData &tgt=model->mixData[tdx]; unsigned int outputs = firmware->getCapability(Outputs); if((src.destCh==0) || (src.destCh>outputs) || (tgt.destCh>outputs)) return idx; @@ -578,7 +580,7 @@ void MixesPanel::moveMixDown() void MixesPanel::clearMixes() { if (QMessageBox::question(this, tr("Clear Mixes?"), tr("Really clear all the mixes?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { - model.clearMixes(); + model->clearMixes(); emit modified(); update(); } diff --git a/companion/src/modeledit/mixes.h b/companion/src/modeledit/mixes.h index eae80ca98..c492445ca 100644 --- a/companion/src/modeledit/mixes.h +++ b/companion/src/modeledit/mixes.h @@ -1,7 +1,7 @@ #ifndef MIXES_H #define MIXES_H -#include "modelpanel.h" +#include "modeledit.h" #include "mixerslist.h" #include "mixerdialog.h" diff --git a/companion/src/modeledit/modeledit.cpp b/companion/src/modeledit/modeledit.cpp index e3bbc5ad6..ff6533be1 100644 --- a/companion/src/modeledit/modeledit.cpp +++ b/companion/src/modeledit/modeledit.cpp @@ -37,8 +37,7 @@ ModelEdit::ModelEdit(QWidget * parent, RadioData & radioData, int modelId, Firmw addTab(chnPanel, tr("Servos")); addTab(new Curves(this, model, generalSettings, firmware), tr("Curves")); addTab(new LogicalSwitchesPanel(this, model, generalSettings, firmware), tr("Logical Switches")); - if (firmware->getCapability(CustomFunctions)) - addTab(new CustomFunctionsPanel(this, model, generalSettings, firmware), tr("Special Functions")); + addTab(new CustomFunctionsPanel(this, &model, generalSettings, firmware), tr("Special Functions")); if (firmware->getCapability(Telemetry) & TM_HASTELEMETRY) addTab(new TelemetryPanel(this, model, generalSettings, firmware), tr("Telemetry")); @@ -55,7 +54,7 @@ void ModelEdit::closeEvent(QCloseEvent *event) g.modelEditGeo( saveGeometry() ); } -void ModelEdit::addTab(ModelPanel *panel, QString text) +void ModelEdit::addTab(GenericPanel *panel, QString text) { panels << panel; QWidget * widget = new QWidget(ui->tabWidget); diff --git a/companion/src/modeledit/modeledit.h b/companion/src/modeledit/modeledit.h index 3f92f10cb..82e12d994 100644 --- a/companion/src/modeledit/modeledit.h +++ b/companion/src/modeledit/modeledit.h @@ -2,12 +2,21 @@ #define MODELEDIT_H #include -#include "modelpanel.h" +#include "helpers.h" namespace Ui { - class ModelEdit; + class ModelEdit; } +class ModelPanel : public GenericPanel +{ + public: + ModelPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware): + GenericPanel(parent, &model, generalSettings, firmware) + { + } +}; + class ModelEdit : public QDialog { Q_OBJECT @@ -33,9 +42,9 @@ class ModelEdit : public QDialog ModelData & model; GeneralSettings & generalSettings; FirmwareInterface * firmware; - QVector panels; + QVector panels; - void addTab(ModelPanel *panel, QString text); + void addTab(GenericPanel *panel, QString text); void launchSimulation(); }; diff --git a/companion/src/modeledit/modelpanel.cpp b/companion/src/modeledit/modelpanel.cpp deleted file mode 100644 index b689bbcae..000000000 --- a/companion/src/modeledit/modelpanel.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "modelpanel.h" -#include -#include -#include - -ModelPanel::ModelPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware): - GenericPanel(parent), - model(model), - generalSettings(generalSettings), - firmware(firmware) -{ -} - -ModelPanel::~ModelPanel() -{ -} - diff --git a/companion/src/modeledit/modelpanel.h b/companion/src/modeledit/modelpanel.h deleted file mode 100644 index 8cd1aab8a..000000000 --- a/companion/src/modeledit/modelpanel.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MODELPANEL_H -#define MODELPANEL_H - -#include "eeprominterface.h" -#include "helpers.h" - -class ModelPanel : public GenericPanel -{ - Q_OBJECT - - public: - ModelPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware); - virtual ~ModelPanel(); - - protected: - ModelData & model; - GeneralSettings & generalSettings; - FirmwareInterface * firmware; -}; - -#endif // CHANNELS_H diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 51efe4643..950cbcbea 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -223,7 +223,7 @@ void ModulePanel::update() break; } } - else if (!IS_TARANIS(firmware->getBoard()) || model.trainerMode != 0) { + else if (!IS_TARANIS(firmware->getBoard()) || model->trainerMode != 0) { mask |= MASK_PPM_FIELDS | MASK_CHANNELS_RANGE | MASK_CHANNELS_COUNT; } @@ -231,7 +231,7 @@ void ModulePanel::update() ui->protocol->setVisible(mask & MASK_PROTOCOL); ui->label_rxNumber->setVisible(mask & MASK_FAILSAFES); ui->rxNumber->setVisible(mask & MASK_FAILSAFES); - ui->rxNumber->setValue(model.modelId); + ui->rxNumber->setValue(model->modelId); ui->label_channelsStart->setVisible(mask & MASK_CHANNELS_RANGE); ui->channelsStart->setVisible(mask & MASK_CHANNELS_RANGE); ui->channelsStart->setValue(module.channelsStart+1); @@ -250,7 +250,7 @@ void ModulePanel::update() ui->ppmDelay->setValue(module.ppmDelay); ui->label_ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS); ui->ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS); - ui->ppmFrameLength->setMinimum(module.channelsCount*(model.extendedLimits ? 2.250 : 2)+3.5); + ui->ppmFrameLength->setMinimum(module.channelsCount*(model->extendedLimits ? 2.250 : 2)+3.5); ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength)); ui->ppmFrameLength->setValue(22.5+((double)module.ppmFrameLength)*0.5); @@ -271,7 +271,7 @@ void ModulePanel::update() void ModulePanel::on_trainerMode_currentIndexChanged(int index) { if (!lock) { - model.trainerMode = index; + model->trainerMode = index; update(); emit modified(); } @@ -321,7 +321,7 @@ void ModulePanel::on_ppmDelay_editingFinished() void ModulePanel::on_rxNumber_editingFinished() { - model.modelId = ui->rxNumber->value(); + model->modelId = ui->rxNumber->value(); emit modified(); } @@ -522,39 +522,39 @@ SetupPanel::~SetupPanel() void SetupPanel::on_extendedLimits_toggled(bool checked) { - model.extendedLimits = checked; + model->extendedLimits = checked; emit extendedLimitsToggled(); emit modified(); } void SetupPanel::on_throttleWarning_toggled(bool checked) { - model.disableThrottleWarning = !checked; + model->disableThrottleWarning = !checked; emit modified(); } void SetupPanel::on_throttleReverse_toggled(bool checked) { - model.throttleReversed = checked; + model->throttleReversed = checked; emit modified(); } void SetupPanel::on_extendedTrims_toggled(bool checked) { - model.extendedTrims = checked; + model->extendedTrims = checked; emit modified(); } void SetupPanel::on_trimIncrement_currentIndexChanged(int index) { - model.trimInc = index-2; + model->trimInc = index-2; emit modified(); } void SetupPanel::on_throttleSource_currentIndexChanged(int index) { if (!lock) { - model.thrTraceSrc = ui->throttleSource->itemData(index).toInt(); + model->thrTraceSrc = ui->throttleSource->itemData(index).toInt(); emit modified(); } } @@ -562,25 +562,25 @@ void SetupPanel::on_throttleSource_currentIndexChanged(int index) void SetupPanel::on_name_editingFinished() { int length = ui->name->maxLength(); - strncpy(model.name, ui->name->text().toAscii(), length); + strncpy(model->name, ui->name->text().toAscii(), length); emit modified(); } void SetupPanel::on_image_currentIndexChanged(int index) { if (!lock) { - strncpy(model.bitmap, ui->image->currentText().toAscii(), 10); + strncpy(model->bitmap, ui->image->currentText().toAscii(), 10); QString path = g.profile[g.id()].sdPath(); path.append("/BMP/"); QDir qd(path); if (qd.exists()) { QString fileName=path; - fileName.append(model.bitmap); + fileName.append(model->bitmap); fileName.append(".bmp"); QImage image(fileName); if (image.isNull()) { fileName=path; - fileName.append(model.bitmap); + fileName.append(model->bitmap); fileName.append(".BMP"); image.load(fileName); } @@ -618,13 +618,13 @@ void SetupPanel::populateThrottleSourceCB() } } - if (model.thrTraceSrc < i) - ui->throttleSource->setCurrentIndex(model.thrTraceSrc); + if (model->thrTraceSrc < i) + ui->throttleSource->setCurrentIndex(model->thrTraceSrc); int channels = (IS_ARM(GetEepromInterface()->getBoard()) ? 32 : 16); for (int i=0; ithrottleSource->addItem(QObject::tr("CH%1").arg(i+1, 2, 10, QChar('0')), THROTTLE_SOURCE_FIRST_CHANNEL+i); - if (model.thrTraceSrc == unsigned(THROTTLE_SOURCE_FIRST_CHANNEL+i)) + if (model->thrTraceSrc == unsigned(THROTTLE_SOURCE_FIRST_CHANNEL+i)) ui->throttleSource->setCurrentIndex(ui->throttleSource->count()-1); } @@ -633,18 +633,18 @@ void SetupPanel::populateThrottleSourceCB() void SetupPanel::update() { - ui->name->setText(model.name); + ui->name->setText(model->name); - ui->throttleReverse->setChecked(model.throttleReversed); + ui->throttleReverse->setChecked(model->throttleReversed); populateThrottleSourceCB(); - ui->throttleWarning->setChecked(!model.disableThrottleWarning); + ui->throttleWarning->setChecked(!model->disableThrottleWarning); //trim inc, thro trim, thro expo, instatrim - ui->trimIncrement->setCurrentIndex(model.trimInc+2); - ui->throttleTrim->setChecked(model.thrTrim); - ui->extendedLimits->setChecked(model.extendedLimits); - ui->extendedTrims->setChecked(model.extendedTrims); - ui->displayText->setChecked(model.displayChecklist); + ui->trimIncrement->setCurrentIndex(model->trimInc+2); + ui->throttleTrim->setChecked(model->thrTrim); + ui->extendedLimits->setChecked(model->extendedLimits); + ui->extendedTrims->setChecked(model->extendedTrims); + ui->displayText->setChecked(model->displayChecklist); updateBeepCenter(); updateStartupSwitches(); @@ -664,7 +664,7 @@ void SetupPanel::update() void SetupPanel::updateBeepCenter() { for (int i=0; isetChecked(model.beepANACenter & (0x01 << i)); + centerBeepCheckboxes[i]->setChecked(model->beepANACenter & (0x01 << i)); } } @@ -672,12 +672,12 @@ void SetupPanel::updateStartupSwitches() { lock = true; - unsigned int switchStates = model.switchWarningStates; + unsigned int switchStates = model->switchWarningStates; for (int i=0; igetCapability(Switches)-1; i++) { QSlider * slider = startupSwitchesSliders[i]; QCheckBox * cb = startupSwitchesCheckboxes[i]; - bool enabled = !(model.nSwToWarn & (1 << i)); + bool enabled = !(model->nSwToWarn & (1 << i)); slider->setEnabled(enabled); cb->setChecked(enabled); if (IS_TARANIS(GetEepromInterface()->getBoard())) { @@ -721,10 +721,10 @@ void SetupPanel::startupSwitchEdited(int value) } } - model.switchWarningStates &= ~mask; + model->switchWarningStates &= ~mask; if (value) { - model.switchWarningStates |= (value << shift); + model->switchWarningStates |= (value << shift); } updateStartupSwitches(); @@ -738,9 +738,9 @@ void SetupPanel::startupSwitchToggled(bool checked) int index = sender()->property("index").toInt()-1; if (checked) - model.nSwToWarn &= ~(1 << index); + model->nSwToWarn &= ~(1 << index); else - model.nSwToWarn |= (1 << index); + model->nSwToWarn |= (1 << index); updateStartupSwitches(); emit modified(); @@ -750,14 +750,14 @@ void SetupPanel::startupSwitchToggled(bool checked) void SetupPanel::updatePotWarnings() { lock = true; - int mode = model.nPotsToWarn >> 6; + int mode = model->nPotsToWarn >> 6; ui->potWarningMode->setCurrentIndex(mode); if (mode == 0) - model.nPotsToWarn = 0x3F; + model->nPotsToWarn = 0x3F; for (int i=0; inPotsToWarn & (1 << i)); potWarningCheckboxes[i]->setChecked(enabled); potWarningCheckboxes[i]->setDisabled(mode == 0); @@ -771,9 +771,9 @@ void SetupPanel::potWarningToggled(bool checked) int index = sender()->property("index").toInt()-1; if(checked) - model.nPotsToWarn &= ~(1 << index); + model->nPotsToWarn &= ~(1 << index); else - model.nPotsToWarn |= (1 << index); + model->nPotsToWarn |= (1 << index); updatePotWarnings(); emit modified(); @@ -784,8 +784,8 @@ void SetupPanel::on_potWarningMode_currentIndexChanged(int index) { if (!lock) { int mask = 0xC0; - model.nPotsToWarn = model.nPotsToWarn & ~mask; - model.nPotsToWarn = model.nPotsToWarn | ((index << 6) & mask); + model->nPotsToWarn = model->nPotsToWarn & ~mask; + model->nPotsToWarn = model->nPotsToWarn | ((index << 6) & mask); updatePotWarnings(); emit modified(); @@ -794,13 +794,13 @@ void SetupPanel::on_potWarningMode_currentIndexChanged(int index) void SetupPanel::on_displayText_toggled(bool checked) { - model.displayChecklist = checked; + model->displayChecklist = checked; emit modified(); } void SetupPanel::on_throttleTrim_toggled(bool checked) { - model.thrTrim = checked; + model->thrTrim = checked; emit modified(); } @@ -810,9 +810,9 @@ void SetupPanel::onBeepCenterToggled(bool checked) int index = sender()->property("index").toInt(); unsigned int mask = (0x01 << index); if (checked) - model.beepANACenter |= mask; + model->beepANACenter |= mask; else - model.beepANACenter &= ~mask; + model->beepANACenter &= ~mask; emit modified(); } } diff --git a/companion/src/modeledit/setup.h b/companion/src/modeledit/setup.h index afbbf295d..1f7e22ee6 100644 --- a/companion/src/modeledit/setup.h +++ b/companion/src/modeledit/setup.h @@ -1,7 +1,7 @@ #ifndef SETUP_H #define SETUP_H -#include "modelpanel.h" +#include "modeledit.h" #include #include #include diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 43b97a30f..7b535d6d9 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -367,12 +367,12 @@ void TelemetryCustomScreen::update() for (int l=0; l<4; l++) { for (int c=0; cgetCapability(TelemetryCustomScreensFieldsPerLine); c++) { - populateTelemetrySourceCB(fieldsCB[l][c], screen.body.lines[l].source[c], l==3, model.frsky.usrProto); + populateTelemetrySourceCB(fieldsCB[l][c], screen.body.lines[l].source[c], l==3, model->frsky.usrProto); } } for (int l=0; l<4; l++) { - populateTelemetrySourceCB(barsCB[l], screen.body.bars[l].source, false, model.frsky.usrProto); + populateTelemetrySourceCB(barsCB[l], screen.body.bars[l].source, false, model->frsky.usrProto); } if (screen.type == TELEMETRY_SCREEN_BARS) { @@ -540,7 +540,7 @@ TelemetryPanel::~TelemetryPanel() void TelemetryPanel::update() { if (IS_TARANIS(firmware->getBoard())) { - if (model.moduleData[0].protocol == OFF && model.moduleData[1].protocol == PPM) { + if (model->moduleData[0].protocol == OFF && model->moduleData[1].protocol == PPM) { ui->telemetryProtocol->setEnabled(true); } else { @@ -556,11 +556,11 @@ void TelemetryPanel::setup() lock = true; - ui->rssiAlarm1SB->setValue(model.frsky.rssiAlarms[0].value); - ui->rssiAlarm2SB->setValue(model.frsky.rssiAlarms[1].value); + ui->rssiAlarm1SB->setValue(model->frsky.rssiAlarms[0].value); + ui->rssiAlarm2SB->setValue(model->frsky.rssiAlarms[1].value); if (!IS_TARANIS(firmware->getBoard())) { - ui->rssiAlarm1CB->setCurrentIndex(model.frsky.rssiAlarms[0].level); - ui->rssiAlarm2CB->setCurrentIndex(model.frsky.rssiAlarms[1].level); + ui->rssiAlarm1CB->setCurrentIndex(model->frsky.rssiAlarms[0].level); + ui->rssiAlarm2CB->setCurrentIndex(model->frsky.rssiAlarms[1].level); } else { ui->rssiAlarm1CB->hide(); @@ -573,11 +573,11 @@ void TelemetryPanel::setup() ui->AltitudeGPS_ChkB->hide(); } else { - ui->AltitudeGPS_ChkB->setChecked(model.frsky.FrSkyGpsAlt); + ui->AltitudeGPS_ChkB->setChecked(model->frsky.FrSkyGpsAlt); } if (IS_TARANIS(firmware->getBoard())) { - ui->AltitudeToolbar_ChkB->setChecked(model.frsky.altitudeDisplayed); + ui->AltitudeToolbar_ChkB->setChecked(model->frsky.altitudeDisplayed); } else { ui->AltitudeToolbar_ChkB->hide(); @@ -606,17 +606,17 @@ void TelemetryPanel::setup() ui->VarioLabel_1->hide(); ui->VarioLabel_2->hide(); } - ui->varioLimitMin_DSB->setValue(model.frsky.varioMin-10); - ui->varioLimitMax_DSB->setValue(model.frsky.varioMax+10); - ui->varioLimitCenterMax_DSB->setValue((model.frsky.varioCenterMax/10.0)+0.5); - if (model.frsky.varioCenterMin==-16) { + ui->varioLimitMin_DSB->setValue(model->frsky.varioMin-10); + ui->varioLimitMax_DSB->setValue(model->frsky.varioMax+10); + ui->varioLimitCenterMax_DSB->setValue((model->frsky.varioCenterMax/10.0)+0.5); + if (model->frsky.varioCenterMin==-16) { ui->varioLimitMinOff_ChkB->setChecked(true); ui->varioLimitCenterMin_DSB->setValue(-2.0); ui->varioLimitCenterMin_DSB->setDisabled(true); } else { ui->varioLimitMinOff_ChkB->setChecked(false); - ui->varioLimitCenterMin_DSB->setValue((model.frsky.varioCenterMin/10.0)-0.5); + ui->varioLimitCenterMin_DSB->setValue((model->frsky.varioCenterMin/10.0)-0.5); } } @@ -636,7 +636,7 @@ void TelemetryPanel::setup() ui->fasOffset_DSB->hide(); } else { - ui->fasOffset_DSB->setValue(model.frsky.fasOffset/10.0); + ui->fasOffset_DSB->setValue(model->frsky.fasOffset/10.0); ui->variousGB->show(); } @@ -646,9 +646,9 @@ void TelemetryPanel::setup() ui->mahCount_ChkB->hide(); } else { - if (model.frsky.mAhPersistent) { + if (model->frsky.mAhPersistent) { ui->mahCount_ChkB->setChecked(true); - ui->mahCount_SB->setValue(model.frsky.storedMah); + ui->mahCount_SB->setValue(model->frsky.storedMah); } else { ui->mahCount_SB->setDisabled(true); @@ -656,8 +656,8 @@ void TelemetryPanel::setup() ui->variousGB->show(); } - ui->frskyProtoCB->setCurrentIndex(model.frsky.usrProto); - ui->bladesCount->setValue(model.frsky.blades); + ui->frskyProtoCB->setCurrentIndex(model->frsky.usrProto); + ui->bladesCount->setValue(model->frsky.blades); populateVoltsSource(); populateCurrentSource(); @@ -669,7 +669,7 @@ void TelemetryPanel::setup() void TelemetryPanel::populateVarioSource() { QUnsignedAutoComboBox * cb = ui->varioSourceCB; - cb->setField(&model.frsky.varioSource, this); + cb->setField(&model->frsky.varioSource, this); if (!IS_TARANIS(firmware->getBoard())) { cb->addItem(tr("Alti"), TELEMETRY_VARIO_SOURCE_ALTI); cb->addItem(tr("Alti+"), TELEMETRY_VARIO_SOURCE_ALTI_PLUS); @@ -685,7 +685,7 @@ void TelemetryPanel::populateVarioSource() void TelemetryPanel::populateVoltsSource() { QUnsignedAutoComboBox * cb = ui->frskyVoltCB; - cb->setField(&model.frsky.voltsSource, this); + cb->setField(&model->frsky.voltsSource, this); cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1); cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2); if (IS_ARM(firmware->getBoard())) { @@ -699,7 +699,7 @@ void TelemetryPanel::populateVoltsSource() void TelemetryPanel::populateCurrentSource() { QUnsignedAutoComboBox * cb = ui->frskyCurrentCB; - cb->setField(&model.frsky.currentSource, this); + cb->setField(&model->frsky.currentSource, this); cb->addItem(tr("---"), TELEMETRY_CURRENT_SOURCE_NONE); cb->addItem(tr("A1"), TELEMETRY_CURRENT_SOURCE_A1); cb->addItem(tr("A2"), TELEMETRY_CURRENT_SOURCE_A2); @@ -712,7 +712,7 @@ void TelemetryPanel::populateCurrentSource() void TelemetryPanel::on_telemetryProtocol_currentIndexChanged(int index) { - model.telemetryProtocol = index; + model->telemetryProtocol = index; emit modified(); } @@ -723,13 +723,13 @@ void TelemetryPanel::onAnalogModified() void TelemetryPanel::on_bladesCount_editingFinished() { - model.frsky.blades = ui->bladesCount->value(); + model->frsky.blades = ui->bladesCount->value(); emit modified(); } void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index) { - model.frsky.usrProto = index; + model->frsky.usrProto = index; for (int i=0; igetCapability(TelemetryCustomScreens); i++) telemetryCustomScreens[i]->update(); emit modified(); @@ -737,49 +737,49 @@ void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index) void TelemetryPanel::on_rssiAlarm1CB_currentIndexChanged(int index) { - model.frsky.rssiAlarms[0].level = index; + model->frsky.rssiAlarms[0].level = index; emit modified(); } void TelemetryPanel::on_rssiAlarm2CB_currentIndexChanged(int index) { - model.frsky.rssiAlarms[1].level = index; + model->frsky.rssiAlarms[1].level = index; emit modified(); } void TelemetryPanel::on_rssiAlarm1SB_editingFinished() { - model.frsky.rssiAlarms[0].value = ui->rssiAlarm1SB->value(); + model->frsky.rssiAlarms[0].value = ui->rssiAlarm1SB->value(); emit modified(); } void TelemetryPanel::on_rssiAlarm2SB_editingFinished() { - model.frsky.rssiAlarms[1].value = ui->rssiAlarm2SB->value(); + model->frsky.rssiAlarms[1].value = ui->rssiAlarm2SB->value(); emit modified(); } void TelemetryPanel::on_AltitudeGPS_ChkB_toggled(bool checked) { - model.frsky.FrSkyGpsAlt = checked; + model->frsky.FrSkyGpsAlt = checked; emit modified(); } void TelemetryPanel::on_AltitudeToolbar_ChkB_toggled(bool checked) { - model.frsky.altitudeDisplayed = checked; + model->frsky.altitudeDisplayed = checked; emit modified(); } void TelemetryPanel::on_varioLimitMin_DSB_editingFinished() { - model.frsky.varioMin = round(ui->varioLimitMin_DSB->value()+10); + model->frsky.varioMin = round(ui->varioLimitMin_DSB->value()+10); emit modified(); } void TelemetryPanel::on_varioLimitMax_DSB_editingFinished() { - model.frsky.varioMax = round(ui->varioLimitMax_DSB->value()-10); + model->frsky.varioMax = round(ui->varioLimitMax_DSB->value()-10); emit modified(); } @@ -789,7 +789,7 @@ void TelemetryPanel::on_varioLimitCenterMin_DSB_editingFinished() if (ui->varioLimitCenterMin_DSB->value()>ui->varioLimitCenterMax_DSB->value()) { ui->varioLimitCenterMax_DSB->setValue(ui->varioLimitCenterMin_DSB->value()); } - model.frsky.varioCenterMin = round((ui->varioLimitCenterMin_DSB->value()+0.5)*10); + model->frsky.varioCenterMin = round((ui->varioLimitCenterMin_DSB->value()+0.5)*10); emit modified(); } } @@ -797,7 +797,7 @@ void TelemetryPanel::on_varioLimitCenterMin_DSB_editingFinished() void TelemetryPanel::on_varioLimitMinOff_ChkB_toggled(bool checked) { if (!lock) { - model.frsky.varioCenterMin = -16; + model->frsky.varioCenterMin = -16; if (!checked) { lock=true; ui->varioLimitCenterMin_DSB->setValue(-2.0); @@ -818,26 +818,26 @@ void TelemetryPanel::on_varioLimitCenterMax_DSB_editingFinished() if (ui->varioLimitCenterMin_DSB->value()>ui->varioLimitCenterMax_DSB->value()) { ui->varioLimitCenterMax_DSB->setValue(ui->varioLimitCenterMin_DSB->value()); } - model.frsky.varioCenterMax = round((ui->varioLimitCenterMax_DSB->value()-0.5)*10); + model->frsky.varioCenterMax = round((ui->varioLimitCenterMax_DSB->value()-0.5)*10); emit modified(); } } void TelemetryPanel::on_fasOffset_DSB_editingFinished() { - model.frsky.fasOffset = ui->fasOffset_DSB->value() * 10; + model->frsky.fasOffset = ui->fasOffset_DSB->value() * 10; emit modified(); } void TelemetryPanel::on_mahCount_SB_editingFinished() { - model.frsky.storedMah = ui->mahCount_SB->value(); + model->frsky.storedMah = ui->mahCount_SB->value(); emit modified(); } void TelemetryPanel::on_mahCount_ChkB_toggled(bool checked) { - model.frsky.mAhPersistent = checked; + model->frsky.mAhPersistent = checked; ui->mahCount_SB->setDisabled(!checked); emit modified(); } diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index 62a66f4ff..68c1d8841 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -1,7 +1,7 @@ #ifndef TELEMETRY_H #define TELEMETRY_H -#include "modelpanel.h" +#include "modeledit.h" #include #include #include diff --git a/companion/src/printdialog.cpp b/companion/src/printdialog.cpp index 02b94c223..caddeef3a 100644 --- a/companion/src/printdialog.cpp +++ b/companion/src/printdialog.cpp @@ -211,7 +211,7 @@ void PrintDialog::printInputs() str.append(""); str.append("
"); if(lastCHN!=ed->chn) { lastCHN=ed->chn; - str.append(""+getInputStr(*g_model, ed->chn)+""); + str.append(""+getInputStr(g_model, ed->chn)+""); } str.append(""); @@ -231,9 +231,9 @@ void PrintDialog::printInputs() str += " " + tr("Weight") + QString("(%1)").arg(getGVarString(ed->weight,true)); if (firmware->getCapability(VirtualInputs)) { - str += " " + tr("Source") + QString("(%1)").arg(ed->srcRaw.toString(*g_model)); + str += " " + tr("Source") + QString("(%1)").arg(ed->srcRaw.toString(g_model)); if (ed->carryTrim>0) str += " " + tr("NoTrim"); - else if (ed->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(ed->carryTrim)-1)).toString(*g_model); + else if (ed->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(ed->carryTrim)-1)).toString(g_model); } if (ed->curve.value) str += " " + Qt::escape(ed->curve.toString()); @@ -315,10 +315,10 @@ void PrintDialog::printMixes() default: str += "  "; break; }; - str += " " + md->srcRaw.toString(*g_model); + str += " " + md->srcRaw.toString(g_model); str += " " + Qt::escape(tr("Weight(%1)").arg(getGVarString(md->weight, true))); - QString phasesStr = getPhasesStr(md->phases, *g_model); + QString phasesStr = getPhasesStr(md->phases, g_model); if (!phasesStr.isEmpty()) str += " " + Qt::escape(phasesStr); if (md->swtch.type != SWITCH_TYPE_NONE) { @@ -328,7 +328,7 @@ void PrintDialog::printMixes() if (md->carryTrim>0) str += " " + Qt::escape(tr("NoTrim")); else if (md->carryTrim<0) - str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(*g_model); + str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString(g_model); if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo")); if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset))); diff --git a/companion/src/qautocombobox.h b/companion/src/qautocombobox.h index 5d406d849..49c4d3434 100755 --- a/companion/src/qautocombobox.h +++ b/companion/src/qautocombobox.h @@ -2,7 +2,7 @@ #define QAUTOCOMBOBOX_H_ #include -#include "modeledit/modelpanel.h" +#include "modeledit/modeledit.h" class QUnsignedAutoComboBox: public QComboBox { diff --git a/companion/src/simulation/simulatordialog.cpp b/companion/src/simulation/simulatordialog.cpp index 005c8cc55..7ddce661c 100644 --- a/companion/src/simulation/simulatordialog.cpp +++ b/companion/src/simulation/simulatordialog.cpp @@ -373,7 +373,7 @@ void SimulatorDialog::initUi(T * ui) } QLabel * label = new QLabel(tabWidget); ModelData model; - label->setText(RawSource(SOURCE_TYPE_CH, i).toString(model)); + label->setText(RawSource(SOURCE_TYPE_CH, i).toString(&model)); outputTab->addWidget(label, line, column == 0 ? 0 : 5, 1, 1); QSlider * slider = new QSlider(tabWidget); diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index da5edc468..bc598a5b3 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -5071,8 +5071,10 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu { int8_t sub = m_posVert - 1; -#if defined(CPUARM) || defined(AUTOSWITCH) +#if defined(CPUARM) uint8_t eeFlags = (functions == g_model.customFn) ? EE_MODEL : EE_GENERAL; +#elif !defined(CPUM64) || defined(AUTOSWITCH) + uint8_t eeFlags = EE_MODEL; #endif #if defined(PCBTARANIS) diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 67b026438..76a081911 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -520,7 +520,7 @@ enum AdjustGvarFunctionParam { #define LEN_CFN_NAME 6 #define CFN_SPARE_TYPE int16_t #endif -PACK(typedef struct t_CustomFunctionData { // Function Switches data +PACK(typedef struct { int8_t swtch; uint8_t func; PACK(union { @@ -557,7 +557,7 @@ PACK(typedef struct t_CustomFunctionData { // Function Switches data #define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0) #define CFN_GVAR_CST_MAX GVAR_LIMIT #else -PACK(typedef struct t_CustomFunctionData { +PACK(typedef struct { PACK(union { PACK(struct { int16_t swtch:6; @@ -650,7 +650,7 @@ PACK(typedef struct t_EEGeneral { EXTRA_GENERAL_FIELDS - swstate_t switchUnlockStates; + ARM_FIELD(swstate_t switchUnlockStates) ARM_FIELD(CustomFunctionData customFn[NUM_CFN]) diff --git a/radio/src/tests/mixer.cpp b/radio/src/tests/mixer.cpp index 63367a50a..57dcf4684 100644 --- a/radio/src/tests/mixer.cpp +++ b/radio/src/tests/mixer.cpp @@ -389,12 +389,15 @@ TEST(Trims, CopyTrimsToOffset) MODEL_RESET(); modelDefault(0); setTrimValue(0, ELE_STICK, -100); // -100 on elevator +#if defined(CPUARM) + evalFunctions(g_model.customFn, modelFunctionsContext); // it disables all safety channels + copyTrimsToOffset(1); + EXPECT_EQ(getTrimValue(0, ELE_STICK), -100); // unchanged + EXPECT_EQ(g_model.limitData[1].offset, -195); +#else evalFunctions(); // it disables all safety channels copyTrimsToOffset(1); EXPECT_EQ(getTrimValue(0, ELE_STICK), -100); // unchanged -#if defined(CPUARM) - EXPECT_EQ(g_model.limitData[1].offset, -195); -#else EXPECT_EQ(g_model.limitData[1].offset, -200); #endif }