1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-14 20:10:13 +03:00

Add MSP_MODE_RANGES_EXTRA

Add MSP_MODE_RANGES_EXTRA to msp codes.
Add MODE_RANGES_EXTRA function call.
Add modeRangeExtra when reading mode settings.
Add UI for modeLogic.
Position and populate Logic selector.
Some fixes for msp apiVersion checking.
Add 'save' modeLogic.
Add link button and translations.
Add code to show/hide Link button.
Adjust position of link and range buttons.
Add structure code for Link button.
Add linkedTo code.
Add link div with delete button to html and css.
Add code to hide/show buttons when link is pressed.
Add code to add link select to range area.
Add save code for linked modes.
Add formatting to link.
Don't allow linking to/from ARM or self.
Remove unnecessary styling.
Update reading MODE_RANGES_EXTRA array length.
Set defaults for '_EXTRA' to aux tab.
This commit is contained in:
Dave Huber 2019-02-07 11:22:59 -06:00
parent 43bb0e42b5
commit 5b8e38c216
20 changed files with 376 additions and 28 deletions

View file

@ -1370,6 +1370,9 @@
"auxiliaryAddRange": {
"message": "Afegeix Rang"
},
"auxiliaryAddLink": {
"message": "Enllaç"
},
"auxiliaryButtonSave": {
"message": "Desa"
},
@ -1379,6 +1382,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configureu els interruptors d'ajust. Consulteu la secció \"Ajustaments de vol\" del manual per obtenir-ne més detalls. Els canvis que realitzen les funcions d'ajust no es guarden automàticament. Hi ha 4 ranures (slots). Cada interruptor utilitzat per fer ajustaments simultanis requereix l'ús exclusiu d'una ranura."
},

View file

@ -1544,6 +1544,9 @@
"auxiliaryAddRange": {
"message": "Bereich hinzufügen"
},
"auxiliaryAddLink": {
"message": "Link"
},
"auxiliaryButtonSave": {
"message": "Speichern"
},
@ -1553,6 +1556,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Konfiguriere Schalter Anpassungen. Siehe im 'in-flight adjustments' Abschnitt des Handbuchs für Details nach. Die Änderungen an Anpassungsfunktionen werden nicht automatisch gespeichert. Es gibt 4 (Speicher-) Slots. Jeder Schalter der für gleichzeitige Anpassungen genutzt wird, muss jeweils einem eindeutigen Slot zugeordnet sein."
},

View file

@ -1728,6 +1728,9 @@
"auxiliaryAddRange": {
"message": "Add Range"
},
"auxiliaryAddLink": {
"message": "Link"
},
"auxiliaryButtonSave": {
"message": "Save"
},
@ -1737,6 +1740,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configure adjustment switches. See the 'in-flight adjustments' section of the manual for details. The changes that adjustment functions make are not saved automatically. There are 4 slots. Each switch used to concurrently make adjustments requires exclusive use of a slot."
},

View file

@ -1543,6 +1543,9 @@
"auxiliaryAddRange": {
"message": "Añadir Rango"
},
"auxiliaryAddLink": {
"message": "Enlace"
},
"auxiliaryButtonSave": {
"message": "Guardar"
},
@ -1552,6 +1555,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configura interruptores para correcciones. Mira el apartado 'in-flight adjustments' del manual para detalles. Las correcciones realizadas no se guardan automáticamente. Hay 4 ranuras. Cada interruptor usado para hacer correcciones concurrentemente requiere el uso exclusivo de una ranura."
},

View file

@ -1540,6 +1540,9 @@
"auxiliaryAddRange": {
"message": "Ajouter une plage"
},
"auxiliaryAddLink": {
"message": "Lier"
},
"auxiliaryButtonSave": {
"message": "Enregistrer"
},
@ -1549,6 +1552,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTOMATIQUE"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configurez les commutateurs d'ajustement. Voir la section «Ajustements en vol» du manuel pour plus de détails. Les modifications apportées par les fonctions de réglage ne sont pas enregistrées automatiquement. Il y a 4 emplacements. Chaque commutateur utilisé pour effectuer simultanément des ajustements nécessite l'utilisation exclusive d'un emplacement."
},

View file

@ -1546,6 +1546,9 @@
"auxiliaryAddRange": {
"message": "Tambahkan Rentang"
},
"auxiliaryAddLink": {
"message": "Tautkan"
},
"auxiliaryButtonSave": {
"message": "Simpan"
},
@ -1555,6 +1558,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Mengkonfigurasi switch penyesuaian. Lihat manual bagian 'in-flight adjustments' untuk detilnya. Perubahan yang dilakukan fungsi penyesuaian tidak disimpan secara otomatis. Ada 4 slot. Setiap switch yang digunakan untuk secara bersamaan melakukan penyesuaian menggunakan sebuah slot."
},

View file

@ -1418,6 +1418,9 @@
"auxiliaryAddRange": {
"message": "Attiva"
},
"auxiliaryAddLink": {
"message": "Link"
},
"auxiliaryButtonSave": {
"message": "Salva"
},
@ -1427,6 +1430,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configurare gli interruttori di regolazione. Vedi la sezione 'aggiustamenti in volo' del manuale per i dettagli. Le modifiche apportate dalle funzioni di regolazione non vengono salvate automaticamente. Ci sono 4 slot. Ogni interruttore utilizzato per apportare modifiche simultanee richiede l'uso esclusivo di uno slot."
},

View file

@ -1543,6 +1543,9 @@
"auxiliaryAddRange": {
"message": "範囲追加"
},
"auxiliaryAddLink": {
"message": "結ぶ"
},
"auxiliaryButtonSave": {
"message": "保存"
},
@ -1552,6 +1555,12 @@
"auxiliaryAutoChannelSelect": {
"message": "自動"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "調整スイッチを構成します。詳細については、マニュアルの [In-flight Adjustment] を参照して下さい。調整の変更は自動的には保存されません。 4つのスロットがありますが、調整を同時に行うために使用される各スイッチは、スロットを排他的に使用する必要があります。"
},

View file

@ -1543,6 +1543,9 @@
"auxiliaryAddRange": {
"message": "범위 추가"
},
"auxiliaryAddLink": {
"message": "연접하다"
},
"auxiliaryButtonSave": {
"message": "저장"
},
@ -1552,6 +1555,12 @@
"auxiliaryAutoChannelSelect": {
"message": "자동"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "조정 스위치를 설정하십시오. 자세한 내용은 매뉴얼의 '비행-중 조정' 섹션을 참조하십시오. 조정 기능의 변경사항은 자동으로 저장되지 않습니다. 4개의 슬롯이 있습니다. 조정을 동시에 수행하는 데 사용되는 각 스위치는 슬롯을 독점적으로 사용해야합니다."
},

View file

@ -1543,6 +1543,9 @@
"auxiliaryAddRange": {
"message": "Pievienot"
},
"auxiliaryAddLink": {
"message": "Saistīt"
},
"auxiliaryButtonSave": {
"message": "Saglabāt"
},
@ -1552,6 +1555,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Konfigurēt pieregulēšanas slēdžus. Detaļas ir atrodamas manuāla sadaļā 'in-flight adjustments'. Šīs izmaiņas ko pieregulēšanas funkcija izpilda netiek automātiski saglabātas. Tur ir 4 sloti. Katrs slēdzis tiek lietots, lai vienlaikus veiktu nepieciešamās izmaiņas atbilstošam slotam."
},

View file

@ -1468,6 +1468,9 @@
"auxiliaryAddRange": {
"message": "Adicionar Faixa"
},
"auxiliaryAddLink": {
"message": "Vincule"
},
"auxiliaryButtonSave": {
"message": "Salvar"
},
@ -1477,6 +1480,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Configure os 'switches' de ajuste. Leia a seção do manual sobre 'in-flight adjustments' para detalhes. Os ajustes feitos por essas funções não serão salvos automaticamente. Existem 4 slots. Cada switch utilizado ao mesmo tempo para o ajuste exige o uso exclusivo de um slot."
},

View file

@ -1543,6 +1543,9 @@
"auxiliaryAddRange": {
"message": "Доб. диапазон"
},
"auxiliaryAddLink": {
"message": "Cвязывай"
},
"auxiliaryButtonSave": {
"message": "Сохранить"
},
@ -1552,6 +1555,12 @@
"auxiliaryAutoChannelSelect": {
"message": "АВТО"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Установка нас троечных переключателей. Смотри 'in-flight adjustments' секцию руководства. Изменение этих настроек автоматически не сохраняется. Там 4 слота. Каждый переключатель используемый одновременно требует исключительного использования слота."
},

