Add AirportInfo and template pages for FG1000
570
Aircraft/Instruments-3d/FG1000/Models/AirportInfo.svg
Normal file
|
@ -0,0 +1,570 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1024px"
|
||||||
|
height="768px"
|
||||||
|
viewBox="0 0 1024 768"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="AirportInfo.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#ffffff"
|
||||||
|
borderopacity="0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="7.9999999"
|
||||||
|
inkscape:cx="707.7778"
|
||||||
|
inkscape:cy="620.40408"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="AirportInfoGroup"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="2495"
|
||||||
|
inkscape:window-height="1416"
|
||||||
|
inkscape:window-x="65"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:snap-others="true"
|
||||||
|
inkscape:snap-to-guides="true"
|
||||||
|
inkscape:bbox-paths="false"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-page="true"
|
||||||
|
inkscape:bbox-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4269" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs7962" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7965">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="AirportInfoGroup">
|
||||||
|
<g
|
||||||
|
id="AirportInfoGroup"
|
||||||
|
inkscape:label="#g9755">
|
||||||
|
<rect
|
||||||
|
inkscape:label="#rect8921"
|
||||||
|
y="58.498009"
|
||||||
|
x="699.99799"
|
||||||
|
height="684.50397"
|
||||||
|
width="325.004"
|
||||||
|
id="Background"
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99601555;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="78.177773"
|
||||||
|
x="705.1778"
|
||||||
|
height="239.14445"
|
||||||
|
width="314.64447"
|
||||||
|
id="rect9743"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.3555429;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.07021427;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect9745"
|
||||||
|
width="314.92978"
|
||||||
|
height="148.92981"
|
||||||
|
x="705.0351"
|
||||||
|
y="333.5351" />
|
||||||
|
<rect
|
||||||
|
y="498.64822"
|
||||||
|
x="705.14819"
|
||||||
|
height="218.70358"
|
||||||
|
width="314.70358"
|
||||||
|
id="rect9747"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.29643822;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="67.950417"
|
||||||
|
x="719.95044"
|
||||||
|
height="20.099171"
|
||||||
|
width="64.599167"
|
||||||
|
id="rect9753"
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#fffcfa;stroke-width:0.90082932;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text9749"
|
||||||
|
y="83"
|
||||||
|
x="725"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#fffcfa;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="83"
|
||||||
|
x="725"
|
||||||
|
id="tspan9751"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="-inkscape-font-specification:'Liberation Sans Narrow Condensed';font-family:'Liberation Sans Narrow';font-weight:normal;font-style:normal;font-stretch:condensed;font-variant:normal">AIRPORT</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#fffcfa;stroke-width:0.96605152;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4150"
|
||||||
|
width="74.533928"
|
||||||
|
height="20.033949"
|
||||||
|
x="719.98303"
|
||||||
|
y="322.33655" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#fffcfa;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
x="725"
|
||||||
|
y="337.35352"
|
||||||
|
id="text4152"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4154"
|
||||||
|
x="725"
|
||||||
|
y="337.35352">RUNWAYS</tspan></text>
|
||||||
|
<rect
|
||||||
|
y="489.02939"
|
||||||
|
x="720.05579"
|
||||||
|
height="19.888502"
|
||||||
|
width="99.388496"
|
||||||
|
id="rect4156"
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#fffcfa;stroke-width:1.11149907;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text4158"
|
||||||
|
y="503.97363"
|
||||||
|
x="725"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#fffcfa;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="503.97363"
|
||||||
|
x="725"
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4162">FREQUENCIES</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-rule:nonzero;"
|
||||||
|
x="711.10352"
|
||||||
|
y="111.96484"
|
||||||
|
id="AirportInfoID"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4166"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4168"
|
||||||
|
x="711.10352"
|
||||||
|
y="111.96484">KSFO</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoName"
|
||||||
|
y="143.77148"
|
||||||
|
x="711.10352"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4170"><tspan
|
||||||
|
y="143.77148"
|
||||||
|
x="711.10352"
|
||||||
|
id="tspan4172"
|
||||||
|
sodipodi:role="line">SAN FRANCISCO INTERNATIONAL</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="711.10352"
|
||||||
|
y="175.57812"
|
||||||
|
id="AirportInfoCity"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4174"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4176"
|
||||||
|
x="711.10352"
|
||||||
|
y="175.57812">CITY</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoUsage"
|
||||||
|
y="111.96484"
|
||||||
|
x="896.10352"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4182"><tspan
|
||||||
|
y="111.96484"
|
||||||
|
x="896.10352"
|
||||||
|
id="tspan4184"
|
||||||
|
sodipodi:role="line">PUBLIC</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="711.10352"
|
||||||
|
y="207.38477"
|
||||||
|
id="AirportInfoRegion"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4198"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4200"
|
||||||
|
x="711.10352"
|
||||||
|
y="207.38477">REGION</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoLat"
|
||||||
|
y="239.19141"
|
||||||
|
x="708.73047"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4202"><tspan
|
||||||
|
y="239.19141"
|
||||||
|
x="708.73047"
|
||||||
|
id="tspan4204"
|
||||||
|
sodipodi:role="line">N 39002</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="709.93164"
|
||||||
|
y="270.99805"
|
||||||
|
id="AirportInfoLon"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4216"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4218"
|
||||||
|
x="709.93164"
|
||||||
|
y="270.99805">W 994499</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="946.61133"
|
||||||
|
y="207.89258"
|
||||||
|
id="AirportInfoAlt"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4224"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4226"
|
||||||
|
x="946.61133"
|
||||||
|
y="207.89258">2000ft</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFuel"
|
||||||
|
y="239.19141"
|
||||||
|
x="946.61133"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4228"><tspan
|
||||||
|
y="239.19141"
|
||||||
|
x="946.61133"
|
||||||
|
id="tspan4230"
|
||||||
|
sodipodi:role="line">AVGAS</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoTZ"
|
||||||
|
y="302.80469"
|
||||||
|
x="711.10352"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="302.80469"
|
||||||
|
x="711.10352"
|
||||||
|
id="tspan4234"
|
||||||
|
sodipodi:role="line">UTC-6</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="766.99536"
|
||||||
|
y="368.15952"
|
||||||
|
id="AirportInfoRunway"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4238"
|
||||||
|
x="766.99536"
|
||||||
|
y="368.15952">17-35</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoRwyDimensions"
|
||||||
|
y="401.96484"
|
||||||
|
x="728.33008"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="401.96484"
|
||||||
|
x="728.33008"
|
||||||
|
id="tspan4242"
|
||||||
|
sodipodi:role="line">5000FT x 75FT</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="727.63672"
|
||||||
|
y="435.77017"
|
||||||
|
id="AirportInfoRwySurface"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4246"
|
||||||
|
x="727.63672"
|
||||||
|
y="435.77017">HARD SURFACE</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoRwyLighting"
|
||||||
|
y="469.5755"
|
||||||
|
x="727.63672"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="469.5755"
|
||||||
|
x="727.63672"
|
||||||
|
id="tspan4250"
|
||||||
|
sodipodi:role="line">PCL FREQUENCY - 122.90</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreqLabel1"
|
||||||
|
y="537.80463"
|
||||||
|
x="709.98047"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="537.80463"
|
||||||
|
x="709.98047"
|
||||||
|
id="tspan4254"
|
||||||
|
sodipodi:role="line">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="998.7793"
|
||||||
|
y="537.80463"
|
||||||
|
id="AirportInfoFreq1"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4258"
|
||||||
|
x="998.7793"
|
||||||
|
y="537.80463">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="709.98047"
|
||||||
|
y="562.09033"
|
||||||
|
id="AirportInfoFreqLabel2"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4262"
|
||||||
|
x="709.98047"
|
||||||
|
y="562.09033">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreq2"
|
||||||
|
y="562.09033"
|
||||||
|
x="998.7793"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="562.09033"
|
||||||
|
x="998.7793"
|
||||||
|
id="tspan4266"
|
||||||
|
sodipodi:role="line">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreqLabel3"
|
||||||
|
y="586.3761"
|
||||||
|
x="709.98047"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="586.3761"
|
||||||
|
x="709.98047"
|
||||||
|
id="tspan4270"
|
||||||
|
sodipodi:role="line">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="998.7793"
|
||||||
|
y="586.3761"
|
||||||
|
id="AirportInfoFreq3"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4274"
|
||||||
|
x="998.7793"
|
||||||
|
y="586.3761">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="709.98047"
|
||||||
|
y="610.6618"
|
||||||
|
id="AirportInfoFreqLabel4"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4278"
|
||||||
|
x="709.98047"
|
||||||
|
y="610.6618">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreq4"
|
||||||
|
y="610.6618"
|
||||||
|
x="998.7793"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="610.6618"
|
||||||
|
x="998.7793"
|
||||||
|
id="tspan4282"
|
||||||
|
sodipodi:role="line">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreqLabel6"
|
||||||
|
y="659.23328"
|
||||||
|
x="709.98047"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="659.23328"
|
||||||
|
x="709.98047"
|
||||||
|
id="tspan4286"
|
||||||
|
sodipodi:role="line">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="998.7793"
|
||||||
|
y="659.23328"
|
||||||
|
id="AirportInfoFreq6"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4290"
|
||||||
|
x="998.7793"
|
||||||
|
y="659.23328">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="709.98047"
|
||||||
|
y="634.94751"
|
||||||
|
id="AirportInfoFreqLabel5"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4294"
|
||||||
|
x="709.98047"
|
||||||
|
y="634.94751">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreq5"
|
||||||
|
y="634.94751"
|
||||||
|
x="998.7793"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="634.94751"
|
||||||
|
x="998.7793"
|
||||||
|
id="tspan4298"
|
||||||
|
sodipodi:role="line">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreqLabel7"
|
||||||
|
y="683.51898"
|
||||||
|
x="709.98047"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="683.51898"
|
||||||
|
x="709.98047"
|
||||||
|
id="tspan4302"
|
||||||
|
sodipodi:role="line">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="998.7793"
|
||||||
|
y="683.51898"
|
||||||
|
id="AirportInfoFreq7"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4306"
|
||||||
|
x="998.7793"
|
||||||
|
y="683.51898">119.875</tspan></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text4232"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="710.71289"
|
||||||
|
y="707.80469"
|
||||||
|
id="AirportInfoFreqLabel8"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4310"
|
||||||
|
x="710.71289"
|
||||||
|
y="707.80469">TOWER</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoFreq8"
|
||||||
|
y="707.80469"
|
||||||
|
x="998.7793"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4232"><tspan
|
||||||
|
y="707.80469"
|
||||||
|
x="998.7793"
|
||||||
|
id="tspan4314"
|
||||||
|
sodipodi:role="line">119.875</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#fffcfa;stroke-width:0.96484423;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4216"
|
||||||
|
width="74.343285"
|
||||||
|
height="20.035156"
|
||||||
|
x="625.48242"
|
||||||
|
y="58.956059" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#fffcfa;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="629.48926"
|
||||||
|
y="73.973633"
|
||||||
|
id="text4218"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed'"
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4220"
|
||||||
|
x="629.48926"
|
||||||
|
y="73.973633">NORTH UP</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.88437384px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 734.55781,356.83804 0,9.08226 -4.41338,-4.48437 z"
|
||||||
|
id="RwySelectLeft"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:label="#path4222" />
|
||||||
|
<path
|
||||||
|
inkscape:label="#path4222"
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="RwySelectorRight"
|
||||||
|
d="m 799.96999,356.83804 0,9.08226 4.41338,-4.48437 z"
|
||||||
|
style="fill:#404040;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.88437384px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="722.33594"
|
||||||
|
x="625.48242"
|
||||||
|
height="20.035156"
|
||||||
|
width="74.343285"
|
||||||
|
id="rect4226"
|
||||||
|
style="opacity:1;fill:#1a3030;fill-opacity:1;fill-rule:nonzero;stroke:#fffcfa;stroke-width:0.96484423;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="AirportInfoZoom"
|
||||||
|
y="737.5"
|
||||||
|
x="694.60254"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:#fffcfa;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:label="#text4228"><tspan
|
||||||
|
y="737.5"
|
||||||
|
x="683.33789"
|
||||||
|
id="tspan4231"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:end;text-anchor:end;">2nm</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 32 KiB |
|
@ -23,11 +23,11 @@
|
||||||
borderopacity="0"
|
borderopacity="0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="2.8284271"
|
inkscape:zoom="0.70710678"
|
||||||
inkscape:cx="682.99213"
|
inkscape:cx="558.90157"
|
||||||
inkscape:cy="387.36197"
|
inkscape:cy="71.595861"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="TrafficMapGroup"
|
inkscape:current-layer="layer2"
|
||||||
showgrid="true"
|
showgrid="true"
|
||||||
inkscape:window-width="2495"
|
inkscape:window-width="2495"
|
||||||
inkscape:window-height="1416"
|
inkscape:window-height="1416"
|
||||||
|
@ -150,6 +150,18 @@
|
||||||
d="m 760.00391,55.494139 0,-55.49413968969723 0,0"
|
d="m 760.00391,55.494139 0,-55.49413968969723 0,0"
|
||||||
id="path4085"
|
id="path4085"
|
||||||
inkscape:connector-curvature="0" />
|
inkscape:connector-curvature="0" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="511.67773"
|
||||||
|
y="48"
|
||||||
|
id="PageTitle"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4410"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4412"
|
||||||
|
x="511.67773"
|
||||||
|
y="48">PAGE TITLE</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
transform="translate(-7.0061333e-6,5.5155541e-6)"
|
transform="translate(-7.0061333e-6,5.5155541e-6)"
|
||||||
|
@ -936,249 +948,11 @@
|
||||||
y="714.02405"
|
y="714.02405"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:17.55738258px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow, Condensed';text-align:center;writing-mode:lr-tb;text-anchor:middle">SoftKey0</tspan></text>
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:17.55738258px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow, Condensed';text-align:center;writing-mode:lr-tb;text-anchor:middle">SoftKey0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="NavigationMapGroup"
|
|
||||||
style="display:inline"
|
|
||||||
sodipodi:insensitive="true">
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
id="NavigationMapGroup"
|
|
||||||
inkscape:label="#g6968">
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.00795722;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="rect8420"
|
|
||||||
width="66.992043"
|
|
||||||
height="24.992043"
|
|
||||||
x="957.50397"
|
|
||||||
y="718.50403" />
|
|
||||||
<path
|
|
||||||
style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b6bcbe;stroke-width:0.88936359px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 958.01562,743.02999 0,-24.54969 65.91218,0"
|
|
||||||
id="path5127-6"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:12.03934765px;line-height:0%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow, Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#31ffff;fill-opacity:1;stroke:none"
|
|
||||||
x="1059.5933"
|
|
||||||
y="689.10815"
|
|
||||||
id="RangeDisplay"
|
|
||||||
transform="scale(0.93580798,1.0685953)"
|
|
||||||
inkscape:label="RangeDisplay"
|
|
||||||
sodipodi:linespacing="0%"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan5131-3-5"
|
|
||||||
x="1059.5933"
|
|
||||||
y="689.10815"
|
|
||||||
style="font-size:17.55738258px;line-height:1.25;fill:#31ffff;fill-opacity:1">Zoom nm</tspan></text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="TrafficMapGroup"
|
|
||||||
style="display:inline">
|
|
||||||
<g
|
|
||||||
id="TrafficMapGroup"
|
|
||||||
inkscape:label="#g5736">
|
|
||||||
<rect
|
|
||||||
y="55.255028"
|
|
||||||
x="150.30173"
|
|
||||||
height="24.396557"
|
|
||||||
width="150.39656"
|
|
||||||
id="rect5651"
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.60343951;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
<text
|
|
||||||
inkscape:label="#text5653"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="TrafficMapOpMode"
|
|
||||||
y="74.733582"
|
|
||||||
x="225.72949"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="74.733582"
|
|
||||||
x="225.72949"
|
|
||||||
id="tspan5655"
|
|
||||||
sodipodi:role="line">OPERATING</tspan></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
x="168.63478"
|
|
||||||
y="98.756927"
|
|
||||||
id="text5659"
|
|
||||||
sodipodi:linespacing="125%"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan5661"
|
|
||||||
x="168.63478"
|
|
||||||
y="98.756927">OPERATING</tspan></text>
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.60343951;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="rect5669"
|
|
||||||
width="150.39656"
|
|
||||||
height="24.396557"
|
|
||||||
x="150.30173"
|
|
||||||
y="78.365196" />
|
|
||||||
<text
|
|
||||||
inkscape:label="#text5671"
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
x="225.26074"
|
|
||||||
y="97.84375"
|
|
||||||
id="TrafficMapAltMode"
|
|
||||||
sodipodi:linespacing="125%"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan5673"
|
|
||||||
x="225.26074"
|
|
||||||
y="97.84375">UNRESTRICTED</tspan></text>
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.02346039;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
|
||||||
id="path5680"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="sssss" />
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.01173019;stroke-miterlimit:4;stroke-dasharray:6.07038122, 6.07038122;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
|
||||||
id="circle5682"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="sssss" />
|
|
||||||
<rect
|
|
||||||
y="208.68231"
|
|
||||||
x="849.99188"
|
|
||||||
height="19.582624"
|
|
||||||
width="35.582664"
|
|
||||||
id="rect5690"
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.41737336;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
|
||||||
<text
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="text5692"
|
|
||||||
y="223"
|
|
||||||
x="850"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="223"
|
|
||||||
x="850"
|
|
||||||
id="tspan5694"
|
|
||||||
sodipodi:role="line" /></text>
|
|
||||||
<text
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="text5696"
|
|
||||||
y="223"
|
|
||||||
x="850"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="223"
|
|
||||||
x="850"
|
|
||||||
id="tspan5698"
|
|
||||||
sodipodi:role="line" /></text>
|
|
||||||
<text
|
|
||||||
inkscape:label="#text5700"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="TrafficMapOuterRange"
|
|
||||||
y="223.47363"
|
|
||||||
x="855.03174"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="223.47363"
|
|
||||||
x="855.03174"
|
|
||||||
id="tspan5702"
|
|
||||||
sodipodi:role="line">8NM</tspan></text>
|
|
||||||
<rect
|
|
||||||
y="54"
|
|
||||||
x="567"
|
|
||||||
height="6"
|
|
||||||
width="6"
|
|
||||||
id="rect5704"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="rect5706"
|
|
||||||
width="6"
|
|
||||||
height="6"
|
|
||||||
x="227"
|
|
||||||
y="395" />
|
|
||||||
<rect
|
|
||||||
y="736"
|
|
||||||
x="572"
|
|
||||||
height="6"
|
|
||||||
width="6"
|
|
||||||
id="rect5708"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
|
||||||
<rect
|
|
||||||
y="395"
|
|
||||||
x="915"
|
|
||||||
height="6"
|
|
||||||
width="6"
|
|
||||||
id="rect5710"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
|
||||||
id="circle5712"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="sssss" />
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
|
||||||
id="circle5714"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="sssss" />
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="rect5722"
|
|
||||||
width="6"
|
|
||||||
height="6"
|
|
||||||
x="572"
|
|
||||||
y="281" />
|
|
||||||
<rect
|
|
||||||
y="392.32001"
|
|
||||||
x="460.16"
|
|
||||||
height="6"
|
|
||||||
width="6"
|
|
||||||
id="rect5724"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="rect5726"
|
|
||||||
width="6"
|
|
||||||
height="6"
|
|
||||||
x="572"
|
|
||||||
y="509" />
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="rect5728"
|
|
||||||
width="6"
|
|
||||||
height="6"
|
|
||||||
x="684"
|
|
||||||
y="392" />
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.41737336;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="rect5730"
|
|
||||||
width="35.582664"
|
|
||||||
height="19.582624"
|
|
||||||
x="644.42548"
|
|
||||||
y="318.06219" />
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
x="649.46533"
|
|
||||||
y="332.85352"
|
|
||||||
id="TrafficMapInnerRange"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
inkscape:label="#text5700"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan5734"
|
|
||||||
x="649.46533"
|
|
||||||
y="332.85352">8NM</tspan></text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer2"
|
id="layer2"
|
||||||
inkscape:label="PageGroup"
|
inkscape:label="PageGroup"
|
||||||
style="display:inline"
|
style="display:inline">
|
||||||
sodipodi:insensitive="true">
|
|
||||||
<g
|
<g
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
id="NrstPageGroup"
|
id="NrstPageGroup"
|
||||||
|
@ -1476,7 +1250,7 @@
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
y="653.33002"
|
y="653.33002"
|
||||||
id="AirportInformation"
|
id="AirportInfo"
|
||||||
sodipodi:linespacing="125%"><tspan
|
sodipodi:linespacing="125%"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan5117"
|
id="tspan5117"
|
||||||
|
@ -1485,7 +1259,7 @@
|
||||||
<text
|
<text
|
||||||
inkscape:label="#text5080"
|
inkscape:label="#text5080"
|
||||||
sodipodi:linespacing="125%"
|
sodipodi:linespacing="125%"
|
||||||
id="IntersectionInformation"
|
id="IntersectionInfo"
|
||||||
y="669.46088"
|
y="669.46088"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
@ -1500,7 +1274,7 @@
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
y="685.5918"
|
y="685.5918"
|
||||||
id="NDBInformation"
|
id="NDBInfo"
|
||||||
sodipodi:linespacing="125%"><tspan
|
sodipodi:linespacing="125%"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan5125"
|
id="tspan5125"
|
||||||
|
@ -1509,7 +1283,7 @@
|
||||||
<text
|
<text
|
||||||
inkscape:label="#text5088"
|
inkscape:label="#text5088"
|
||||||
sodipodi:linespacing="125%"
|
sodipodi:linespacing="125%"
|
||||||
id="VORInformation"
|
id="VORInfo"
|
||||||
y="701.72266"
|
y="701.72266"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
@ -1524,7 +1298,7 @@
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
y="717.85352"
|
y="717.85352"
|
||||||
id="UserWPTInformation"
|
id="UserWPTInfo"
|
||||||
sodipodi:linespacing="125%"><tspan
|
sodipodi:linespacing="125%"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan5133"
|
id="tspan5133"
|
||||||
|
@ -1550,7 +1324,7 @@
|
||||||
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<text
|
<text
|
||||||
sodipodi:linespacing="125%"
|
sodipodi:linespacing="125%"
|
||||||
id="NavigationMap"
|
id="NavMap"
|
||||||
y="653.33002"
|
y="653.33002"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
@ -1633,7 +1407,7 @@
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
y="685.68018"
|
y="685.68018"
|
||||||
id="ActiveFlightPlan"
|
id="ActiveFlightPlanWide"
|
||||||
sodipodi:linespacing="125%"><tspan
|
sodipodi:linespacing="125%"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan5217"
|
id="tspan5217"
|
||||||
|
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 78 KiB |
|
@ -24,10 +24,10 @@
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="811.51336"
|
inkscape:cx="157.9725"
|
||||||
inkscape:cy="420.78348"
|
inkscape:cy="250.87866"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer3"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="true"
|
showgrid="true"
|
||||||
inkscape:window-width="2495"
|
inkscape:window-width="2495"
|
||||||
inkscape:window-height="1416"
|
inkscape:window-height="1416"
|
||||||
|
@ -65,8 +65,7 @@
|
||||||
id="layer1"
|
id="layer1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
inkscape:label="Surround"
|
inkscape:label="Surround"
|
||||||
style="display:inline"
|
style="display:inline">
|
||||||
sodipodi:insensitive="true">
|
|
||||||
<g
|
<g
|
||||||
id="Header"
|
id="Header"
|
||||||
inkscape:label="Header"
|
inkscape:label="Header"
|
||||||
|
@ -150,6 +149,18 @@
|
||||||
d="m 760.00391,55.494139 0,-55.49413968969723 0,0"
|
d="m 760.00391,55.494139 0,-55.49413968969723 0,0"
|
||||||
id="path4085"
|
id="path4085"
|
||||||
inkscape:connector-curvature="0" />
|
inkscape:connector-curvature="0" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="511.67773"
|
||||||
|
y="48"
|
||||||
|
id="PageTitle"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text4410"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4412"
|
||||||
|
x="511.67773"
|
||||||
|
y="48">PAGE TITLE</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
transform="translate(-7.0061333e-6,5.5155541e-6)"
|
transform="translate(-7.0061333e-6,5.5155541e-6)"
|
||||||
|
@ -978,8 +989,8 @@
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer4"
|
id="layer4"
|
||||||
inkscape:label="TrafficMapGroup"
|
inkscape:label="TrafficMapGroup"
|
||||||
sodipodi:insensitive="true"
|
style="display:inline"
|
||||||
style="display:inline">
|
sodipodi:insensitive="true">
|
||||||
<g
|
<g
|
||||||
id="TrafficMapGroup"
|
id="TrafficMapGroup"
|
||||||
inkscape:label="#g5736">
|
inkscape:label="#g5736">
|
||||||
|
@ -1032,18 +1043,18 @@
|
||||||
id="tspan5673"
|
id="tspan5673"
|
||||||
x="225.26074"
|
x="225.26074"
|
||||||
y="97.84375">UNRESTRICTED</tspan></text>
|
y="97.84375">UNRESTRICTED</tspan></text>
|
||||||
<circle
|
<path
|
||||||
r="343.98828"
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.02346039;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
cy="398"
|
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
||||||
cx="573.5"
|
|
||||||
id="path5680"
|
id="path5680"
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.02346039;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
inkscape:connector-curvature="0"
|
||||||
<circle
|
sodipodi:nodetypes="sssss" />
|
||||||
r="343.98828"
|
<path
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.01173019;stroke-miterlimit:4;stroke-dasharray:6.07038122, 6.07038122;stroke-dashoffset:0;stroke-opacity:1"
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.01173019;stroke-miterlimit:4;stroke-dasharray:6.07038122, 6.07038122;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
||||||
id="circle5682"
|
id="circle5682"
|
||||||
cx="573.5"
|
inkscape:connector-curvature="0"
|
||||||
cy="398" />
|
sodipodi:nodetypes="sssss" />
|
||||||
<rect
|
<rect
|
||||||
y="208.68231"
|
y="208.68231"
|
||||||
x="849.99188"
|
x="849.99188"
|
||||||
|
@ -1113,18 +1124,18 @@
|
||||||
width="6"
|
width="6"
|
||||||
id="rect5710"
|
id="rect5710"
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
<circle
|
<path
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
||||||
id="circle5712"
|
id="circle5712"
|
||||||
cx="573.83502"
|
inkscape:connector-curvature="0"
|
||||||
cy="398"
|
sodipodi:nodetypes="sssss" />
|
||||||
r="113.51614" />
|
<path
|
||||||
<circle
|
|
||||||
cy="398"
|
|
||||||
cx="573.83502"
|
|
||||||
id="circle5714"
|
|
||||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
r="113.51614" />
|
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
||||||
|
id="circle5714"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssss" />
|
||||||
<rect
|
<rect
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
id="rect5722"
|
id="rect5722"
|
||||||
|
@ -1551,7 +1562,7 @@
|
||||||
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<text
|
<text
|
||||||
sodipodi:linespacing="125%"
|
sodipodi:linespacing="125%"
|
||||||
id="NavigationMap"
|
id="NavMap"
|
||||||
y="653.33002"
|
y="653.33002"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
@ -1634,7 +1645,7 @@
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
x="774.98926"
|
x="774.98926"
|
||||||
y="685.68018"
|
y="685.68018"
|
||||||
id="ActiveFlightPlan"
|
id="ActiveFlightPlanWide"
|
||||||
sodipodi:linespacing="125%"><tspan
|
sodipodi:linespacing="125%"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan5217"
|
id="tspan5217"
|
||||||
|
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 91 KiB |
102
Aircraft/Instruments-3d/FG1000/Models/NavMap.svg
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1024px"
|
||||||
|
height="768px"
|
||||||
|
viewBox="0 0 1024 768"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="NavigationMap.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#ffffff"
|
||||||
|
borderopacity="0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="1071.5"
|
||||||
|
inkscape:cy="370.94504"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer3"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="2495"
|
||||||
|
inkscape:window-height="1416"
|
||||||
|
inkscape:window-x="65"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:snap-others="true"
|
||||||
|
inkscape:snap-to-guides="true"
|
||||||
|
inkscape:bbox-paths="false"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-page="true"
|
||||||
|
inkscape:bbox-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4269" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs7962" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7965">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="NavigationMapGroup"
|
||||||
|
style="display:inline"
|
||||||
|
sodipodi:insensitive="true">
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="NavigationMapGroup"
|
||||||
|
inkscape:label="#g6968">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.00795722;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect8420"
|
||||||
|
width="66.992043"
|
||||||
|
height="24.992043"
|
||||||
|
x="957.50397"
|
||||||
|
y="718.50403" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b6bcbe;stroke-width:0.88936359px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 958.01562,743.02999 0,-24.54969 65.91218,0"
|
||||||
|
id="path5127-6"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:12.03934765px;line-height:0%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow, Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#31ffff;fill-opacity:1;stroke:none"
|
||||||
|
x="1059.5933"
|
||||||
|
y="689.10815"
|
||||||
|
id="RangeDisplay"
|
||||||
|
transform="scale(0.93580798,1.0685953)"
|
||||||
|
inkscape:label="RangeDisplay"
|
||||||
|
sodipodi:linespacing="0%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan5131-3-5"
|
||||||
|
x="1059.5933"
|
||||||
|
y="689.10815"
|
||||||
|
style="font-size:17.55738258px;line-height:1.25;fill:#31ffff;fill-opacity:1">Zoom nm</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
264
Aircraft/Instruments-3d/FG1000/Models/TrafficMap.svg
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1024px"
|
||||||
|
height="768px"
|
||||||
|
viewBox="0 0 1024 768"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="TrafficMap.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#ffffff"
|
||||||
|
borderopacity="0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="4.9725"
|
||||||
|
inkscape:cy="250.87866"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer4"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="2495"
|
||||||
|
inkscape:window-height="1416"
|
||||||
|
inkscape:window-x="65"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:snap-others="true"
|
||||||
|
inkscape:snap-to-guides="true"
|
||||||
|
inkscape:bbox-paths="false"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-page="true"
|
||||||
|
inkscape:bbox-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4269" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs7962" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7965">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="TrafficMapGroup"
|
||||||
|
style="display:inline"
|
||||||
|
sodipodi:insensitive="true">
|
||||||
|
<g
|
||||||
|
id="TrafficMapGroup"
|
||||||
|
inkscape:label="#g5736">
|
||||||
|
<rect
|
||||||
|
y="55.255028"
|
||||||
|
x="150.30173"
|
||||||
|
height="24.396557"
|
||||||
|
width="150.39656"
|
||||||
|
id="rect5651"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.60343951;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
inkscape:label="#text5653"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="TrafficMapOpMode"
|
||||||
|
y="74.733582"
|
||||||
|
x="225.72949"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="74.733582"
|
||||||
|
x="225.72949"
|
||||||
|
id="tspan5655"
|
||||||
|
sodipodi:role="line">OPERATING</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="168.63478"
|
||||||
|
y="98.756927"
|
||||||
|
id="text5659"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan5661"
|
||||||
|
x="168.63478"
|
||||||
|
y="98.756927">OPERATING</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.60343951;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect5669"
|
||||||
|
width="150.39656"
|
||||||
|
height="24.396557"
|
||||||
|
x="150.30173"
|
||||||
|
y="78.365196" />
|
||||||
|
<text
|
||||||
|
inkscape:label="#text5671"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:20px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#80ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="225.26074"
|
||||||
|
y="97.84375"
|
||||||
|
id="TrafficMapAltMode"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan5673"
|
||||||
|
x="225.26074"
|
||||||
|
y="97.84375">UNRESTRICTED</tspan></text>
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.02346039;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
||||||
|
id="path5680"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssss" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.01173019;stroke-miterlimit:4;stroke-dasharray:6.07038122, 6.07038122;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 917.48828,398 C 914.97705,587.96288 763.47948,741.98828 573.5,741.98828 383.52052,741.98828 229.51172,587.97948 229.51172,398 229.51172,208.02052 383.52052,54.011719 573.5,54.011719 763.47948,54.011719 920,208 917.48828,398 Z"
|
||||||
|
id="circle5682"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssss" />
|
||||||
|
<rect
|
||||||
|
y="208.68231"
|
||||||
|
x="849.99188"
|
||||||
|
height="19.582624"
|
||||||
|
width="35.582664"
|
||||||
|
id="rect5690"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.41737336;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text5692"
|
||||||
|
y="223"
|
||||||
|
x="850"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="223"
|
||||||
|
x="850"
|
||||||
|
id="tspan5694"
|
||||||
|
sodipodi:role="line" /></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text5696"
|
||||||
|
y="223"
|
||||||
|
x="850"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="223"
|
||||||
|
x="850"
|
||||||
|
id="tspan5698"
|
||||||
|
sodipodi:role="line" /></text>
|
||||||
|
<text
|
||||||
|
inkscape:label="#text5700"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="TrafficMapOuterRange"
|
||||||
|
y="223.47363"
|
||||||
|
x="855.03174"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
y="223.47363"
|
||||||
|
x="855.03174"
|
||||||
|
id="tspan5702"
|
||||||
|
sodipodi:role="line">8NM</tspan></text>
|
||||||
|
<rect
|
||||||
|
y="54"
|
||||||
|
x="567"
|
||||||
|
height="6"
|
||||||
|
width="6"
|
||||||
|
id="rect5704"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5706"
|
||||||
|
width="6"
|
||||||
|
height="6"
|
||||||
|
x="227"
|
||||||
|
y="395" />
|
||||||
|
<rect
|
||||||
|
y="736"
|
||||||
|
x="572"
|
||||||
|
height="6"
|
||||||
|
width="6"
|
||||||
|
id="rect5708"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="395"
|
||||||
|
x="915"
|
||||||
|
height="6"
|
||||||
|
width="6"
|
||||||
|
id="rect5710"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
||||||
|
id="circle5712"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssss" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 687.35117,398 c -0.64564,62.68991 -50.82291,113.51615 -113.51615,113.51614 -62.69323,0 -113.51614,-50.82291 -113.51614,-113.51614 0,-62.69323 50.82291,-113.51614 113.51614,-113.51614 C 636.52826,284.48385 688,335 687.35117,398 Z"
|
||||||
|
id="circle5714"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssss" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5722"
|
||||||
|
width="6"
|
||||||
|
height="6"
|
||||||
|
x="572"
|
||||||
|
y="281" />
|
||||||
|
<rect
|
||||||
|
y="392.32001"
|
||||||
|
x="460.16"
|
||||||
|
height="6"
|
||||||
|
width="6"
|
||||||
|
id="rect5724"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5726"
|
||||||
|
width="6"
|
||||||
|
height="6"
|
||||||
|
x="572"
|
||||||
|
y="509" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5728"
|
||||||
|
width="6"
|
||||||
|
height="6"
|
||||||
|
x="684"
|
||||||
|
y="392" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.41737336;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5730"
|
||||||
|
width="35.582664"
|
||||||
|
height="19.582624"
|
||||||
|
x="644.42548"
|
||||||
|
y="318.06219" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="649.46533"
|
||||||
|
y="332.85352"
|
||||||
|
id="TrafficMapInnerRange"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
inkscape:label="#text5700"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan5734"
|
||||||
|
x="649.46533"
|
||||||
|
y="332.85352">8NM</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
|
@ -0,0 +1,78 @@
|
||||||
|
# ActiveFlightPlanNarrow
|
||||||
|
var ActiveFlightPlanNarrow =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "FPL - ACTIVE FLIGHT PLAN",
|
||||||
|
_group : myCanvas.createGroup("ActiveFlightPlanNarrowLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("ActiveFlightPlanNarrow", "ActiveFlightPlanNarrowGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.ActiveFlightPlanNarrowStyles.new();
|
||||||
|
obj.Options = fg1000.ActiveFlightPlanNarrowOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.ActiveFlightPlanNarrowController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# ActiveFlightPlanNarrow Controller
|
||||||
|
var ActiveFlightPlanNarrowController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ ActiveFlightPlanNarrowController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# ActiveFlightPlanNarrow Options
|
||||||
|
var ActiveFlightPlanNarrowOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ActiveFlightPlanNarrowOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# ActiveFlightPlanNarrow Styles
|
||||||
|
var ActiveFlightPlanNarrowStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ ActiveFlightPlanNarrowStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# ActiveFlightPlanWide
|
||||||
|
var ActiveFlightPlanWide =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "FPL - ACTIVE FLIGHT PLAN",
|
||||||
|
_group : myCanvas.createGroup("ActiveFlightPlanWideLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("ActiveFlightPlanWide", "ActiveFlightPlanWideGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.ActiveFlightPlanWideStyles.new();
|
||||||
|
obj.Options = fg1000.ActiveFlightPlanWideOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.ActiveFlightPlanWideController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# ActiveFlightPlanWide Controller
|
||||||
|
var ActiveFlightPlanWideController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ ActiveFlightPlanWideController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# ActiveFlightPlanWide Options
|
||||||
|
var ActiveFlightPlanWideOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ActiveFlightPlanWideOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# ActiveFlightPlanWide Styles
|
||||||
|
var ActiveFlightPlanWideStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ ActiveFlightPlanWideStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# AirportApproach
|
||||||
|
var AirportApproach =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - AIRPORT APPROACH INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("AirportApproachLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("AirportApproach", "AirportApproachGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportApproachStyles.new();
|
||||||
|
obj.Options = fg1000.AirportApproachOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportApproachController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# AirportApproach Controller
|
||||||
|
var AirportApproachController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportApproachController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportApproach Options
|
||||||
|
var AirportApproachOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportApproachOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportApproach Styles
|
||||||
|
var AirportApproachStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportApproachStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# AirportArrival
|
||||||
|
var AirportArrival =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - AIRPORT ARRIVAL INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("AirportArrivalLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("AirportArrival", "AirportArrivalGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportArrivalStyles.new();
|
||||||
|
obj.Options = fg1000.AirportArrivalOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportArrivalController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# AirportArrival Controller
|
||||||
|
var AirportArrivalController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportArrivalController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportArrival Options
|
||||||
|
var AirportArrivalOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportArrivalOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportArrival Styles
|
||||||
|
var AirportArrivalStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportArrivalStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# AirportDeparture
|
||||||
|
var AirportDeparture =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - AIRPORT DEPARTURE INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("AirportDepartureLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("AirportDeparture", "AirportDepartureGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportDepartureStyles.new();
|
||||||
|
obj.Options = fg1000.AirportDepartureOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportDepartureController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# AirportDeparture Controller
|
||||||
|
var AirportDepartureController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportDepartureController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportDeparture Options
|
||||||
|
var AirportDepartureOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportDepartureOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportDeparture Styles
|
||||||
|
var AirportDepartureStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportDepartureStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# AirportDirectory
|
||||||
|
var AirportDirectory =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - AIRPORT DIRECTORY",
|
||||||
|
_group : myCanvas.createGroup("AirportDirectoryLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("AirportDirectory", "AirportDirectoryGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportDirectoryStyles.new();
|
||||||
|
obj.Options = fg1000.AirportDirectoryOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportDirectoryController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# AirportDirectory Controller
|
||||||
|
var AirportDirectoryController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportDirectoryController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportDirectory Options
|
||||||
|
var AirportDirectoryOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportDirectoryOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportDirectory Styles
|
||||||
|
var AirportDirectoryStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportDirectoryStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
229
Aircraft/Instruments-3d/FG1000/Nasal/AirportInfo/AirportInfo.nas
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
# AirportInfo
|
||||||
|
var AirportInfo =
|
||||||
|
{
|
||||||
|
SURFACE_TYPES : {
|
||||||
|
1 : "HARD SURFACE", # Asphalt
|
||||||
|
2 : "HARD SURFACE", # Concrete
|
||||||
|
3 : "TURF",
|
||||||
|
4 : "DIRT",
|
||||||
|
5 : "GRAVEL",
|
||||||
|
# Helipads
|
||||||
|
6 : "HARD SURFACE", # Asphalt
|
||||||
|
7 : "HARD SURFACE", # Concrete
|
||||||
|
8 : "TURF",
|
||||||
|
9 : "DIRT",
|
||||||
|
0 : "GRAVEL",
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - AIRPORT INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("AirportInfoLayer"),
|
||||||
|
parents : [ AirportInfo, device.addPage("AirportInfo", "AirportInfoGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportInfoStyles.new();
|
||||||
|
obj.Options = fg1000.AirportInfoOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
# Need to display this underneath the softkeys, EIS, header.
|
||||||
|
obj._group.set("z-index", -10.0);
|
||||||
|
obj._group.setVisible(0);
|
||||||
|
|
||||||
|
# Dynamic text elements in the SVG file. In the SVG these have an "AirportInfo" prefix.
|
||||||
|
var textelements = [
|
||||||
|
"ID",
|
||||||
|
"Usage",
|
||||||
|
"Name",
|
||||||
|
"City",
|
||||||
|
"Region",
|
||||||
|
"Alt",
|
||||||
|
"Lat",
|
||||||
|
"Lon",
|
||||||
|
"Fuel",
|
||||||
|
"TZ",
|
||||||
|
"Runway",
|
||||||
|
"RwyDimensions",
|
||||||
|
"RwySurface",
|
||||||
|
"RwyLighting",
|
||||||
|
"FreqLabel1", "Freq1",
|
||||||
|
"FreqLabel2", "Freq2",
|
||||||
|
"FreqLabel3", "Freq3",
|
||||||
|
"FreqLabel4", "Freq4",
|
||||||
|
"FreqLabel5", "Freq5",
|
||||||
|
"FreqLabel6", "Freq6",
|
||||||
|
"FreqLabel7", "Freq7",
|
||||||
|
"FreqLabel8", "Freq8",
|
||||||
|
"Zoom"
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; textelements) {
|
||||||
|
obj.symbols[element] = svg.getElementById("AirportInfo" ~ element);
|
||||||
|
obj.symbols[element].setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
# The Airport Chart
|
||||||
|
obj.AirportChart = obj._group.createChild("map");
|
||||||
|
obj.AirportChart.setController("Static position", "main");
|
||||||
|
var controller = obj.AirportChart.getController();
|
||||||
|
|
||||||
|
# Initialize a range and screen resolution. Setting a range
|
||||||
|
# to 4nm means we pick up a good set of surrounding fixes
|
||||||
|
# We will use the screen range for zooming. If we use range
|
||||||
|
# then as we zoom in the airport center goes out of range
|
||||||
|
# and all the runways disappear.
|
||||||
|
obj.AirportChart.setRange(4.0);
|
||||||
|
obj.AirportChart.setScreenRange(fg1000.MAP_PARTIAL.HEIGHT);
|
||||||
|
obj.AirportChart.setTranslation(
|
||||||
|
fg1000.MAP_PARTIAL.CENTER.X,
|
||||||
|
fg1000.MAP_PARTIAL.CENTER.Y
|
||||||
|
);
|
||||||
|
|
||||||
|
var r = func(name,vis=1,zindex=nil) return caller(0)[0];
|
||||||
|
foreach(var type; [r('TAXI'),r('RWY')] ) {
|
||||||
|
obj.AirportChart.addLayer(canvas.SymbolLayer,
|
||||||
|
type.name,
|
||||||
|
4,
|
||||||
|
obj.Styles.getStyle(type.name),
|
||||||
|
obj.Options.getOption(type.name),
|
||||||
|
type.vis );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportInfoController.new(obj, svg);
|
||||||
|
|
||||||
|
# Softkey menus
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
me.controller.offdisplay();
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
me.controller.ondisplay();
|
||||||
|
},
|
||||||
|
displayAirport : func(apt_info) {
|
||||||
|
# Display a given airport
|
||||||
|
me.AirportChart.getController().setPosition(apt_info.lat,apt_info.lon);
|
||||||
|
me.symbols["ID"].setText(apt_info.id);
|
||||||
|
me.symbols["Usage"].setText("PUBLIC");
|
||||||
|
me.symbols["Name"].setText(string.uc(apt_info.name));
|
||||||
|
me.symbols["City"].setText("CITY");
|
||||||
|
me.symbols["Region"].setText("REGION");
|
||||||
|
me.symbols["Alt"].setText(sprintf("%ift", 3.28 * apt_info.elevation));
|
||||||
|
|
||||||
|
if (apt_info.lat < 0.0) {
|
||||||
|
me.symbols["Lat"].setText(sprintf("S %.4f", -apt_info.lat));
|
||||||
|
} else {
|
||||||
|
me.symbols["Lat"].setText(sprintf("N %.4f", apt_info.lat));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apt_info.lon < 0.0) {
|
||||||
|
me.symbols["Lon"].setText(sprintf("W%3.4f", -apt_info.lon));
|
||||||
|
} else {
|
||||||
|
me.symbols["Lon"].setText(sprintf("E%3.4f", apt_info.lon));
|
||||||
|
}
|
||||||
|
|
||||||
|
me.symbols["Fuel"].setText("AVGAS");
|
||||||
|
me.symbols["TZ"].setText("UTC-6");
|
||||||
|
|
||||||
|
# Display the comms frequencies for this airport
|
||||||
|
var fcount = 1;
|
||||||
|
|
||||||
|
if (size(apt_info.comms()) > 0) {
|
||||||
|
# Airport has one or more frequencies assigned to it.
|
||||||
|
var freqs = {};
|
||||||
|
var comms = apt_info.comms();
|
||||||
|
|
||||||
|
foreach (var c; comms) {
|
||||||
|
freqs[c.ident] = sprintf("%.3f", c.frequency);;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var c; sort(keys(freqs), string.icmp)) {
|
||||||
|
me.symbols["FreqLabel" ~ fcount].setText(c);
|
||||||
|
me.symbols["Freq" ~ fcount].setText(freqs[c]);
|
||||||
|
fcount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fcount < 9) {
|
||||||
|
# zero remaining comms channels
|
||||||
|
me.symbols["FreqLabel" ~ fcount].setText("");
|
||||||
|
me.symbols["Freq" ~ fcount].setText("");
|
||||||
|
fcount += 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
displayRunway : func(rwy_info) {
|
||||||
|
var lbl = rwy_info.id ~ "-" ~ rwy_info.reciprocal.id;
|
||||||
|
me.symbols["Runway"].setText(lbl);
|
||||||
|
|
||||||
|
var dim = sprintf("%ift x %ift", 3.28 * rwy_info.length, 3.28 * rwy_info.width);
|
||||||
|
me.symbols["RwyDimensions"].setText(dim);
|
||||||
|
|
||||||
|
me.symbols["RwySurface"].setText(me.SURFACE_TYPES[rwy_info.surface]);
|
||||||
|
#me.symbols["RwyLighting"].setText(rwy_info.surface);
|
||||||
|
},
|
||||||
|
setZoom : func(zoom, label) {
|
||||||
|
# Set the zoom level for the airport chart display
|
||||||
|
me.AirportChart.setScreenRange(zoom);
|
||||||
|
me.symbols["Zoom"].setText(label);
|
||||||
|
},
|
||||||
|
highlightElement : func(element) {
|
||||||
|
var sym = me.symbols[element];
|
||||||
|
sym.setDrawMode(canvas.Text.TEXT + canvas.Text.FILLEDBOUNDINGBOX);
|
||||||
|
sym.setColorFill(fg1000.HIGHLIGHT_COLOR);
|
||||||
|
sym.setColor(fg1000.HIGHLIGHT_TEXT_COLOR);
|
||||||
|
},
|
||||||
|
unhighlightElement : func(element) {
|
||||||
|
var sym = me.symbols[element];
|
||||||
|
sym.setDrawMode(canvas.Text.TEXT);
|
||||||
|
sym.setColor(fg1000.NORMAL_TEXT_COLOR);
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,212 @@
|
||||||
|
# AirportInfo Controller
|
||||||
|
var AirportInfoController =
|
||||||
|
{
|
||||||
|
# Vertical ranges, and labels.
|
||||||
|
# Unlike some other map displays, we keep the range constant at 4nm an change
|
||||||
|
# the ScreenRange to zoom in. Otherwise as we zoom in, the center of the
|
||||||
|
# runways moves out of the range of the display and they are not drawn.
|
||||||
|
# Ranges are scaled to the display height with range 1 displaying 4nm vertically.
|
||||||
|
# 2000nm = 12,152,000ft.
|
||||||
|
RANGES : [{range: 4/500/6076.12, label: "500ft"},
|
||||||
|
{range: 4/750/6076.12, label: "750ft"},
|
||||||
|
{range: 4/1000/6076.12, label: "1000ft"},
|
||||||
|
{range: 4/1500/6076.12, label: "1500ft"},
|
||||||
|
{range: 4/2000/6076.12, label: "2000ft"},
|
||||||
|
{range: 8, label: "0.5nm"},
|
||||||
|
{range: 5.33, label: "0.75nm"},
|
||||||
|
{range: 4, label: "1nm"},
|
||||||
|
{range: 2, label: "2nm"},
|
||||||
|
{range: 1.33, label: "3nm"},
|
||||||
|
{range: 1, label: "4nm"},
|
||||||
|
{range: 0.66, label: "6nm"},
|
||||||
|
{range: 0.5, label: "8nm"},
|
||||||
|
{range: 0.4, label: "10nm"} ],
|
||||||
|
|
||||||
|
CRSR_ELEMENTS : [
|
||||||
|
"ID",
|
||||||
|
"Name",
|
||||||
|
"Runway",
|
||||||
|
"Freq1",
|
||||||
|
"Freq2",
|
||||||
|
"Freq3",
|
||||||
|
"Freq4",
|
||||||
|
"Freq5",
|
||||||
|
"Freq6",
|
||||||
|
"Freq7",
|
||||||
|
"Freq8",
|
||||||
|
],
|
||||||
|
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportInfoController ] };
|
||||||
|
obj.airport = "";
|
||||||
|
obj.runway = "";
|
||||||
|
obj.runway_index = -1;
|
||||||
|
obj.info = nil;
|
||||||
|
obj.page = page;
|
||||||
|
obj.crsr_toggle = 0;
|
||||||
|
obj.crsrIdx = 0;
|
||||||
|
obj.current_zoom = 7;
|
||||||
|
obj.current_id_entry = "";
|
||||||
|
|
||||||
|
|
||||||
|
# Emesary
|
||||||
|
obj._recipient = nil;
|
||||||
|
|
||||||
|
# Initial airport is our current location.
|
||||||
|
var current_apt = airportinfo("airport");
|
||||||
|
obj.setAirport(current_apt.id);
|
||||||
|
obj.setZoom(7);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
setAirport : func(id)
|
||||||
|
{
|
||||||
|
if (id == me.airport) return;
|
||||||
|
me.airport = id;
|
||||||
|
me.info= airportinfo(id);
|
||||||
|
me.page.displayAirport(me.info);
|
||||||
|
|
||||||
|
# Display the first runway.
|
||||||
|
me.setRunway(0);
|
||||||
|
},
|
||||||
|
setRunway : func(runway_index)
|
||||||
|
{
|
||||||
|
if (runway_index == me.runway_index) return;
|
||||||
|
var rwys = keys(me.info.runways);
|
||||||
|
if (runway_index < 0) runway_index = 0;
|
||||||
|
if (runway_index > (size(rwys) - 1)) runway_index = size(rwys) - 1;
|
||||||
|
me.runway_index = runway_index;
|
||||||
|
me.page.displayRunway(me.info.runways[rwys[runway_index]]);
|
||||||
|
},
|
||||||
|
incrRunway : func(value)
|
||||||
|
{
|
||||||
|
var incr_or_decr = (value > 0) ? 1 : -1;
|
||||||
|
me.setRunway(me.runway_index + incr_or_decr);
|
||||||
|
},
|
||||||
|
|
||||||
|
# Control functions for Input
|
||||||
|
incrAirportID : func(value)
|
||||||
|
{
|
||||||
|
var incr_or_decr = (value > 0) ? 1 : -1;
|
||||||
|
if (me.current_id_entry == "") {
|
||||||
|
me.current_id_entry = "A";
|
||||||
|
} else {
|
||||||
|
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
var fixed = substr(me.current_id_entry, 0, size(current_id_entry) - 2);
|
||||||
|
var lastchar = substr(me.current_id_entry, -1);
|
||||||
|
var char = math.mod(find(lastchar, alphabet) + incr_or_decr, 26);
|
||||||
|
var nextchar = substr(alphabet, char, 1);
|
||||||
|
me.current_id_entry = fixed + nextchar;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
zoomIn : func() {
|
||||||
|
me.setZoom(me.current_zoom -1);
|
||||||
|
},
|
||||||
|
zoomOut : func() {
|
||||||
|
me.setZoom(me.current_zoom +1);
|
||||||
|
},
|
||||||
|
zoom : func(val)
|
||||||
|
{
|
||||||
|
var incr_or_decr = (val > 0) ? 1 : -1;
|
||||||
|
me.setZoom(me.current_zoom + incr_or_decr);
|
||||||
|
},
|
||||||
|
setZoom : func(zoom) {
|
||||||
|
if ((zoom < 0) or (zoom > (size(me.RANGES) - 1))) return;
|
||||||
|
me.current_zoom = zoom;
|
||||||
|
me.page.setZoom(me.RANGES[zoom].range * fg1000.MAP_PARTIAL.HEIGHT, me.RANGES[zoom].label);
|
||||||
|
},
|
||||||
|
showCRSR : func() {
|
||||||
|
me.page.highlightElement(me.CRSR_ELEMENTS[me.crsrIdx]);
|
||||||
|
},
|
||||||
|
hideCRSR : func() {
|
||||||
|
me.page.unhighlightElement(me.CRSR_ELEMENTS[me.crsrIdx]);
|
||||||
|
me.crsrIdx = 0;
|
||||||
|
},
|
||||||
|
moveCRSR : func(val) {
|
||||||
|
var incr_or_decr = (val > 0) ? 1 : -1;
|
||||||
|
|
||||||
|
me.page.unhighlightElement(me.CRSR_ELEMENTS[me.crsrIdx]);
|
||||||
|
me.crsrIdx = math.mod(me.crsrIdx + incr_or_decr, size(me.CRSR_ELEMENTS) -1);
|
||||||
|
me.page.highlightElement(me.CRSR_ELEMENTS[me.crsrIdx]);
|
||||||
|
},
|
||||||
|
handleCRSR : func() {
|
||||||
|
me.crsr_toggle = (! me.crsr_toggle);
|
||||||
|
print("CRSR pressed " ~ me.crsr_toggle);
|
||||||
|
if (me.crsr_toggle) {
|
||||||
|
me.showCRSR();
|
||||||
|
} else {
|
||||||
|
me.hideCRSR();
|
||||||
|
}
|
||||||
|
return emesary.Transmitter.ReceiptStatus_Finished;
|
||||||
|
},
|
||||||
|
handleFMSInner : func(value) {
|
||||||
|
if (me.crsr_toggle == 1) {
|
||||||
|
print("FMSInner for AirportInfoController called " ~ me.crsr_toggle);
|
||||||
|
if (me.CRSR_ELEMENTS[me.crsrIdx] == "Runway") {
|
||||||
|
me.incrRunway(value);
|
||||||
|
}
|
||||||
|
if (me.CRSR_ELEMENTS[me.crsrIdx] == "ID") {
|
||||||
|
me.incrAirportID(value);
|
||||||
|
}
|
||||||
|
return emesary.Transmitter.ReceiptStatus_Finished;
|
||||||
|
} else {
|
||||||
|
return me.page.mfd._pageGroupController.handleFMSInner(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleFMSOuter : func(value) {
|
||||||
|
if (me.crsr_toggle == 1) {
|
||||||
|
print("FMSOuter for AirportInfoController called " ~ me.crsr_toggle);
|
||||||
|
me.moveCRSR(value);
|
||||||
|
return emesary.Transmitter.ReceiptStatus_Finished;
|
||||||
|
} else {
|
||||||
|
return me.page.mfd._pageGroupController.handleFMSOuter(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
RegisterWithEmesary : func(transmitter = nil){
|
||||||
|
if (transmitter == nil)
|
||||||
|
transmitter = emesary.GlobalTransmitter;
|
||||||
|
|
||||||
|
if (me._recipient == nil){
|
||||||
|
me._recipient = emesary.Recipient.new("AirportInfoController_" ~ me.page.device.designation);
|
||||||
|
var pfd_obj = me.page.device;
|
||||||
|
var controller = me;
|
||||||
|
me._recipient.Receive = func(notification)
|
||||||
|
{
|
||||||
|
if (notification.Device_Id == pfd_obj.device_id
|
||||||
|
and notification.NotificationType == notifications.PFDEventNotification.DefaultType) {
|
||||||
|
if (notification.Event_Id == notifications.PFDEventNotification.HardKeyPushed
|
||||||
|
and notification.EventParameter != nil)
|
||||||
|
{
|
||||||
|
var id = notification.EventParameter.Id;
|
||||||
|
var value = notification.EventParameter.Value;
|
||||||
|
#printf("Button pressed " ~ id ~ " " ~ value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.FMS_CRSR) return controller.handleCRSR();
|
||||||
|
if (id == fg1000.MFD.FASCIA.FMS_OUTER) return controller.handleFMSOuter(value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.FMS_INNER) return controller.handleFMSInner(value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.RANGE) return controller.zoom(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return emesary.Transmitter.ReceiptStatus_NotProcessed;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
transmitter.Register(me._recipient);
|
||||||
|
me.transmitter = transmitter;
|
||||||
|
},
|
||||||
|
DeRegisterWithEmesary : func(transmitter = nil){
|
||||||
|
# remove registration from transmitter; but keep the recipient once it is created.
|
||||||
|
if (me.transmitter != nil)
|
||||||
|
me.transmitter.DeRegister(me._recipient);
|
||||||
|
me.transmitter = nil;
|
||||||
|
},
|
||||||
|
|
||||||
|
# Reset controller if required when the page is displayed or hidden
|
||||||
|
ondisplay : func() {
|
||||||
|
me.RegisterWithEmesary();
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me.DeRegisterWithEmesary();
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportInfo Options
|
||||||
|
var AirportInfoOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportInfoOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportInfo Styles
|
||||||
|
var AirportInfoStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportInfoStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# AirportWeather
|
||||||
|
var AirportWeather =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - WEATHER INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("AirportWeatherLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("AirportWeather", "AirportWeatherGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.AirportWeatherStyles.new();
|
||||||
|
obj.Options = fg1000.AirportWeatherOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.AirportWeatherController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# AirportWeather Controller
|
||||||
|
var AirportWeatherController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ AirportWeatherController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportWeather Options
|
||||||
|
var AirportWeatherOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [AirportWeatherOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AirportWeather Styles
|
||||||
|
var AirportWeatherStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ AirportWeatherStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Checklist1
|
||||||
|
var Checklist1 =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "LST - CHECKLIST 1",
|
||||||
|
_group : myCanvas.createGroup("Checklist1Layer"),
|
||||||
|
parents : [ NavMap, device.addPage("Checklist1", "Checklist1Group") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.Checklist1Styles.new();
|
||||||
|
obj.Options = fg1000.Checklist1Options.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.Checklist1Controller.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Checklist1 Controller
|
||||||
|
var Checklist1Controller =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ Checklist1Controller ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist1 Options
|
||||||
|
var Checklist1Options =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [Checklist1Options] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist1 Styles
|
||||||
|
var Checklist1Styles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ Checklist1Styles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Checklist2
|
||||||
|
var Checklist2 =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "LST - CHECKLIST 2",
|
||||||
|
_group : myCanvas.createGroup("Checklist2Layer"),
|
||||||
|
parents : [ NavMap, device.addPage("Checklist2", "Checklist2Group") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.Checklist2Styles.new();
|
||||||
|
obj.Options = fg1000.Checklist2Options.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.Checklist2Controller.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Checklist2 Controller
|
||||||
|
var Checklist2Controller =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ Checklist2Controller ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist2 Options
|
||||||
|
var Checklist2Options =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [Checklist2Options] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist2 Styles
|
||||||
|
var Checklist2Styles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ Checklist2Styles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Checklist3
|
||||||
|
var Checklist3 =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "LST - CHECKLIST 3",
|
||||||
|
_group : myCanvas.createGroup("Checklist3Layer"),
|
||||||
|
parents : [ NavMap, device.addPage("Checklist3", "Checklist3Group") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.Checklist3Styles.new();
|
||||||
|
obj.Options = fg1000.Checklist3Options.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.Checklist3Controller.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Checklist3 Controller
|
||||||
|
var Checklist3Controller =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ Checklist3Controller ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist3 Options
|
||||||
|
var Checklist3Options =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [Checklist3Options] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist3 Styles
|
||||||
|
var Checklist3Styles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ Checklist3Styles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Checklist4
|
||||||
|
var Checklist4 =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "LST - CHECKLIST 4",
|
||||||
|
_group : myCanvas.createGroup("Checklist4Layer"),
|
||||||
|
parents : [ NavMap, device.addPage("Checklist4", "Checklist4Group") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.Checklist4Styles.new();
|
||||||
|
obj.Options = fg1000.Checklist4Options.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.Checklist4Controller.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Checklist4 Controller
|
||||||
|
var Checklist4Controller =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ Checklist4Controller ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist4 Options
|
||||||
|
var Checklist4Options =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [Checklist4Options] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist4 Styles
|
||||||
|
var Checklist4Styles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ Checklist4Styles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Checklist5
|
||||||
|
var Checklist5 =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "LST - CHECKLIST 5",
|
||||||
|
_group : myCanvas.createGroup("Checklist5Layer"),
|
||||||
|
parents : [ NavMap, device.addPage("Checklist5", "Checklist5Group") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.Checklist5Styles.new();
|
||||||
|
obj.Options = fg1000.Checklist5Options.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.Checklist5Controller.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Checklist5 Controller
|
||||||
|
var Checklist5Controller =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ Checklist5Controller ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist5 Options
|
||||||
|
var Checklist5Options =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [Checklist5Options] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Checklist5 Styles
|
||||||
|
var Checklist5Styles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ Checklist5Styles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# FlightPlanCatalog
|
||||||
|
var FlightPlanCatalog =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "FPL - FLIGHT PLAN CATALOG",
|
||||||
|
_group : myCanvas.createGroup("FlightPlanCatalogLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("FlightPlanCatalog", "FlightPlanCatalogGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.FlightPlanCatalogStyles.new();
|
||||||
|
obj.Options = fg1000.FlightPlanCatalogOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.FlightPlanCatalogController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# FlightPlanCatalog Controller
|
||||||
|
var FlightPlanCatalogController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ FlightPlanCatalogController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# FlightPlanCatalog Options
|
||||||
|
var FlightPlanCatalogOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [FlightPlanCatalogOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# FlightPlanCatalog Styles
|
||||||
|
var FlightPlanCatalogStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ FlightPlanCatalogStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
78
Aircraft/Instruments-3d/FG1000/Nasal/GPSStatus/GPSStatus.nas
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
# GPSStatus
|
||||||
|
var GPSStatus =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "AUX - GPS STATUS",
|
||||||
|
_group : myCanvas.createGroup("GPSStatusLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("GPSStatus", "GPSStatusGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.GPSStatusStyles.new();
|
||||||
|
obj.Options = fg1000.GPSStatusOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.GPSStatusController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# GPSStatus Controller
|
||||||
|
var GPSStatusController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ GPSStatusController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# GPSStatus Options
|
||||||
|
var GPSStatusOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [GPSStatusOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# GPSStatus Styles
|
||||||
|
var GPSStatusStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ GPSStatusStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# IntersectionInfo
|
||||||
|
var IntersectionInfo =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - INTERSECTION INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("IntersectionInfoLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("IntersectionInfo", "IntersectionInfoGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.IntersectionInfoStyles.new();
|
||||||
|
obj.Options = fg1000.IntersectionInfoOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.IntersectionInfoController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# IntersectionInfo Controller
|
||||||
|
var IntersectionInfoController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ IntersectionInfoController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# IntersectionInfo Options
|
||||||
|
var IntersectionInfoOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [IntersectionInfoOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# IntersectionInfo Styles
|
||||||
|
var IntersectionInfoStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ IntersectionInfoStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -1,48 +1,143 @@
|
||||||
# FG1000 MFD
|
# FG1000 MFD
|
||||||
|
|
||||||
var nasal_dir = getprop("/sim/fg-root") ~ "/Aircraft/Instruments-3d/FG1000/Nasal/";
|
var nasal_dir = getprop("/sim/fg-root") ~ "/Aircraft/Instruments-3d/FG1000/Nasal/";
|
||||||
io.load_nasal(nasal_dir ~ 'NavMap/NavMap.nas', "fg1000");
|
|
||||||
io.load_nasal(nasal_dir ~ 'NavMap/NavMapStyles.nas', "fg1000");
|
|
||||||
io.load_nasal(nasal_dir ~ 'NavMap/NavMapOptions.nas', "fg1000");
|
|
||||||
io.load_nasal(nasal_dir ~ 'NavMap/NavMapController.nas', "fg1000");
|
|
||||||
|
|
||||||
io.load_nasal(nasal_dir ~ 'TrafficMap/TrafficMap.nas', "fg1000");
|
var MFDPages = [
|
||||||
io.load_nasal(nasal_dir ~ 'TrafficMap/TrafficMapStyles.nas', "fg1000");
|
"NavMap",
|
||||||
io.load_nasal(nasal_dir ~ 'TrafficMap/TrafficMapOptions.nas', "fg1000");
|
"TrafficMap",
|
||||||
io.load_nasal(nasal_dir ~ 'TrafficMap/TrafficMapController.nas', "fg1000");
|
"Stormscope",
|
||||||
|
"WeatherDataLink",
|
||||||
|
"TAWS",
|
||||||
|
"AirportInfo",
|
||||||
|
"AirportDirectory",
|
||||||
|
"AirportDeparture",
|
||||||
|
"AirportArrival",
|
||||||
|
"AirportApproach",
|
||||||
|
"AirportWeather",
|
||||||
|
"IntersectionInfo",
|
||||||
|
"NDBInfo",
|
||||||
|
"VORInfo",
|
||||||
|
"UserWPTInfo",
|
||||||
|
"TripPlanning",
|
||||||
|
"Utility",
|
||||||
|
"GPSStatus",
|
||||||
|
"XMRadio",
|
||||||
|
"XMInfo",
|
||||||
|
"SystemStatus",
|
||||||
|
"ActiveFlightPlanWide",
|
||||||
|
"ActiveFlightPlanNarrow",
|
||||||
|
"FlightPlanCatalog",
|
||||||
|
"StoredFlightPlan",
|
||||||
|
"Checklist1",
|
||||||
|
"Checklist2",
|
||||||
|
"Checklist3",
|
||||||
|
"Checklist4",
|
||||||
|
"Checklist5",
|
||||||
|
"NearestAirports",
|
||||||
|
"NearestIntersections",
|
||||||
|
"NearestNDB",
|
||||||
|
"NearestVOR",
|
||||||
|
"NearestUserWPT",
|
||||||
|
"NearestFrequencies",
|
||||||
|
"NearestAirspaces"
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var page; MFDPages) {
|
||||||
|
io.load_nasal(nasal_dir ~ page ~ '/' ~ page ~ '.nas', "fg1000");
|
||||||
|
io.load_nasal(nasal_dir ~ page ~ '/' ~ page ~ 'Styles.nas', "fg1000");
|
||||||
|
io.load_nasal(nasal_dir ~ page ~ '/' ~ page ~ 'Options.nas', "fg1000");
|
||||||
|
io.load_nasal(nasal_dir ~ page ~ '/' ~ page ~ 'Controller.nas', "fg1000");
|
||||||
|
}
|
||||||
|
|
||||||
io.load_nasal(nasal_dir ~ 'EIS.nas', "fg1000");
|
io.load_nasal(nasal_dir ~ 'EIS.nas', "fg1000");
|
||||||
io.load_nasal(nasal_dir ~ 'Drivers/EISDriver.nas', "fg1000");
|
io.load_nasal(nasal_dir ~ 'Drivers/EISDriver.nas', "fg1000");
|
||||||
io.load_nasal(nasal_dir ~ 'PageGroupController.nas', "fg1000");
|
io.load_nasal(nasal_dir ~ 'PageGroupController.nas', "fg1000");
|
||||||
|
|
||||||
|
# Constants to define the display area, for placement of elements. We
|
||||||
|
# could try to do something with a layout, but the position and size of
|
||||||
|
# elements is fixed. Can't be member variables of MFD as they are
|
||||||
|
# self-referential.
|
||||||
|
|
||||||
|
var DISPLAY = { WIDTH : 1024, HEIGHT : 768 };
|
||||||
|
var HEADER_HEIGHT = 56;
|
||||||
|
var FOOTER_HEIGHT = 25;
|
||||||
|
var EIS_WIDTH = 150;
|
||||||
|
|
||||||
|
# Size of data display on the right hand side of the MFD
|
||||||
|
var DATA_DISPLAY = {
|
||||||
|
WIDTH : 300,
|
||||||
|
HEIGHT : DISPLAY.HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT,
|
||||||
|
X : DISPLAY.WIDTH - 300,
|
||||||
|
Y : HEADER_HEIGHT,
|
||||||
|
};
|
||||||
|
|
||||||
|
# Map dimensions when the data display is not present
|
||||||
|
var MAP_FULL = {
|
||||||
|
CENTER : { X : ((DISPLAY.WIDTH - EIS_WIDTH) / 2 + EIS_WIDTH),
|
||||||
|
Y : ((DISPLAY.HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT) / 2 + HEADER_HEIGHT), },
|
||||||
|
X : EIS_WIDTH,
|
||||||
|
Y : HEADER_HEIGHT,
|
||||||
|
WIDTH : DISPLAY.WIDTH - EIS_WIDTH,
|
||||||
|
HEIGHT : DISPLAY.HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT,
|
||||||
|
};
|
||||||
|
|
||||||
|
# Map dimensions when the data display is present
|
||||||
|
var MAP_PARTIAL = {
|
||||||
|
X : EIS_WIDTH,
|
||||||
|
Y : HEADER_HEIGHT,
|
||||||
|
WIDTH : DISPLAY.WIDTH - EIS_WIDTH - DATA_DISPLAY.WIDTH,
|
||||||
|
HEIGHT : DISPLAY.HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT,
|
||||||
|
CENTER : { X : ((DISPLAY.WIDTH - EIS_WIDTH - DATA_DISPLAY.WIDTH) / 2 + EIS_WIDTH),
|
||||||
|
Y : ((DISPLAY.HEIGHT - HEADER_HEIGHT - FOOTER_HEIGHT) / 2 + HEADER_HEIGHT), },
|
||||||
|
};
|
||||||
|
|
||||||
|
var HIGHLIGHT_COLOR = "#80ffff";
|
||||||
|
var HIGHLIGHT_TEXT_COLOR = "#000000";
|
||||||
|
var NORMAL_TEXT_COLOR = "#80ffff";
|
||||||
|
|
||||||
var MFD =
|
var MFD =
|
||||||
{
|
{
|
||||||
# Center of any maps
|
|
||||||
MAP_CENTER : {
|
|
||||||
X: (1024/2 + 60),
|
|
||||||
Y: (768/2 + 20)
|
|
||||||
},
|
|
||||||
|
|
||||||
# Constants for the hard-buttons on the fascia
|
# Constants for the hard-buttons on the fascia
|
||||||
FASCIA : {
|
FASCIA : {
|
||||||
FMS_OUTER : 0,
|
FMS_OUTER : 0,
|
||||||
FMS_INNER : 1,
|
FMS_INNER : 1,
|
||||||
RANGE : 2,
|
RANGE : 2,
|
||||||
|
FMS_CRSR : 3,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new : func (myCanvas)
|
new : func (myCanvas)
|
||||||
{
|
{
|
||||||
var obj = { parents : [ MFD ] };
|
var obj = { parents : [ MFD ] };
|
||||||
|
|
||||||
obj._svg = myCanvas.createGroup("softkeys");
|
obj._svg = myCanvas.createGroup("softkeys");
|
||||||
canvas.parsesvg(obj._svg, '/Aircraft/Instruments-3d/FG1000/Models/MFD.svg');
|
|
||||||
|
var fontmapper = func (family, weight) {
|
||||||
|
#if( family == "Liberation Sans" and weight == "narrow" ) {
|
||||||
|
return "LiberationFonts/LiberationSansNarrow-Regular.ttf";
|
||||||
|
#}
|
||||||
|
# If we don't return anything the default font is used
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var page; MFDPages) {
|
||||||
|
var svg_file ='/Aircraft/Instruments-3d/FG1000/Models/' ~ page ~ '.svg';
|
||||||
|
if (resolvepath(svg_file) != "") {
|
||||||
|
# Load an SVG file if available.
|
||||||
|
canvas.parsesvg(obj._svg,
|
||||||
|
svg_file,
|
||||||
|
{'font-mapper': fontmapper});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.parsesvg(obj._svg,
|
||||||
|
'/Aircraft/Instruments-3d/FG1000/Models/MFD.svg',
|
||||||
|
{'font-mapper': fontmapper});
|
||||||
|
|
||||||
obj._MFDDevice = canvas.PFD_Device.new(obj._svg, 12, "SoftKey", myCanvas, "MFD");
|
obj._MFDDevice = canvas.PFD_Device.new(obj._svg, 12, "SoftKey", myCanvas, "MFD");
|
||||||
obj._MFDDevice.RegisterWithEmesary();
|
obj._MFDDevice.RegisterWithEmesary();
|
||||||
|
|
||||||
|
# Surround dynamic elements
|
||||||
|
obj._pageTitle = obj._svg.getElementById("PageTitle");
|
||||||
|
|
||||||
# Engine Information System
|
# Engine Information System
|
||||||
obj._eisDriver = fg1000.EISDriver.new();
|
obj._eisDriver = fg1000.EISDriver.new();
|
||||||
obj._eis = fg1000.EIS.new(myCanvas, obj._eisDriver);
|
obj._eis = fg1000.EIS.new(myCanvas, obj._eisDriver);
|
||||||
|
@ -50,13 +145,15 @@ var MFD =
|
||||||
# Controller for the display on the bottom left which allows selection
|
# Controller for the display on the bottom left which allows selection
|
||||||
# of page groups and individual pages using the FMS controller.
|
# of page groups and individual pages using the FMS controller.
|
||||||
obj._pageGroupController = fg1000.PageGroupController.new(myCanvas, obj._svg, obj._MFDDevice);
|
obj._pageGroupController = fg1000.PageGroupController.new(myCanvas, obj._svg, obj._MFDDevice);
|
||||||
obj._pageGroupController.RegisterWithEmesary();
|
|
||||||
|
|
||||||
obj._pageGroupController.addPage("NavigationMap", fg1000.NavMap.new(myCanvas, obj._MFDDevice, obj._svg));
|
foreach (var page; MFDPages) {
|
||||||
obj._pageGroupController.addPage("TrafficMap", fg1000.TrafficMap.new(myCanvas, obj._MFDDevice, obj._svg));
|
var code = "obj._pageGroupController.addPage(\"" ~ page ~ "\", fg1000." ~ page ~ ".new(obj, myCanvas, obj._MFDDevice, obj._svg));";
|
||||||
|
var addPageFn = compile(code);
|
||||||
|
addPageFn();
|
||||||
|
}
|
||||||
|
|
||||||
# Display the NavMap and the appropriate top level on startup.
|
# Display the NavMap and the appropriate top level on startup.
|
||||||
obj._MFDDevice.selectPage(obj._pageGroupController.getPage("NavigationMap"));
|
obj._MFDDevice.selectPage(obj._pageGroupController.getPage("NavMap"));
|
||||||
|
|
||||||
# Add a wheel controller., which we will attach to the zoom.
|
# Add a wheel controller., which we will attach to the zoom.
|
||||||
myCanvas.addEventListener("wheel", func(e)
|
myCanvas.addEventListener("wheel", func(e)
|
||||||
|
@ -80,6 +177,10 @@ var MFD =
|
||||||
},
|
},
|
||||||
del: func()
|
del: func()
|
||||||
{
|
{
|
||||||
me._pageGroupController.DeRegisterWithEmesary();
|
me.getCurrentPage().DeRegisterWithEmesary();
|
||||||
|
},
|
||||||
|
setPageTitle: func(title)
|
||||||
|
{
|
||||||
|
me._pageTitle.setText(title);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
78
Aircraft/Instruments-3d/FG1000/Nasal/NDBInfo/NDBInfo.nas
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
# NDBInfo
|
||||||
|
var NDBInfo =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "WPT - NDB INFORMATION",
|
||||||
|
_group : myCanvas.createGroup("NDBInfoLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NDBInfo", "NDBInfoGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NDBInfoStyles.new();
|
||||||
|
obj.Options = fg1000.NDBInfoOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NDBInfoController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NDBInfo Controller
|
||||||
|
var NDBInfoController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NDBInfoController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NDBInfo Options
|
||||||
|
var NDBInfoOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NDBInfoOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NDBInfo Styles
|
||||||
|
var NDBInfoStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NDBInfoStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -1,9 +1,10 @@
|
||||||
# Navigation Map
|
# Navigation Map
|
||||||
var NavMap =
|
var NavMap =
|
||||||
{
|
{
|
||||||
new : func (myCanvas, device, svg)
|
new : func (mfd, myCanvas, device, svg)
|
||||||
{
|
{
|
||||||
var obj = {
|
var obj = {
|
||||||
|
title : "MAP - NAVIGATION MAP",
|
||||||
_group : myCanvas.createGroup("NavigationMapLayer"),
|
_group : myCanvas.createGroup("NavigationMapLayer"),
|
||||||
parents : [ NavMap, device.addPage("NavigationMap", "NavigationMapGroup") ]
|
parents : [ NavMap, device.addPage("NavigationMap", "NavigationMapGroup") ]
|
||||||
};
|
};
|
||||||
|
@ -11,12 +12,13 @@ var NavMap =
|
||||||
obj.Styles = fg1000.NavMapStyles.new();
|
obj.Styles = fg1000.NavMapStyles.new();
|
||||||
obj.Options = fg1000.NavMapOptions.new();
|
obj.Options = fg1000.NavMapOptions.new();
|
||||||
obj.MFDMap = obj._group.createChild("map");
|
obj.MFDMap = obj._group.createChild("map");
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
# Need to display this underneath the softkeys, EIS, header.
|
# Need to display this underneath the softkeys, EIS, header.
|
||||||
obj._group.set("z-index", -10.0);
|
obj._group.set("z-index", -10.0);
|
||||||
obj._group.setVisible(0);
|
obj._group.setVisible(0);
|
||||||
|
|
||||||
obj.device = device;
|
|
||||||
|
|
||||||
# Initialize the controller:
|
# Initialize the controller:
|
||||||
var ctrl_ns = canvas.Map.Controller.get("Aircraft position");
|
var ctrl_ns = canvas.Map.Controller.get("Aircraft position");
|
||||||
|
@ -42,8 +44,8 @@ var NavMap =
|
||||||
|
|
||||||
# Center the map's origin, modified to take into account the surround.
|
# Center the map's origin, modified to take into account the surround.
|
||||||
obj.MFDMap.setTranslation(
|
obj.MFDMap.setTranslation(
|
||||||
fg1000.MFD.MAP_CENTER.X,
|
fg1000.MAP_FULL.CENTER.X,
|
||||||
fg1000.MFD.MAP_CENTER.Y
|
fg1000.MAP_FULL.CENTER.Y
|
||||||
);
|
);
|
||||||
|
|
||||||
var r = func(name,vis=1,zindex=nil) return caller(0)[0];
|
var r = func(name,vis=1,zindex=nil) return caller(0)[0];
|
||||||
|
@ -204,8 +206,11 @@ var NavMap =
|
||||||
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
}
|
}
|
||||||
|
me.controller.offdisplay();
|
||||||
},
|
},
|
||||||
ondisplay : func() {
|
ondisplay : func() {
|
||||||
me._group.setVisible(1);
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
me.controller.ondisplay();
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -71,16 +71,20 @@ var NavMapController =
|
||||||
# Airways levels.
|
# Airways levels.
|
||||||
AIRWAYS : [ "AIRWAYS", "AIRWY ON", "AIRWY LO", "AIRWY HI"],
|
AIRWAYS : [ "AIRWAYS", "AIRWY ON", "AIRWY LO", "AIRWY HI"],
|
||||||
|
|
||||||
new : func (navmap, svg, zoom_label, current_zoom)
|
new : func (page, svg, zoom_label, current_zoom)
|
||||||
{
|
{
|
||||||
var obj = { parents : [ NavMapController ] };
|
var obj = { parents : [ NavMapController ] };
|
||||||
obj.current_zoom = current_zoom;
|
obj.current_zoom = current_zoom;
|
||||||
obj.declutter = 0;
|
obj.declutter = 0;
|
||||||
obj.airways = 0;
|
obj.airways = 0;
|
||||||
obj.navmap = navmap;
|
obj.page = page;
|
||||||
obj.navmap.setScreenRange(689/2.0);
|
obj.page.setScreenRange(689/2.0);
|
||||||
obj.label = svg.getElementById(zoom_label);
|
obj.label = svg.getElementById(zoom_label);
|
||||||
obj.setZoom(obj.current_zoom);
|
obj.setZoom(obj.current_zoom);
|
||||||
|
|
||||||
|
# Emesary
|
||||||
|
obj._recipient = nil;
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
zoomIn : func() {
|
zoomIn : func() {
|
||||||
|
@ -100,7 +104,7 @@ var NavMapController =
|
||||||
# Ranges above represent vertical ranges, but the display is a rectangle, so
|
# Ranges above represent vertical ranges, but the display is a rectangle, so
|
||||||
# we need to use the diagonal range of the 1024 x 689, which is 617px.
|
# we need to use the diagonal range of the 1024 x 689, which is 617px.
|
||||||
# 617px is 1.8 x 689/2, so we need to increase the range values by x1.8
|
# 617px is 1.8 x 689/2, so we need to increase the range values by x1.8
|
||||||
me.navmap.setRange(me.RANGES[zoom].range);
|
me.page.setRange(me.RANGES[zoom].range);
|
||||||
me.label.setText(me.RANGES[zoom].label);
|
me.label.setText(me.RANGES[zoom].label);
|
||||||
me.updateVisibility();
|
me.updateVisibility();
|
||||||
},
|
},
|
||||||
|
@ -112,9 +116,9 @@ var NavMapController =
|
||||||
(me.RANGES[me.current_zoom].range <= layer.range) and
|
(me.RANGES[me.current_zoom].range <= layer.range) and
|
||||||
(me.declutter <= layer.declutter) )
|
(me.declutter <= layer.declutter) )
|
||||||
{
|
{
|
||||||
me.navmap.MFDMap.getLayer(layer_name).setVisible(1);
|
me.page.MFDMap.getLayer(layer_name).setVisible(1);
|
||||||
} else {
|
} else {
|
||||||
me.navmap.MFDMap.getLayer(layer_name).setVisible(0);
|
me.page.MFDMap.getLayer(layer_name).setVisible(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -148,5 +152,58 @@ var NavMapController =
|
||||||
device.updateMenus();
|
device.updateMenus();
|
||||||
me.updateVisibility();
|
me.updateVisibility();
|
||||||
},
|
},
|
||||||
|
handleFMSInner : func(value) {
|
||||||
|
# This page has no use for the FMS knob, so we pass all such
|
||||||
|
# events to the pageGroupController which displays the page menu in the
|
||||||
|
# bottom right of the screen
|
||||||
|
return me.page.mfd._pageGroupController.handleFMSInner(value);
|
||||||
|
},
|
||||||
|
handleFMSOuter : func(value) {
|
||||||
|
# This page has no use for the FMS knob, so we pass all such
|
||||||
|
# events to the pageGroupController which displays the page menu in the
|
||||||
|
# bottom right of the screen
|
||||||
|
return me.page.mfd._pageGroupController.handleFMSOuter(value);
|
||||||
|
},
|
||||||
|
RegisterWithEmesary : func(transmitter = nil){
|
||||||
|
if (transmitter == nil)
|
||||||
|
transmitter = emesary.GlobalTransmitter;
|
||||||
|
|
||||||
|
if (me._recipient == nil){
|
||||||
|
me._recipient = emesary.Recipient.new("NavMapController_" ~ me.page.device.designation);
|
||||||
|
var pfd_obj = me.page.device;
|
||||||
|
var controller = me;
|
||||||
|
me._recipient.Receive = func(notification)
|
||||||
|
{
|
||||||
|
if (notification.Device_Id == pfd_obj.device_id
|
||||||
|
and notification.NotificationType == notifications.PFDEventNotification.DefaultType) {
|
||||||
|
if (notification.Event_Id == notifications.PFDEventNotification.HardKeyPushed
|
||||||
|
and notification.EventParameter != nil)
|
||||||
|
{
|
||||||
|
var id = notification.EventParameter.Id;
|
||||||
|
var value = notification.EventParameter.Value;
|
||||||
|
#printf("Button pressed " ~ id ~ " " ~ value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.FMS_OUTER) return controller.handleFMSOuter(value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.FMS_INNER) return controller.handleFMSInner(value);
|
||||||
|
if (id == fg1000.MFD.FASCIA.RANGE) return controller.zoom(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return emesary.Transmitter.ReceiptStatus_NotProcessed;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
transmitter.Register(me._recipient);
|
||||||
|
me.transmitter = transmitter;
|
||||||
|
},
|
||||||
|
DeRegisterWithEmesary : func(transmitter = nil){
|
||||||
|
# remove registration from transmitter; but keep the recipient once it is created.
|
||||||
|
if (me.transmitter != nil)
|
||||||
|
me.transmitter.DeRegister(me._recipient);
|
||||||
|
me.transmitter = nil;
|
||||||
|
},
|
||||||
|
# Reset controller if required when the page is displayed or hidden
|
||||||
|
ondisplay : func() {
|
||||||
|
me.RegisterWithEmesary();
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me.DeRegisterWithEmesary();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestAirports
|
||||||
|
var NearestAirports =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST AIRPORTS",
|
||||||
|
_group : myCanvas.createGroup("NearestAirportsLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestAirports", "NearestAirportsGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestAirportsStyles.new();
|
||||||
|
obj.Options = fg1000.NearestAirportsOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestAirportsController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestAirports Controller
|
||||||
|
var NearestAirportsController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestAirportsController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestAirports Options
|
||||||
|
var NearestAirportsOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestAirportsOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestAirports Styles
|
||||||
|
var NearestAirportsStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestAirportsStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestAirspaces
|
||||||
|
var NearestAirspaces =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST AIRSPACES",
|
||||||
|
_group : myCanvas.createGroup("NearestAirspacesLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestAirspaces", "NearestAirspacesGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestAirspacesStyles.new();
|
||||||
|
obj.Options = fg1000.NearestAirspacesOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestAirspacesController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestAirspaces Controller
|
||||||
|
var NearestAirspacesController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestAirspacesController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestAirspaces Options
|
||||||
|
var NearestAirspacesOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestAirspacesOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestAirspaces Styles
|
||||||
|
var NearestAirspacesStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestAirspacesStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestFrequencies
|
||||||
|
var NearestFrequencies =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST FREQUENCIES",
|
||||||
|
_group : myCanvas.createGroup("NearestFrequenciesLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestFrequencies", "NearestFrequenciesGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestFrequenciesStyles.new();
|
||||||
|
obj.Options = fg1000.NearestFrequenciesOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestFrequenciesController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestFrequencies Controller
|
||||||
|
var NearestFrequenciesController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestFrequenciesController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestFrequencies Options
|
||||||
|
var NearestFrequenciesOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestFrequenciesOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestFrequencies Styles
|
||||||
|
var NearestFrequenciesStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestFrequenciesStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestIntersections
|
||||||
|
var NearestIntersections =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST INTERSECTIONS",
|
||||||
|
_group : myCanvas.createGroup("NearestIntersectionsLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestIntersections", "NearestIntersectionsGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestIntersectionsStyles.new();
|
||||||
|
obj.Options = fg1000.NearestIntersectionsOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestIntersectionsController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestIntersections Controller
|
||||||
|
var NearestIntersectionsController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestIntersectionsController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestIntersections Options
|
||||||
|
var NearestIntersectionsOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestIntersectionsOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestIntersections Styles
|
||||||
|
var NearestIntersectionsStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestIntersectionsStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestNDB
|
||||||
|
var NearestNDB =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST NDB",
|
||||||
|
_group : myCanvas.createGroup("NearestNDBLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestNDB", "NearestNDBGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestNDBStyles.new();
|
||||||
|
obj.Options = fg1000.NearestNDBOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestNDBController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestNDB Controller
|
||||||
|
var NearestNDBController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestNDBController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestNDB Options
|
||||||
|
var NearestNDBOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestNDBOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestNDB Styles
|
||||||
|
var NearestNDBStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestNDBStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
# NearestUserWPT
|
||||||
|
var NearestUserWPT =
|
||||||
|
{
|
||||||
|
new : func (mfd, myCanvas, device, svg)
|
||||||
|
{
|
||||||
|
var obj = {
|
||||||
|
title : "NRST - NEAREST USER WPTS",
|
||||||
|
_group : myCanvas.createGroup("NearestUserWPTLayer"),
|
||||||
|
parents : [ NavMap, device.addPage("NearestUserWPT", "NearestUserWPTGroup") ],
|
||||||
|
symbols : {},
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Styles = fg1000.NearestUserWPTStyles.new();
|
||||||
|
obj.Options = fg1000.NearestUserWPTOptions.new();
|
||||||
|
obj.device = device;
|
||||||
|
obj.mfd = mfd;
|
||||||
|
|
||||||
|
obj.controller = fg1000.NearestUserWPTController.new(obj, svg);
|
||||||
|
|
||||||
|
# Dynamic elements
|
||||||
|
var elements = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var element; elements) {
|
||||||
|
obj.symbols[element] = svg.getElementById(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
var topMenu = func(device, pg, menuitem) {
|
||||||
|
pg.clearMenu();
|
||||||
|
resetMenuColors(device);
|
||||||
|
device.updateMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
# Display map toggle softkeys which change color depending
|
||||||
|
# on whether a particular layer is enabled or not.
|
||||||
|
var display_toggle = func(device, svg, mi, layer) {
|
||||||
|
var bg_name = sprintf("SoftKey%d-bg",mi.menu_id);
|
||||||
|
if (obj.controller.isEnabled(layer)) {
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
# Function to undo any colors set by display_toggle when loading a new menu
|
||||||
|
var resetMenuColors = func(device) {
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topMenu(device, obj, nil);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
offdisplay : func() {
|
||||||
|
me._group.setVisible(0);
|
||||||
|
|
||||||
|
# Reset the menu colours. Shouldn't have to do this here, but
|
||||||
|
# there's not currently an obvious other location to do so.
|
||||||
|
for(var i = 0; i < 12; i +=1) {
|
||||||
|
var name = sprintf("SoftKey%d",i);
|
||||||
|
me.device.svg.getElementById(name ~ "-bg").setColorFill(0.0,0.0,0.0);
|
||||||
|
me.device.svg.getElementById(name).setColor(1.0,1.0,1.0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ondisplay : func() {
|
||||||
|
me._group.setVisible(1);
|
||||||
|
me.mfd.setPageTitle(me.title);
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
# NearestUserWPT Controller
|
||||||
|
var NearestUserWPTController =
|
||||||
|
{
|
||||||
|
new : func (page, svg)
|
||||||
|
{
|
||||||
|
var obj = { parents : [ NearestUserWPTController ] };
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestUserWPT Options
|
||||||
|
var NearestUserWPTOptions =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [NearestUserWPTOptions] };
|
||||||
|
obj.Options= {};
|
||||||
|
obj.loadOptions();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOption : func(type) {
|
||||||
|
return me.Options[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setOption : func(type, name, value) {
|
||||||
|
me.Options[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadOptions : func() {
|
||||||
|
me.clearOptions();
|
||||||
|
me.Options.APS = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearOptions : func() {
|
||||||
|
me.Options = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# NearestUserWPT Styles
|
||||||
|
var NearestUserWPTStyles =
|
||||||
|
{
|
||||||
|
new : func() {
|
||||||
|
var obj = { parents : [ NearestUserWPTStyles ]};
|
||||||
|
obj.Styles = {};
|
||||||
|
obj.loadStyles();
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStyle : func(type) {
|
||||||
|
return me.Styles[type];
|
||||||
|
},
|
||||||
|
|
||||||
|
setStyle : func(type, name, value) {
|
||||||
|
me.Styles[type][name] = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStyles : func() {
|
||||||
|
me. clearStyles();
|
||||||
|
me.Styles.XXX = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
clearStyles : func() {
|
||||||
|
me.Styles = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|