Commit da8d8bb5 authored by dogmaphobic's avatar dogmaphobic

Main Toolbar Work

parent 2ab0357e
......@@ -80,6 +80,25 @@
<file alias="XDelete.svg">src/FlightMap/Images/XDelete.svg</file>
<file alias="XDeleteBlack.svg">src/FlightMap/Images/XDeleteBlack.svg</file>
<!-- Toolbar -->
<file alias="Armed.svg">src/ui/toolbar/Images/Armed.svg</file>
<file alias="Battery.svg">src/ui/toolbar/Images/Battery.svg</file>
<file alias="Connect.svg">src/ui/toolbar/Images/Connect.svg</file>
<file alias="Disarmed.svg">src/ui/toolbar/Images/Disarmed.svg</file>
<file alias="Disconnect.svg">src/ui/toolbar/Images/Disconnect.svg</file>
<file alias="Gps.svg">src/ui/toolbar/Images/Gps.svg</file>
<file alias="Megaphone.svg">src/ui/toolbar/Images/Megaphone.svg</file>
<file alias="Quad.svg">src/ui/toolbar/Images/Quad.svg</file>
<file alias="RC.svg">src/ui/toolbar/Images/RC.svg</file>
<file alias="Signal0.svg">src/ui/toolbar/Images/Signal0.svg</file>
<file alias="Signal20.svg">src/ui/toolbar/Images/Signal20.svg</file>
<file alias="Signal40.svg">src/ui/toolbar/Images/Signal40.svg</file>
<file alias="Signal60.svg">src/ui/toolbar/Images/Signal60.svg</file>
<file alias="Signal80.svg">src/ui/toolbar/Images/Signal80.svg</file>
<file alias="Signal100.svg">src/ui/toolbar/Images/Signal100.svg</file>
<file alias="Yield.svg">src/ui/toolbar/Images/Yield.svg</file>
</qresource>
<qresource prefix="/res">
......@@ -100,9 +119,6 @@
<file alias="Shutdown">resources/Shutdown.svg</file>
<file alias="AntennaT">resources/Antenna_T.svg</file>
<file alias="AntennaRC">resources/Antenna_RC.svg</file>
<file alias="Gps">resources/Gps.svg</file>
<file alias="Megaphone">resources/Megaphone.png</file>
<file alias="Yield">resources/Yield.png</file>
<file alias="Battery_0">resources/Battery_0.svg</file>
<file alias="Battery_20">resources/Battery_20.svg</file>
<file alias="Battery_40">resources/Battery_40.svg</file>
......@@ -112,6 +128,10 @@
<file alias="SystemLockScreen">resources/SystemLockScreen.svg</file>
<file alias="SplashScreen">resources/SplashScreen.png</file>
<file alias="QGroundControlConnect">resources/QGroundControlConnect.svg</file>
<file alias="Gears">resources/Gears.svg</file>
<file alias="Plan">resources/Plan.svg</file>
<file alias="PaperPlane">resources/PaperPlane.svg</file>
<file alias="PowerButton">resources/PowerButton.svg</file>
</qresource>
<qresource prefix="/res/firmware">
......
......@@ -51,8 +51,11 @@
<!-- Main Window -->
<file alias="MainWindow.qml">src/ui/MainWindow.qml</file>
<!-- Main ToolBar -->
<file alias="QGroundControl/Controls/MainToolBar.qml">src/ui/toolbar/MainToolBar.qml</file>
<file alias="MainToolBarActiveVehicleComponent.qml">src/ui/toolbar/MainToolBarActiveVehicleComponent.qml</file>
<file alias="QGroundControl/Controls/MainToolBarIndicators.qml">src/ui/toolbar/MainToolBarIndicators.qml</file>
<file alias="QGroundControl/Controls/SignalStrength.qml">src/ui/toolbar/SignalStrength.qml</file>
<!-- Vehicle Setup -->
<file alias="SetupView.qml">src/VehicleSetup/SetupView.qml</file>
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="160 862 72 72" style="enable-background:new 160 862 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M164.7,888.4c0.4,1.3,0.9,2.5,1.6,3.7l-1.9,2.4c-0.6,0.8-0.5,1.9,0.1,2.6l3.3,3.3c0.7,0.7,1.8,0.8,2.6,0.1
l2.4-1.9c1.2,0.7,2.5,1.3,3.9,1.6l0.4,3.1c0.1,1,1,1.7,1.9,1.7h4.6c1,0,1.8-0.7,1.9-1.7l0.3-2.9c1.5-0.4,2.8-0.9,4.1-1.7l2.3,1.8
c0.8,0.6,1.9,0.5,2.6-0.1l3.3-3.3c0.7-0.7,0.8-1.8,0.1-2.6l-1.8-2.3c0.7-1.3,1.3-2.6,1.7-4.1l2.7-0.3c1-0.1,1.7-1,1.7-1.9v-4.6
c0-1-0.7-1.8-1.7-1.9l-2.7-0.3c-0.4-1.4-0.9-2.8-1.6-4l1.7-2.1c0.6-0.8,0.5-1.9-0.1-2.6l-3.3-3.3c-0.7-0.7-1.8-0.8-2.6-0.1l-2,1.6
c-1.3-0.8-2.7-1.4-4.2-1.8l-0.3-2.6c-0.1-1-1-1.7-1.9-1.7h-4.6c-1,0-1.8,0.7-1.9,1.7l-0.3,2.6c-1.5,0.4-3,1-4.3,1.8l-2.1-1.7
c-0.8-0.6-1.9-0.5-2.6,0.1l-3.3,3.3c-0.7,0.7-0.8,1.8-0.1,2.6l1.8,2.2c-0.7,1.3-1.3,2.6-1.6,4.1l-2.8,0.3c-1,0.1-1.7,1-1.7,1.9v4.6
c0,1,0.7,1.8,1.7,1.9L164.7,888.4z M181.4,875.9c4.2,0,7.6,3.4,7.6,7.6s-3.4,7.6-7.6,7.6c-4.2,0-7.6-3.4-7.6-7.6
S177.2,875.9,181.4,875.9z"/>
<path class="st0" d="M227,889.5l-2.4-2.1c-0.7-0.6-1.9-0.6-2.6,0.1l-1.3,1.3c-1.1-0.5-2.3-0.9-3.6-1.2l-0.4-1.9
c-0.2-1-1.1-1.6-2.1-1.5l-3.2,0.3c-1,0.1-1.7,0.9-1.8,1.9l-0.1,1.9c-1.2,0.4-2.4,1-3.4,1.8l-1.6-1.1c-0.8-0.5-1.9-0.4-2.5,0.4
l-2.1,2.4c-0.6,0.7-0.6,1.9,0.1,2.6l1.4,1.5c-0.5,1.1-0.8,2.2-1,3.4l-2,0.4c-1,0.2-1.6,1.1-1.5,2.1l0.3,3.2c0.1,1,0.9,1.7,1.9,1.8
l2.2,0.1c0.4,1,0.9,2,1.5,2.9l-1.2,1.8c-0.5,0.8-0.4,1.9,0.4,2.5l2.4,2.1c0.7,0.6,1.9,0.6,2.6-0.1l1.6-1.5c1,0.5,2.1,0.8,3.3,1.1
l0.4,2.2c0.2,1,1.1,1.6,2.1,1.5l3.2-0.3c1-0.1,1.7-0.9,1.8-1.9l0.1-2.1c1.2-0.4,2.3-1,3.3-1.7l1.8,1.2c0.8,0.5,1.9,0.4,2.5-0.4
l2.1-2.4c0.6-0.7,0.6-1.9-0.1-2.6l-1.4-1.5c0.5-1.1,0.9-2.3,1.1-3.4l1.9-0.4c1-0.2,1.6-1.1,1.5-2.1l-0.3-3.2
c-0.1-1-0.9-1.7-1.9-1.8l-1.9-0.1c-0.4-1.1-0.9-2.2-1.6-3.2l1.1-1.6C227.9,891.2,227.8,890.1,227,889.5z M215.1,907.9
c-3.4,0.3-6.5-2.3-6.7-5.7c-0.3-3.4,2.3-6.5,5.7-6.7c3.4-0.3,6.5,2.3,6.7,5.7C221,904.6,218.5,907.6,215.1,907.9z"/>
<path class="st0" d="M175.8,916.4c-1,0.1-1.7,0.9-1.7,1.9l0,2c0,1,0.7,1.8,1.7,1.9l1.4,0.2c0.2,0.9,0.6,1.7,1,2.5l-0.9,1.1
c-0.6,0.8-0.6,1.9,0.1,2.6l1.4,1.4c0.7,0.7,1.8,0.8,2.6,0.2l1.2-0.9c0.8,0.5,1.7,0.9,2.6,1.1l0.2,1.5c0.1,1,0.9,1.7,1.9,1.7l2,0
c1,0,1.8-0.7,1.9-1.7l0.2-1.4c1-0.2,1.9-0.6,2.8-1.1l1.1,0.9c0.8,0.6,1.9,0.6,2.6-0.1l1.4-1.4c0.7-0.7,0.8-1.8,0.2-2.6l-0.8-1.1
c0.5-0.8,0.9-1.8,1.2-2.7l1.3-0.1c1-0.1,1.7-0.9,1.7-1.9l0-2c0-1-0.7-1.8-1.7-1.9l-1.3-0.2c-0.2-0.9-0.6-1.9-1.1-2.7l0.8-1
c0.6-0.8,0.6-1.9-0.1-2.6l-1.4-1.4c-0.7-0.7-1.8-0.8-2.6-0.2l-0.9,0.7c-0.9-0.5-1.8-0.9-2.8-1.2l-0.1-1.2c-0.1-1-0.9-1.7-1.9-1.7
l-2,0c-1,0-1.8,0.7-1.9,1.7l-0.2,1.2c-1,0.3-2,0.7-2.9,1.2l-1-0.8c-0.8-0.6-1.9-0.6-2.6,0.1l-1.4,1.4c-0.7,0.7-0.8,1.8-0.2,2.6
l0.8,1.1c-0.5,0.8-0.9,1.8-1.1,2.7L175.8,916.4z M188.4,914.2c2.8,0,5.1,2.3,5,5.1c0,2.8-2.3,5.1-5.1,5c-2.8,0-5.1-2.3-5-5.1
C183.3,916.4,185.6,914.2,188.4,914.2z"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
version="1.1"
x="0px"
y="0px"
width="110px"
height="110px"
viewBox="0 0 110 110"
enable-background="new 0 0 110 110"
xml:space="preserve"
id="svg3852"
inkscape:version="0.91 r13725"
sodipodi:docname="gps.svg"><title
id="title4758">GPS</title><metadata
id="metadata3933"><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>GPS</dc:title><dc:creator><cc:Agent><dc:title>Gus Grubba</dc:title></cc:Agent></dc:creator><cc:license
rdf:resource="http://creativecommons.org/licenses/by-nc/3.0/" /></cc:Work><cc:License
rdf:about="http://creativecommons.org/licenses/by-nc/3.0/"><cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:prohibits
rdf:resource="http://creativecommons.org/ns#CommercialUse" /><cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata><defs
id="defs3931" /><sodipodi:namedview
pagecolor="#808080"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview3929"
showgrid="false"
inkscape:zoom="11.136364"
inkscape:cx="55"
inkscape:cy="55"
inkscape:current-layer="svg3852" /><g
id="Layer_2"
display="none" /><g
id="ex_thick"
style="fill:#ffffff;stroke:#ffffff;stroke-opacity:1"
transform="matrix(-1,0,0,-1,111.82126,108.29692)" /><g
id="Layer_2_copy_3"
display="none" /><g
id="ex_thin"
style="fill:#ffffff;stroke:#ffffff;stroke-opacity:1"
transform="matrix(-1,0,0,-1,111.82126,108.29692)" /><g
id="Layer_2_copy"
display="none" /><g
id="em_thick"
style="fill:#ffffff;stroke:#ffffff;stroke-opacity:1"
transform="matrix(-1,0,0,-1,111.82126,108.29692)" /><g
id="Layer_2_copy_4"
display="none"><g
display="inline"
id="g3861"><rect
x="-36.1"
y="-21.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3863" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="-8"
cy="6.8"
r="28.2"
id="circle3865" /></g><g
display="inline"
id="g3867"><rect
x="28.3"
y="-21.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3869" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="56.5"
cy="6.8"
r="28.2"
id="circle3871" /></g><g
display="inline"
id="g3873"><rect
x="91.5"
y="-21.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3875" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="119.7"
cy="6.8"
r="28.2"
id="circle3877" /></g></g><rect
x="-129.87416"
y="-13.196043"
transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)"
stroke-miterlimit="10"
width="32.29969"
height="16.099846"
id="rect3882"
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /><rect
x="24.979502"
y="-2.9382656"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
stroke-miterlimit="10"
width="32.29969"
height="16.099846"
id="rect3884"
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /><path
stroke-miterlimit="10"
d="m 31.121258,78.396923 c 4.7,4.7 12.4,4.7 17.1,0 l 22.8,-22.9 -17.1,-17.1 -22.8,22.8 c -4.7,4.8 -4.7,12.4 0,17.2 z"
id="path3886"
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
inkscape:connector-curvature="0" /><path
stroke-miterlimit="10"
d="m 62.521258,46.996923 c 6.3,6.3 16.5,6.3 22.8,0 l -22.8,-22.8 c -6.3,6.2 -6.3,16.5 0,22.8 z"
id="path3888"
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
inkscape:connector-curvature="0" /><path
stroke-miterlimit="10"
d="m 96.084265,44.511467 c 8.249995,-8.25 8.249995,-21.75 0,-30 -8.25,-8.2499943 -21.75,-8.2499943 -30,0"
id="path3890"
style="fill:none;stroke:#ffffff;stroke-width:3.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" /><path
stroke-miterlimit="10"
d="m 86.118561,36.977171 c 3.6,-3.6 3.6,-9.3 0,-12.9 -3.6,-3.6 -9.3,-3.6 -12.9,0"
id="path3892"
style="fill:none;stroke:#ffffff;stroke-width:3.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" /><line
stroke-miterlimit="10"
x1="65.321259"
y1="72.596924"
x2="59.621258"
y2="66.896919"
id="line3894"
style="fill:#ffffff;stroke:#ffffff;stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" /><line
stroke-miterlimit="10"
x1="42.521255"
y1="49.796921"
x2="36.821259"
y2="44.096924"
id="line3896"
style="fill:#ffffff;stroke:#ffffff;stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" /><g
id="Layer_2_copy_2"
display="none"><g
display="inline"
id="g3905"><rect
x="-36.1"
y="83.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3907" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="-8"
cy="111.5"
r="28.2"
id="circle3909" /></g><g
display="inline"
id="g3911"><rect
x="28.3"
y="83.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3913" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="56.5"
cy="111.5"
r="28.2"
id="circle3915" /></g><g
display="inline"
id="g3917"><rect
x="91.5"
y="83.3"
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
width="56.3"
height="56.3"
id="rect3919" /><circle
fill="none"
stroke="#EB008B"
stroke-width="0.25"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
cx="119.7"
cy="111.5"
r="28.2"
id="circle3921" /></g></g><g
id="hornet"
style="fill:#ffffff;stroke:#ffffff;stroke-opacity:1"
transform="matrix(-1,0,0,-1,111.82126,108.29692)" /><g
id="Layer_2_copy_5"
display="none" /><g
id="hornet_THIN"
style="fill:#ffffff;stroke:#ffffff;stroke-opacity:1"
transform="matrix(-1,0,0,-1,111.82126,108.29692)" /><g
id="Layer_6"
display="none"><polygon
display="inline"
fill="none"
stroke="#224A80"
stroke-width="3"
stroke-linecap="round"
stroke-linejoin="round"
stroke-miterlimit="10"
points=" -14.6,111.2 -19.5,111.2 -19.5,152.2 3.4,152.2 3.4,111.2 -1.5,111.2 -1.5,104.7 -14.6,104.7 "
id="polygon3927" /></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="194 896 72 72" style="enable-background:new 194 896 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M194,943.5c-0.1-0.9,0.2-1.6,1-2l67.5-45c0.4-0.3,0.8-0.4,1.3-0.4s0.9,0.1,1.3,0.4c0.7,0.5,1.1,1.2,1,2.2
l-11.2,67.5c-0.2,0.7-0.6,1.2-1.1,1.5c-0.4,0.2-0.7,0.3-1.1,0.3c-0.3,0-0.6,0-0.8-0.1l-21.8-8.7l-4.6,7.7c-0.5,0.7-1.1,1.1-2,1.1
s-1.5-0.4-2-1.1l-8.3-14.5l-17.6-7C194.6,945,194.1,944.3,194,943.5L194,943.5z M201,942.7l13.6,5.5c0.1,0.1,0.2,0.2,0.4,0.3
l0.2,0.1l38-40.6L201,942.7z M216.9,950.1l6.3,11l36.3-56.6L216.9,950.1z M230.1,954.6c0.6,0.1,1,0.2,1.4,0.3l19.1,7.7l9-53.8
L230.1,954.6z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="road-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-255 447 72 72" style="enable-background:new -255 447 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:9;stroke-linecap:round;stroke-miterlimit:10;}
</style>
<g>
<polygon class="st0" points="-246.5,455.1 -247.5,457.1 -245.5,457.1 -246.5,455.1 "/>
<path class="st0" d="M-246.5,447c-4.7,0-8.5,3.8-8.5,8.5c0,5.8,7.7,15.6,8,16c0.1,0.2,0.3,0.3,0.5,0.3h0c0.2,0,0.4-0.1,0.5-0.3
c0.3-0.4,7.9-10.3,7.9-16C-238,450.8-241.8,447-246.5,447z M-242.5,460.1h-1.4c-0.2,0-0.3-0.1-0.4-0.3l-0.5-1h-3.4l-0.5,1
c-0.1,0.2-0.2,0.3-0.5,0.3h-1.4c-0.2,0-0.3-0.2-0.2-0.3l3.9-8.5c0-0.1,0.1-0.1,0.2-0.1h0.1c0.1,0,0.2,0.1,0.2,0.1l3.9,8.5
C-242.2,460-242.3,460.1-242.5,460.1z"/>
</g>
<g>
<path class="st0" d="M-197.7,466.4c-8,0-14.6,6.6-14.6,14.6c0,9.9,13.2,26.8,13.7,27.5c0.2,0.3,0.6,0.4,0.9,0.4c0,0,0,0,0,0
c0.4,0,0.7-0.2,0.9-0.4c0.6-0.7,13.6-17.6,13.6-27.5C-183.1,473-189.6,466.4-197.7,466.4z M-197.2,488.7h-5.3
c-0.2,0-0.4-0.2-0.4-0.4V474c0-0.2,0.2-0.4,0.4-0.4h5c2.5,0,4.6,1.7,4.6,4c0,1.7-1.5,2.9-2.5,3.4c1.1,0.5,2.9,1.5,2.9,3.5
C-192.5,486.9-194.6,488.7-197.2,488.7z"/>
<path class="st0" d="M-197.8,482.5h-1.7v3.1h2c0.8,0,1.5-0.7,1.5-1.6C-196,483.2-197,482.5-197.8,482.5z"/>
<path class="st0" d="M-196.4,478.2c0-0.9-0.7-1.5-1.5-1.5h-1.7v3h1.7C-197,479.7-196.4,479-196.4,478.2z"/>
</g>
<path class="st1" d="M-189.8,480"/>
<path class="st0" d="M-197.3,512.5l-38.9-21.3l9-4.8c0.9-0.5,1.4-1.5,1.3-2.5c-0.1-1-0.7-1.9-1.6-2.4c0,0-16.1-7.2-17.2-7.7
c-0.8-0.3-1.9-0.3-2.3-0.2c-1.2,0.3-2,1-2,1.8c0,1.2,2.1,1.9,2.4,2.1l15.3,6.7l-11.3,4.7c-0.9,0.5-1.4,1.5-1.3,2.5
c0,1,0.6,1.9,1.5,2.4l39.3,23.6c1.3,0.6,2.8,1.7,5.1,1.7c0.2,0,0.4,0,0.6,0c0,0,0,0,0.1,0c0.3,0,0.5,0,0.8-0.1
c1.9-0.4,3.3-1.5,3.3-2.8C-193.2,514.6-195,513.7-197.3,512.5z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-49 653 72 72" style="enable-background:new -49 653 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M-13,725c-18.5,0-33.6-15.1-33.6-33.6c0-9.6,4.1-18.7,11.3-25.1c2-1.8,5-1.6,6.8,0.4c1.8,2,1.6,5-0.4,6.8
c-5.1,4.6-8.1,11.1-8.1,17.9c0,13.2,10.8,24,24,24c13.2,0,24-10.8,24-24c0-6.8-2.9-13.4-8-17.9c-2-1.8-2.2-4.8-0.4-6.8
c1.8-2,4.8-2.2,6.8-0.4c7.2,6.4,11.3,15.5,11.3,25.1C20.6,709.9,5.5,725-13,725z M-8.2,681.8v-24c0-2.7-2.1-4.8-4.8-4.8
s-4.8,2.1-4.8,4.8v24c0,2.7,2.1,4.8,4.8,4.8S-8.2,684.5-8.2,681.8z"/>
</svg>
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
......@@ -76,75 +76,75 @@ static const struct Modes2Name rgModes2Name[] = {
{ PX4_CUSTOM_MAIN_MODE_ACRO, 0, "Acro", true },
{ PX4_CUSTOM_MAIN_MODE_STABILIZED, 0, "Stabilized", true },
{ PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, "Rattitude", true },
{ PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, "Altitude control", true },
{ PX4_CUSTOM_MAIN_MODE_POSCTL, 0, "Position control", true },
{ PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, "Offboard control", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_READY, "Auto ready", false },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF, "Taking off", false },
{ PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, "Altitude Control", true },
{ PX4_CUSTOM_MAIN_MODE_POSCTL, 0, "Position Control", true },
{ PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, "Offboard Control", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_READY, "Auto Ready", false },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF, "Taking Off", false },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LOITER, "Loiter", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_MISSION, "Mission", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL, "Return to Land", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL, "Return To Land", true },
{ PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LAND, "Landing", false },
};
PX4FirmwarePlugin::PX4FirmwarePlugin(void)
{
}
QList<VehicleComponent*> PX4FirmwarePlugin::componentsForVehicle(AutoPilotPlugin* vehicle)
{
Q_UNUSED(vehicle);
return QList<VehicleComponent*>();
}
QStringList PX4FirmwarePlugin::flightModes(void)
{
QStringList flightModes;
// FIXME: fixed-wing/multi-rotor differences?
for (size_t i=0; i<sizeof(rgModes2Name)/sizeof(rgModes2Name[0]); i++) {
const struct Modes2Name* pModes2Name = &rgModes2Name[i];
if (pModes2Name->canBeSet) {
flightModes += pModes2Name->name;
}
}
return flightModes;
}
QString PX4FirmwarePlugin::flightMode(uint8_t base_mode, uint32_t custom_mode)
{
QString flightMode = "Unknown";
if (base_mode & MAV_MODE_FLAG_CUSTOM_MODE_ENABLED) {
union px4_custom_mode px4_mode;
px4_mode.data = custom_mode;
// FIXME: fixed-wing/multi-rotor differences?
bool found = false;
for (size_t i=0; i<sizeof(rgModes2Name)/sizeof(rgModes2Name[0]); i++) {
const struct Modes2Name* pModes2Name = &rgModes2Name[i];
if (pModes2Name->main_mode == px4_mode.main_mode && pModes2Name->sub_mode == px4_mode.sub_mode) {
flightMode = pModes2Name->name;
found = true;
break;
}
}
if (!found) {
qWarning() << "Unknown flight mode" << custom_mode;
}
} else {
qWarning() << "PX4 Flight Stack flight mode without custom mode enabled?";
}
return flightMode;
}
......@@ -152,30 +152,30 @@ bool PX4FirmwarePlugin::setFlightMode(const QString& flightMode, uint8_t* base_m
{
*base_mode = 0;
*custom_mode = 0;
bool found = false;
for (size_t i=0; i<sizeof(rgModes2Name)/sizeof(rgModes2Name[0]); i++) {
const struct Modes2Name* pModes2Name = &rgModes2Name[i];
if (flightMode.compare(pModes2Name->name, Qt::CaseInsensitive) == 0) {
union px4_custom_mode px4_mode;
px4_mode.data = 0;
px4_mode.main_mode = pModes2Name->main_mode;
px4_mode.sub_mode = pModes2Name->sub_mode;
*base_mode = MAV_MODE_FLAG_CUSTOM_MODE_ENABLED;
*custom_mode = px4_mode.data;
found = true;
break;
}
}
if (!found) {
qWarning() << "Unknown flight Mode" << flightMode;
}
return found;
}
......@@ -187,7 +187,7 @@ int PX4FirmwarePlugin::manualControlReservedButtonCount(void)
void PX4FirmwarePlugin::adjustMavlinkMessage(mavlink_message_t* message)
{
Q_UNUSED(message);
// PX4 Flight Stack plugin does no message adjustment
}
......@@ -199,7 +199,7 @@ bool PX4FirmwarePlugin::isCapable(FirmwareCapabilities capabilities)
void PX4FirmwarePlugin::initializeVehicle(Vehicle* vehicle)
{
Q_UNUSED(vehicle);
// PX4 Flight Stack doesn't need to do any extra work
}
......
......@@ -43,7 +43,11 @@ Item {
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
property var _activeVehicle: multiVehicleManager.activeVehicle
property real avaiableHeight: parent.height
readonly property bool isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
property var _activeVehicle: multiVehicleManager.activeVehicle
readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276)
readonly property real _defaultRoll: 0
......@@ -73,9 +77,6 @@ Item {
property real _airSpeed: _activeVehicle ? _activeVehicle.airSpeed : _defaultAirSpeed
property real _climbRate: _activeVehicle ? _activeVehicle.climbRate : _defaultClimbRate
property bool _isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
property var _flightMap: null
property var _flightVideo: null
property var _savedZoomLevel: 0
......@@ -135,7 +136,7 @@ Item {
width: _pipSize
height: _pipSize * (9/16)
color: "#000010"
border.color: _isBackgroundDark ? Qt.rgba(1,1,1,0.75) : Qt.rgba(0,0,0,0.75)
border.color: isBackgroundDark ? Qt.rgba(1,1,1,0.75) : Qt.rgba(0,0,0,0.75)
Loader {
id: pipLoader
anchors.fill: parent
......@@ -186,7 +187,7 @@ Item {
width: ScreenTools.defaultFontPixelSize * 2
radius: ScreenTools.defaultFontPixelSize / 3
visible: _controller.hasVideo && !_isPipVisible
color: _isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5)
color: isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5)
Image {
width: parent.width * 0.75
height: parent.height * 0.75
......@@ -208,6 +209,10 @@ Item {
//-- Widgets
Loader {
id: widgetsLoader
anchors.fill: parent
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
height: avaiableHeight
}
}
......@@ -45,7 +45,7 @@ Item {
text: "NO VIDEO"
font.weight: Font.DemiBold
color: "white"
font.pixelSize: ScreenTools.defaultFontPixelSize * 1.5
font.pixelSize: _mainIsMap ? 12 * ScreenTools.fontHRatio : 20 * ScreenTools.fontHRatio
anchors.centerIn: parent
}
}
......
......@@ -82,7 +82,7 @@ Item {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
visible: _isInstrumentVisible
size: mainWindow.width * 0.15
size: ScreenTools.isTinyScreen ? mainWindow.width * 0.2 : mainWindow.width * 0.15
active: _activeVehicle != null
heading: _heading
rollAngle: _roll
......@@ -108,7 +108,7 @@ Item {
width: ScreenTools.defaultFontPixelSize * 2
radius: ScreenTools.defaultFontPixelSize / 3
visible: !_isInstrumentVisible
color: _isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5)
color: isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5)
Image {
width: parent.width * 0.75
height: parent.height * 0.75
......@@ -130,6 +130,7 @@ Item {
//-- Vertical Tool Buttons
Column {
id: toolColumn
visible: _mainIsMap
anchors.margins: ScreenTools.defaultFontPixelHeight
anchors.left: parent.left
anchors.top: parent.top
......
......@@ -373,7 +373,7 @@ QGCView {
// Mission Item Editor
Item {
id: missionItemEditor
anchors.top: parent.top
height: mainWindow.avaiableHeight
anchors.bottom: parent.bottom
anchors.right: parent.right
width: _rightPanelWidth
......
import QtQuick 2.2
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls.Private 1.0
import QtGraphicalEffects 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0
Item {
id: _root
property alias source: icon.source
property bool checked: false
property ExclusiveGroup exclusiveGroup: null
signal clicked()
onExclusiveGroupChanged: {
if (exclusiveGroup) {
exclusiveGroup.bindCheckable(_root)
}
}
Image {
id: icon
width: parent.height * 0.9
height: parent.height * 0.9
mipmap: true
fillMode: Image.PreserveAspectFit
visible: false
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
}
ColorOverlay {
id: iconOverlay
anchors.fill: icon
source: icon
color: (checked ? "#ffff20" : "#ffffff")
}
MouseArea {
anchors.fill: parent
onClicked: {
checked = true
_root.clicked()
}
}
}
/*
QGCButton {
id: button
property bool repaintChevron: false
......@@ -62,3 +102,4 @@ QGCButton {
}
}
}
*/
......@@ -23,17 +23,18 @@ ExclusiveGroupItem 1.0 ExclusiveGroupItem.qml
ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
ModeSwitchDisplay 1.0 ModeSwitchDisplay.qml
ModeSwitchDisplay 1.0 ModeSwitchDisplay.qml
QGCView 1.0 QGCView.qml
QGCViewPanel 1.0 QGCViewPanel.qml
QGCViewDialog 1.0 QGCViewDialog.qml
QGCViewMessage 1.0 QGCViewMessage.qml
QGCView 1.0 QGCView.qml
QGCViewPanel 1.0 QGCViewPanel.qml
QGCViewDialog 1.0 QGCViewDialog.qml
QGCViewMessage 1.0 QGCViewMessage.qml
MissionItemIndexLabel 1.0 MissionItemIndexLabel.qml
MissionItemSummary 1.0 MissionItemSummary.qml
MissionItemEditor 1.0 MissionItemEditor.qml
MainToolBar 1.0 MainToolBar.qml
MainToolBar 1.0 MainToolBar.qml
SignalStrength 1.0 SignalStrength.qml
ClickableColor 1.0 ClickableColor.qml
ClickableColor 1.0 ClickableColor.qml
......@@ -48,6 +48,9 @@ public:
Q_PROPERTY(qreal zOrderWidgets READ zOrderWidgets CONSTANT) ///< z order value to widgets, for example: zoom controls, hud widgetss
Q_PROPERTY(qreal zOrderMapItems READ zOrderMapItems CONSTANT) ///< z order value for map items, for example: mission item indicators
/// Global "Advance Mode" preference. Certain UI elements and features are different based on this.
Q_PROPERTY(bool isAdvancedMode READ isAdvancedMode CONSTANT)
Q_INVOKABLE void saveGlobalSetting (const QString& key, const QString& value);
Q_INVOKABLE QString loadGlobalSetting (const QString& key, const QString& defaultValue);
Q_INVOKABLE void saveBoolGlobalSetting (const QString& key, bool value);
......@@ -62,6 +65,9 @@ public:
qreal zOrderWidgets () { return 100; }
qreal zOrderMapItems () { return 50; }
//-- TODO: Make this into an actual preference.
bool isAdvancedMode () { return false; }
private:
HomePositionManager* _homePositionManager;
FlightMapSettings* _flightMapSettings;
......
......@@ -14,6 +14,12 @@ Item {
readonly property real defaultFontPixelWidth: _textMeasure.fontWidth
readonly property real smallFontPixelSize: defaultFontPixelSize * ScreenToolsController.smallFontPixelSizeRatio
// To proportionally scale fonts
readonly property real _defaultFontHeight: 16
readonly property real fontHRatio: isTinyScreen ? (_textMeasure.contentHeight / _defaultFontHeight) * 0.75 : (_textMeasure.contentHeight / _defaultFontHeight)
readonly property real realFontHeight: _textMeasure.contentHeight
// On OSX ElCapitan with Qt 5.4.0 any font pixel size above 19 shows garbage test. No idea why at this point.
// Will remove Math.min when problem is figure out.
readonly property real mediumFontPixelSize: Math.min(defaultFontPixelSize * ScreenToolsController.mediumFontPixelSizeRatio, ScreenToolsController.isMobile ? 10000 : 19)
......@@ -36,7 +42,6 @@ Item {
Text {
id: _textMeasure
text: "X"
property real fontWidth: contentWidth * (ScreenToolsController.testHighDPI ? 2 : 1)
property real fontHeight: contentHeight * (ScreenToolsController.testHighDPI ? 2 : 1)
}
......
......@@ -36,7 +36,6 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0
Rectangle {
anchors.fill: parent
color: qgcPal.window
z: QGroundControl.zOrderTopMost
......@@ -204,10 +203,11 @@ Rectangle {
}
Rectangle {
//anchors.margins: _defaultTextHeight * 2
//-- Fill entire screen, including behind tool bar
anchors.fill: parent
color: qgcPal.windowShadeDark
/* I think this takes too much space and is not exactly necessary
QGCLabel {
id: title
anchors.topMargin: _margin
......@@ -218,24 +218,27 @@ Rectangle {
font.pixelSize: ScreenTools.largeFontPixelSize
text: "Vehicle Setup"
}
*/
Rectangle {
//-- Limit height to available height (below tool bar)
anchors.topMargin: _margin
anchors.top: title.bottom
//anchors.top: title.bottom
height: mainWindow.avaiableHeight
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: qgcPal.window
Flickable {
id: buttonFlickable
ScrollView {
id: buttonScroll
width: _buttonWidth
anchors.topMargin: _defaultTextHeight / 2
anchors.top: parent.top
anchors.bottom: parent.bottom
contentWidth: _buttonWidth
contentHeight: buttonColumn.height
flickableDirection: Flickable.VerticalFlick
frameVisible: false
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
Column {
id: buttonColumn
......@@ -314,13 +317,15 @@ Rectangle {
}
} // Column
} // Flickable
} // ScrollView
Loader {
id: panelLoader
anchors.topMargin: _margin
anchors.bottomMargin: _margin
anchors.leftMargin: _defaultTextWidth
anchors.rightMargin: _defaultTextWidth
anchors.left: buttonFlickable.right
anchors.left: buttonScroll.right
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
......
......@@ -34,11 +34,11 @@ import QGroundControl.ScreenTools 1.0
Item {
id: mainWindow
property var _toolbar: toolbarLoader.item
readonly property string _planViewSource: "MissionEditor.qml"
readonly property string _setupViewSource: "SetupView.qml"
property real avaiableHeight: height - toolBar.height
Connections {
target: controller
......@@ -67,7 +67,7 @@ Item {
planViewLoader.visible = false
}
onShowToolbarMessage: _toolbar.showToolbarMessage(message)
onShowToolbarMessage: toolBar.showToolbarMessage(message)
// The following are use for unit testing only
......@@ -77,11 +77,6 @@ Item {
onShowSetupVehicleComponent: setupViewLoader.item.showVehicleComponentPanel(vehicleComponent)
}
// We delay load the following control to improve boot time
Component.onCompleted: {
toolbarLoader.source = "MainToolBar.qml"
}
// Detect tablet position
property var tabletPosition: QtPositioning.coordinate(37.803784, -122.462276)
PositionSource {
......@@ -97,41 +92,37 @@ Item {
}
}
Loader {
id: toolbarLoader
width: parent.width
height: item ? item.height : 0
MainToolBar {
id: toolBar
height: ScreenTools.isMobile ? (ScreenTools.isTinyScreen ? (mainWindow.width * 0.0666) : (mainWindow.width * 0.0444)) : ScreenTools.defaultFontPixelSize * 4
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
isBackgroundDark: flightView.isBackgroundDark
z: QGroundControl.zOrderTopMost
}
FlightDisplayView {
id: flightView
anchors.left: parent.left
anchors.right: parent.right
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom
visible: true
id: flightView
anchors.fill: parent
avaiableHeight: mainWindow.avaiableHeight
visible: true
}
Loader {
id: planViewLoader
anchors.left: parent.left
anchors.right: parent.right
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom
anchors.fill: parent
visible: false
property var tabletPosition: mainWindow.tabletPosition
}
Loader {
id: setupViewLoader
anchors.left: parent.left
anchors.right: parent.right
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
height: mainWindow.avaiableHeight
visible: false
property var tabletPosition: mainWindow.tabletPosition
}
}
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief QGC Main Tool GPS
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
import QGroundControl.Controls 1.0
Item {
id: gpsRoot
property real size: 50
property real percent: 0
width: size
height: size
Image {
source: "/qmlimages/Gps.svg"
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
anchors.fill: parent
opacity: (percent + 25) * 0.8
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg2474" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="airplane_topdown.svg" inkscape:version="0.46" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:version="0.32"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="78 206 72 72"
style="enable-background:new 78 206 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M85.4,213.4l1.6,2.7l-8.6,9.2c-0.5,0.5-0.5,1.4,0,1.9l2.2,2.6c0.8,0.9,2.2,1.1,3.2,0.4l9.3-6.3l12.5,17.4
l-23.4,28.5c-0.5,0.6-0.6,1.5-0.2,2.2l0.7,1.3c0.9,1.5,2.1,2.8,3.6,3.8l0.9,0.6c0.8,0.5,1.7,0.4,2.4-0.2l25.5-23.9
c0.6-0.6,1.6-0.6,2.2,0l4.9,4.4l5.8,3.5l1.6-0.5l4,0.8l-0.7-4l0.5-1.6l-3.5-5.8l-4.4-4.9c-0.6-0.6-0.5-1.6,0-2.2l23.9-25.5
c0.6-0.7,0.7-1.6,0.2-2.4l-0.6-0.9c-0.9-1.5-2.2-2.7-3.8-3.6l-1.3-0.7c-0.7-0.4-1.6-0.3-2.2,0.2l-28.5,23.4L96,221.1l6.3-9.3
c0.7-1,0.5-2.4-0.4-3.2l-2.6-2.2c-0.6-0.5-1.4-0.5-1.9,0l-9.2,8.6C88.1,214.9,85.4,213.4,85.4,213.4z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#66BD59;stroke:#FFFFFF;stroke-width:5;stroke-miterlimit:10;}
.st1{fill:none;stroke:#FFFFFF;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="36" cy="36" r="32.4"/>
<polyline class="st1" points="55.1,19.8 30.2,52.2 16.9,36.5 "/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:6;stroke-miterlimit:10;}
.st2{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:2;}
</style>
<path id="rect4360" inkscape:connector-curvature="0" class="st0" d="M14.4,65.5v-55c0-1.6,1.9-2.9,4.2-2.9h34.7
c2.4,0,4.2,1.3,4.2,2.9v55c0,1.6-1.9,2.9-4.2,2.9H18.7C16.3,68.4,14.4,67.1,14.4,65.5z"/>
<g id="g4222" transform="translate(-127.22081,216.20249)">
<path id="path4224" inkscape:connector-curvature="0" class="st1" d="M171.9-208c0,0.2-0.2,0.4-0.4,0.4H155c-0.2,0-0.4-0.2-0.4-0.4
v-4.2c0-0.2,0.2-0.4,0.4-0.4h16.5c0.2,0,0.4,0.2,0.4,0.4V-208L171.9-208L171.9-208z"/>
</g>
<path class="st2" d="M51.6,9.4H19.6c-2.2,0-3.9,1.3-3.9,2.8v52.9c0,1.6,1.7,2.8,3.9,2.8h31.9c2.2,0,3.9-1.3,3.9-2.8V12.2
C55.5,10.6,53.7,9.4,51.6,9.4z M20.6,24h30.1v8.2H20.6V24z M50.6,63.8H20.6v-8.2h30.1V63.8z M50.6,53.3H20.6v-8.2h30.1V53.3z
M50.6,42.8H20.6v-8.2h30.1V42.8z M50.6,21.7H20.6v-8.2h30.1V21.7z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="264 336 72 72" style="enable-background:new 264 336 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<circle class="st0" cx="300" cy="397.3" r="7.1"/>
<path class="st0" d="M300.7,388.2h-1c-2.4,0-4.4-2.2-4.4-5l-3.2-38.6c0-2.7,2-5,4.4-5h7.3c2.4,0,4.4,2.2,4.4,5l-3.1,38.6
C305,386,303.1,388.2,300.7,388.2z"/>
<g>
<path class="st0" d="M290,350.4c-8.9,1.9-17.1,6.3-23.7,12.9l5.7,5.6c5.1-5.1,11.3-8.6,18-10.4V350.4z"/>
<path class="st0" d="M310,350.4v8.2c6.8,1.8,13,5.3,18,10.4l5.7-5.6C327.1,356.7,318.9,352.3,310,350.4z"/>
</g>
<g>
<path class="st0" d="M289,370.4c-3.5,1.4-6.7,3.5-9.4,6.3l5.6,5.7c1.2-1.1,2.4-2.1,3.8-3V370.4z"/>
<path class="st0" d="M309,369.7v8.6c2.1,1,4.1,2.3,5.8,4l5.6-5.7C317.2,373.5,313.3,371.1,309,369.7z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F0493C;stroke:#FFFFFF;stroke-width:5;stroke-miterlimit:10;}
.st1{fill:none;stroke:#FFFFFF;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="36" cy="36" r="32.4"/>
<g>
<line class="st1" x1="21.6" y1="22.4" x2="50.4" y2="49.6"/>
<line class="st1" x1="22.4" y1="50.4" x2="49.6" y2="21.6"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="220 292 72 72" style="enable-background:new 220 292 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M234.4,310.4l-10-10c-1.1-1.1-1.1-2.9,0-3.9c1.1-1.1,2.9-1.1,3.9,0l10,10c7.7-5.7,18.6-5.1,25.5,1.8l-27.6,27.6
C229.3,328.9,228.7,318,234.4,310.4z M275.7,320.1c7,7,7.6,17.9,1.8,25.5l10,10c1.1,1.1,1.1,2.9,0,3.9c-1.1,1.1-2.9,1.1-3.9,0
l-10-10c-7.7,5.7-18.6,5.1-25.5-1.8l5.9-5.9l-4.9-4.9c-1.6-1.6-1.6-4.3,0-5.9c1.6-1.6,4.3-1.6,5.9,0l4.9,4.9l3.9-3.9L259,327
c-1.6-1.6-1.6-4.3,0-5.9c1.6-1.6,4.3-1.6,5.9,0l4.9,4.9L275.7,320.1z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:none;stroke:#FFFFFF;stroke-width:3.9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st5{fill:none;stroke:#FFFFFF;stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st6{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<rect id="rect3882" x="-245.5" y="497.4" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 -44.474 1024.2881)" class="st3" width="22.3" height="11.1"/>
<rect id="rect3884" x="-210.1" y="462" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -388.8625 -3.7341)" class="st3" width="22.3" height="11.1"/>
<path id="path3886" inkscape:connector-curvature="0" class="st3" d="M-230.5,471.4c-3.2,3.2-3.2,8.6,0,11.8l15.8,15.7l11.8-11.8
l-15.7-15.7C-221.9,468.2-227.2,468.2-230.5,471.4z"/>
<path id="path3888" inkscape:connector-curvature="0" class="st3" d="M-208.8,493.1c-4.3,4.3-4.3,11.4,0,15.7l15.7-15.7
C-197.4,488.8-204.5,488.8-208.8,493.1z"/>
<path id="path3890" inkscape:connector-curvature="0" class="st4" d="M-207.1,516.3c5.7,5.7,15,5.7,20.7,0c5.7-5.7,5.7-15,0-20.7"/>
<path id="path3892" inkscape:connector-curvature="0" class="st4" d="M-201.9,509.4c2.5,2.5,6.4,2.5,8.9,0c2.5-2.5,2.5-6.4,0-8.9"/>
<line id="line3894" class="st5" x1="-226.5" y1="495" x2="-222.5" y2="491.1"/>
<line id="line3896" class="st5" x1="-210.7" y1="479.3" x2="-206.8" y2="475.4"/>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st6" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-255 447 72 72" style="enable-background:new -255 447 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M-240.7,462.4c-7.9,0-14.3,6.4-14.3,14.3s6.4,14.3,14.3,14.3c1.3,0,2.4-1,2.6-2.2h0V465
C-238.1,463.6-239.3,462.4-240.7,462.4z"/>
<path class="st0" d="M-183,450.8c0-1.4-1.2-2.6-2.6-2.6c-0.6,0-1.1,0.2-1.6,0.5l-22.9,13.2h-20.6c-1.4,0-2.6,1.2-2.6,2.6v24.7h0
c0.2,1.3,1.2,2.3,2.6,2.3h18.3l25,14.5c0.5,0.4,1.1,0.7,1.8,0.7c1.4,0,2.6-1.2,2.6-2.6c0-0.1,0-0.2,0-0.3h0v-4.4v-44.1v-4.4h0
C-183,450.9-183,450.8-183,450.8z"/>
<path class="st0" d="M-213.1,511.3L-213.1,511.3c0-0.1-0.1-0.1-0.1-0.1c0,0,0,0,0-0.1l-7.9-13.8l0,0c-0.4-0.6-1.1-1-1.8-1v0h-6.9v0
c-0.4,0-0.7,0.1-1.1,0.3c-1.2,0.7-1.7,2.3-1,3.6c0.1,0.1,0.1,0.2,0.2,0.3l0,0l9.3,16c0,0,0,0,0,0c0,0,0,0,0,0l0.1,0.2l0,0
c0.8,1.1,2.3,1.5,3.4,0.8c0.1-0.1,0.3-0.2,0.4-0.3l0,0l4.8-2.8l0,0C-212.8,513.7-212.5,512.4-213.1,511.3L-213.1,511.3z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="quad_icone.svg" inkscape:version="0.48.5 r10040"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="214 286 72 72"
style="enable-background:new 214 286 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;stroke:#FFFFFF;}
.st1{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;}
.st2{fill:none;stroke:#FFFFFF;stroke-width:3;}
.st3{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:3;}
</style>
<defs>
<inkscape:path-effect vertical_pattern="false" id="path-effect4881" spacing="0" fuse_tolerance="0" copytype="repeated" effect="skeletal" prop_units="false" prop_scale="1" scale_y_rel="false" normal_offset="0" pattern="M 0,0 1,0" is_visible="true" tang_offset="0">
</inkscape:path-effect>
<inkscape:path-effect id="path-effect3765" bendpath="m 110,180 140,0" effect="bend_path" prop_scale="1" scale_y_rel="false" vertical="false" is_visible="true">
</inkscape:path-effect>
</defs>
<sodipodi:namedview inkscape:cy="221.0125" bordercolor="#666666" showgrid="true" borderopacity="1.0" inkscape:cx="282.69484" inkscape:zoom="2.8" pagecolor="#ffffff" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="1017" inkscape:window-maximized="1" inkscape:guide-bbox="true" inkscape:current-layer="layer1" inkscape:window-width="1920" id="base" showguides="true" inkscape:document-units="px" inkscape:window-x="-8" inkscape:window-y="-8">
<sodipodi:guide id="guide2985" position="250,420" orientation="1,0"></sodipodi:guide>
<inkscape:grid type="xygrid" snapvisiblegridlinesonly="true" id="grid2987" enabled="true" empspacing="10" visible="true">
</inkscape:grid>
<sodipodi:guide id="guide2989" position="270,250" orientation="0,1"></sodipodi:guide>
</sodipodi:namedview>
<g>
<path id="path2991" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="20" sodipodi:ry="20" class="st0" d="
M230.5,299.3c0,1.8-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2S230.5,297.5,230.5,299.3z"/>
<path id="path3761" sodipodi:start="1.374765" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="50" sodipodi:end="6.4866523" sodipodi:open="true" sodipodi:ry="50" class="st1" d="
M229.2,308.8c-5.3,1-10.4-2.4-11.4-7.6c-1-5.3,2.4-10.4,7.6-11.4c5.3-1,10.4,2.4,11.4,7.6c0.3,1.3,0.2,2.6,0,3.8"/>
<path id="path2991-6" inkscape:transform-center-x="-140.5" inkscape:transform-center-y="-140.5" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="20" sodipodi:ry="20" class="st0" d="
M272.7,302.5c-1.8,0-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2s3.2,1.4,3.2,3.2S274.5,302.5,272.7,302.5z"/>
<path id="path3761-1" inkscape:transform-center-x="-140.5" inkscape:transform-center-y="-140.50478" sodipodi:start="1.374765" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="50" sodipodi:end="6.4866523" sodipodi:open="true" sodipodi:ry="50" class="st1" d="
M263.2,301.2c-1-5.3,2.4-10.4,7.6-11.4c5.3-1,10.4,2.4,11.4,7.6c1,5.3-2.4,10.4-7.6,11.4c-1.3,0.3-2.6,0.2-3.8,0"/>
<path id="path2991-9" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="20" sodipodi:ry="20" class="st0" d="
M269.5,344.7c0-1.8,1.4-3.2,3.2-3.2s3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2S269.5,346.5,269.5,344.7z"/>
<path id="path3761-2" sodipodi:start="1.374765" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="50" sodipodi:end="6.4866523" sodipodi:open="true" sodipodi:ry="50" class="st1" d="
M270.8,335.2c5.3-1,10.4,2.4,11.4,7.6c1,5.3-2.4,10.4-7.6,11.4c-5.3,1-10.4-2.4-11.4-7.6c-0.3-1.3-0.2-2.6,0-3.8"/>
<path id="path2991-6-9" inkscape:transform-center-x="140.5" inkscape:transform-center-y="140.50002" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="20" sodipodi:ry="20" class="st0" d="
M227.3,341.5c1.8,0,3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2S225.5,341.5,227.3,341.5z"/>
<path id="path3761-1-5" inkscape:transform-center-x="140.5" inkscape:transform-center-y="140.50476" sodipodi:start="1.374765" sodipodi:type="arc" sodipodi:cy="110" sodipodi:cx="110" sodipodi:rx="50" sodipodi:end="6.4866523" sodipodi:open="true" sodipodi:ry="50" class="st1" d="
M236.8,342.8c1,5.3-2.4,10.4-7.6,11.4c-5.3,1-10.4-2.4-11.4-7.6c-1-5.3,2.4-10.4,7.6-11.4c1.3-0.3,2.6-0.2,3.8,0"/>
</g>
<line class="st2" x1="227.3" y1="344.7" x2="272.7" y2="299.3"/>
<line class="st2" x1="272.7" y1="344.7" x2="227.3" y2="299.3"/>
<circle class="st3" cx="250" cy="322" r="13"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:none;stroke:#FFFFFF;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st5{fill:#FFFFFF;}
.st6{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<line class="st4" x1="-214" y1="479.9" x2="-214" y2="459.8"/>
<circle class="st5" cx="-227" cy="497" r="4.1"/>
<path class="st6" d="M-237,481.9v30.3h46.8v-30.3H-237z M-227,505.7c-4.8,0-8.7-3.9-8.7-8.7s3.9-8.7,8.7-8.7c4.8,0,8.7,3.9,8.7,8.7
S-222.2,505.7-227,505.7z M-200.1,505.7c-4.8,0-8.7-3.9-8.7-8.7s3.9-8.7,8.7-8.7c4.8,0,8.7,3.9,8.7,8.7S-195.3,505.7-200.1,505.7z"
/>
<circle class="st5" cx="-200.1" cy="497" r="4.1"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{opacity:0.5;fill:#FFFFFF;}
.st5{opacity:0.6;fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st4" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st5" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st4" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st4" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st4" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st4" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st4" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st4" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:#FFFFFF;}
.st5{opacity:0.5;fill:#FFFFFF;}
.st6{opacity:0.6;fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st5" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st6" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st5" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st5" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:#FFFFFF;}
.st5{opacity:0.6;fill:#FFFFFF;}
.st6{opacity:0.5;fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st4" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st5" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st6" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st6" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:#FFFFFF;}
.st5{opacity:0.5;fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st4" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st4" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st5" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st5" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg3852" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:cc="http://creativecommons.org/ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" sodipodi:docname="gps.svg" inkscape:version="0.91 r13725"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-250 452 72 72"
style="enable-background:new -250 452 72 72;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:none;stroke:#EB008B;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#224A80;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st4{fill:#FFFFFF;}
.st5{opacity:0.5;fill:#FFFFFF;}
</style>
<title id="title4758">GPS</title>
<sodipodi:namedview inkscape:cy="55" bordercolor="#666666" showgrid="false" borderopacity="1" objecttolerance="10" guidetolerance="10" inkscape:cx="55" inkscape:zoom="11.136364" gridtolerance="10" pagecolor="#808080" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="480" inkscape:current-layer="svg3852" inkscape:window-width="640" id="namedview3929">
</sodipodi:namedview>
<g id="Layer_2" class="st0">
</g>
<g id="ex_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_3" class="st0">
</g>
<g id="ex_thin" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy" class="st0">
</g>
<g id="em_thick" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_4" class="st0">
<g id="g3861" class="st1">
<rect id="rect3863" x="-286.1" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3865" class="st2" cx="-258" cy="348.8" r="28.2"/>
</g>
<g id="g3867" class="st1">
<rect id="rect3869" x="-221.7" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3871" class="st2" cx="-193.5" cy="348.8" r="28.2"/>
</g>
<g id="g3873" class="st1">
<rect id="rect3875" x="-158.5" y="320.7" class="st2" width="56.3" height="56.3"/>
<circle id="circle3877" class="st2" cx="-130.3" cy="348.8" r="28.2"/>
</g>
</g>
<g id="Layer_2_copy_2" class="st0">
<g id="g3905" class="st1">
<rect id="rect3907" x="-286.1" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3909" class="st2" cx="-258" cy="453.5" r="28.2"/>
</g>
<g id="g3911" class="st1">
<rect id="rect3913" x="-221.7" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3915" class="st2" cx="-193.5" cy="453.5" r="28.2"/>
</g>
<g id="g3917" class="st1">
<rect id="rect3919" x="-158.5" y="425.3" class="st2" width="56.3" height="56.3"/>
<circle id="circle3921" class="st2" cx="-130.3" cy="453.5" r="28.2"/>
</g>
</g>
<g id="hornet" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_2_copy_5" class="st0">
</g>
<g id="hornet_THIN" transform="matrix(-1,0,0,-1,111.82126,108.29692)">
</g>
<g id="Layer_6" class="st0">
<polygon id="polygon3927" class="st3" points="-264.6,453.2 -269.5,453.2 -269.5,494.2 -246.6,494.2 -246.6,453.2 -251.5,453.2
-251.5,446.7 -264.6,446.7 "/>
</g>
<rect x="-250" y="509.6" class="st4" width="8.6" height="14.4"/>
<rect x="-234.2" y="495.2" class="st4" width="8.6" height="28.8"/>
<rect x="-218.3" y="480.8" class="st4" width="8.6" height="43.2"/>
<rect x="-202.5" y="466.4" class="st4" width="8.6" height="57.6"/>
<rect x="-186.6" y="452" class="st5" width="8.6" height="72"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_3" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="8 672 72 72"
style="enable-background:new 8 672 72 72;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;stroke:#DE2F26;stroke-width:6;stroke-miterlimit:10;}
.st1{fill:#FFFFFF;}
</style>
<path id="path2231" class="st0" d="M76,732.5l-29.8-51.6c-0.5-0.8-1.3-1.3-2.3-1.3c-0.9,0-1.8,0.5-2.3,1.3L12,732.5
c-0.5,0.8-0.5,1.8,0,2.6c0.5,0.8,1.3,1.3,2.3,1.3h59.6c0.9,0,1.8-0.5,2.3-1.3C76.5,734.3,76.5,733.3,76,732.5z"/>
<polygon id="polygon2233" class="st1" points="20.6,730.1 67.4,730.1 44,689.5 "/>
<path id="path2235" d="M41.6,715.3c0.1,1.2,0.3,2.1,0.6,2.7c0.3,0.6,0.8,0.9,1.6,0.9c0,0,0.2,0,0.2,0c0.8,0,1.3-0.3,1.6-0.9
c0.3-0.6,0.5-1.5,0.6-2.7l0.7-9.5c0.1-1.8,0.2-3.2,0.2-4c0-1.1-0.3-1.9-0.9-2.6c-0.6-0.6-1.4-0.9-2.3-0.9c-0.9,0-1.7,0.3-2.3,0.9
c-0.6,0.6-0.9,1.5-0.9,2.6c0,0.8,0.1,2.1,0.2,4L41.6,715.3z"/>
<circle id="circle2237" cx="44" cy="724.6" r="3.3"/>
</svg>
......@@ -27,7 +27,7 @@ This file is part of the QGROUNDCONTROL project
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.3
import QtQuick 2.5
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
......@@ -39,275 +39,232 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
Rectangle {
id: toolBarHolder
anchors.left: parent.left
anchors.right: parent.right
height: toolBarHeight
color: qgcPal.window
id: toolBar
color: isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5)
QGCPalette { id: qgcPal; colorGroupEnabled: true }
property var activeVehicle: multiVehicleManager.activeVehicle
property var activeVehicle: multiVehicleManager.activeVehicle
property bool isMessageImportant: activeVehicle ? !activeVehicle.messageTypeNormal && !activeVehicle.messageTypeNone : false
property bool isBackgroundDark: true
readonly property real toolBarHeight: ScreenTools.defaultFontPixelHeight * 3
property int cellSpacerSize: ScreenTools.isMobile ? getProportionalDimmension(6) : getProportionalDimmension(4)
readonly property int cellHeight: toolBarHeight * 0.75
/*
Dev System (Mac OS)
qml: Main Window Width: 1008
qml: Toolbar height: 51.2
qml: Default font: 12.8
qml: Font (.75): 9.600000000000001
qml: Font (.85): 10.88
qml: Font 1.5): 19.200000000000003
qml: Default Font Width: 8.328125
qml: Default Font Height: 12.8
qml: --
qml: Real Font Height: 16
qml: fontHRatio: 1
qml: --
qml: cellHeight: 38
qml: tbFontSmall: 10
qml: tbFontNormal: 12
qml: tbFontLarge: 18
qml: tbSpacing: 9.54
Nexus 9
qml: Main Window Width: 2048
qml: Toolbar height: 90.9312
qml: Default font: 38
qml: Font (.75): 28.5
qml: Font (.85): 32.3
qml: Font 1.5): 57
qml: Default Font Width: 20.0625
qml: Default Font Height: 38
qml: --
qml: Real Font Height: 38
qml: fontHRatio: 2.375
qml: --
qml: cellHeight: 68
qml: tbFontSmall: 23.75
qml: tbFontNormal: 28.5
qml: tbFontLarge: 42.75
qml: tbSpacing: 16.87552
Nexus 7
qml: Main Window Width: 1920
qml: Toolbar height: 85.248
qml: Default font: 38
qml: Font (.75): 28.5
qml: Font (.85): 32.3
qml: Font 1.5): 57
qml: Default Font Width: 20.140625
qml: Default Font Height: 38
qml: --
qml: Real Font Height: 38
qml: fontHRatio: 2.375
qml: --
qml: cellHeight: 63
qml: tbFontSmall: 23.75
qml: tbFontNormal: 28.5
qml: tbFontLarge: 42.75
qml: tbSpacing: 15.820800000000002
Nexus 4
qml: Main Window Width: 1196
qml: Toolbar height: 79.65360000000001
qml: Default font: 38
qml: Font (.75): 28.5
qml: Font (.85): 32.3
qml: Font 1.5): 57
qml: Default Font Width: 20.140625
qml: Default Font Height: 38
qml: --
qml: Real Font Height: 38
qml: fontHRatio: 2.375
qml: --
qml: cellHeight: 59
qml: tbFontSmall: 23.75
qml: tbFontNormal: 28.5
qml: tbFontLarge: 42.75
qml: tbSpacing: 9.85504
*/
readonly property int cellHeight: height * 0.75
readonly property real horizontalMargins: ScreenTools.defaultFontPixelWidth / 2
readonly property real verticalMargins: ScreenTools.defaultFontPixelHeight / 4
readonly property real tbFontSmall: 10 * ScreenTools.fontHRatio
readonly property real tbFontNormal: 12 * ScreenTools.fontHRatio
readonly property real tbFontLarge: 18 * ScreenTools.fontHRatio
readonly property var colorBlue: "#1a6eaa"
readonly property var colorGreen: "#329147"
readonly property var colorRed: "#942324"
readonly property var colorOrange: "#a76f26"
readonly property var colorWhite: "#f0f0f0"
readonly property real tbSpacing: ScreenTools.isMobile ? toolBar.width * 0.00824 : 9.54
property var colorOrangeText: (qgcPal.globalTheme === QGCPalette.Light) ? "#b75711" : "#ea8225"
property var colorRedText: (qgcPal.globalTheme === QGCPalette.Light) ? "#ee1112" : "#ef2526"
property var colorGreenText: (qgcPal.globalTheme === QGCPalette.Light) ? "#046b1b" : "#00d930"
property var colorWhiteText: (qgcPal.globalTheme === QGCPalette.Light) ? "#343333" : "#f0f0f0"
readonly property var colorGreen: "#05f068"
readonly property var colorOrange: "#f0ab06"
readonly property var colorRed: "#fc4638"
readonly property var colorGrey: "#7f7f7f"
readonly property var colorBlue: "#636efe"
readonly property var colorWhite: "#ffffff"
MainToolBarController { id: _controller }
function showToolbarMessage(message) {
toolBarMessage.text = message
if (toolBarMessage.contentHeight > toolBarMessageCloseButton.height) {
toolBarHolder.height = toolBarHeight + toolBarMessage.contentHeight + (verticalMargins * 2)
} else {
toolBarHolder.height = toolBarHeight + toolBarMessageCloseButton.height + (verticalMargins * 2)
}
toolBarMessageArea.visible = true
}
function getProportionalDimmension(val) {
return toolBarHeight * val / 40
}
function getMessageColor() {
if (activeVehicle.messageTypeNone)
return qgcPal.button;
if (activeVehicle.messageTypeNorma)
return colorBlue;
if (activeVehicle.messageTypeWarning)
return colorOrange;
if (activeVehicle.messageTypeError)
return colorRed;
// Cannot be so make make it obnoxious to show error
return "purple";
}
function getMessageIcon() {
if (activeVehicle.messageTypeNormal || activeVehicle.messageTypeNone)
return "qrc:/res/Megaphone";
else
return "qrc:/res/Yield";
}
function getBatteryIcon() {
if(activeVehicle.batteryPercent < 20.0)
return "qrc:/res/Battery_0";
else if(activeVehicle.batteryPercent < 40.0)
return "qrc:/res/Battery_20";
else if(activeVehicle.batteryPercent < 60.0)
return "qrc:/res/Battery_40";
else if(activeVehicle.batteryPercent < 80.0)
return "qrc:/res/Battery_60";
else if(activeVehicle.batteryPercent < 90.0)
return "qrc:/res/Battery_80";
else
return "qrc:/res/Battery_100";
}
function getBatteryColor() {
if (activeVehicle.batteryPercent > 40.0)
return colorGreen;
if(activeVehicle.batteryPercent > 0.01)
return colorRed;
// This means there is no battery level data
return colorBlue;
}
function getSatelliteColor() {
// No GPS data
if (activeVehicle.satelliteCount < 0)
return qgcPal.button
// No Lock
if(activeVehicle.satelliteLock < 2)
return colorRed;
// 2D Lock
if(activeVehicle.satelliteLock === 2)
return colorBlue;
// Lock is 3D or more
return colorGreen;
}
function getRSSIColor(value) {
if(value < 10)
return colorRed;
if(value < 50)
return colorOrange;
return colorGreen;
}
function showMavStatus() {
return (multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout === 0 && _controller.connectionCount > 0);
}
//-------------------------------------------------------------------------
//-- Main menu for Mobile Devices
Menu {
id: mobileMenu
ExclusiveGroup { id: mainMenuGroup }
MenuItem {
id: flyViewShowing
text: "Fly"
checkable: true
checked: true
exclusiveGroup: mainMenuGroup
onTriggered: {
checked = true
_controller.onFlyView();
}
}
Component.onCompleted: {
//-- TODO: Get this from the actual state
flyButton.checked = true
}
MenuItem {
id: setupViewShowing
text: "Setup"
checkable: true
exclusiveGroup: mainMenuGroup
Connections {
target: controller
onShowFlyView: { flyButton.checked = true }
onShowPlanView: { planButton.checked = true }
onShowSetupView:{ setupButton.checked = true }
}
onTriggered: {
checked = true
Row {
id: viewRow
height: cellHeight
spacing: tbSpacing
anchors.left: parent.left
anchors.leftMargin: tbSpacing
anchors.verticalCenter: parent.verticalCenter
ExclusiveGroup { id: mainActionGroup }
QGCToolBarButton {
id: setupButton
width: cellHeight * 1.3
height: cellHeight
exclusiveGroup: mainActionGroup
source: "qrc:/res/Gears"
onClicked: {
_controller.onSetupView();
}
}
MenuItem {
id: planViewShowing
text: "Plan"
checkable: true
exclusiveGroup: mainMenuGroup
Rectangle {
height: cellHeight
width: 1
color: Qt.rgba(1,1,1,0.45)
}
onTriggered: {
checked = true
QGCToolBarButton {
id: planButton
width: cellHeight * 1.3
height: cellHeight
exclusiveGroup: mainActionGroup
source: "qrc:/res/Plan"
onClicked: {
_controller.onPlanView();
}
}
MenuSeparator { }
MenuItem {
text: "QGroundControl Settings"
onTriggered: controller.showSettings()
Rectangle {
height: cellHeight
width: 1
color: Qt.rgba(1,1,1,0.45)
}
} // Menu
/*
Row {
id: toolRow
height: cellHeight
spacing: getProportionalDimmension(4)
}
*/
Loader {
id: desktopToolsLoader
height: cellHeight
x: horizontalMargins
y: (toolBarHeight - cellHeight) / 2
sourceComponent: ScreenTools.isMobile ? undefined : desktopTools
}
//---------------------------------------------------------------------
//-- Indicators
Row {
id: row12
x: horizontalMargins + (ScreenTools.isMobile ? 0: desktopToolsLoader.item.width)
height: cellHeight
spacing: cellSpacerSize
anchors.top: desktopToolsLoader.top
anchors.verticalCenter: desktopToolsLoader.verticalCenter
//-- "Hamburger" menu for Mobile Devices
Item {
id: actionButton
visible: ScreenTools.isMobile
height: cellHeight
width: cellHeight
Image {
id: buttomImg
anchors.fill: parent
source: "/qmlimages/buttonMore.svg"
mipmap: true
smooth: true
antialiasing: true
fillMode: Image.PreserveAspectFit
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: {
if (mouse.button == Qt.LeftButton)
{
mobileMenu.popup();
}
}
QGCToolBarButton {
id: flyButton
width: cellHeight * 1.3
height: cellHeight
exclusiveGroup: mainActionGroup
source: "qrc:/res/PaperPlane"
onClicked: {
_controller.onFlyView();
}
}
//-- Separator if Hamburger menu is visible
Rectangle {
visible: actionButton.visible
height: cellHeight
width: cellHeight
color: "#00000000"
anchors.verticalCenter: parent.verticalCenter
height: cellHeight
width: 1
color: Qt.rgba(1,1,1,0.45)
}
Loader {
id: activeVehicleLoader
visible: showMavStatus()
source: multiVehicleManager.activeVehicleAvailable ? "MainToolBarActiveVehicleComponent.qml" : ""
}
property real cellHeight: toolBarHolder.cellHeight
property real cellSpacerSize: toolBarHolder.cellSpacerSize
Item {
visible: showMavStatus() && !connectionStatus.visible
height: cellHeight
width: (toolBar.width - viewRow.width - connectRow.width)
anchors.left: viewRow.right
anchors.leftMargin: tbSpacing * 2
anchors.verticalCenter: parent.verticalCenter
Loader {
source: multiVehicleManager.activeVehicleAvailable ? "MainToolBarIndicators.qml" : ""
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
}
}
Rectangle {
id: connectionStatus
width: getProportionalDimmension(160)
height: cellHeight
visible: (_controller.connectionCount > 0 && multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout != 0)
anchors.verticalCenter: parent.verticalCenter
color: "#00000000"
border.color: "#00000000"
border.width: 0
QGCLabel {
id: connectionStatusText
text: qsTr("CONNECTION LOST")
font.pixelSize: ScreenTools.defaultFontPixelSize
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
color: colorRedText
}
}
} // Row
QGCLabel {
id: connectionStatus
visible: (_controller.connectionCount > 0 && multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout != 0)
text: "CONNECTION LOST"
font.pixelSize: tbFontLarge
font.weight: Font.DemiBold
color: colorRed
anchors.left: viewRow.right
anchors.leftMargin: tbSpacing * 2
anchors.verticalCenter: parent.verticalCenter
}
Row {
id: connectRow
anchors.rightMargin: verticalMargins
height: cellHeight
spacing: tbSpacing
anchors.rightMargin: tbSpacing
anchors.right: parent.right
anchors.top: desktopToolsLoader.top
anchors.verticalCenter: desktopToolsLoader.verticalCenter
height: desktopToolsLoader.height
spacing: cellSpacerSize
anchors.verticalCenter: parent.verticalCenter
Menu {
id: connectMenu
......@@ -336,20 +293,53 @@ Rectangle {
}
}
QGCButton {
id: connectButton
width: getProportionalDimmension(100)
visible: _controller.connectionCount === 0
text: qsTr("Connect")
menu: connectMenu
Rectangle {
height: cellHeight
width: 1
color: Qt.rgba(1,1,1,0.45)
}
QGCButton {
id: disconnectButton
width: getProportionalDimmension(100)
visible: _controller.connectionCount === 1
text: qsTr("Disconnect")
QGCToolBarButton {
id: connectButton
width: cellHeight * 1.3
height: cellHeight
visible: _controller.connectionCount === 0
source: "/qmlimages/Connect.svg"
checked: false
onClicked: {
checked = false
connectMenu.popup()
/*
console.log("Main Window Width: " + mainWindow.width)
console.log("Toolbar height: " + toolBar.height)
console.log("Default font: " + ScreenTools.defaultFontPixelSize)
console.log("Font (.75): " + ScreenTools.defaultFontPixelSize * 0.75)
console.log("Font (.85): " + ScreenTools.defaultFontPixelSize * 0.85)
console.log("Font 1.5): " + ScreenTools.defaultFontPixelSize * 1.5)
console.log("Default Font Width: " + ScreenTools.defaultFontPixelWidth)
console.log("Default Font Height: " + ScreenTools.defaultFontPixelHeight)
console.log("--")
console.log("Real Font Height: " + ScreenTools.realFontHeight)
console.log("fontHRatio: " + ScreenTools.fontHRatio)
console.log("--")
console.log("cellHeight: " + cellHeight)
console.log("tbFontSmall: " + tbFontSmall);
console.log("tbFontNormal: " + tbFontNormal);
console.log("tbFontLarge: " + tbFontLarge);
console.log("tbSpacing: " + tbSpacing);
*/
}
}
QGCToolBarButton {
id: disconnectButton
width: cellHeight * 1.3
height: cellHeight
visible: _controller.connectionCount === 1
source: "/qmlimages/Disconnect.svg"
checked: false
onClicked: {
checked = false
_controller.onDisconnect("");
}
}
......@@ -372,131 +362,63 @@ Rectangle {
}
}
QGCButton {
id: multidisconnectButton
width: getProportionalDimmension(100)
text: "Disconnect"
visible: _controller.connectionCount > 1
menu: disconnectMenu
QGCToolBarButton {
id: multidisconnectButton
width: cellHeight * 1.3
height: cellHeight
visible: _controller.connectionCount > 1
source: "/qmlimages/Disconnect.svg"
checked: false
onClicked: {
checked = false
disconnectMenu.popup()
}
}
} // Row
}
// Progress bar
Rectangle {
id: progressBar
anchors.top: desktopToolsLoader.bottom
height: getProportionalDimmension(3)
anchors.bottom: parent.bottom
height: toolBar.height * 0.05
width: parent.width * _controller.progressBarValue
color: qgcPal.text
color: colorGreen
}
// Toolbar message area
Rectangle {
id: toolBarMessageArea
anchors.leftMargin: horizontalMargins
anchors.rightMargin: horizontalMargins
anchors.topMargin: verticalMargins
anchors.bottomMargin: verticalMargins
anchors.top: progressBar.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: qgcPal.windowShadeDark
visible: false
id: toolBarMessageArea
x: toolBar.parent.width * 0.225
y: toolBar.parent.height - (ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6)
width: toolBar.parent.width * 0.55
height: ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6
color: Qt.rgba(0,0,0,0.65)
visible: false
QGCLabel {
id: toolBarMessage
anchors.fill: parent
wrapMode: Text.WordWrap
color: qgcPal.warningText
id: toolBarMessage
width: toolBarMessageArea.width - toolBarMessageCloseButton.width
wrapMode: Text.WordWrap
color: qgcPal.warningText
lineHeightMode: Text.ProportionalHeight
lineHeight: 1.25
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.margins: tbSpacing
}
QGCButton {
id: toolBarMessageCloseButton
anchors.rightMargin: horizontalMargins
anchors.top: parent.top
anchors.right: parent.right
primary: true
text: "Close Message"
id: toolBarMessageCloseButton
primary: true
text: "Close Message"
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins: tbSpacing
onClicked: {
parent.visible = false
toolBarHolder.height = toolBarHeight
toolBarMessageArea.visible = false
_controller.onToolBarMessageClosed()
}
}
}
Component {
id: desktopTools
//---------------------------------------------------------------------
//-- Main menu for Non Mobile Devices (Chevron Buttons)
Row {
id: row11
height: cellHeight
spacing: -getProportionalDimmension(12)
Connections {
target: ScreenTools
onRepaintRequested: {
setupButton.repaintChevron = true;
planButton.repaintChevron = true;
flyButton.repaintChevron = true;
}
}
Connections {
target:controller
onShowFlyView: { flyButton.checked = true }
onShowPlanView: { planButton.checked = true }
onShowSetupView:{ setupButton.checked = true }
}
ExclusiveGroup { id: mainActionGroup }
QGCToolBarButton {
id: setupButton
width: getProportionalDimmension(90)
height: cellHeight
exclusiveGroup: mainActionGroup
text: "Setup"
onClicked: {
checked = true
_controller.onSetupView();
}
z: 1000
}
QGCToolBarButton {
id: planButton
width: getProportionalDimmension(90)
height: cellHeight
exclusiveGroup: mainActionGroup
text: "Plan"
onClicked: {
checked = true
_controller.onPlanView();
}
z: 900
}
QGCToolBarButton {
id: flyButton
width: getProportionalDimmension(90)
height: cellHeight
exclusiveGroup: mainActionGroup
text: "Fly"
checked: true
onClicked: {
checked = true
_controller.onFlyView();
}
z: 800
}
} // Row
} // Component - desktopTools
} // Rectangle
......@@ -21,94 +21,273 @@ This file is part of the QGROUNDCONTROL project
======================================================================*/
import QtQuick 2.3
import QtQuick 2.5
import QtQuick.Controls 1.2
import QtGraphicalEffects 1.0
import QtQuick.Controls.Styles 1.2
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
Row {
height: cellHeight
spacing: cellSpacerSize
spacing: tbSpacing * 2
function getSatStrength(count) {
if (count < 1)
return 0
if (count < 4)
return 20
if (count < 6)
return 40
if (count < 8)
return 60
if (count < 10)
return 80
return 100
}
Rectangle {
id: messages
width: (activeVehicle.messageCount > 99) ? getProportionalDimmension(65) : getProportionalDimmension(60)
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
color: getMessageColor()
border.color: "#00000000"
border.width: 0
property bool showTriangle: false
function getMessageColor() {
if (activeVehicle.messageTypeNone)
return colorGrey
if (activeVehicle.messageTypeNormal)
return colorBlue;
if (activeVehicle.messageTypeWarning)
return colorOrange;
if (activeVehicle.messageTypeError)
return colorRed;
// Cannot be so make make it obnoxious to show error
console.log("Invalid vehicle message type")
return "purple";
}
Image {
id: messageIcon
source: getMessageIcon();
height: getProportionalDimmension(16)
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: getProportionalDimmension(8)
function getBatteryVoltageText() {
if (activeVehicle.batteryVoltage > 0) {
//-- TODO: Need number of cells so I can show cell voltage instead of total voltage
//if (battNumCells && battNumCells.value) {
// return (activeVehicle.batteryVoltage / battNumCells.value).toFixed(2) + 'V'
//} else {
return activeVehicle.batteryVoltage.toFixed(1) + 'V'
//}
}
return 'N/A';
}
function getBatteryPercentageText() {
if(activeVehicle.batteryPercent > 98.9) {
return "100%"
}
if(activeVehicle.batteryPercent > 0.1) {
return activeVehicle.batteryPercent.toFixed(0) + "%"
}
return "N/A"
}
function getBatteryColor() {
if(activeVehicle.batteryPercent > 75) {
return colorGreen
}
if(activeVehicle.batteryPercent > 50) {
return colorOrange
}
if(activeVehicle.batteryPercent > 0.1) {
return colorRed
}
return colorGrey
}
//-------------------------------------------------------------------------
//-- Message Indicator
Item {
id: messages
width: cellHeight
height: cellHeight
visible: activeVehicle.messageCount
anchors.verticalCenter: parent.verticalCenter
Item {
id: messageTextRect
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
width: messages.width - messageIcon.width
QGCLabel {
id: messageText
text: (activeVehicle.messageCount > 0) ? activeVehicle.messageCount : ''
font.pixelSize: ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter
id: criticalMessage
anchors.fill: parent
visible: activeVehicle.messageCount > 0 && isMessageImportant
Image {
source: "/qmlimages/Yield.svg"
height: cellHeight * 0.75
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
cache: false
visible: isMessageImportant
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: colorWhite
}
SequentialAnimation {
id: loopAnimation
loops: Animation.Infinite
NumberAnimation { target: criticalMessage; property: "opacity"; duration: 1000; from: 0.25; to: 1 }
NumberAnimation { target: criticalMessage; property: "opacity"; duration: 1000; from: 1; to: 0.25 }
}
onVisibleChanged: {
if(messages.visible) {
loopAnimation.start()
} else {
loopAnimation.stop()
}
}
}
Image {
id: dropDown
source: "/qmlimages/arrow-down.png"
visible: (messages.showTriangle) && (activeVehicle.messageCount > 0)
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: getProportionalDimmension(3)
anchors.rightMargin: getProportionalDimmension(3)
}
Timer {
id: mouseOffTimer
interval: 2000;
running: false;
repeat: false
onTriggered: {
messages.showTriangle = false;
Item {
anchors.fill: parent
visible: !criticalMessage.visible
Image {
id: messageIcon
source: "/qmlimages/Megaphone.svg"
height: cellHeight * 0.5
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
visible: false
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
}
ColorOverlay {
anchors.fill: messageIcon
source: messageIcon
color: getMessageColor()
}
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: {
messages.showTriangle = true;
mouseOffTimer.start();
}
onClicked: {
var p = mapToItem(toolBarHolder, mouseX, mouseY);
var p = mapToItem(toolBar, mouseX, mouseY);
_controller.onEnterMessageArea(p.x, p.y);
}
}
}
//-------------------------------------------------------------------------
//-- GPS Indicator
Item {
id: satelitte
width: gpsRow.width * 1.1
height: cellHeight
Row {
id: gpsRow
height: parent.height
Image {
id: gpsIcon
source: "/qmlimages/Gps.svg"
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
width: cellHeight * 0.65
height: cellHeight * 0.5
opacity: activeVehicle.satelliteCount < 1 ? 0.5 : 1
anchors.verticalCenter: parent.verticalCenter
}
SignalStrength {
size: cellHeight * 0.5
percent: getSatStrength(activeVehicle.satelliteCount)
anchors.verticalCenter: parent.verticalCenter
}
}
QGCLabel {
text: activeVehicle.satelliteCount
font.pixelSize: tbFontSmall
color: colorWhite
opacity: activeVehicle.satelliteCount < 1 ? 0.5 : 1
anchors.top: parent.top
anchors.leftMargin: gpsIcon.width
anchors.left: parent.left
}
}
//-------------------------------------------------------------------------
//-- RC RSSI
Item {
id: rcRssi
width: rssiRow.width * 1.1
height: cellHeight
Row {
id: rssiRow
height: parent.height
Image {
source: "/qmlimages/RC.svg"
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
width: cellHeight * 0.65
height: cellHeight * 0.5
opacity: _controller.remoteRSSI < 1 ? 0.5 : 1
anchors.verticalCenter: parent.verticalCenter
}
SignalStrength {
size: cellHeight * 0.5
percent: _controller.remoteRSSI
anchors.verticalCenter: parent.verticalCenter
}
}
}
//-------------------------------------------------------------------------
//-- Battery Indicator
Item {
id: batteryStatus
width: battRow.width * 1.1
height: cellHeight
opacity: (activeVehicle.batteryVoltage > 0) ? 1 : 0.5
Row {
id: battRow
height: cellHeight
spacing: tbSpacing
anchors.horizontalCenter: parent.horizontalCenter
Column {
spacing: tbSpacing * 0.5
anchors.verticalCenter: parent.verticalCenter
Image {
id: batIcon
source: "/qmlimages/Battery.svg"
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
height: batPercent.height * 0.85
anchors.horizontalCenter: parent.horizontalCenter
}
QGCLabel {
text: (activeVehicle.batteryConsumed > 0) ? activeVehicle.batteryConsumed.toFixed(0) + 'mAh' : 'N/A';
font.pixelSize: tbFontSmall
color: getBatteryColor()
visible: QGroundControl.isAdvancedMode
anchors.horizontalCenter: parent.horizontalCenter
}
}
Column {
anchors.verticalCenter: parent.verticalCenter
QGCLabel {
id: batPercent
text: getBatteryPercentageText()
font.pixelSize: tbFontLarge
color: getBatteryColor()
anchors.horizontalCenter: parent.horizontalCenter
}
QGCLabel {
text: getBatteryVoltageText()
font.pixelSize: tbFontNormal
color: getBatteryColor()
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
}
//-------------------------------------------------------------------------
//-- Vehicle Selector
QGCButton {
width: ScreenTools.defaultFontPixelWidth * 13
height: cellHeight
width: ScreenTools.defaultFontPixelSize * 12
height: cellHeight * 0.75
text: "Vehicle " + activeVehicle.id
visible: vehicleMenuItems.length > 0
anchors.verticalCenter: parent.verticalCenter
text: "Vehicle " + activeVehicle.id
menu: vehicleMenu
......@@ -133,7 +312,7 @@ Row {
function updateVehicleMenu() {
// Remove old menu items
for (var i=0; i<vehicleMenuItems.length; i++) {
for (var i = 0; i < vehicleMenuItems.length; i++) {
vehicleMenu.removeItem(vehicleMenuItems[i])
}
vehicleMenuItems.length = 0
......@@ -155,40 +334,132 @@ Row {
}
}
//-------------------------------------------------------------------------
//-- Mode Selector
Rectangle {
id: satelitte
width: getProportionalDimmension(55)
Item {
width: selectorRow.width * 1.1
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
color: getSatelliteColor();
border.color: "#00000000"
border.width: 0
Row {
id: selectorRow
spacing: tbSpacing
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
Image {
width: cellHeight * 0.65
height: cellHeight * 0.65
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
source: "/qmlimages/Quad.svg"
anchors.verticalCenter: parent.verticalCenter
}
QGCLabel {
text: activeVehicle.flightMode
font.pixelSize: tbFontLarge
color: colorWhite
anchors.verticalCenter: parent.verticalCenter
}
}
Image {
source: "qrc:/res/Gps";
height: getProportionalDimmension(24)
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: getProportionalDimmension(6)
mipmap: true
smooth: true
Menu {
id: flightModesMenu
}
QGCLabel {
id: satelitteText
text: activeVehicle.satelliteCount >= 0 ? activeVehicle.satelliteCount : 'NA'
font.pixelSize: activeVehicle.satelliteCount >= 0 ? ScreenTools.defaultFontPixelSize : ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
Component {
id: flightModeMenuItemComponent
MenuItem {
checkable: true
checked: activeVehicle.flightMode === text
onTriggered: activeVehicle.flightMode = text
}
}
property var flightModesMenuItems: []
function updateFlightModesMenu() {
if (activeVehicle.flightModeSetAvailable) {
// Remove old menu items
for (var i = 0; i < flightModesMenuItems.length; i++) {
flightModesMenu.removeItem(flightModesMenuItems[i])
}
flightModesMenuItems.length = 0
// Add new items
for (var i = 0; i < activeVehicle.flightModes.length; i++) {
var menuItem = flightModeMenuItemComponent.createObject(null, { "text": activeVehicle.flightModes[i] })
flightModesMenuItems.push(menuItem)
flightModesMenu.insertItem(i, menuItem)
}
}
}
Component.onCompleted: updateFlightModesMenu()
Connections {
target: multiVehicleManager
onActiveVehicleChanged: parent.updateFlightModesMenu
}
MouseArea {
visible: activeVehicle.flightModeSetAvailable
anchors.fill: parent
onClicked: {
flightModesMenu.popup()
}
}
}
//-------------------------------------------------------------------------
//-- Arm/Disarm
Item {
width: armCol.width * 1.1
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
Row {
id: armCol
spacing: tbSpacing * 0.5
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: getProportionalDimmension(6)
horizontalAlignment: Text.AlignRight
color: colorWhite
Image {
width: cellHeight * 0.5
height: cellHeight * 0.5
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
source: activeVehicle.armed ? "/qmlimages/Disarmed.svg" : "/qmlimages/Armed.svg"
anchors.verticalCenter: parent.verticalCenter
}
QGCLabel {
text: activeVehicle.armed ? "Armed" : "Disarmed"
font.pixelSize: tbFontLarge
color: colorWhite
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea {
anchors.fill: parent
onClicked: {
activeVehicle.armed = !activeVehicle.armed
}
}
}
/*
property var colorOrangeText: (qgcPal.globalTheme === QGCPalette.Light) ? "#b75711" : "#ea8225"
property var colorRedText: (qgcPal.globalTheme === QGCPalette.Light) ? "#ee1112" : "#ef2526"
property var colorGreenText: (qgcPal.globalTheme === QGCPalette.Light) ? "#046b1b" : "#00d930"
property var colorWhiteText: (qgcPal.globalTheme === QGCPalette.Light) ? "#343333" : "#f0f0f0"
function getRSSIColor(value) {
if(value < 10)
return colorRed;
if(value < 50)
return colorOrange;
return colorGreen;
}
Rectangle {
id: rssiRC
width: getProportionalDimmension(55)
......@@ -280,147 +551,7 @@ Row {
}
}
Rectangle {
id: batteryStatus
width: activeVehicle.batteryConsumed < 0.0 ? getProportionalDimmension(60) : getProportionalDimmension(80)
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
color: getBatteryColor();
border.color: "#00000000"
border.width: 0
Image {
source: getBatteryIcon();
height: getProportionalDimmension(20)
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: getProportionalDimmension(6)
mipmap: true
smooth: true
}
QGCLabel {
visible: batteryStatus.visible && activeVehicle.batteryConsumed < 0.0
text: (activeVehicle.batteryVoltage > 0) ? activeVehicle.batteryVoltage.toFixed(1) + 'V' : '---';
font.pixelSize: ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
anchors.right: parent.right
anchors.rightMargin: getProportionalDimmension(6)
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignRight
color: colorWhite
}
Column {
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: getProportionalDimmension(6)
visible: batteryStatus.visible && activeVehicle.batteryConsumed >= 0.0
QGCLabel {
text: (activeVehicle.batteryVoltage > 0) ? activeVehicle.batteryVoltage.toFixed(1) + 'V' : '---';
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pixelSize: ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
color: colorWhite
}
QGCLabel {
text: (activeVehicle.batteryConsumed > 0) ? activeVehicle.batteryConsumed.toFixed(0) + 'mAh' : '---';
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pixelSize: ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
color: colorWhite
}
}
}
QGCButton {
width: ScreenTools.defaultFontPixelWidth * 11
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
text: activeVehicle.armed ? "Armed" : "Disarmed"
menu: Menu {
MenuItem {
enabled: !activeVehicle.armed
text: "Arm"
onTriggered: activeVehicle.armed = true
}
MenuItem {
enabled: activeVehicle.armed
text: "Disarm"
onTriggered: activeVehicle.armed = false
}
}
}
QGCButton {
width: ScreenTools.defaultFontPixelWidth * 16
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
text: activeVehicle.flightMode
menu: activeVehicle.flightModeSetAvailable ? flightModesMenu : null
Menu {
id: flightModesMenu
}
Component {
id: flightModeMenuItemComponent
MenuItem {
checkable: true
checked: activeVehicle.flightMode == text
onTriggered: activeVehicle.flightMode = text
}
}
property var flightModesMenuItems: []
function updateFlightModesMenu() {
if (activeVehicle.flightModeSetAvailable) {
// Remove old menu items
for (var i=0; i<flightModesMenuItems.length; i++) {
flightModesMenu.removeItem(flightModesMenuItems[i])
}
flightModesMenuItems.length = 0
// Add new items
for (var i=0; i<activeVehicle.flightModes.length; i++) {
var menuItem = flightModeMenuItemComponent.createObject(null, { "text": activeVehicle.flightModes[i] })
flightModesMenuItems.push(menuItem)
flightModesMenu.insertItem(i, menuItem)
}
}
}
Component.onCompleted: updateFlightModesMenu()
Connections {
target: multiVehicleManager
onActiveVehicleChanged: parent.updateFlightModesMenu
}
}
Rectangle {
width: ScreenTools.defaultFontPixelWidth * 4
height: cellHeight
anchors.verticalCenter: parent.verticalCenter
color: colorBlue
border.width: 0
visible: activeVehicle.hilMode
QGCLabel {
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: "HIL"
}
}
*/
} // Row
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief QGC Main Tool Signal Strength
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
import QGroundControl.Controls 1.0
Item {
id: signalRoot
property real size: 50
property real percent: 0
width: size
height: size
function getIcon() {
if (percent < 20)
return "/qmlimages/Signal0.svg"
if (percent < 40)
return "/qmlimages/Signal20.svg"
if (percent < 60)
return "/qmlimages/Signal40.svg"
if (percent < 80)
return "/qmlimages/Signal60.svg"
if (percent < 100)
return "/qmlimages/Signal80.svg"
return "/qmlimages/Signal100.svg"
}
Image {
source: getIcon()
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
anchors.fill: parent
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment