1
0
Fork 0
fgdata/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/NearestFrequencies/NearestFrequencies.nas
2018-05-28 20:15:57 +01:00

194 lines
5.5 KiB
Text

# Copyright 2018 Stuart Buchanan
# This file is part of FlightGear.
#
# FlightGear is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# FlightGear is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with FlightGear. If not, see <http://www.gnu.org/licenses/>.
#
# NearestFrequencies
var NearestFrequencies =
{
new : func (mfd, myCanvas, device, svg)
{
var obj = {
parents : [
NearestFrequencies,
MFDPage.new(mfd, myCanvas, device, svg, "NearestFrequencies", "NRST - NEAREST FREQUENCIES")
],
};
var textElements = ["ARTCCName", "ARTCCBRG", "ARTCCDIS", "FSSName", "FSSBRG", "FSSDIS"];
obj.addTextElements(textElements);
obj.artccSelect = PFD.GroupElement.new(
obj.pageName,
svg,
["ARTCCFreq"],
3,
"ARTCCFreq",
0,
);
obj.fssSelect = PFD.GroupElement.new(
obj.pageName,
svg,
["FSSFreq"],
3,
"FSSFreq",
0,
);
obj.wxSelect = PFD.GroupElement.new(
obj.pageName,
svg,
["WXID", "WXType", "WXFreq"],
8,
"WXFreq",
0,
"ScrollTrough",
"ScrollThumb",
(181 - 116)
);
obj.topMenu(device, obj, nil);
obj.setController(fg1000.NearestFrequenciesController.new(obj, svg));
return obj;
},
# Clear any cursor, highlights. Used when exiting from CRSR mode
resetCRSR : func() {
me.artccSelect.hideCRSR();
me.fssSelect.hideCRSR();
me.wxSelect.hideCRSR();
me.resetMenuColors();
},
updateARTCC : func(artcc) {
if (artcc != nil) {
me.setTextElement("ARTCCName", artcc.name);
me.setTextElementBearing("ARTCCBRG", artcc.brg);
me.setTextElementDistance("ARTCCDIS", artcc.dis);
me.artccSelect.setValues(artcc.freqs);
} else {
me.setTextElement("ARTCCName", "");
me.setTextElementBearing("ARTCCBRG", nil);
me.setTextElementDistance("ARTCCDIS", nil);
me.artccSelect.setValues([]);
}
},
updateFSS : func(fss) {
if (fss != nil) {
me.setTextElement("FSSName", fss.name);
me.setTextElementBearing("FSSBRG", fss.brg);
me.setTextElementDistance("FSSDIS", fss.dis);
me.fssSelect.setValues(fss.freqs);
} else {
me.setTextElement("FSSName", "");
me.setTextElementBearing("FSSBRG", nil);
me.setTextElementDistance("FSSDIS", nil);
me.fssSelect.setValues([]);
}
},
updateWX : func(freqs) {
var values = [];
if (freqs != nil) {
foreach (var f; freqs) {
append(values, { WXID: f.id, WXType: f.type, WXFreq: sprintf("%0.03f", f.freq) } );
}
}
me.wxSelect.setValues(values);
},
getSelectedARTCC : func() {
return me.artccSelect.getValue();
},
getSelectedFSS : func() {
return me.fssSelect.getValue();
},
getSelectedWX : func() {
return me.wxSelect.getValue();
},
# Function to highlight the ARTCC softkey - used when CRSR is pressed to indicate
# that we're editing the ARTCC selection.
selectARTCC : func() {
me.resetMenuColors();
var bg_name = sprintf("SoftKey%d-bg",5);
var tname = sprintf("SoftKey%d",5);
me.device.svg.getElementById(bg_name).setColorFill(0.5,0.5,0.5);
me.device.svg.getElementById(tname).setColor(0.0,0.0,0.0);
},
offdisplay : func() {
me._group.setVisible(0);
# The Nearest... pages use the underlying navigation map.
me.mfd.NavigationMap.offdisplayPartial();
me.resetMenuColors();
me.getController().offdisplay();
},
ondisplay : func() {
me._group.setVisible(1);
me.mfd.setPageTitle(me.title);
# The Nearest... pages use the underlying navigation map.
me.mfd.NavigationMap.ondisplayPartial();
me.getController().ondisplay();
},
# Indicate which group is selected by colour of the softkeys
display_toggle : func(device, svg, mi, group) {
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
if (me.getController().getSelectedGroup() == group) {
device.svg.getElementById(bg_name).setColorFill(0.5,0.5,0.5);
svg.setColor(0.0,0.0,0.0);
} else {
device.svg.getElementById(bg_name).setColorFill(0.0,0.0,0.0);
svg.setColor(1.0,1.0,1.0);
}
svg.setText(mi.title);
svg.setVisible(1); # display function
},
topMenu : func(device, pg, menuitem) {
pg.clearMenu();
pg.resetMenuColors();
pg.addMenuItem(0, "ENGINE", pg, pg.mfd.EIS.engineMenu);
pg.addMenuItem(2, "MAP", pg, pg.mfd.NavigationMap.mapMenu);
pg.addMenuItem(5, "ARTCC", pg,
func(dev, pg, mi) { pg.getController().selectARTCC(); device.updateMenus(); }, # callback
func(svg, mi) { pg.display_toggle(device, svg, mi, NearestFrequenciesController.UIGROUP.ARTCC); }
);
pg.addMenuItem(6, "FSS", pg,
func(dev, pg, mi) { pg.getController().selectFSS(); device.updateMenus(); }, # callback
func(svg, mi) { pg.display_toggle(device, svg, mi, NearestFrequenciesController.UIGROUP.FSS); }
);
pg.addMenuItem(7, "WX", pg,
func(dev, pg, mi) { pg.getController().selectWX(); device.updateMenus(); }, # callback
func(svg, mi) { pg.display_toggle(device, svg, mi, NearestFrequenciesController.UIGROUP.WX); }
);
device.updateMenus();
},
};