Added per-profile tuning step, made receiver follow tuning step, made mouse wheel tune frequency (button+wheel to zoom).
This commit is contained in:
@ -31,6 +31,7 @@ var fft_compression = "none";
|
||||
var fft_codec;
|
||||
var waterfall_setup_done = 0;
|
||||
var secondary_fft_size;
|
||||
var tuning_step = 1;
|
||||
|
||||
function updateVolume() {
|
||||
audioEngine.setVolume(parseFloat($("#openwebrx-panel-volume").val()) / 100);
|
||||
@ -268,7 +269,9 @@ function scale_canvas_mousedown(evt) {
|
||||
|
||||
function scale_offset_freq_from_px(x, visible_range) {
|
||||
if (typeof visible_range === "undefined") visible_range = get_visible_freq_range();
|
||||
return (visible_range.start + visible_range.bw * (x / waterfallWidth())) - center_freq;
|
||||
|
||||
var f = (visible_range.start + visible_range.bw * (x / waterfallWidth())) - center_freq;
|
||||
return tuning_step>0? Math.round(f / tuning_step) * tuning_step : f;
|
||||
}
|
||||
|
||||
function scale_canvas_mousemove(evt) {
|
||||
@ -513,11 +516,16 @@ function resize_scale() {
|
||||
|
||||
function canvas_get_freq_offset(relativeX) {
|
||||
var rel = (relativeX / canvas_container.clientWidth);
|
||||
return Math.round((bandwidth * rel) - (bandwidth / 2));
|
||||
var off = (bandwidth * rel) - (bandwidth / 2);
|
||||
|
||||
return tuning_step>0?
|
||||
Math.round(off / tuning_step) * tuning_step : Math.round(off);
|
||||
}
|
||||
|
||||
function canvas_get_frequency(relativeX) {
|
||||
return center_freq + canvas_get_freq_offset(relativeX);
|
||||
var f = center_freq + canvas_get_freq_offset(relativeX);
|
||||
|
||||
return tuning_step>0? Math.round(f / tuning_step) * tuning_step : f;
|
||||
}
|
||||
|
||||
|
||||
@ -535,16 +543,23 @@ function format_frequency(format, freq_hz, pre_divide, decimals) {
|
||||
var canvas_drag = false;
|
||||
var canvas_drag_min_delta = 1;
|
||||
var canvas_mouse_down = false;
|
||||
var canvas_mouse2_down = 0;
|
||||
var canvas_drag_last_x;
|
||||
var canvas_drag_last_y;
|
||||
var canvas_drag_start_x;
|
||||
var canvas_drag_start_y;
|
||||
|
||||
function canvas_mousedown(evt) {
|
||||
canvas_mouse_down = true;
|
||||
canvas_drag = false;
|
||||
canvas_drag_last_x = canvas_drag_start_x = evt.pageX;
|
||||
canvas_drag_last_y = canvas_drag_start_y = evt.pageY;
|
||||
if (evt.button > 0)
|
||||
if (canvas_mouse2_down == 0)
|
||||
canvas_mouse2_down = evt.button;
|
||||
else {
|
||||
canvas_mouse_down = true;
|
||||
canvas_drag = false;
|
||||
canvas_drag_last_x = canvas_drag_start_x = evt.pageX;
|
||||
canvas_drag_last_y = canvas_drag_start_y = evt.pageY;
|
||||
}
|
||||
|
||||
evt.preventDefault(); //don't show text selection mouse pointer
|
||||
}
|
||||
|
||||
@ -581,16 +596,21 @@ function canvas_container_mouseleave() {
|
||||
}
|
||||
|
||||
function canvas_mouseup(evt) {
|
||||
if (!waterfall_setup_done) return;
|
||||
var relativeX = get_relative_x(evt);
|
||||
if (evt.button > 0) {
|
||||
if (evt.button == canvas_mouse2_down)
|
||||
canvas_mouse2_down = 0;
|
||||
} else {
|
||||
if (!waterfall_setup_done) return;
|
||||
var relativeX = get_relative_x(evt);
|
||||
|
||||
if (!canvas_drag) {
|
||||
$('#openwebrx-panel-receiver').demodulatorPanel().getDemodulator().set_offset_frequency(canvas_get_freq_offset(relativeX));
|
||||
if (!canvas_drag) {
|
||||
$('#openwebrx-panel-receiver').demodulatorPanel().getDemodulator().set_offset_frequency(canvas_get_freq_offset(relativeX));
|
||||
}
|
||||
else {
|
||||
canvas_end_drag();
|
||||
}
|
||||
canvas_mouse_down = false;
|
||||
}
|
||||
else {
|
||||
canvas_end_drag();
|
||||
}
|
||||
canvas_mouse_down = false;
|
||||
}
|
||||
|
||||
function canvas_end_drag() {
|
||||
@ -616,14 +636,18 @@ function get_relative_x(evt) {
|
||||
|
||||
function canvas_mousewheel(evt) {
|
||||
if (!waterfall_setup_done) return;
|
||||
|
||||
var delta = -evt.deltaY;
|
||||
// deltaMode 0 means pixels instead of lines
|
||||
if ('deltaMode' in evt && evt.deltaMode === 0) {
|
||||
delta /= 50;
|
||||
}
|
||||
var relativeX = get_relative_x(evt);
|
||||
zoom_step(delta, relativeX, zoom_center_where_calc(evt.pageX));
|
||||
var dir = (evt.deltaY / Math.abs(evt.deltaY)) > 0;
|
||||
|
||||
// Zoom when mouse button down, tune otherwise
|
||||
if (canvas_mouse2_down > 0) {
|
||||
zoom_step(dir, relativeX, zoom_center_where_calc(evt.pageX));
|
||||
} else {
|
||||
var f = $('#openwebrx-panel-receiver').demodulatorPanel().getDemodulator().get_offset_frequency();
|
||||
f += dir? -tuning_step : tuning_step;
|
||||
$('#openwebrx-panel-receiver').demodulatorPanel().getDemodulator().set_offset_frequency(f);
|
||||
}
|
||||
|
||||
evt.preventDefault();
|
||||
}
|
||||
|
||||
@ -783,6 +807,9 @@ function on_ws_recv(evt) {
|
||||
if ('tuning_precision' in config)
|
||||
$('#openwebrx-panel-receiver').demodulatorPanel().setTuningPrecision(config['tuning_precision']);
|
||||
|
||||
if ('tuning_step' in config)
|
||||
tuning_step = config['tuning_step'];
|
||||
|
||||
break;
|
||||
case "secondary_config":
|
||||
var s = json['value'];
|
||||
|
Reference in New Issue
Block a user