refactor demodulator classes, part 1
This commit is contained in:
@ -1,61 +1,33 @@
|
||||
var Modes = {
|
||||
modes: [],
|
||||
features: {},
|
||||
panels: [],
|
||||
setModes:function(json){
|
||||
this.modes = json.map(function(m){ return new Mode(m); });
|
||||
this.updateModePanel();
|
||||
this.updatePanels();
|
||||
},
|
||||
getModes:function(){
|
||||
return this.modes;
|
||||
},
|
||||
setFeatures:function(features){
|
||||
this.features = features;
|
||||
this.updateModePanel();
|
||||
this.updatePanels();
|
||||
},
|
||||
findByModulation:function(modulation){
|
||||
matches = this.modes.filter(function(m) { return m.modulation === modulation; });
|
||||
if (matches.length) return matches[0]
|
||||
},
|
||||
updateModePanel:function() {
|
||||
var available = this.modes.filter(function(m){ return m.isAvailable(); });
|
||||
var normalModes = available.filter(function(m){ return m.type === 'analog'; });
|
||||
var digiModes = available.filter(function(m){ return m.type === 'digimode'; });
|
||||
|
||||
var html = []
|
||||
|
||||
var buttons = normalModes.map(function(m){
|
||||
return $(
|
||||
'<div class="openwebrx-button openwebrx-demodulator-button"' +
|
||||
'id="openwebrx-button-' + m.modulation + '"' +
|
||||
'onclick="demodulator_analog_replace(\'' + m.modulation + '\');">' +
|
||||
m.name + '</div>'
|
||||
);
|
||||
registerModePanel: function(el) {
|
||||
this.panels.push(el);
|
||||
},
|
||||
updatePanels: function() {
|
||||
var init_complete = this.modes && this.features;
|
||||
this.panels.forEach(function(p) {
|
||||
p.render();
|
||||
if (init_complete) {
|
||||
p.startDemodulator();
|
||||
}
|
||||
});
|
||||
|
||||
var index = 0;
|
||||
var arrayLength = buttons.length;
|
||||
var chunks = [];
|
||||
|
||||
for (index = 0; index < arrayLength; index += 5) {
|
||||
chunks.push(buttons.slice(index, index + 5));
|
||||
}
|
||||
|
||||
html.push.apply(html, chunks.map(function(chunk){
|
||||
$line = $('<div class="openwebrx-panel-line openwebrx-panel-flex-line"></div>');
|
||||
$line.append.apply($line, chunk);
|
||||
return $line
|
||||
}));
|
||||
|
||||
html.push($(
|
||||
'<div class="openwebrx-panel-line openwebrx-panel-flex-line">' +
|
||||
'<div class="openwebrx-button openwebrx-demodulator-button" id="openwebrx-button-dig" onclick="demodulator_digital_replace_last();">DIG</div>' +
|
||||
'<select id="openwebrx-secondary-demod-listbox" onchange="secondary_demod_listbox_changed();">' +
|
||||
'<option value="none"></option>' +
|
||||
digiModes.map(function(m){
|
||||
return '<option value="' + m.modulation + '">' + m.name + '</option>';
|
||||
}).join('') +
|
||||
'</select>' +
|
||||
'</div>'
|
||||
));
|
||||
|
||||
$("#openwebrx-panel-receiver").find(".openwebrx-modes").html(html);
|
||||
}
|
||||
};
|
||||
|
||||
@ -78,4 +50,4 @@ Mode.prototype.isAvailable = function(){
|
||||
}).reduce(function(a, b){
|
||||
return a && b;
|
||||
}, true);
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user