diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 01b4d2cb..b1f50c1d 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1353,6 +1353,24 @@ "pidTuning_RatesAndExpo": { "message": "Rates & Expo" }, + "pidTuning_RateDynamics": { + "message": "Rate Dynamics" + }, + "pidTuning_RateDynamics_Sensitivity": { + "message": "Sensitivity" + }, + "pidTuning_RateDynamics_Correction": { + "message": "Correction" + }, + "pidTuning_RateDynamics_Weight": { + "message": "Weight" + }, + "pidTuning_RateDynamics_Center": { + "message": "Center" + }, + "pidTuning_RateDynamics_End": { + "message": "End" + }, "pidTuning_RollPitchRate": { "message": "ROLL & PITCH rate" }, diff --git a/js/gui.js b/js/gui.js index 003ebf79..0c506e69 100644 --- a/js/gui.js +++ b/js/gui.js @@ -394,5 +394,89 @@ GUI_control.prototype.renderLogicConditionSelect = function ($container, logicCo $select.val(current).change(onChange); } +GUI_control.prototype.sliderize = function ($input, value, min, max) { + let scaledMax; + let scaledMin; + let scalingThreshold; + + if ($input.data('normal-max')) { + scaledMax = max * 2; + scalingThreshold = Math.round(scaledMax * 0.8); + scaledMin = min *2; + } else { + scaledMax = max; + scaledMin = min; + scalingThreshold = scaledMax; + } + + let $range = $(''); + if ($input.data('step')) { + $range.attr('step', $input.data('step')); + } + $range.css({ + 'display': 'block', + 'flex-grow': 100, + 'margin-left': '1em', + 'margin-right': '1em', + }); + + $input.attr('min', min); + $input.attr('max', max); + $input.val(parseInt(value)); + $input.css({ + 'width': 'auto', + 'min-width': '75px', + }); + + $input.parent().css({ + 'display': 'flex', + 'width': '100%' + }); + $range.insertAfter($input); + + $input.parent().find('.helpicon').css({ + 'top': '5px', + 'left': '-10px' + }); + + /* + * Update slider to input + */ + $range.on('input', function() { + let val = $(this).val(); + let normalMax = parseInt($input.data('normal-max')); + + if (normalMax) { + if (val <= scalingThreshold) { + val = scaleRangeInt(val, scaledMin, scalingThreshold, min, normalMax); + } else { + val = scaleRangeInt(val, scalingThreshold + 1, scaledMax, normalMax + 1, max); + } + } + + $input.val(val); + }); + + $input.on('change', function() { + + let val = $(this).val(); + let newVal; + let normalMax = parseInt($input.data('normal-max')); + if (normalMax) { + if (val <= normalMax) { + newVal = scaleRangeInt(val, min, normalMax, scaledMin, scalingThreshold); + } else { + newVal = scaleRangeInt(val, normalMax + 1, max, scalingThreshold + 1, scaledMax); + } + } else { + newVal = val; + } + + $range.val(newVal); + }); + + $input.trigger('change'); +}; + // initialize object into GUI variable var GUI = new GUI_control(); diff --git a/js/settings.js b/js/settings.js index 5d1199d3..a2985235 100644 --- a/js/settings.js +++ b/js/settings.js @@ -85,88 +85,7 @@ var Settings = (function () { input.attr('maxlength', s.setting.max); } else if (input.data('presentation') == 'range') { - let scaledMax; - let scaledMin; - let scalingThreshold; - - if (input.data('normal-max')) { - scaledMax = s.setting.max * 2; - scalingThreshold = Math.round(scaledMax * 0.8); - scaledMin = s.setting.min *2; - } else { - scaledMax = s.setting.max; - scaledMin = s.setting.min; - scalingThreshold = scaledMax; - } - - - let $range = $(''); - if (input.data('step')) { - $range.attr('step', input.data('step')); - } - $range.css({ - 'display': 'block', - 'flex-grow': 100, - 'margin-left': '1em', - 'margin-right': '1em', - }); - - input.attr('min', s.setting.min); - input.attr('max', s.setting.max); - input.val(parseInt(s.value)); - input.css({ - 'width': 'auto', - 'min-width': '75px', - }); - - input.parent().css({ - 'display': 'flex', - 'width': '100%' - }); - $range.insertAfter(input); - - input.parent().find('.helpicon').css({ - 'top': '5px', - 'left': '-10px' - }); - - /* - * Update slider to input - */ - $range.on('input', function() { - let val = $(this).val(); - let normalMax = parseInt(input.data('normal-max')); - - if (normalMax) { - if (val <= scalingThreshold) { - val = scaleRangeInt(val, scaledMin, scalingThreshold, s.setting.min, normalMax); - } else { - val = scaleRangeInt(val, scalingThreshold + 1, scaledMax, normalMax + 1, s.setting.max); - } - } - - input.val(val); - }); - - input.on('change', function() { - - let val = $(this).val(); - let newVal; - let normalMax = parseInt(input.data('normal-max')); - if (normalMax) { - if (val <= normalMax) { - newVal = scaleRangeInt(val, s.setting.min, normalMax, scaledMin, scalingThreshold); - } else { - newVal = scaleRangeInt(val, normalMax + 1, s.setting.max, scalingThreshold + 1, scaledMax); - } - } else { - newVal = val; - } - - $range.val(newVal); - }); - - input.trigger('change'); + GUI.sliderize(input, s.value, s.setting.min, s.setting.max); } else if (s.setting.type == 'float') { input.attr('type', 'number'); diff --git a/main.css b/main.css index 5cacc0d4..e919e129 100644 --- a/main.css +++ b/main.css @@ -2275,3 +2275,7 @@ ol li { .controlProfileHighlightActive { background-color: #d5ebfe !important ; } + +.no-border { + border: none !important; +} \ No newline at end of file diff --git a/tabs/pid_tuning.html b/tabs/pid_tuning.html index 924afa83..f2aa64fc 100644 --- a/tabs/pid_tuning.html +++ b/tabs/pid_tuning.html @@ -339,6 +339,71 @@ + +
+ + + + + + + + +