Commit c6b66c46 authored by Gus Grubba's avatar Gus Grubba

Merge pull request #2179 from mavlink/toolbarWork

Toolbar work
parents a120ffe7 1a960233
...@@ -65,7 +65,7 @@ cache: ...@@ -65,7 +65,7 @@ cache:
before_install: before_install:
- cd ${TRAVIS_BUILD_DIR} && git fetch --unshallow && git fetch --tags - cd ${TRAVIS_BUILD_DIR} && git fetch --unshallow && git fetch --all --tags
- if [ "${TRAVIS_OS_NAME}" = "linux" ]; then mkdir -p ~/.config/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/.config/QtProject/; fi - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then mkdir -p ~/.config/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/.config/QtProject/; fi
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then mkdir -p ~/Library/Preferences/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/Library/Preferences/QtProject/; fi - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then mkdir -p ~/Library/Preferences/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/Library/Preferences/QtProject/; fi
- if [ "${TRAVIS_OS_NAME}" = "android" ]; then wget https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/gstreamer-1.0-android-armv7-1.5.2.tar.bz2 && mkdir -p ${TRAVIS_BUILD_DIR}/gstreamer-1.0-android-armv7-1.5.2 && tar jxf gstreamer-1.0-android-armv7-1.5.2.tar.bz2 -C ${TRAVIS_BUILD_DIR}/gstreamer-1.0-android-armv7-1.5.2; fi - if [ "${TRAVIS_OS_NAME}" = "android" ]; then wget https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/gstreamer-1.0-android-armv7-1.5.2.tar.bz2 && mkdir -p ${TRAVIS_BUILD_DIR}/gstreamer-1.0-android-armv7-1.5.2 && tar jxf gstreamer-1.0-android-armv7-1.5.2.tar.bz2 -C ${TRAVIS_BUILD_DIR}/gstreamer-1.0-android-armv7-1.5.2; fi
...@@ -81,6 +81,7 @@ install: ...@@ -81,6 +81,7 @@ install:
&& sh -e /etc/init.d/xvfb start && sh -e /etc/init.d/xvfb start
; ;
elif [ "${TRAVIS_OS_NAME}" = "osx" ]; then elif [ "${TRAVIS_OS_NAME}" = "osx" ]; then
brew update;
brew update brew update
&& brew install qt5 && brew install qt5
&& export PATH=/usr/local/opt/qt5/bin:$PATH && export PATH=/usr/local/opt/qt5/bin:$PATH
......
...@@ -80,6 +80,25 @@ ...@@ -80,6 +80,25 @@
<file alias="XDelete.svg">src/FlightMap/Images/XDelete.svg</file> <file alias="XDelete.svg">src/FlightMap/Images/XDelete.svg</file>
<file alias="XDeleteBlack.svg">src/FlightMap/Images/XDeleteBlack.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>
<qresource prefix="/res"> <qresource prefix="/res">
...@@ -100,9 +119,6 @@ ...@@ -100,9 +119,6 @@
<file alias="Shutdown">resources/Shutdown.svg</file> <file alias="Shutdown">resources/Shutdown.svg</file>
<file alias="AntennaT">resources/Antenna_T.svg</file> <file alias="AntennaT">resources/Antenna_T.svg</file>
<file alias="AntennaRC">resources/Antenna_RC.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_0">resources/Battery_0.svg</file>
<file alias="Battery_20">resources/Battery_20.svg</file> <file alias="Battery_20">resources/Battery_20.svg</file>
<file alias="Battery_40">resources/Battery_40.svg</file> <file alias="Battery_40">resources/Battery_40.svg</file>
...@@ -112,6 +128,10 @@ ...@@ -112,6 +128,10 @@
<file alias="SystemLockScreen">resources/SystemLockScreen.svg</file> <file alias="SystemLockScreen">resources/SystemLockScreen.svg</file>
<file alias="SplashScreen">resources/SplashScreen.png</file> <file alias="SplashScreen">resources/SplashScreen.png</file>
<file alias="QGroundControlConnect">resources/QGroundControlConnect.svg</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>
<qresource prefix="/res/firmware"> <qresource prefix="/res/firmware">
......
...@@ -51,8 +51,11 @@ ...@@ -51,8 +51,11 @@
<!-- Main Window --> <!-- Main Window -->
<file alias="MainWindow.qml">src/ui/MainWindow.qml</file> <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="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 --> <!-- Vehicle Setup -->
<file alias="SetupView.qml">src/VehicleSetup/SetupView.qml</file> <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>
...@@ -74,14 +74,14 @@ static const struct Modes2Name rgModes2Name[] = { ...@@ -74,14 +74,14 @@ static const struct Modes2Name rgModes2Name[] = {
{ PX4_CUSTOM_MAIN_MODE_ACRO, 0, "Acro", true }, { PX4_CUSTOM_MAIN_MODE_ACRO, 0, "Acro", true },
{ PX4_CUSTOM_MAIN_MODE_STABILIZED, 0, "Stabilized", true }, { PX4_CUSTOM_MAIN_MODE_STABILIZED, 0, "Stabilized", true },
{ PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, "Rattitude", true }, { PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, "Rattitude", true },
{ PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, "Altitude control", true }, { PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, "Altitude Control", true },
{ PX4_CUSTOM_MAIN_MODE_POSCTL, 0, "Position control", true }, { PX4_CUSTOM_MAIN_MODE_POSCTL, 0, "Position Control", true },
{ PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, "Offboard 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_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_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_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_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 }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LAND, "Landing", false },
}; };
......
...@@ -43,6 +43,10 @@ Item { ...@@ -43,6 +43,10 @@ Item {
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
property real avaiableHeight: parent.height
readonly property bool isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
property var _activeVehicle: multiVehicleManager.activeVehicle property var _activeVehicle: multiVehicleManager.activeVehicle
readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276) readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276)
...@@ -73,9 +77,6 @@ Item { ...@@ -73,9 +77,6 @@ Item {
property real _airSpeed: _activeVehicle ? _activeVehicle.airSpeed : _defaultAirSpeed property real _airSpeed: _activeVehicle ? _activeVehicle.airSpeed : _defaultAirSpeed
property real _climbRate: _activeVehicle ? _activeVehicle.climbRate : _defaultClimbRate property real _climbRate: _activeVehicle ? _activeVehicle.climbRate : _defaultClimbRate
property bool _isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
property var _flightMap: null property var _flightMap: null
property var _flightVideo: null property var _flightVideo: null
property var _savedZoomLevel: 0 property var _savedZoomLevel: 0
...@@ -130,7 +131,7 @@ Item { ...@@ -130,7 +131,7 @@ Item {
width: _pipSize width: _pipSize
height: _pipSize * (9/16) height: _pipSize * (9/16)
color: "#000010" 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 { Loader {
id: pipLoader id: pipLoader
anchors.fill: parent anchors.fill: parent
...@@ -181,7 +182,7 @@ Item { ...@@ -181,7 +182,7 @@ Item {
width: ScreenTools.defaultFontPixelSize * 2 width: ScreenTools.defaultFontPixelSize * 2
radius: ScreenTools.defaultFontPixelSize / 3 radius: ScreenTools.defaultFontPixelSize / 3
visible: _controller.hasVideo && !_isPipVisible 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 { Image {
width: parent.width * 0.75 width: parent.width * 0.75
height: parent.height * 0.75 height: parent.height * 0.75
...@@ -203,6 +204,10 @@ Item { ...@@ -203,6 +204,10 @@ Item {
//-- Widgets //-- Widgets
Loader { Loader {
id: widgetsLoader id: widgetsLoader
anchors.fill: parent anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
height: avaiableHeight
} }
} }
...@@ -45,7 +45,7 @@ Item { ...@@ -45,7 +45,7 @@ Item {
text: "NO VIDEO" text: "NO VIDEO"
font.weight: Font.DemiBold font.weight: Font.DemiBold
color: "white" color: "white"
font.pixelSize: ScreenTools.defaultFontPixelSize * 1.5 font.pixelSize: _mainIsMap ? 12 * ScreenTools.fontHRatio : 20 * ScreenTools.fontHRatio
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
......
...@@ -82,7 +82,7 @@ Item { ...@@ -82,7 +82,7 @@ Item {
anchors.right: parent.right anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: _isInstrumentVisible visible: _isInstrumentVisible
size: mainWindow.width * 0.15 size: ScreenTools.isTinyScreen ? mainWindow.width * 0.2 : mainWindow.width * 0.15
active: _activeVehicle != null active: _activeVehicle != null
heading: _heading heading: _heading
rollAngle: _roll rollAngle: _roll
...@@ -108,7 +108,7 @@ Item { ...@@ -108,7 +108,7 @@ Item {
width: ScreenTools.defaultFontPixelSize * 2 width: ScreenTools.defaultFontPixelSize * 2
radius: ScreenTools.defaultFontPixelSize / 3 radius: ScreenTools.defaultFontPixelSize / 3
visible: !_isInstrumentVisible 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 { Image {
width: parent.width * 0.75 width: parent.width * 0.75
height: parent.height * 0.75 height: parent.height * 0.75
...@@ -130,6 +130,7 @@ Item { ...@@ -130,6 +130,7 @@ Item {
//-- Vertical Tool Buttons //-- Vertical Tool Buttons
Column { Column {
id: toolColumn id: toolColumn
visible: _mainIsMap
anchors.margins: ScreenTools.defaultFontPixelHeight anchors.margins: ScreenTools.defaultFontPixelHeight
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
......
...@@ -373,7 +373,7 @@ QGCView { ...@@ -373,7 +373,7 @@ QGCView {
// Mission Item Editor // Mission Item Editor
Item { Item {
id: missionItemEditor id: missionItemEditor
anchors.top: parent.top height: mainWindow.avaiableHeight
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right anchors.right: parent.right
width: _rightPanelWidth width: _rightPanelWidth
......
import QtQuick 2.2 import QtQuick 2.4
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2 import QtGraphicalEffects 1.0
import QtQuick.Controls.Private 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 { QGCButton {
id: button id: button
property bool repaintChevron: false property bool repaintChevron: false
...@@ -62,3 +102,4 @@ QGCButton { ...@@ -62,3 +102,4 @@ QGCButton {
} }
} }
} }
*/
...@@ -35,5 +35,6 @@ MissionItemSummary 1.0 MissionItemSummary.qml ...@@ -35,5 +35,6 @@ MissionItemSummary 1.0 MissionItemSummary.qml
MissionItemEditor 1.0 MissionItemEditor.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: ...@@ -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 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 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 void saveGlobalSetting (const QString& key, const QString& value);
Q_INVOKABLE QString loadGlobalSetting (const QString& key, const QString& defaultValue); Q_INVOKABLE QString loadGlobalSetting (const QString& key, const QString& defaultValue);
Q_INVOKABLE void saveBoolGlobalSetting (const QString& key, bool value); Q_INVOKABLE void saveBoolGlobalSetting (const QString& key, bool value);
...@@ -62,6 +65,9 @@ public: ...@@ -62,6 +65,9 @@ public:
qreal zOrderWidgets () { return 100; } qreal zOrderWidgets () { return 100; }
qreal zOrderMapItems () { return 50; } qreal zOrderMapItems () { return 50; }
//-- TODO: Make this into an actual preference.
bool isAdvancedMode () { return false; }
private: private:
HomePositionManager* _homePositionManager; HomePositionManager* _homePositionManager;
FlightMapSettings* _flightMapSettings; FlightMapSettings* _flightMapSettings;
......
...@@ -14,6 +14,12 @@ Item { ...@@ -14,6 +14,12 @@ Item {
readonly property real defaultFontPixelWidth: _textMeasure.fontWidth readonly property real defaultFontPixelWidth: _textMeasure.fontWidth
readonly property real smallFontPixelSize: defaultFontPixelSize * ScreenToolsController.smallFontPixelSizeRatio 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. // 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. // Will remove Math.min when problem is figure out.
readonly property real mediumFontPixelSize: Math.min(defaultFontPixelSize * ScreenToolsController.mediumFontPixelSizeRatio, ScreenToolsController.isMobile ? 10000 : 19) readonly property real mediumFontPixelSize: Math.min(defaultFontPixelSize * ScreenToolsController.mediumFontPixelSizeRatio, ScreenToolsController.isMobile ? 10000 : 19)
...@@ -36,7 +42,6 @@ Item { ...@@ -36,7 +42,6 @@ Item {
Text { Text {
id: _textMeasure id: _textMeasure
text: "X" text: "X"
property real fontWidth: contentWidth * (ScreenToolsController.testHighDPI ? 2 : 1) property real fontWidth: contentWidth * (ScreenToolsController.testHighDPI ? 2 : 1)
property real fontHeight: contentHeight * (ScreenToolsController.testHighDPI ? 2 : 1) property real fontHeight: contentHeight * (ScreenToolsController.testHighDPI ? 2 : 1)
} }
......
...@@ -36,7 +36,6 @@ import QGroundControl.ScreenTools 1.0 ...@@ -36,7 +36,6 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.MultiVehicleManager 1.0 import QGroundControl.MultiVehicleManager 1.0
Rectangle { Rectangle {
anchors.fill: parent
color: qgcPal.window color: qgcPal.window
z: QGroundControl.zOrderTopMost z: QGroundControl.zOrderTopMost
...@@ -204,10 +203,11 @@ Rectangle { ...@@ -204,10 +203,11 @@ Rectangle {
} }
Rectangle { Rectangle {
//anchors.margins: _defaultTextHeight * 2 //-- Fill entire screen, including behind tool bar
anchors.fill: parent anchors.fill: parent
color: qgcPal.windowShadeDark color: qgcPal.windowShadeDark
/* I think this takes too much space and is not exactly necessary
QGCLabel { QGCLabel {
id: title id: title
anchors.topMargin: _margin anchors.topMargin: _margin
...@@ -218,24 +218,27 @@ Rectangle { ...@@ -218,24 +218,27 @@ Rectangle {
font.pixelSize: ScreenTools.largeFontPixelSize font.pixelSize: ScreenTools.largeFontPixelSize
text: "Vehicle Setup" text: "Vehicle Setup"
} }
*/
Rectangle { Rectangle {
//-- Limit height to available height (below tool bar)
anchors.topMargin: _margin anchors.topMargin: _margin
anchors.top: title.bottom //anchors.top: title.bottom
height: mainWindow.avaiableHeight
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
color: qgcPal.window color: qgcPal.window
Flickable { ScrollView {
id: buttonFlickable id: buttonScroll
width: _buttonWidth width: _buttonWidth
anchors.topMargin: _defaultTextHeight / 2 anchors.topMargin: _defaultTextHeight / 2
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
contentWidth: _buttonWidth frameVisible: false
contentHeight: buttonColumn.height horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
flickableDirection: Flickable.VerticalFlick verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
Column { Column {
id: buttonColumn id: buttonColumn
...@@ -314,13 +317,15 @@ Rectangle { ...@@ -314,13 +317,15 @@ Rectangle {
} }
} // Column } // Column
} // Flickable } // ScrollView
Loader { Loader {
id: panelLoader id: panelLoader
anchors.topMargin: _margin
anchors.bottomMargin: _margin
anchors.leftMargin: _defaultTextWidth anchors.leftMargin: _defaultTextWidth
anchors.rightMargin: _defaultTextWidth anchors.rightMargin: _defaultTextWidth
anchors.left: buttonFlickable.right anchors.left: buttonScroll.right
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
......
...@@ -34,11 +34,11 @@ import QGroundControl.ScreenTools 1.0 ...@@ -34,11 +34,11 @@ import QGroundControl.ScreenTools 1.0
Item { Item {
id: mainWindow id: mainWindow
property var _toolbar: toolbarLoader.item
readonly property string _planViewSource: "MissionEditor.qml" readonly property string _planViewSource: "MissionEditor.qml"
readonly property string _setupViewSource: "SetupView.qml" readonly property string _setupViewSource: "SetupView.qml"
property real avaiableHeight: height - toolBar.height
Connections { Connections {
target: controller target: controller
...@@ -67,7 +67,7 @@ Item { ...@@ -67,7 +67,7 @@ Item {
planViewLoader.visible = false planViewLoader.visible = false
} }
onShowToolbarMessage: _toolbar.showToolbarMessage(message) onShowToolbarMessage: toolBar.showToolbarMessage(message)
// The following are use for unit testing only // The following are use for unit testing only
...@@ -77,11 +77,6 @@ Item { ...@@ -77,11 +77,6 @@ Item {
onShowSetupVehicleComponent: setupViewLoader.item.showVehicleComponentPanel(vehicleComponent) onShowSetupVehicleComponent: setupViewLoader.item.showVehicleComponentPanel(vehicleComponent)
} }
// We delay load the following control to improve boot time
Component.onCompleted: {
toolbarLoader.source = "MainToolBar.qml"
}
// Detect tablet position // Detect tablet position
property var tabletPosition: QtPositioning.coordinate(37.803784, -122.462276) property var tabletPosition: QtPositioning.coordinate(37.803784, -122.462276)
PositionSource { PositionSource {
...@@ -97,41 +92,37 @@ Item { ...@@ -97,41 +92,37 @@ Item {
} }
} }
Loader { MainToolBar {
id: toolbarLoader id: toolBar
width: parent.width height: ScreenTools.isMobile ? (ScreenTools.isTinyScreen ? (mainWindow.width * 0.0666) : (mainWindow.width * 0.0444)) : ScreenTools.defaultFontPixelSize * 4
height: item ? item.height : 0 anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
isBackgroundDark: flightView.isBackgroundDark
z: QGroundControl.zOrderTopMost z: QGroundControl.zOrderTopMost
} }
FlightDisplayView { FlightDisplayView {
id: flightView id: flightView
anchors.left: parent.left anchors.fill: parent
anchors.right: parent.right avaiableHeight: mainWindow.avaiableHeight
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom
visible: true visible: true
} }
Loader { Loader {
id: planViewLoader id: planViewLoader
anchors.left: parent.left anchors.fill: parent
anchors.right: parent.right
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom
visible: false visible: false
property var tabletPosition: mainWindow.tabletPosition property var tabletPosition: mainWindow.tabletPosition
} }
Loader { Loader {
id: setupViewLoader id: setupViewLoader
anchors.left: parent.left
anchors.right: parent.right
anchors.top: toolbarLoader.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
height: mainWindow.avaiableHeight
visible: false visible: false
property var tabletPosition: mainWindow.tabletPosition 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 ...@@ -27,7 +27,7 @@ This file is part of the QGROUNDCONTROL project
* @author Gus Grubba <mavlink@grubba.com> * @author Gus Grubba <mavlink@grubba.com>
*/ */
import QtQuick 2.3 import QtQuick 2.5
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2 import QtQuick.Controls.Styles 1.2
...@@ -39,275 +39,232 @@ import QGroundControl.ScreenTools 1.0 ...@@ -39,275 +39,232 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0 import QGroundControl.Controllers 1.0
Rectangle { Rectangle {
id: toolBarHolder id: toolBar
anchors.left: parent.left color: isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5)
anchors.right: parent.right
height: toolBarHeight
color: qgcPal.window
QGCPalette { id: qgcPal; colorGroupEnabled: true } 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
/*
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 real toolBarHeight: ScreenTools.defaultFontPixelHeight * 3 readonly property int cellHeight: height * 0.75
property int cellSpacerSize: ScreenTools.isMobile ? getProportionalDimmension(6) : getProportionalDimmension(4)
readonly property int cellHeight: toolBarHeight * 0.75
readonly property real horizontalMargins: ScreenTools.defaultFontPixelWidth / 2 readonly property real tbFontSmall: 10 * ScreenTools.fontHRatio
readonly property real verticalMargins: ScreenTools.defaultFontPixelHeight / 4 readonly property real tbFontNormal: 12 * ScreenTools.fontHRatio
readonly property real tbFontLarge: 18 * ScreenTools.fontHRatio
readonly property var colorBlue: "#1a6eaa" readonly property real tbSpacing: ScreenTools.isMobile ? toolBar.width * 0.00824 : 9.54
readonly property var colorGreen: "#329147"
readonly property var colorRed: "#942324"
readonly property var colorOrange: "#a76f26"
readonly property var colorWhite: "#f0f0f0"
property var colorOrangeText: (qgcPal.globalTheme === QGCPalette.Light) ? "#b75711" : "#ea8225" readonly property var colorGreen: "#05f068"
property var colorRedText: (qgcPal.globalTheme === QGCPalette.Light) ? "#ee1112" : "#ef2526" readonly property var colorOrange: "#f0ab06"
property var colorGreenText: (qgcPal.globalTheme === QGCPalette.Light) ? "#046b1b" : "#00d930" readonly property var colorRed: "#fc4638"
property var colorWhiteText: (qgcPal.globalTheme === QGCPalette.Light) ? "#343333" : "#f0f0f0" readonly property var colorGrey: "#7f7f7f"
readonly property var colorBlue: "#636efe"
readonly property var colorWhite: "#ffffff"
MainToolBarController { id: _controller } MainToolBarController { id: _controller }
function showToolbarMessage(message) { function showToolbarMessage(message) {
toolBarMessage.text = 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 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() { function showMavStatus() {
return (multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout === 0 && _controller.connectionCount > 0); return (multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout === 0 && _controller.connectionCount > 0);
} }
//------------------------------------------------------------------------- Component.onCompleted: {
//-- Main menu for Mobile Devices //-- TODO: Get this from the actual state
Menu { flyButton.checked = true
id: mobileMenu
ExclusiveGroup { id: mainMenuGroup }
MenuItem {
id: flyViewShowing
text: "Fly"
checkable: true
checked: true
exclusiveGroup: mainMenuGroup
onTriggered: {
checked = true
_controller.onFlyView();
}
}
MenuItem {
id: setupViewShowing
text: "Setup"
checkable: true
exclusiveGroup: mainMenuGroup
onTriggered: {
checked = true
_controller.onSetupView();
}
} }
MenuItem { Connections {
id: planViewShowing target: controller
text: "Plan" onShowFlyView: { flyButton.checked = true }
checkable: true onShowPlanView: { planButton.checked = true }
exclusiveGroup: mainMenuGroup onShowSetupView:{ setupButton.checked = true }
onTriggered: {
checked = true
_controller.onPlanView();
}
} }
MenuSeparator { } Row {
id: viewRow
height: cellHeight
spacing: tbSpacing
anchors.left: parent.left
anchors.leftMargin: tbSpacing
anchors.verticalCenter: parent.verticalCenter
MenuItem { ExclusiveGroup { id: mainActionGroup }
text: "QGroundControl Settings"
onTriggered: controller.showSettings() QGCToolBarButton {
id: setupButton
width: cellHeight * 1.3
height: cellHeight
exclusiveGroup: mainActionGroup
source: "qrc:/res/Gears"
onClicked: {
_controller.onSetupView();
}
} }
} // Menu
/* Rectangle {
Row {
id: toolRow
height: cellHeight height: cellHeight
spacing: getProportionalDimmension(4) width: 1
color: Qt.rgba(1,1,1,0.45)
} }
*/
Loader { QGCToolBarButton {
id: desktopToolsLoader id: planButton
width: cellHeight * 1.3
height: cellHeight height: cellHeight
x: horizontalMargins exclusiveGroup: mainActionGroup
y: (toolBarHeight - cellHeight) / 2 source: "qrc:/res/Plan"
sourceComponent: ScreenTools.isMobile ? undefined : desktopTools onClicked: {
_controller.onPlanView();
}
} }
//--------------------------------------------------------------------- Rectangle {
//-- Indicators
Row {
id: row12
x: horizontalMargins + (ScreenTools.isMobile ? 0: desktopToolsLoader.item.width)
height: cellHeight height: cellHeight
spacing: cellSpacerSize width: 1
anchors.top: desktopToolsLoader.top color: Qt.rgba(1,1,1,0.45)
anchors.verticalCenter: desktopToolsLoader.verticalCenter }
//-- "Hamburger" menu for Mobile Devices QGCToolBarButton {
Item { id: flyButton
id: actionButton width: cellHeight * 1.3
visible: ScreenTools.isMobile
height: cellHeight height: cellHeight
width: cellHeight exclusiveGroup: mainActionGroup
Image { source: "qrc:/res/PaperPlane"
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: { onClicked: {
if (mouse.button == Qt.LeftButton) _controller.onFlyView();
{
mobileMenu.popup();
}
}
} }
} }
//-- Separator if Hamburger menu is visible
Rectangle { Rectangle {
visible: actionButton.visible
height: cellHeight height: cellHeight
width: cellHeight width: 1
color: "#00000000" color: Qt.rgba(1,1,1,0.45)
anchors.verticalCenter: parent.verticalCenter
} }
Loader {
id: activeVehicleLoader
visible: showMavStatus()
source: multiVehicleManager.activeVehicleAvailable ? "MainToolBarActiveVehicleComponent.qml" : ""
property real cellHeight: toolBarHolder.cellHeight
property real cellSpacerSize: toolBarHolder.cellSpacerSize
} }
Rectangle { Item {
id: connectionStatus visible: showMavStatus() && !connectionStatus.visible
width: getProportionalDimmension(160)
height: cellHeight height: cellHeight
visible: (_controller.connectionCount > 0 && multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout != 0) 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 anchors.verticalCenter: parent.verticalCenter
color: "#00000000" }
border.color: "#00000000" }
border.width: 0
QGCLabel { QGCLabel {
id: connectionStatusText id: connectionStatus
text: qsTr("CONNECTION LOST") visible: (_controller.connectionCount > 0 && multiVehicleManager.activeVehicleAvailable && activeVehicle.heartbeatTimeout != 0)
font.pixelSize: ScreenTools.defaultFontPixelSize text: "CONNECTION LOST"
font.pixelSize: tbFontLarge
font.weight: Font.DemiBold font.weight: Font.DemiBold
color: colorRed
anchors.left: viewRow.right
anchors.leftMargin: tbSpacing * 2
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
color: colorRedText
}
} }
} // Row
Row { Row {
id: connectRow id: connectRow
anchors.rightMargin: verticalMargins height: cellHeight
spacing: tbSpacing
anchors.rightMargin: tbSpacing
anchors.right: parent.right anchors.right: parent.right
anchors.top: desktopToolsLoader.top anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenter: desktopToolsLoader.verticalCenter
height: desktopToolsLoader.height
spacing: cellSpacerSize
Menu { Menu {
id: connectMenu id: connectMenu
...@@ -336,20 +293,53 @@ Rectangle { ...@@ -336,20 +293,53 @@ Rectangle {
} }
} }
QGCButton { Rectangle {
height: cellHeight
width: 1
color: Qt.rgba(1,1,1,0.45)
}
QGCToolBarButton {
id: connectButton id: connectButton
width: getProportionalDimmension(100) width: cellHeight * 1.3
height: cellHeight
visible: _controller.connectionCount === 0 visible: _controller.connectionCount === 0
text: qsTr("Connect") source: "/qmlimages/Connect.svg"
menu: connectMenu 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);
*/
}
} }
QGCButton { QGCToolBarButton {
id: disconnectButton id: disconnectButton
width: getProportionalDimmension(100) width: cellHeight * 1.3
height: cellHeight
visible: _controller.connectionCount === 1 visible: _controller.connectionCount === 1
text: qsTr("Disconnect") source: "/qmlimages/Disconnect.svg"
checked: false
onClicked: { onClicked: {
checked = false
_controller.onDisconnect(""); _controller.onDisconnect("");
} }
} }
...@@ -372,131 +362,63 @@ Rectangle { ...@@ -372,131 +362,63 @@ Rectangle {
} }
} }
QGCButton { QGCToolBarButton {
id: multidisconnectButton id: multidisconnectButton
width: getProportionalDimmension(100) width: cellHeight * 1.3
text: "Disconnect" height: cellHeight
visible: _controller.connectionCount > 1 visible: _controller.connectionCount > 1
menu: disconnectMenu source: "/qmlimages/Disconnect.svg"
checked: false
onClicked: {
checked = false
disconnectMenu.popup()
}
}
} }
} // Row
// Progress bar // Progress bar
Rectangle { Rectangle {
id: progressBar id: progressBar
anchors.top: desktopToolsLoader.bottom anchors.bottom: parent.bottom
height: getProportionalDimmension(3) height: toolBar.height * 0.05
width: parent.width * _controller.progressBarValue width: parent.width * _controller.progressBarValue
color: qgcPal.text color: colorGreen
} }
// Toolbar message area // Toolbar message area
Rectangle { Rectangle {
id: toolBarMessageArea id: toolBarMessageArea
anchors.leftMargin: horizontalMargins x: toolBar.parent.width * 0.225
anchors.rightMargin: horizontalMargins y: toolBar.parent.height - (ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6)
anchors.topMargin: verticalMargins width: toolBar.parent.width * 0.55
anchors.bottomMargin: verticalMargins height: ScreenTools.defaultFontPixelHeight * ScreenTools.fontHRatio * 6
anchors.top: progressBar.bottom color: Qt.rgba(0,0,0,0.65)
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: qgcPal.windowShadeDark
visible: false visible: false
QGCLabel { QGCLabel {
id: toolBarMessage id: toolBarMessage
anchors.fill: parent width: toolBarMessageArea.width - toolBarMessageCloseButton.width
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
color: qgcPal.warningText 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 { QGCButton {
id: toolBarMessageCloseButton id: toolBarMessageCloseButton
anchors.rightMargin: horizontalMargins
anchors.top: parent.top
anchors.right: parent.right
primary: true primary: true
text: "Close Message" text: "Close Message"
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins: tbSpacing
onClicked: { onClicked: {
parent.visible = false toolBarMessageArea.visible = false
toolBarHolder.height = toolBarHeight
_controller.onToolBarMessageClosed() _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 } // Rectangle
...@@ -21,94 +21,273 @@ This file is part of the QGROUNDCONTROL project ...@@ -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 QtQuick.Controls 1.2
import QtGraphicalEffects 1.0
import QtQuick.Controls.Styles 1.2 import QtQuick.Controls.Styles 1.2
import QGroundControl 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0 import QGroundControl.ScreenTools 1.0
Row { Row {
height: cellHeight spacing: tbSpacing * 2
spacing: cellSpacerSize
Rectangle { 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
}
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";
}
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 id: messages
width: (activeVehicle.messageCount > 99) ? getProportionalDimmension(65) : getProportionalDimmension(60) width: cellHeight
height: cellHeight height: cellHeight
visible: activeVehicle.messageCount
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: getMessageColor()
border.color: "#00000000"
border.width: 0
property bool showTriangle: false
Item {
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
}
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()
}
}
}
Item {
anchors.fill: parent
visible: !criticalMessage.visible
Image { Image {
id: messageIcon id: messageIcon
source: getMessageIcon(); source: "/qmlimages/Megaphone.svg"
height: getProportionalDimmension(16) height: cellHeight * 0.5
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
visible: false
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left anchors.horizontalCenter: parent.horizontalCenter
anchors.leftMargin: getProportionalDimmension(8) }
ColorOverlay {
anchors.fill: messageIcon
source: messageIcon
color: getMessageColor()
}
}
MouseArea {
anchors.fill: parent
onClicked: {
var p = mapToItem(toolBar, mouseX, mouseY);
_controller.onEnterMessageArea(p.x, p.y);
}
}
} }
//-------------------------------------------------------------------------
//-- GPS Indicator
Item { Item {
id: messageTextRect 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 anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right }
width: messages.width - messageIcon.width SignalStrength {
QGCLabel { size: cellHeight * 0.5
id: messageText percent: getSatStrength(activeVehicle.satelliteCount)
text: (activeVehicle.messageCount > 0) ? activeVehicle.messageCount : ''
font.pixelSize: ScreenTools.smallFontPixelSize
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter }
horizontalAlignment: Text.AlignHCenter }
QGCLabel {
text: activeVehicle.satelliteCount
font.pixelSize: tbFontSmall
color: colorWhite 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 { Image {
id: dropDown source: "/qmlimages/RC.svg"
source: "/qmlimages/arrow-down.png" fillMode: Image.PreserveAspectFit
visible: (messages.showTriangle) && (activeVehicle.messageCount > 0) mipmap: true
anchors.bottom: parent.bottom smooth: true
anchors.right: parent.right width: cellHeight * 0.65
anchors.bottomMargin: getProportionalDimmension(3) height: cellHeight * 0.5
anchors.rightMargin: getProportionalDimmension(3) opacity: _controller.remoteRSSI < 1 ? 0.5 : 1
anchors.verticalCenter: parent.verticalCenter
}
SignalStrength {
size: cellHeight * 0.5
percent: _controller.remoteRSSI
anchors.verticalCenter: parent.verticalCenter
} }
Timer {
id: mouseOffTimer
interval: 2000;
running: false;
repeat: false
onTriggered: {
messages.showTriangle = false;
} }
} }
MouseArea { //-------------------------------------------------------------------------
anchors.fill: parent //-- Battery Indicator
hoverEnabled: true Item {
onEntered: { id: batteryStatus
messages.showTriangle = true; width: battRow.width * 1.1
mouseOffTimer.start(); 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
} }
onClicked: {
var p = mapToItem(toolBarHolder, mouseX, mouseY);
_controller.onEnterMessageArea(p.x, p.y);
} }
} }
} }
//-------------------------------------------------------------------------
//-- Vehicle Selector
QGCButton { QGCButton {
width: ScreenTools.defaultFontPixelWidth * 13 width: ScreenTools.defaultFontPixelSize * 12
height: cellHeight height: cellHeight * 0.75
anchors.verticalCenter: parent.verticalCenter
text: "Vehicle " + activeVehicle.id text: "Vehicle " + activeVehicle.id
visible: vehicleMenuItems.length > 0
anchors.verticalCenter: parent.verticalCenter
menu: vehicleMenu menu: vehicleMenu
...@@ -133,7 +312,7 @@ Row { ...@@ -133,7 +312,7 @@ Row {
function updateVehicleMenu() { function updateVehicleMenu() {
// Remove old menu items // Remove old menu items
for (var i=0; i<vehicleMenuItems.length; i++) { for (var i = 0; i < vehicleMenuItems.length; i++) {
vehicleMenu.removeItem(vehicleMenuItems[i]) vehicleMenu.removeItem(vehicleMenuItems[i])
} }
vehicleMenuItems.length = 0 vehicleMenuItems.length = 0
...@@ -155,40 +334,132 @@ Row { ...@@ -155,40 +334,132 @@ Row {
} }
} }
//-------------------------------------------------------------------------
//-- Mode Selector
Rectangle { Item {
id: satelitte width: selectorRow.width * 1.1
width: getProportionalDimmension(55)
height: cellHeight height: cellHeight
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: getSatelliteColor(); Row {
border.color: "#00000000" id: selectorRow
border.width: 0 spacing: tbSpacing
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
Image { Image {
source: "qrc:/res/Gps"; width: cellHeight * 0.65
height: getProportionalDimmension(24) height: cellHeight * 0.65
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: getProportionalDimmension(6)
mipmap: true mipmap: true
smooth: true smooth: true
source: "/qmlimages/Quad.svg"
anchors.verticalCenter: parent.verticalCenter
} }
QGCLabel { QGCLabel {
id: satelitteText text: activeVehicle.flightMode
text: activeVehicle.satelliteCount >= 0 ? activeVehicle.satelliteCount : 'NA' font.pixelSize: tbFontLarge
font.pixelSize: activeVehicle.satelliteCount >= 0 ? ScreenTools.defaultFontPixelSize : ScreenTools.smallFontPixelSize color: colorWhite
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right }
anchors.rightMargin: getProportionalDimmension(6) }
horizontalAlignment: Text.AlignRight
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
}
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
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 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 { Rectangle {
id: rssiRC id: rssiRC
width: getProportionalDimmension(55) width: getProportionalDimmension(55)
...@@ -280,147 +551,7 @@ Row { ...@@ -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 } // 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
}
}
...@@ -8,5 +8,14 @@ VERSIONNAME=`git describe --always --tags | sed -e 's/^v//'` ...@@ -8,5 +8,14 @@ VERSIONNAME=`git describe --always --tags | sed -e 's/^v//'`
echo "VersionCode: ${VERSIONCODE}" echo "VersionCode: ${VERSIONCODE}"
echo "VersionName: ${VERSIONNAME}" echo "VersionName: ${VERSIONNAME}"
sed -i -e "s/android:versionCode=\"[0-9][0-9]*\"/android:versionCode=\"${VERSIONCODE}\"/" $MANIFEST_FILE if [ -n "$VERSIONCODE" ]; then
sed -i -e 's/versionName *= *"[^"]*"/versionName="'$VERSIONNAME'"/' $MANIFEST_FILE sed -i -e "s/android:versionCode=\"[0-9][0-9]*\"/android:versionCode=\"$VERSIONCODE\"/" $MANIFEST_FILE
else
echo "Error versionCode empty"
fi
if [ -n "$VERSIONNAME" ]; then
sed -i -e 's/versionName *= *"[^"]*"/versionName="'$VERSIONNAME'"/' $MANIFEST_FILE
else
echo "Error versionName empty"
fi
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