View file

@ -1547,6 +1547,9 @@
"auxiliaryAddRange": {
"message": "Lägg till intervall"
},
"auxiliaryAddLink": {
"message": "Länka"
},
"auxiliaryButtonSave": {
"message": "Spara"
},
@ -1556,6 +1559,12 @@
"auxiliaryAutoChannelSelect": {
"message": "AUTO"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "Konfigurera justerings-switchar. Se avsnittet 'In-flight adjustments' i manualen för detaljer. Ändringarna som justeringsfunktionerna utför sparas inte automatiskt. Det finns 4 platser. Varje switch som används för att göra samtidiga justeringar kräver exklusiv användning av en plats."
},

View file

@ -1474,6 +1474,9 @@
"auxiliaryAddRange": {
"message": "添加范围"
},
"auxiliaryAddLink": {
"message": "鏈接"
},
"auxiliaryButtonSave": {
"message": "保存"
},
@ -1483,6 +1486,12 @@
"auxiliaryAutoChannelSelect": {
"message": "自动"
},
"auxiliaryModeLogicOR": {
"message": "OR"
},
"auxiliaryModeLogicAND": {
"message": "AND"
},
"adjustmentsHelp": {
"message": "配置调整开关。参阅手册的 'in-flight adjustments' 章解获取具体信息。通过该功能所做的调校修改不会被自动保存。总共有4个槽位。每一个开关需要独占一个槽位。"
},

View file

