1
0
Fork 0

Add AirportInfo and template pages for FG1000

This commit is contained in:
Stuart Buchanan 2017-12-10 22:15:21 +00:00
parent 2eb6e7b367
commit d0203549e8
157 changed files with 6853 additions and 372 deletions

View 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

View file

@ -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

View file

@ -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

View 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

View 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

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# ActiveFlightPlanNarrow Controller
var ActiveFlightPlanNarrowController =
{
new : func (page, svg)
{
var obj = { parents : [ ActiveFlightPlanNarrowController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# ActiveFlightPlanWide Controller
var ActiveFlightPlanWideController =
{
new : func (page, svg)
{
var obj = { parents : [ ActiveFlightPlanWideController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# AirportApproach Controller
var AirportApproachController =
{
new : func (page, svg)
{
var obj = { parents : [ AirportApproachController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# AirportArrival Controller
var AirportArrivalController =
{
new : func (page, svg)
{
var obj = { parents : [ AirportArrivalController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# AirportDeparture Controller
var AirportDepartureController =
{
new : func (page, svg)
{
var obj = { parents : [ AirportDepartureController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# AirportDirectory Controller
var AirportDirectoryController =
{
new : func (page, svg)
{
var obj = { parents : [ AirportDirectoryController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View 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);
},
};

View file

@ -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();
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# AirportWeather Controller
var AirportWeatherController =
{
new : func (page, svg)
{
var obj = { parents : [ AirportWeatherController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# Checklist1 Controller
var Checklist1Controller =
{
new : func (page, svg)
{
var obj = { parents : [ Checklist1Controller ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# Checklist2 Controller
var Checklist2Controller =
{
new : func (page, svg)
{
var obj = { parents : [ Checklist2Controller ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# Checklist3 Controller
var Checklist3Controller =
{
new : func (page, svg)
{
var obj = { parents : [ Checklist3Controller ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# Checklist4 Controller
var Checklist4Controller =
{
new : func (page, svg)
{
var obj = { parents : [ Checklist4Controller ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# Checklist5 Controller
var Checklist5Controller =
{
new : func (page, svg)
{
var obj = { parents : [ Checklist5Controller ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# FlightPlanCatalog Controller
var FlightPlanCatalogController =
{
new : func (page, svg)
{
var obj = { parents : [ FlightPlanCatalogController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View 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);
},
};

View file

@ -0,0 +1,9 @@
# GPSStatus Controller
var GPSStatusController =
{
new : func (page, svg)
{
var obj = { parents : [ GPSStatusController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# IntersectionInfo Controller
var IntersectionInfoController =
{
new : func (page, svg)
{
var obj = { parents : [ IntersectionInfoController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
} }
}; };

View 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);
},
};

View file

@ -0,0 +1,9 @@
# NDBInfo Controller
var NDBInfoController =
{
new : func (page, svg)
{
var obj = { parents : [ NDBInfoController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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();
}, },
}; };

View file

@ -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();
},
}; };

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestAirports Controller
var NearestAirportsController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestAirportsController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestAirspaces Controller
var NearestAirspacesController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestAirspacesController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestFrequencies Controller
var NearestFrequenciesController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestFrequenciesController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestIntersections Controller
var NearestIntersectionsController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestIntersectionsController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestNDB Controller
var NearestNDBController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestNDBController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

View file

@ -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);
},
};

View file

@ -0,0 +1,9 @@
# NearestUserWPT Controller
var NearestUserWPTController =
{
new : func (page, svg)
{
var obj = { parents : [ NearestUserWPTController ] };
return obj;
},
};

View file

@ -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 = {};
},
};

View file

@ -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 = {};
},
};

Some files were not shown because too many files have changed in this diff Show more