@ -56,8 +56,8 @@
}
.tab-auxiliary .mode .name {
min-height: 50px;
padding: 13px 0px;
min-height: 80px;
padding: 5px 0px;
}
.tab-auxiliary .mode .info {
@ -77,13 +77,20 @@
.tab-auxiliary .mode .info .buttons {
position: absolute;
bottom: 14px;
bottom: 0px;
width: 100%;
}
.tab-auxiliary .mode .info .buttons a {
padding: 2px 5px;
border-radius: 4px;
cursor: pointer;
margin: 3px;
display: block;
}
.tab-auxiliary .mode .info .buttons a:hover {
background-color: darkgrey;
}
.tab-auxiliary .ranges {
@ -103,6 +110,17 @@
padding-bottom: 5px;
}
.tab-auxiliary .link {
position: relative;
height: 70px;
padding-top: 15px;
padding-left: 15px;
border-top: 0px;
border-bottom: 0px;
background-color: #ececec;
padding-bottom: 5px;
}
.tab-auxiliary .range:first-child {
border-top: 0px;
}
@ -127,11 +145,12 @@
text-align: center;
}
.tab-auxiliary .mode .range .channelInfo .limits {
padding: 10px 0px;
.tab-auxiliary .range .channel {
border: 1px solid silver;
border-radius: 3px;
}
.tab-auxiliary .range .channel {
.tab-auxiliary .range .logic {
border: 1px solid silver;
border-radius: 3px;
}
@ -152,6 +171,15 @@
margin-top: 1px;
}
.tab-auxiliary .mode .link .channelLink {
float: left;
}
.tab-auxiliary .link .linkedTo {
border: 1px solid silver;
border-radius: 3px;
}
.tab-auxiliary>.buttons {
margin-top: 10px;
}

View file

@ -19,6 +19,7 @@ var RC_tuning;
var AUX_CONFIG;
var AUX_CONFIG_IDS;
var MODE_RANGES;
var MODE_RANGES_EXTRA;
var ADJUSTMENT_RANGES;
var SERVO_CONFIG;
var SERVO_RULES;
@ -166,6 +167,7 @@ var FC = {
AUX_CONFIG_IDS = [];
MODE_RANGES = [];
MODE_RANGES_EXTRA = [];
ADJUSTMENT_RANGES = [];
SERVO_CONFIG = [];

View file

@ -148,6 +148,7 @@ var MSPCodes = {
MSP_SET_COMPASS_CONFIG: 224,
MSP_SET_GPS_RESCUE: 225,
MSP_MODE_RANGES_EXTRA: 238,
MSP_SET_ACC_TRIM: 239,
MSP_ACC_TRIM: 240,
MSP_SERVO_MIX_RULES: 241,

View file

@ -787,6 +787,21 @@ MspHelper.prototype.process_data = function(dataHandler) {
}
break;
case MSPCodes.MSP_MODE_RANGES_EXTRA:
MODE_RANGES_EXTRA = []; // empty the array as new data is coming in
var modeRangeExtraCount = data.readU8();
for (var i = 0; i < modeRangeExtraCount; i++) {
var modeRangeExtra = {
id: data.readU8(),
modeLogic: data.readU8(),
linkedTo: data.readU8()
};
MODE_RANGES_EXTRA.push(modeRangeExtra);
}
break;
case MSPCodes.MSP_ADJUSTMENT_RANGES:
ADJUSTMENT_RANGES = []; // empty the array as new data is coming in
@ -1913,19 +1928,21 @@ MspHelper.prototype.sendModeRanges = function(onCompleteCallback) {
function send_next_mode_range() {
var modeRange = MODE_RANGES[modeRangeIndex];
var modeRangeExtra = MODE_RANGES_EXTRA[modeRangeIndex];
var buffer = [];
buffer.push8(modeRangeIndex)
.push8(modeRange.id)
.push8(modeRange.auxChannelIndex)
.push8((modeRange.range.start - 900) / 25)
.push8((modeRange.range.end - 900) / 25);
.push8((modeRange.range.end - 900) / 25)
.push8(modeRangeExtra.modeLogic)
.push8(modeRangeExtra.linkedTo);
// prepare for next iteration
modeRangeIndex++;
if (modeRangeIndex == MODE_RANGES.length) {
nextFunction = onCompleteCallback;
}
MSP.send_message(MSPCodes.MSP_SET_MODE_RANGE, buffer, false, nextFunction);
}

View file

@ -8,7 +8,12 @@ TABS.auxiliary.initialize = function (callback) {
var prevChannelsValues = null;
function get_mode_ranges() {
MSP.send_message(MSPCodes.MSP_MODE_RANGES, false, false, get_box_ids);
MSP.send_message(MSPCodes.MSP_MODE_RANGES, false, false,
semver.gte(CONFIG.apiVersion, "1.41.0") ? get_mode_ranges_extra : get_box_ids);
}
function get_mode_ranges_extra() {
MSP.send_message(MSPCodes.MSP_MODE_RANGES_EXTRA, false, false, get_box_ids);
}
function get_box_ids() {
@ -45,6 +50,12 @@ TABS.auxiliary.initialize = function (callback) {
$(newMode).find('.name').data('modeElement', newMode);
$(newMode).find('a.addRange').data('modeElement', newMode);
$(newMode).find('a.addLink').data('modeElement', newMode);
// hide link button for ARM
if (modeId == 0) {
$(newMode).find('.addLink').hide();
}
return newMode;
}
@ -70,9 +81,50 @@ TABS.auxiliary.initialize = function (callback) {
}
channelOptionTemplate.val(-1);
var logicList = $(rangeTemplate).find('.logic');
var logicOptionTemplate = $(logicList).find('option');
logicOptionTemplate.remove();
//add logic option(s)
var logicOption = logicOptionTemplate.clone();
logicOption.text(i18n.getMessage('auxiliaryModeLogicOR'));
logicOption.val(0);
logicList.append(logicOption);
if(semver.gte(CONFIG.apiVersion, "1.41.0")){
var logicOption = logicOptionTemplate.clone();
logicOption.text(i18n.getMessage('auxiliaryModeLogicAND'));
logicOption.val(1);
logicList.append(logicOption);
}
logicOptionTemplate.val(0);
}
function addRangeToMode(modeElement, auxChannelIndex, range) {
function configureLinkTemplate() {
var linkTemplate = $('#tab-auxiliary-templates .link');
var linkList = $(linkTemplate).find('.linkedTo');
var linkOptionTemplate = $(linkList).find('option');
linkOptionTemplate.remove();
// set up a blank option in place of ARM
var linkOption = linkOptionTemplate.clone();
linkOption.text("");
linkOption.val(0);
linkList.append(linkOption);
for (var index = 1; index < AUX_CONFIG.length; index++) {
var linkOption = linkOptionTemplate.clone();
linkOption.text(AUX_CONFIG[index]);
linkOption.val(AUX_CONFIG_IDS[index]); // set value to mode id
linkList.append(linkOption);
}
linkOptionTemplate.val(0);
}
function addRangeToMode(modeElement, auxChannelIndex, modeLogic, range) {
var modeIndex = $(modeElement).data('index');
var channel_range = {
@ -87,6 +139,10 @@ TABS.auxiliary.initialize = function (callback) {
var rangeIndex = $(modeElement).find('.range').length;
if (rangeIndex == 0) {
$(modeElement).find('.addLink').hide();
}
var rangeElement = $('#tab-auxiliary-templates .range').clone();
rangeElement.attr('id', 'mode-' + modeIndex + '-range-' + rangeIndex);
modeElement.find('.ranges').append(rangeElement);
@ -115,19 +171,67 @@ TABS.auxiliary.initialize = function (callback) {
});
$(rangeElement).find('.deleteRange').data('rangeElement', rangeElement);
$(rangeElement).find('.deleteRange').data('modeElement', modeElement);
$(rangeElement).find('a.deleteRange').click(function () {
var rangeElement = $(this).data('rangeElement');
var numSiblings = $(rangeElement).parent().children().length - 1;
if (numSiblings == 0) {
var modeElement = $(this).data('modeElement');
var modeId = $(modeElement).data('id');
if (modeId != 0){ // don't show Link for ARM
$(modeElement).find('.addLink').show();
}
}
rangeElement.remove();
});
$(rangeElement).find('.channel').val(auxChannelIndex);
$(rangeElement).find('.logic').val(modeLogic);
}
function addLinkedToMode(modeElement, linkedTo) {
var modeId = $(modeElement).data('id');
var modeIndex = $(modeElement).data('index');
$(modeElement).find('.addRange').hide();
$(modeElement).find('.addLink').hide();
var linkElement = $('#tab-auxiliary-templates .link').clone();
linkElement.attr('id', 'mode-' + modeIndex + '-link');
modeElement.find('.ranges').append(linkElement);
// disable the option associated with this mode
var linkSelect = $(linkElement).find('.linkedTo');
$(linkSelect).find('option[value="' + modeId + '"]').prop('disabled',true);
$(linkElement).find('.deleteLink').data('linkElement', linkElement);
$(linkElement).find('.deleteLink').data('modeElement', modeElement);
$(linkElement).find('a.deleteLink').click(function () {
var linkElement = $(this).data('linkElement');
var modeElement = $(this).data('modeElement');
$(modeElement).find('.addRange').show();
var modeId = $(modeElement).data('id');
if (modeId != 0){ // don't show Link for ARM
$(modeElement).find('.addLink').show();
}
linkElement.remove();
});
$(linkElement).find('.linkedTo').val(linkedTo);
}
function process_html() {
var auxChannelCount = RC.active_channels - 4;
configureRangeTemplate(auxChannelCount);
configureLinkTemplate();
var modeTableBodyElement = $('.tab-auxiliary .modes tbody')
for (var modeIndex = 0; modeIndex < AUX_CONFIG.length; modeIndex++) {
@ -136,28 +240,47 @@ TABS.auxiliary.initialize = function (callback) {
var newMode = createMode(modeIndex, modeId);
modeTableBodyElement.append(newMode);
// generate ranges from the supplied AUX names and MODE_RANGE data
// generate ranges from the supplied AUX names and MODE_RANGES[_EXTRA] data
// skip linked modes for now
for (var modeRangeIndex = 0; modeRangeIndex < MODE_RANGES.length; modeRangeIndex++) {
var modeRange = MODE_RANGES[modeRangeIndex];
if (modeRange.id != modeId) {
var modeRangeExtra = {
id: modeRange.id,
modeLogic: 0,
linkedTo: 0
};
if (semver.gte(apiVersion, "1.41.0")) {
modeRangeExtra = MODE_RANGES_EXTRA[modeRangeIndex];
}
if (modeRange.id != modeId || modeRangeExtra.id != modeId) {
continue;
}
if (modeId == 0 || modeRangeExtra.linkedTo == 0) {
var range = modeRange.range;
if (!(range.start < range.end)) {
continue; // invalid!
}
addRangeToMode(newMode, modeRange.auxChannelIndex, range)
}
addRangeToMode(newMode, modeRange.auxChannelIndex, modeRangeExtra.modeLogic, range)
} else {
addLinkedToMode(newMode, modeRangeExtra.linkedTo);
}
}
}
$('a.addRange').click(function () {
var modeElement = $(this).data('modeElement');
//auto select AUTO option
addRangeToMode(modeElement, -1);
//auto select AUTO option; default to 'OR' logic
addRangeToMode(modeElement, -1, 0);
});
$('a.addLink').click(function () {
var modeElement = $(this).data('modeElement');
addLinkedToMode(modeElement, 0);
});
// translate to user-selected language
@ -172,13 +295,13 @@ TABS.auxiliary.initialize = function (callback) {
var requiredModesRangeCount = MODE_RANGES.length;
MODE_RANGES = [];
MODE_RANGES_EXTRA = [];
$('.tab-auxiliary .modes .mode').each(function () {
var modeElement = $(this);
var modeId = modeElement.data('id');
$(modeElement).find('.range').each(function() {
var rangeValues = $(this).find('.channel-slider').val();
var modeRange = {
id: modeId,
@ -189,6 +312,32 @@ TABS.auxiliary.initialize = function (callback) {
}
};
MODE_RANGES.push(modeRange);
var modeRangeExtra = {
id: modeId,
modeLogic: parseInt($(this).find('.logic').val()),
linkedTo: 0
};
MODE_RANGES_EXTRA.push(modeRangeExtra);
});
$(modeElement).find('.link').each(function() {
var modeRange = {
id: modeId,
auxChannelIndex: 0,
range: {
start: 900,
end: 900
}
};
MODE_RANGES.push(modeRange);
var modeRangeExtra = {
id: modeId,
modeLogic: 0,
linkedTo: parseInt($(this).find('.linkedTo').val())
};
MODE_RANGES_EXTRA.push(modeRangeExtra);
});
});
@ -202,6 +351,13 @@ TABS.auxiliary.initialize = function (callback) {
}
};
MODE_RANGES.push(defaultModeRange);
var defaultModeRangeExtra = {
id: 0,
modeLogic: 0,
linkedTo: 0
};
MODE_RANGES_EXTRA.push(defaultModeRangeExtra);
}
//
@ -247,7 +403,7 @@ TABS.auxiliary.initialize = function (callback) {
let hasUsedMode = false;
for (let i = 0; i < AUX_CONFIG.length; i++) {
let modeElement = $('#mode-' + i);
if (modeElement.find(' .range').length == 0) {
if (modeElement.find(' .range').length == 0 && modeElement.find(' .link').length == 0) {
// if the mode is unused, skip it
modeElement.removeClass('off').removeClass('on');
continue;
@ -264,7 +420,7 @@ TABS.auxiliary.initialize = function (callback) {
let hideUnused = hideUnusedModes && hasUsedMode;
for (let i = 0; i < AUX_CONFIG.length; i++) {
let modeElement = $('#mode-' + i);
if (modeElement.find(' .range').length == 0) {
if (modeElement.find(' .range').length == 0 && modeElement.find(' .link').length == 0) {
modeElement.toggle(!hideUnused);
}
}

View file

@ -35,6 +35,7 @@
<td class="info">
<p class="name"></p>
<div class="buttons">
<a class="addLink" href="#" i18n="auxiliaryAddLink"></a>
<a class="addRange" href="#" i18n="auxiliaryAddRange"></a>
</div>
</td>
@ -44,9 +45,16 @@
</table>
<div class="range">
<div class="channelInfo">
<div class="channelName">
<select class="channel">
<option value=""></option>
</select>
</div>
<div class="channelLogic">
<select class="logic">
<option value=""></option>
</select>
</div>
<div class="limits">
<p class="lowerLimit">
<span i18n="auxiliaryMin"></span>: <span class="lowerLimitValue"></span>
@ -63,4 +71,14 @@
<a class="deleteRange" href="#">&nbsp;</a>
</div>
</div>
<div class="link">
<div class="channelLink">
<select class="linkedTo">
<option value=""></option>
</select>
</div>
<div class="delete">
<a class="deleteLink" href="#">&nbsp;</a>
</div>
</div>
</div>