1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-18 03:52:11 +01:00

OP-1005 Removes 'old' PFD (non qml based one).

This commit is contained in:
Fredrik Arvidsson 2013-06-18 07:45:44 +02:00
parent a6ac956127
commit 68b2b28594
20 changed files with 2 additions and 2531 deletions

View File

@ -1,11 +0,0 @@
<plugin name="PFDGadget" version="1.0.0" compatVersion="1.0.0">
<vendor>The OpenPilot Project</vendor>
<copyright>(C) 2010 Edouard Lafargue</copyright>
<license>The GNU Public License (GPL) Version 3</license>
<description>The Primary Flight Display gadget</description>
<url>http://www.openpilot.org</url>
<dependencyList>
<dependency name="Core" version="1.0.0"/>
<dependency name="UAVObjects" version="1.0.0"/>
</dependencyList>
</plugin>

View File

@ -1,394 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1038.8931"
height="707.56323"
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="pfd-default.svg"
style="display:inline"
inkscape:export-filename="H:\Documents\Hobbies\OpenPilot\SVN\artwork\PFD-2.png"
inkscape:export-xdpi="269.53"
inkscape:export-ydpi="269.53">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 353.78162 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="1038.8931 : 353.78162 : 1"
inkscape:persp3d-origin="519.44653 : 235.85441 : 1"
id="perspective49" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="386.89507"
inkscape:cy="316.00835"
inkscape:document-units="px"
inkscape:current-layer="layer7"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="725"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="true"
inkscape:snap-smooth-nodes="false"
inkscape:snap-global="false">
<sodipodi:guide
orientation="0,1"
position="1060.7625,922.28538"
id="guide5941" />
<sodipodi:guide
orientation="0,1"
position="519.447,353.69582"
id="guide6851" />
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="519.447,353.69582"
id="guide6897" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="519.447,353.69582"
id="guide6899" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="407.55996,-15.60171"
id="guide6916" />
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="732.46291,91.541146"
id="guide6918" />
<sodipodi:guide
orientation="0,1"
position="341.53388,18.198896"
id="guide6920" />
<sodipodi:guide
orientation="0,1"
position="519.70281,477.96972"
id="guide4338" />
<sodipodi:guide
orientation="1,0"
position="519.447,353.69582"
id="guide4372" />
<sodipodi:guide
orientation="0,1"
position="732.46291,91.541146"
id="guide3257" />
<sodipodi:guide
orientation="1,0"
position="156.82618,353.69582"
id="guide4225" />
<sodipodi:guide
orientation="0,1"
position="-378.30213,170.71578"
id="guide5917" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Background"
style="display:inline"
transform="translate(230.4171,-2.5493479)">
<rect
transform="translate(0,-252.36218)"
style="fill:#453e3e;fill-opacity:1;stroke:#060000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="background"
width="1033.8402"
height="702.51031"
x="-227.89064"
y="261.44824"
inkscape:label="#rect6231"
ry="10" />
<g
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
id="text3627">
<path
d="m -39.769348,292.21622 24.667969,0 0,3.32031 -10.351563,0 0,25.83984 -3.964844,0 0,-25.83984 -10.351562,0 0,-3.32031"
style="fill:#ffffff;fill-opacity:1"
id="path3636" />
<path
d="m 6.7540894,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -1.84e-5,-2.0703 -0.4036638,-3.61978 -1.2109375,-4.64844 -0.8073081,-1.02863 -2.01824434,-1.54295 -3.6328125,-1.54297 -1.9401158,2e-5 -3.4700622,0.61851 -4.5898438,1.85547 -1.1197995,1.23699 -1.6796947,2.92319 -1.6796875,5.05859 l 0,12.36328 -3.6132811,0 0,-30.39062 3.6132811,0 0,11.91406 c 0.8593669,-1.31508 1.8684805,-2.29816 3.0273438,-2.94922 1.1718635,-0.65102 2.5195184,-0.97654 4.04296871,-0.97656 2.51300399,2e-5 4.41404379,0.78127 5.70312499,2.34375 1.2890412,1.5495 1.9335718,3.83465 1.9335938,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3638" />
<path
d="m 32.672058,309.54044 0,1.75781 -16.523437,0 c 0.156243,2.47396 0.89843,4.36198 2.226562,5.66406 1.341136,1.28907 3.203114,1.9336 5.585938,1.93359 1.380193,1e-5 2.714827,-0.16926 4.003906,-0.50781 1.302064,-0.33854 2.591125,-0.84635 3.867187,-1.52344 l 0,3.39844 c -1.289082,0.54688 -2.610696,0.96354 -3.964843,1.25 -1.354183,0.28646 -2.72788,0.42969 -4.121094,0.42969 -3.489594,0 -6.256518,-1.01563 -8.300781,-3.04688 -2.031254,-2.03124 -3.046878,-4.77863 -3.046875,-8.24218 -3e-6,-3.58072 0.963538,-6.41926 2.890625,-8.51563 1.940097,-2.10935 4.550771,-3.16404 7.832031,-3.16406 2.942692,2e-5 5.266909,0.95054 6.972656,2.85156 1.718728,1.88804 2.578103,4.45965 2.578125,7.71485 m -3.59375,-1.05469 c -0.02606,-1.96613 -0.579445,-3.53514 -1.660156,-4.70703 -1.067725,-1.17186 -2.486994,-1.7578 -4.257813,-1.75782 -2.005219,2e-5 -3.61329,0.56643 -4.824218,1.69922 -1.197924,1.13283 -1.888027,2.72788 -2.070313,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3640" />
<path
d="m 51.246277,302.86075 c -0.403662,-0.23436 -0.84637,-0.40363 -1.328125,-0.50781 -0.468765,-0.11717 -0.989598,-0.17577 -1.5625,-0.17579 -2.031262,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.080737,1.31512 -1.621101,3.20965 -1.621094,5.6836 l 0,11.52343 -3.613281,0 0,-21.875 3.613281,0 0,3.39844 c 0.7552,-1.3281 1.738272,-2.31118 2.949219,-2.94922 1.210926,-0.65102 2.682279,-0.97654 4.414062,-0.97656 0.247381,2e-5 0.520819,0.0195 0.820313,0.0586 0.299463,0.0261 0.631494,0.0716 0.996094,0.13672 l 0.01953,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3642" />
<path
d="m 72.906433,309.54044 0,1.75781 -16.523437,0 c 0.156243,2.47396 0.89843,4.36198 2.226562,5.66406 1.341136,1.28907 3.203114,1.9336 5.585938,1.93359 1.380193,1e-5 2.714827,-0.16926 4.003906,-0.50781 1.302064,-0.33854 2.591125,-0.84635 3.867187,-1.52344 l 0,3.39844 c -1.289082,0.54688 -2.610696,0.96354 -3.964843,1.25 -1.354183,0.28646 -2.72788,0.42969 -4.121094,0.42969 -3.489594,0 -6.256518,-1.01563 -8.300781,-3.04688 -2.031254,-2.03124 -3.046878,-4.77863 -3.046875,-8.24218 -3e-6,-3.58072 0.963538,-6.41926 2.890625,-8.51563 1.940097,-2.10935 4.550771,-3.16404 7.832031,-3.16406 2.942692,2e-5 5.266909,0.95054 6.972656,2.85156 1.718728,1.88804 2.578103,4.45965 2.578125,7.71485 m -3.59375,-1.05469 c -0.02606,-1.96613 -0.579445,-3.53514 -1.660156,-4.70703 -1.067725,-1.17186 -2.486994,-1.7578 -4.257813,-1.75782 -2.005219,2e-5 -3.61329,0.56643 -4.824218,1.69922 -1.197924,1.13283 -1.888027,2.72788 -2.070313,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3644" />
<path
d="m 89.449402,299.50137 3.59375,0 4.492187,17.07032 4.472661,-17.07032 4.23828,0 4.49218,17.07032 4.47266,-17.07032 3.59375,0 -5.72266,21.875 -4.23828,0 -4.70703,-17.92968 -4.726561,17.92968 -4.238281,0 -5.722656,-21.875"
style="fill:#ffffff;fill-opacity:1"
id="path3646" />
<path
d="m 134.21503,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3648" />
<path
d="m 162.75018,300.1459 0,3.39844 c -1.01564,-0.52081 -2.07033,-0.91144 -3.16406,-1.17187 -1.09376,-0.2604 -2.22657,-0.39061 -3.39844,-0.39063 -1.78386,2e-5 -3.125,0.27346 -4.02343,0.82031 -0.88543,0.5469 -1.32814,1.36721 -1.32813,2.46094 -1e-5,0.83335 0.319,1.4909 0.95703,1.97266 0.63802,0.46876 1.92057,0.91798 3.84766,1.34765 l 1.23047,0.27344 c 2.55207,0.54689 4.36196,1.32163 5.42968,2.32422 1.08072,0.98959 1.62108,2.37631 1.6211,4.16016 -2e-5,2.03125 -0.80731,3.63932 -2.42188,4.82422 -1.60157,1.18489 -3.8086,1.77734 -6.62109,1.77734 -1.17188,0 -2.39584,-0.11719 -3.67188,-0.35156 -1.26302,-0.22136 -2.59766,-0.5599 -4.0039,-1.01563 l 0,-3.71094 c 1.32812,0.69011 2.63671,1.21095 3.92578,1.5625 1.28905,0.33855 2.56509,0.50782 3.82812,0.50782 1.6927,0 2.99478,-0.28646 3.90625,-0.85938 0.91145,-0.58593 1.36718,-1.40624 1.36719,-2.46094 -1e-5,-0.97655 -0.33204,-1.72525 -0.99609,-2.24609 -0.65106,-0.52082 -2.08986,-1.02213 -4.31641,-1.50391 l -1.25,-0.29296 c -2.22657,-0.46874 -3.83464,-1.18489 -4.82422,-2.14844 -0.98958,-0.97655 -1.48437,-2.31119 -1.48437,-4.00391 0,-2.05727 0.72916,-3.64581 2.1875,-4.76562 1.45833,-1.11977 3.52864,-1.67967 6.21094,-1.67969 1.32811,2e-5 2.57811,0.0977 3.75,0.29297 1.17185,0.19533 2.25258,0.4883 3.24218,0.8789"
style="fill:#ffffff;fill-opacity:1"
id="path3650" />
<path
d="m 192.34003,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3652" />
<path
d="m 223.14081,318.09512 0,11.60157 -3.61328,0 0,-30.19532 3.61328,0 0,3.32032 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15884,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81117,1.05471 6.46484,3.16406 1.66664,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83336,6.21095 -2.5,8.32032 -1.65367,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98179,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 m 12.22656,-7.63672 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08074,1.49741 -1.6211,3.56772 -1.62109,6.21093 -10e-6,2.64324 0.54035,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047"
style="fill:#ffffff;fill-opacity:1"
id="path3654" />
<path
d="m 257.73065,302.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32812,-0.50781 -0.46877,-0.11717 -0.9896,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08074,1.31512 -1.6211,3.20965 -1.6211,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73828,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24739,2e-5 0.52082,0.0195 0.82032,0.0586 0.29946,0.0261 0.63149,0.0716 0.99609,0.13672 l 0.0195,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3656" />
<path
d="m 269.15643,302.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67969,6.17187 0,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43098,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.1198,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78384,2.03127 2.67576,4.84377 2.67579,8.4375 -3e-5,3.58074 -0.89195,6.39324 -2.67579,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3658" />
<path
d="m 300.83612,310.4584 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08074,1.49741 -1.6211,3.56772 -1.62109,6.21093 -10e-6,2.64324 0.54035,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047 m -12.22656,-7.63671 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15884,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81117,1.05471 6.46484,3.16406 1.66664,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83336,6.21095 -2.5,8.32032 -1.65367,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98179,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 l 0,3.28125 -3.61328,0 0,-30.39062 3.61328,0 0,11.83594"
style="fill:#ffffff;fill-opacity:1"
id="path3660" />
<path
d="m 310.52362,290.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
style="fill:#ffffff;fill-opacity:1"
id="path3662" />
<path
d="m 340.32831,309.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20312,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86718,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.4896,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.94009,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97265,2.85156 1.71873,1.88804 2.57811,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3664" />
<path
d="m 363.258,303.70059 c 0.89841,-1.61456 1.97263,-2.80597 3.22265,-3.57422 1.24998,-0.7682 2.72133,-1.15232 4.41406,-1.15234 2.27862,2e-5 4.03643,0.8008 5.27344,2.40234 1.23695,1.58856 1.85544,3.85419 1.85547,6.79688 l 0,13.20312 -3.61328,0 0,-13.08593 c -3e-5,-2.09634 -0.37113,-3.65233 -1.11328,-4.66797 -0.74222,-1.01561 -1.87503,-1.52342 -3.39844,-1.52344 -1.862,2e-5 -3.33336,0.61851 -4.41406,1.85547 -1.08075,1.23699 -1.62112,2.92319 -1.6211,5.05859 l 0,12.36328 -3.61328,0 0,-13.08593 c -10e-6,-2.10936 -0.37111,-3.66535 -1.11328,-4.66797 -0.7422,-1.01561 -1.88803,-1.52342 -3.4375,-1.52344 -1.83595,2e-5 -3.29428,0.62502 -4.375,1.875 -1.08074,1.23699 -1.6211,2.91668 -1.62109,5.03906 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.8203,-1.34113 1.80337,-2.33071 2.94922,-2.96875 1.14582,-0.638 2.50649,-0.95701 4.08203,-0.95703 1.58852,2e-5 2.93618,0.40367 4.04297,1.21094 1.11977,0.80731 1.94659,1.97918 2.48047,3.51562"
style="fill:#ffffff;fill-opacity:1"
id="path3666" />
<path
d="m 397.9455,290.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
style="fill:#ffffff;fill-opacity:1"
id="path3668" />
<path
d="m 417.51581,302.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -10e-6,2.6172 0.55338,4.681 1.66015,6.19141 1.11979,1.4974 2.64973,2.2461 4.58985,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55992,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65626,-4.85676 -2.65625,-8.4375 -10e-6,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78384,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3670" />
<path
d="m 443.43378,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3672" />
<path
d="m 472.41815,302.82169 0,-11.83594 3.59375,0 0,30.39062 -3.59375,0 0,-3.28125 c -0.75522,1.30209 -1.71225,2.27214 -2.87109,2.91016 -1.14585,0.625 -2.52606,0.9375 -4.14063,0.9375 -2.64323,0 -4.79818,-1.05469 -6.46484,-3.16406 -1.65365,-2.10937 -2.48047,-4.88281 -2.48047,-8.32032 0,-3.43748 0.82682,-6.21092 2.48047,-8.32031 1.66666,-2.10935 3.82161,-3.16404 6.46484,-3.16406 1.61457,2e-5 2.99478,0.31903 4.14063,0.95703 1.15884,0.62502 2.11587,1.58856 2.87109,2.89063 m -12.24609,7.63671 c -10e-6,2.64324 0.54036,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39842,-0.7487 4.49219,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047 -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.09377,-1.5104 -2.59116,-2.26561 -4.49219,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08073,1.49741 -1.6211,3.56772 -1.62109,6.21093"
style="fill:#ffffff;fill-opacity:1"
id="path3674" />
<path
d="m 483.41425,299.50137 3.59375,0 0,21.875 -3.59375,0 0,-21.875 m 0,-8.51562 3.59375,0 0,4.55078 -3.59375,0 0,-4.55078"
style="fill:#ffffff;fill-opacity:1"
id="path3676" />
<path
d="m 512.69159,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3678" />
<path
d="m 534.29315,310.18497 c -2e-5,-2.60416 -0.54038,-4.62238 -1.62109,-6.05469 -1.06773,-1.43227 -2.57163,-2.14842 -4.51172,-2.14844 -1.92709,2e-5 -3.431,0.71617 -4.51172,2.14844 -1.06771,1.43231 -1.60157,3.45053 -1.60156,6.05469 -10e-6,2.59115 0.53385,4.60287 1.60156,6.03515 1.08072,1.4323 2.58463,2.14844 4.51172,2.14844 1.94009,0 3.44399,-0.71614 4.51172,-2.14844 1.08071,-1.43228 1.62107,-3.444 1.62109,-6.03515 m 3.59375,8.47656 c -2e-5,3.72396 -0.82684,6.49088 -2.48047,8.30078 -1.65366,1.82291 -4.18621,2.73437 -7.59765,2.73438 -1.26303,-10e-6 -2.45444,-0.0977 -3.57422,-0.29297 -1.1198,-0.1823 -2.20704,-0.46876 -3.26172,-0.85938 l 0,-3.49609 c 1.05468,0.57291 2.09635,0.99609 3.125,1.26953 1.02864,0.27343 2.07681,0.41015 3.14453,0.41016 2.35676,-10e-6 4.12108,-0.6185 5.29297,-1.85547 1.17186,-1.22396 1.75779,-3.07943 1.75781,-5.56641 l 0,-1.77734 c -0.7422,1.28906 -1.69272,2.2526 -2.85156,2.89062 -1.15887,0.63802 -2.54559,0.95703 -4.16016,0.95703 -2.6823,0 -4.84375,-1.02213 -6.48437,-3.0664 -1.64063,-2.04427 -2.46094,-4.7526 -2.46094,-8.125 0,-3.38541 0.82031,-6.10025 2.46094,-8.14453 1.64062,-2.04425 3.80207,-3.06639 6.48437,-3.06641 1.61457,2e-5 3.00129,0.31903 4.16016,0.95703 1.15884,0.63804 2.10936,1.60158 2.85156,2.89063 l 0,-3.32032 3.59375,0 0,19.16016"
style="fill:#ffffff;fill-opacity:1"
id="path3680" />
<path
d="m 561.57831,293.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72265,3.4375 0.49479,0.50782 1.49088,0.76172 2.98829,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58204,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
style="fill:#ffffff;fill-opacity:1"
id="path3682" />
<path
d="m 591.91034,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-30.39062 3.61328,0 0,11.91406 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3684" />
<path
d="m 617.82831,309.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20312,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86718,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.4896,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.94009,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97265,2.85156 1.71873,1.88804 2.57811,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3686" />
<path
d="m -18.773254,345.4584 0,10.95704 4.960937,0 c 1.835923,1e-5 3.255192,-0.47525 4.2578126,-1.42579 1.0025861,-0.9505 1.5038877,-2.30466 1.5039063,-4.0625 -1.86e-5,-1.74476 -0.5013202,-3.09242 -1.5039063,-4.04296 -1.0026206,-0.9505 -2.4218896,-1.42576 -4.2578126,-1.42579 l -4.960937,0 m -3.945313,-3.24218 8.90625,0 c 3.268213,3e-5 5.7356586,0.74221 7.4023439,2.22656 1.6796655,1.47138 2.5195085,3.63284 2.5195312,6.48437 -2.27e-5,2.87763 -0.8398657,5.0521 -2.5195312,6.52344 -1.6666853,1.47137 -4.1341309,2.20705 -7.4023439,2.20703 l -4.960937,0 0,11.71875 -3.945313,0 0,-29.16015"
style="fill:#ffffff;fill-opacity:1"
id="path3688" />
<path
d="m 1.4220581,342.21622 16.7578129,0 0,3.32031 -12.8125004,0 0,8.59375 11.5625004,0 0,3.32031 -11.5625004,0 0,13.92578 -3.9453125,0 0,-29.16015"
style="fill:#ffffff;fill-opacity:1"
id="path3690" />
<path
d="m 28.414246,345.4584 0,22.67579 4.765625,0 c 4.02342,0 6.966126,-0.91146 8.828125,-2.73438 1.874976,-1.82291 2.812475,-4.70051 2.8125,-8.63281 -2.5e-5,-3.90623 -0.937524,-6.7643 -2.8125,-8.57422 -1.861999,-1.82289 -4.804705,-2.73435 -8.828125,-2.73438 l -4.765625,0 m -3.945313,-3.24218 8.105469,0 c 5.651024,3e-5 9.798155,1.17841 12.441406,3.53515 2.643202,2.34378 3.964815,6.01565 3.964844,11.01563 -2.9e-5,5.02605 -1.328152,8.71745 -3.984375,11.07422 -2.656272,2.35677 -6.796893,3.53515 -12.421875,3.53515 l -8.105469,0 0,-29.16015"
style="fill:#ffffff;fill-opacity:1"
id="path3692" />
<path
d="m 77.769714,360.38028 c -2.903656,10e-6 -4.915373,0.33204 -6.035156,0.99609 -1.119798,0.66408 -1.679693,1.79689 -1.679687,3.39844 -6e-6,1.27605 0.41666,2.29167 1.25,3.04688 0.846346,0.74219 1.992178,1.11328 3.4375,1.11328 1.992174,0 3.587225,-0.70312 4.785156,-2.10938 1.210921,-1.41926 1.816389,-3.30077 1.816406,-5.64453 l 0,-0.80078 -3.574219,0 m 7.167969,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.820329,1.32813 -1.842463,2.3112 -3.066406,2.94922 -1.223971,0.625 -2.721366,0.9375 -4.492188,0.9375 -2.23959,0 -4.023443,-0.625 -5.351562,-1.875 -1.315107,-1.26302 -1.972659,-2.94921 -1.972656,-5.05859 -3e-6,-2.46093 0.820309,-4.3164 2.460937,-5.56641 1.653639,-1.24999 4.114574,-1.87499 7.382813,-1.875 l 5.039062,0 0,-0.35156 c -1.7e-5,-1.65363 -0.546892,-2.92967 -1.640625,-3.82813 -1.080744,-0.91144 -2.60418,-1.36717 -4.570312,-1.36719 -1.25001,2e-5 -2.467457,0.14976 -3.652344,0.44922 -1.184902,0.2995 -2.324224,0.74872 -3.417969,1.34766 l 0,-3.32031 c 1.315099,-0.50779 2.591139,-0.8854 3.828125,-1.13282 1.23697,-0.26039 2.441396,-0.3906 3.613281,-0.39062 3.164048,2e-5 5.527327,0.82033 7.089844,2.46094 1.56248,1.64064 2.343729,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3694" />
<path
d="m 105.03534,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.593756,0.66409 -4.687496,1.99219 -1.080737,1.31512 -1.621101,3.20965 -1.621093,5.6836 l 0,11.52343 -3.613282,0 0,-21.875 3.613282,0 0,3.39844 c 0.7552,-1.3281 1.738272,-2.31118 2.949218,-2.94922 1.210926,-0.65102 2.682281,-0.97654 4.414061,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3696" />
<path
d="m 112.39862,343.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72266,3.4375 0.49478,0.50782 1.49087,0.76172 2.98828,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58203,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
style="fill:#ffffff;fill-opacity:1"
id="path3698" />
<path
d="m 122.45721,349.50137 3.59375,0 4.49219,17.07032 4.47266,-17.07032 4.23828,0 4.49219,17.07032 4.47265,-17.07032 3.59375,0 -5.72265,21.875 -4.23828,0 -4.70704,-17.92968 -4.72656,17.92968 -4.23828,0 -5.72266,-21.875"
style="fill:#ffffff;fill-opacity:1"
id="path3700" />
<path
d="m 165.758,352.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57032,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67968,6.17187 -1e-5,2.6172 0.55337,4.681 1.66015,6.19141 1.11978,1.4974 2.64973,2.2461 4.58985,2.24609 1.91404,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67968,-6.17188 -1e-5,-2.59113 -0.55991,-4.64191 -1.67968,-6.15234 -1.11981,-1.52342 -2.63674,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.5794,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78388,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38282,-3.04688 -1.77083,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88542,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24479,-3.04685 7.38282,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3702" />
<path
d="m 194.41034,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08073,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3704" />
<path
d="m 198.08221,340.98575 3.61329,0 0,17.94922 10.72265,-9.4336 4.58985,0 -11.60157,10.23438 12.08985,11.64062 -4.6875,0 -11.11328,-10.68359 0,10.68359 -3.61329,0 0,-30.39062"
style="fill:#ffffff;fill-opacity:1"
id="path3706" />
<path
d="m 222.34003,366.41544 4.12109,0 0,3.35937 -3.20312,6.25 -2.51954,0 1.60157,-6.25 0,-3.35937"
style="fill:#ffffff;fill-opacity:1"
id="path3708" />
<path
d="m 250.36737,368.09512 0,11.60157 -3.61328,0 0,-30.19532 3.61328,0 0,3.32032 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15885,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81118,1.05471 6.46484,3.16406 1.66665,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83335,6.21095 -2.5,8.32032 -1.65366,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98178,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 m 12.22656,-7.63672 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08073,1.49741 -1.6211,3.56772 -1.62109,6.21093 -1e-5,2.64324 0.54036,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047"
style="fill:#ffffff;fill-opacity:1"
id="path3710" />
<path
d="m 272.28143,340.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
style="fill:#ffffff;fill-opacity:1"
id="path3712" />
<path
d="m 302.08612,359.54044 0,1.75781 -16.52344,0 c 0.15625,2.47396 0.89843,4.36198 2.22657,5.66406 1.34113,1.28907 3.20311,1.9336 5.58593,1.93359 1.3802,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28909,0.54688 -2.6107,0.96354 -3.96485,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.48959,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97266,2.85156 1.71872,1.88804 2.5781,4.45965 2.57812,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57944,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88802,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3714" />
<path
d="m 317.92596,360.38028 c -2.90365,10e-6 -4.91537,0.33204 -6.03515,0.99609 -1.1198,0.66408 -1.6797,1.79689 -1.67969,3.39844 -10e-6,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.8164,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84246,2.3112 -3.0664,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03906,0 0,-0.35156 c -10e-6,-1.65363 -0.54689,-2.92967 -1.64062,-3.82813 -1.08075,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41797,1.34766 l 0,-3.32031 c 1.3151,-0.50779 2.59114,-0.8854 3.82813,-1.13282 1.23697,-0.26039 2.44139,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08984,2.46094 1.56248,1.64064 2.34373,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3716" />
<path
d="m 346.46112,350.1459 0,3.39844 c -1.01564,-0.52081 -2.07033,-0.91144 -3.16406,-1.17187 -1.09377,-0.2604 -2.22658,-0.39061 -3.39844,-0.39063 -1.78386,2e-5 -3.12501,0.27346 -4.02344,0.82031 -0.88542,0.5469 -1.32813,1.36721 -1.32812,2.46094 -10e-6,0.83335 0.319,1.4909 0.95703,1.97266 0.63801,0.46876 1.92056,0.91798 3.84766,1.34765 l 1.23046,0.27344 c 2.55207,0.54689 4.36197,1.32163 5.42969,2.32422 1.08071,0.98959 1.62108,2.37631 1.6211,4.16016 -2e-5,2.03125 -0.80731,3.63932 -2.42188,4.82422 -1.60158,1.18489 -3.80861,1.77734 -6.62109,1.77734 -1.17189,0 -2.39584,-0.11719 -3.67188,-0.35156 -1.26302,-0.22136 -2.59766,-0.5599 -4.0039,-1.01563 l 0,-3.71094 c 1.32812,0.69011 2.63671,1.21095 3.92578,1.5625 1.28905,0.33855 2.56509,0.50782 3.82812,0.50782 1.6927,0 2.99478,-0.28646 3.90625,-0.85938 0.91145,-0.58593 1.36717,-1.40624 1.36719,-2.46094 -2e-5,-0.97655 -0.33205,-1.72525 -0.99609,-2.24609 -0.65106,-0.52082 -2.08986,-1.02213 -4.31641,-1.50391 l -1.25,-0.29296 c -2.22657,-0.46874 -3.83464,-1.18489 -4.82422,-2.14844 -0.98959,-0.97655 -1.48438,-2.31119 -1.48437,-4.00391 -10e-6,-2.05727 0.72916,-3.64581 2.1875,-4.76562 1.45832,-1.11977 3.52863,-1.67967 6.21093,-1.67969 1.32812,2e-5 2.57811,0.0977 3.75,0.29297 1.17186,0.19533 2.25259,0.4883 3.24219,0.8789"
style="fill:#ffffff;fill-opacity:1"
id="path3718" />
<path
d="m 372.08612,359.54044 0,1.75781 -16.52344,0 c 0.15625,2.47396 0.89843,4.36198 2.22657,5.66406 1.34113,1.28907 3.20311,1.9336 5.58593,1.93359 1.3802,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28909,0.54688 -2.6107,0.96354 -3.96485,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.48959,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97266,2.85156 1.71872,1.88804 2.5781,4.45965 2.57812,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57944,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88802,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3720" />
<path
d="m 406.46112,350.34122 0,3.35937 c -1.01564,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08593,-0.42969 -2.33074,2e-5 -4.14064,0.74221 -5.42969,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.93359,6.21093 -10e-6,2.66928 0.64452,4.7461 1.93359,6.23047 1.28905,1.47136 3.09895,2.20704 5.42969,2.20703 1.04165,1e-5 2.07029,-0.13671 3.08593,-0.41015 1.02863,-0.28646 2.05077,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06772,0.23437 -2.20704,0.35156 -3.41797,0.35156 -3.29428,0 -5.91146,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.06641,-3.06641 1.10675,2e-5 2.18748,0.11721 3.24218,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
style="fill:#ffffff;fill-opacity:1"
id="path3722" />
<path
d="m 430.93378,358.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40367,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47007,0.61851 -4.58985,1.85547 -1.1198,1.23699 -1.67969,2.92319 -1.67968,5.05859 l 0,12.36328 -3.61329,0 0,-30.39062 3.61329,0 0,11.91406 c 0.85936,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17186,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70312,2.34375 1.28904,1.5495 1.93357,3.83465 1.9336,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3724" />
<path
d="m 456.85175,359.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20311,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.0039,-0.50781 1.30207,-0.33854 2.59113,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.1211,0.42969 -3.48959,0 -6.25651,-1.01563 -8.30078,-3.04688 -2.03125,-2.03124 -3.04687,-4.77863 -3.04687,-8.24218 0,-3.58072 0.96354,-6.41926 2.89062,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.9427,2e-5 5.26691,0.95054 6.97266,2.85156 1.71873,1.88804 2.5781,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06773,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19793,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
style="fill:#ffffff;fill-opacity:1"
id="path3726" />
<path
d="m 478.49237,350.34122 0,3.35937 c -1.01564,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08593,-0.42969 -2.33074,2e-5 -4.14064,0.74221 -5.42969,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.93359,6.21093 -10e-6,2.66928 0.64452,4.7461 1.93359,6.23047 1.28905,1.47136 3.09895,2.20704 5.42969,2.20703 1.04165,1e-5 2.07029,-0.13671 3.08593,-0.41015 1.02863,-0.28646 2.05077,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06772,0.23437 -2.20704,0.35156 -3.41797,0.35156 -3.29428,0 -5.91146,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.06641,-3.06641 1.10675,2e-5 2.18748,0.11721 3.24218,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
style="fill:#ffffff;fill-opacity:1"
id="path3728" />
<path
d="m 484.64471,340.98575 3.61329,0 0,17.94922 10.72265,-9.4336 4.58985,0 -11.60157,10.23438 12.08985,11.64062 -4.6875,0 -11.11328,-10.68359 0,10.68359 -3.61329,0 0,-30.39062"
style="fill:#ffffff;fill-opacity:1"
id="path3730" />
<path
d="m 529.8205,373.40762 c -1.01564,2.60417 -2.00522,4.30338 -2.96875,5.09766 -0.96356,0.79426 -2.25262,1.1914 -3.86719,1.19141 l -2.8711,0 0,-3.00782 2.10938,0 c 0.98958,0 1.7578,-0.23438 2.30469,-0.70312 0.54686,-0.46876 1.15233,-1.57553 1.8164,-3.32031 l 0.64453,-1.64063 -8.84765,-21.52344 3.80859,0 6.83594,17.10938 6.83594,-17.10938 3.80859,0 -9.60937,23.90625"
style="fill:#ffffff;fill-opacity:1"
id="path3732" />
<path
d="m 552.86737,352.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -1e-5,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3734" />
<path
d="m 568.47284,362.74356 0,-13.24219 3.59375,0 0,13.10547 c -10e-6,2.07032 0.40364,3.62631 1.21094,4.66797 0.80728,1.02865 2.01822,1.54297 3.63281,1.54297 1.94009,0 3.47004,-0.61849 4.58984,-1.85547 1.1328,-1.23697 1.6992,-2.92317 1.69922,-5.05859 l 0,-12.40235 3.59375,0 0,21.875 -3.59375,0 0,-3.35937 c -0.87241,1.32813 -1.88804,2.31771 -3.04687,2.96875 -1.14585,0.63802 -2.48048,0.95703 -4.00391,0.95703 -2.51303,0 -4.42058,-0.78125 -5.72266,-2.34375 -1.30208,-1.5625 -1.95312,-3.84765 -1.95312,-6.85547 m 9.04297,-13.76953 0,0"
style="fill:#ffffff;fill-opacity:1"
id="path3736" />
<path
d="m 606.91034,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08073,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3738" />
<path
d="m 176.89081,400.34122 0,3.35937 c -1.01565,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08594,-0.42969 -2.33074,2e-5 -4.14063,0.74221 -5.42968,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.9336,6.21093 0,2.66928 0.64453,4.7461 1.9336,6.23047 1.28905,1.47136 3.09894,2.20704 5.42968,2.20703 1.04166,1e-5 2.0703,-0.13671 3.08594,-0.41015 1.02863,-0.28646 2.05076,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06773,0.23437 -2.20705,0.35156 -3.41797,0.35156 -3.29428,0 -5.91147,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.0664,-3.06641 1.10676,2e-5 2.18749,0.11721 3.24219,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
style="fill:#ffffff;fill-opacity:1"
id="path3740" />
<path
d="m 191.65643,402.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67969,6.17187 0,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43098,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.1198,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78384,2.03127 2.67576,4.84377 2.67579,8.4375 -3e-5,3.58074 -0.89195,6.39324 -2.67579,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3742" />
<path
d="m 225.81659,408.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3744" />
<path
d="m 250.6994,399.50137 0,21.875 -3.61328,0 0,-19.08203 -9.86328,0 0,19.08203 -3.61328,0 0,-19.08203 -3.4375,0 0,-2.79297 3.4375,0 0,-1.52343 c -10e-6,-2.38279 0.55989,-4.1406 1.67969,-5.27344 1.1328,-1.14581 2.86457,-1.71872 5.19531,-1.71875 l 3.61328,0 0,2.98828 -3.4375,0 c -1.28907,3e-5 -2.18751,0.26044 -2.69531,0.78125 -0.4948,0.52086 -0.7422,1.45836 -0.74219,2.8125 l 0,1.93359 13.47656,0 m -3.61328,-8.47656 3.61328,0 0,4.55078 -3.61328,0 0,-4.55078"
style="fill:#ffffff;fill-opacity:1"
id="path3746" />
<path
d="m 272.65253,410.18497 c -2e-5,-2.60416 -0.54039,-4.62238 -1.6211,-6.05469 -1.06772,-1.43227 -2.57163,-2.14842 -4.51172,-2.14844 -1.92709,2e-5 -3.43099,0.71617 -4.51171,2.14844 -1.06772,1.43231 -1.60157,3.45053 -1.60157,6.05469 0,2.59115 0.53385,4.60287 1.60157,6.03515 1.08072,1.4323 2.58462,2.14844 4.51171,2.14844 1.94009,0 3.444,-0.71614 4.51172,-2.14844 1.08071,-1.43228 1.62108,-3.444 1.6211,-6.03515 m 3.59375,8.47656 c -2e-5,3.72396 -0.82685,6.49088 -2.48047,8.30078 -1.65367,1.82291 -4.18621,2.73437 -7.59766,2.73438 -1.26303,-10e-6 -2.45443,-0.0977 -3.57422,-0.29297 -1.1198,-0.1823 -2.20703,-0.46876 -3.26172,-0.85938 l 0,-3.49609 c 1.05469,0.57291 2.09635,0.99609 3.125,1.26953 1.02864,0.27343 2.07682,0.41015 3.14454,0.41016 2.35675,-10e-6 4.12107,-0.6185 5.29296,-1.85547 1.17186,-1.22396 1.7578,-3.07943 1.75782,-5.56641 l 0,-1.77734 c -0.74221,1.28906 -1.69273,2.2526 -2.85157,2.89062 -1.15886,0.63802 -2.54558,0.95703 -4.16015,0.95703 -2.6823,0 -4.84376,-1.02213 -6.48438,-3.0664 -1.64062,-2.04427 -2.46094,-4.7526 -2.46093,-8.125 -10e-6,-3.38541 0.82031,-6.10025 2.46093,-8.14453 1.64062,-2.04425 3.80208,-3.06639 6.48438,-3.06641 1.61457,2e-5 3.00129,0.31903 4.16015,0.95703 1.15884,0.63804 2.10936,1.60158 2.85157,2.89063 l 0,-3.32032 3.59375,0 0,19.16016"
style="fill:#ffffff;fill-opacity:1"
id="path3748" />
<path
d="m 283.27753,412.74356 0,-13.24219 3.59375,0 0,13.10547 c -1e-5,2.07032 0.40364,3.62631 1.21093,4.66797 0.80729,1.02865 2.01822,1.54297 3.63282,1.54297 1.94009,0 3.47003,-0.61849 4.58984,-1.85547 1.1328,-1.23697 1.6992,-2.92317 1.69922,-5.05859 l 0,-12.40235 3.59375,0 0,21.875 -3.59375,0 0,-3.35937 c -0.87241,1.32813 -1.88804,2.31771 -3.04688,2.96875 -1.14584,0.63802 -2.48048,0.95703 -4.0039,0.95703 -2.51303,0 -4.42058,-0.78125 -5.72266,-2.34375 -1.30209,-1.5625 -1.95313,-3.84765 -1.95312,-6.85547 m 9.04297,-13.76953 0,0"
style="fill:#ffffff;fill-opacity:1"
id="path3750" />
<path
d="m 321.71503,402.86075 c -0.40367,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.9896,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08074,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21092,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
style="fill:#ffffff;fill-opacity:1"
id="path3752" />
<path
d="m 335.46503,410.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
style="fill:#ffffff;fill-opacity:1"
id="path3754" />
<path
d="m 353.60956,393.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72265,3.4375 0.49479,0.50782 1.49088,0.76172 2.98829,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58204,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
style="fill:#ffffff;fill-opacity:1"
id="path3756" />
<path
d="m 365.758,399.50137 3.59375,0 0,21.875 -3.59375,0 0,-21.875 m 0,-8.51562 3.59375,0 0,4.55078 -3.59375,0 0,-4.55078"
style="fill:#ffffff;fill-opacity:1"
id="path3758" />
<path
d="m 385.32831,402.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -10e-6,2.6172 0.55338,4.681 1.66015,6.19141 1.11979,1.4974 2.64973,2.2461 4.58985,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55992,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65626,-4.85676 -2.65625,-8.4375 -10e-6,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78384,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
style="fill:#ffffff;fill-opacity:1"
id="path3760" />
<path
d="m 419.48846,408.17325 0,13.20312 -3.59375,0 0,-13.08593 c -10e-6,-2.0703 -0.40366,-3.61978 -1.21093,-4.64844 -0.80731,-1.02863 -2.01825,-1.54295 -3.63282,-1.54297 -1.94011,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.67969,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02735,-2.94922 1.17186,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70312,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
style="fill:#ffffff;fill-opacity:1"
id="path3762" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,22 +0,0 @@
TEMPLATE = lib
TARGET = PFDGadget
QT += svg
QT += opengl
include(../../openpilotgcsplugin.pri)
include(../../plugins/coreplugin/coreplugin.pri)
include(pfd_dependencies.pri)
HEADERS += pfdplugin.h
HEADERS += pfdgadget.h
HEADERS += pfdgadgetwidget.h
HEADERS += pfdgadgetfactory.h
HEADERS += pfdgadgetconfiguration.h
HEADERS += pfdgadgetoptionspage.h
SOURCES += pfdplugin.cpp
SOURCES += pfdgadget.cpp
SOURCES += pfdgadgetfactory.cpp
SOURCES += pfdgadgetwidget.cpp
SOURCES += pfdgadgetconfiguration.cpp
SOURCES += pfdgadgetoptionspage.cpp
OTHER_FILES += PFDGadget.pluginspec
FORMS += pfdgadgetoptionspage.ui
RESOURCES += pfd.qrc

View File

@ -1,5 +0,0 @@
<RCC>
<qresource prefix="/pfd">
<file>images/pfd-default.svg</file>
</qresource>
</RCC>

View File

@ -1 +0,0 @@
include(../../plugins/uavobjects/uavobjects.pri)

View File

@ -1,57 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadget.cpp
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdgadget.h"
#include "pfdgadgetwidget.h"
#include "pfdgadgetconfiguration.h"
PFDGadget::PFDGadget(QString classId, PFDGadgetWidget *widget, QWidget *parent) :
IUAVGadget(classId, parent),
m_widget(widget)
{}
PFDGadget::~PFDGadget()
{
delete m_widget;
}
/*
This is called when a configuration is loaded, and updates the plugin's settings.
Careful: the plugin is already drawn before the loadConfiguration method is called the
first time, so you have to be careful not to assume all the plugin values are initialized
the first time you use them
*/
void PFDGadget::loadConfiguration(IUAVGadgetConfiguration *config)
{
PFDGadgetConfiguration *m = qobject_cast<PFDGadgetConfiguration *>(config);
m_widget->setHqFonts(m->getHqFonts());
m_widget->setDialFile(m->dialFile());
m_widget->enableOpenGL(m->useOpenGL());
m_widget->enableSmoothUpdates(m->getBeSmooth());
m_widget->connectNeedles();
}

View File

@ -1,58 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadget.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDGADGET_H_
#define PFDGADGET_H_
#include <coreplugin/iuavgadget.h>
#include "pfdgadgetwidget.h"
class IUAVGadget;
class QWidget;
class QString;
class PFDGadgetWidget;
using namespace Core;
class PFDGadget : public Core::IUAVGadget {
Q_OBJECT
public:
PFDGadget(QString classId, PFDGadgetWidget *widget, QWidget *parent = 0);
~PFDGadget();
QWidget *widget()
{
return m_widget;
}
void loadConfiguration(IUAVGadgetConfiguration *config);
private:
PFDGadgetWidget *m_widget;
};
#endif // PFDGADGET_H_

View File

@ -1,77 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetconfiguration.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdgadgetconfiguration.h"
#include "utils/pathutils.h"
/**
* Loads a saved configuration or defaults if non exist.
*
*/
PFDGadgetConfiguration::PFDGadgetConfiguration(QString classId, QSettings *qSettings, QObject *parent) :
IUAVGadgetConfiguration(classId, parent),
m_defaultDial("Unknown"),
beSmooth(true)
{
// if a saved configuration exists load it
if (qSettings != 0) {
QString dialFile = qSettings->value("dialFile").toString();
useOpenGLFlag = qSettings->value("useOpenGLFlag").toBool();
hqFonts = qSettings->value("hqFonts").toBool();
beSmooth = qSettings->value("beSmooth").toBool();
m_defaultDial = Utils::PathUtils().InsertDataPath(dialFile);
}
}
/**
* Clones a configuration.
*
*/
IUAVGadgetConfiguration *PFDGadgetConfiguration::clone()
{
PFDGadgetConfiguration *m = new PFDGadgetConfiguration(this->classId());
m->m_defaultDial = m_defaultDial;
m->useOpenGLFlag = useOpenGLFlag;
m->hqFonts = hqFonts;
m->beSmooth = beSmooth;
return m;
}
/**
* Saves a configuration.
*
*/
void PFDGadgetConfiguration::saveConfig(QSettings *qSettings) const
{
QString dialFile = Utils::PathUtils().RemoveDataPath(m_defaultDial);
qSettings->setValue("dialFile", dialFile);
qSettings->setValue("useOpenGLFlag", useOpenGLFlag);
qSettings->setValue("hqFonts", hqFonts);
qSettings->setValue("beSmooth", beSmooth);
}

View File

@ -1,86 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetconfiguration.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDGADGETCONFIGURATION_H
#define PFDGADGETCONFIGURATION_H
#include <coreplugin/iuavgadgetconfiguration.h>
using namespace Core;
class PFDGadgetConfiguration : public IUAVGadgetConfiguration {
Q_OBJECT
public:
explicit PFDGadgetConfiguration(QString classId, QSettings *qSettings = 0, QObject *parent = 0);
// set dial configuration functions
void setDialFile(QString dialFile)
{
m_defaultDial = dialFile;
}
void setUseOpenGL(bool flag)
{
useOpenGLFlag = flag;
}
void setHqFonts(bool flag)
{
hqFonts = flag;
}
void setBeSmooth(bool flag)
{
beSmooth = flag;
}
// get dial configuration functions
QString dialFile()
{
return m_defaultDial;
}
bool useOpenGL()
{
return useOpenGLFlag;
}
bool getHqFonts()
{
return hqFonts;
}
bool getBeSmooth()
{
return beSmooth;
}
void saveConfig(QSettings *settings) const;
IUAVGadgetConfiguration *clone();
private:
QString m_defaultDial; // The name of the dial's SVG source file
bool useOpenGLFlag;
bool hqFonts;
bool beSmooth;
};
#endif // PFDGADGETCONFIGURATION_H

View File

@ -1,58 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetfactory.cpp
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdgadgetfactory.h"
#include "pfdgadgetwidget.h"
#include "pfdgadget.h"
#include "pfdgadgetconfiguration.h"
#include "pfdgadgetoptionspage.h"
#include <coreplugin/iuavgadget.h>
PFDGadgetFactory::PFDGadgetFactory(QObject *parent) :
IUAVGadgetFactory(QString("PFDGadget"),
tr("Primary Flight Display"),
parent)
{}
PFDGadgetFactory::~PFDGadgetFactory()
{}
Core::IUAVGadget *PFDGadgetFactory::createGadget(QWidget *parent)
{
PFDGadgetWidget *gadgetWidget = new PFDGadgetWidget(parent);
return new PFDGadget(QString("PFDGadget"), gadgetWidget, parent);
}
IUAVGadgetConfiguration *PFDGadgetFactory::createConfiguration(QSettings *qSettings)
{
return new PFDGadgetConfiguration(QString("PFDGadget"), qSettings);
}
IOptionsPage *PFDGadgetFactory::createOptionsPage(IUAVGadgetConfiguration *config)
{
return new PFDGadgetOptionsPage(qobject_cast<PFDGadgetConfiguration *>(config));
}

View File

@ -1,51 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetfactory.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDGADGETFACTORY_H_
#define PFDGADGETFACTORY_H_
#include <coreplugin/iuavgadgetfactory.h>
namespace Core {
class IUAVGadget;
class IUAVGadgetFactory;
}
using namespace Core;
class PFDGadgetFactory : public IUAVGadgetFactory {
Q_OBJECT
public:
PFDGadgetFactory(QObject *parent = 0);
~PFDGadgetFactory();
Core::IUAVGadget *createGadget(QWidget *parent);
IUAVGadgetConfiguration *createConfiguration(QSettings *qSettings);
IOptionsPage *createOptionsPage(IUAVGadgetConfiguration *config);
};
#endif // PFDGADGETFACTORY_H_

View File

@ -1,85 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetoptionspage.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdgadgetoptionspage.h"
#include "pfdgadgetconfiguration.h"
#include "ui_pfdgadgetoptionspage.h"
#include "extensionsystem/pluginmanager.h"
#include "uavobjectmanager.h"
#include "uavdataobject.h"
#include <QFileDialog>
#include <QtAlgorithms>
#include <QStringList>
PFDGadgetOptionsPage::PFDGadgetOptionsPage(PFDGadgetConfiguration *config, QObject *parent) :
IOptionsPage(parent),
m_config(config)
{}
// creates options page widget (uses the UI file)
QWidget *PFDGadgetOptionsPage::createPage(QWidget *parent)
{
Q_UNUSED(parent);
options_page = new Ui::PFDGadgetOptionsPage();
// main widget
QWidget *optionsPageWidget = new QWidget;
// main layout
options_page->setupUi(optionsPageWidget);
// Restore the contents from the settings:
options_page->svgSourceFile->setExpectedKind(Utils::PathChooser::File);
options_page->svgSourceFile->setPromptDialogFilter(tr("SVG image (*.svg)"));
options_page->svgSourceFile->setPromptDialogTitle(tr("Choose SVG image"));
options_page->svgSourceFile->setPath(m_config->dialFile());
options_page->useOpenGL->setChecked(m_config->useOpenGL());
options_page->hqText->setChecked(m_config->getHqFonts());
options_page->smoothUpdates->setChecked(m_config->getBeSmooth());
return optionsPageWidget;
}
/**
* Called when the user presses apply or OK.
*
* Saves the current values
*
*/
void PFDGadgetOptionsPage::apply()
{
m_config->setDialFile(options_page->svgSourceFile->path());
m_config->setUseOpenGL(options_page->useOpenGL->checkState());
m_config->setHqFonts(options_page->hqText->checkState());
m_config->setBeSmooth(options_page->smoothUpdates->checkState());
}
void PFDGadgetOptionsPage::finish()
{}

View File

@ -1,64 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetoptionspage.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDGADGETOPTIONSPAGE_H
#define PFDGADGETOPTIONSPAGE_H
#include "coreplugin/dialogs/ioptionspage.h"
#include "QString"
#include <QStringList>
#include <QDebug>
namespace Core {
class IUAVGadgetConfiguration;
}
class PFDGadgetConfiguration;
namespace Ui {
class PFDGadgetOptionsPage;
}
using namespace Core;
class PFDGadgetOptionsPage : public IOptionsPage {
Q_OBJECT
public:
explicit PFDGadgetOptionsPage(PFDGadgetConfiguration *config, QObject *parent = 0);
QWidget *createPage(QWidget *parent);
void apply();
void finish();
private:
Ui::PFDGadgetOptionsPage *options_page;
PFDGadgetConfiguration *m_config;
private slots:
};
#endif // PFDGADGETOPTIONSPAGE_H

View File

@ -1,150 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PFDGadgetOptionsPage</class>
<widget class="QWidget" name="PFDGadgetOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>430</width>
<height>306</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>430</width>
<height>306</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
<property name="spacing">
<number>10</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>PFD SVG: </string>
</property>
</widget>
</item>
<item>
<widget class="Utils::PathChooser" name="svgSourceFile" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="useOpenGL">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Use OpenGL for rendering</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="hqText">
<property name="text">
<string>High Quality text (OpenGL)</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="smoothUpdates">
<property name="text">
<string>Smooth updates</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Utils::PathChooser</class>
<extends>QWidget</extends>
<header>utils/pathchooser.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -1,1133 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetwidget.cpp
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdgadgetwidget.h"
#include <utils/stylehelper.h>
#include <utils/cachedsvgitem.h>
#include <iostream>
#include <QDebug>
#include <QPainter>
#include <QtOpenGL/QGLWidget>
#include <cmath>
PFDGadgetWidget::PFDGadgetWidget(QWidget *parent) : QGraphicsView(parent)
{
setMinimumSize(64, 64);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setScene(new QGraphicsScene(this));
// setRenderHint(QPainter::SmoothPixmapTransform);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
// setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
// setRenderHints(QPainter::TextAntialiasing);
// setRenderHints(QPainter::HighQualityAntialiasing);
m_renderer = new QSvgRenderer();
attitudeObj = NULL;
headingObj = NULL;
gcsBatteryObj = NULL;
gpsObj = NULL;
compassBandWidth = 0;
pfdError = true;
hqFonts = false;
rollTarget = 0;
rollValue = 0;
pitchTarget = 0;
pitchValue = 0;
headingTarget = 0;
headingValue = 0;
groundspeedTarget = 0;
groundspeedValue = 0;
altitudeTarget = 0;
altitudeValue = 0;
// This timer mechanism makes needles rotate smoothly
connect(&dialTimer, SIGNAL(timeout()), this, SLOT(moveNeedles()));
dialTimer.start(30);
connect(&skyDialTimer, SIGNAL(timeout()), this, SLOT(moveSky()));
skyDialTimer.start(30);
}
PFDGadgetWidget::~PFDGadgetWidget()
{
skyDialTimer.stop();
dialTimer.stop();
}
void PFDGadgetWidget::setToolTipPrivate()
{
static qint32 updateRate = 0;
UAVObject::Metadata mdata = attitudeObj->getMetadata();
if (mdata.flightTelemetryUpdatePeriod != updateRate) {
this->setToolTip("Current refresh rate:" + QString::number(mdata.flightTelemetryUpdatePeriod) + " miliseconds" + "\nIf you want to change it please edit the AttitudeActual metadata on the object browser.");
}
}
/*!
\brief Enables/Disables OpenGL
*/
void PFDGadgetWidget::enableOpenGL(bool flag)
{
if (flag) {
setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
} else {
setViewport(new QWidget);
}
}
/*!
\brief Connects the widget to the relevant UAVObjects
Should only be called after the PFD artwork is loaded.
We want: AttitudeActual, FlightBattery, Location.
*/
void PFDGadgetWidget::connectNeedles()
{
if (attitudeObj != NULL) {
disconnect(attitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAttitude(UAVObject *)));
}
if (headingObj != NULL) {
disconnect(headingObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateHeading(UAVObject *)));
}
if (gcsBatteryObj != NULL) {
disconnect(gcsBatteryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateBattery(UAVObject *)));
}
if (gpsObj != NULL) {
disconnect(gpsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGPS(UAVObject *)));
}
// Safeguard: if artwork did not load properly, don't go further
if (pfdError) {
return;
}
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
airspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AirspeedActual"));
if (airspeedObj != NULL) {
connect(airspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAirspeed(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (AirspeedActual).";
}
groundspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("VelocityActual"));
if (groundspeedObj != NULL) {
connect(groundspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGroundspeed(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (VelocityActual).";
}
altitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
if (altitudeObj != NULL) {
connect(altitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAltitude(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (PositionActual).";
}
attitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AttitudeActual"));
if (attitudeObj != NULL) {
connect(attitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAttitude(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (AttitudeActual).";
}
headingObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
if (headingObj != NULL) {
connect(headingObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateHeading(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (PositionActual).";
}
if (gcsGPSStats) {
gpsObj = dynamic_cast<UAVDataObject *>(objManager->getObject("GPSPosition"));
if (gpsObj != NULL) {
connect(gpsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGPS(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (GPSPosition).";
}
}
if (gcsTelemetryArrow || gcsTelemetryStats) {
// Only register if the PFD wants link stats/status
gcsTelemetryObj = dynamic_cast<UAVDataObject *>(objManager->getObject("GCSTelemetryStats"));
if (gcsTelemetryObj != NULL) {
connect(gcsTelemetryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateLinkStatus(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (GCSTelemetryStats).";
}
}
if (gcsBatteryStats) { // Only register if the PFD wants battery display
gcsBatteryObj = dynamic_cast<UAVDataObject *>(objManager->getObject("FlightBatteryState"));
if (gcsBatteryObj != NULL) {
connect(gcsBatteryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateBattery(UAVObject *)));
} else {
qDebug() << "Error: Object is unknown (FlightBatteryState).";
}
}
}
/*!
\brief Updates the GPS stats
*/
void PFDGadgetWidget::updateGPS(UAVObject *object1)
{
UAVObjectField *field = object1->getField(QString("Satellites"));
UAVObjectField *field1 = object1->getField(QString("PDOP"));
if (field && field1) {
QString s = QString("GPS: ") + field->getValue().toString() + "\nPDP: "
+ field1->getValue().toString();
if (s != satString) {
gcsGPSStats->setPlainText(s);
satString = s;
}
}
}
/*!
\brief Updates the link stats
*/
void PFDGadgetWidget::updateLinkStatus(UAVObject *object1)
{
// TODO: find a way to avoid updating the graphics if the value
// has not changed since the last update
// Double check that the field exists:
QString st = QString("Status");
QString tdr = QString("TxDataRate");
QString rdr = QString("RxDataRate");
UAVObjectField *field = object1->getField(st);
UAVObjectField *field2 = object1->getField(tdr);
UAVObjectField *field3 = object1->getField(rdr);
if (field && field2 && field3) {
QString s = field->getValue().toString();
if (m_renderer->elementExists("gcstelemetry-" + s) && gcsTelemetryArrow) {
gcsTelemetryArrow->setElementId("gcstelemetry-" + s);
} else { // Safeguard
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
}
double v1 = field2->getDouble();
double v2 = field3->getDouble();
s.sprintf("%.0f/%.0f", v1, v2);
if (gcsTelemetryStats) {
gcsTelemetryStats->setPlainText(s);
}
} else {
qDebug() << "UpdateLinkStatus: Wrong field, maybe an issue with object disconnection ?";
}
}
/*!
\brief Reads the updated attitude and computes the new display position
Resolution is 1 degree roll & 1/7.5 degree pitch.
*/
void PFDGadgetWidget::updateAttitude(UAVObject *object1)
{
setToolTipPrivate();
UAVObjectField *rollField = object1->getField(QString("Roll"));
UAVObjectField *yawField = object1->getField(QString("Yaw"));
UAVObjectField *pitchField = object1->getField(QString("Pitch"));
if (rollField && yawField && pitchField) {
// These factors assume some things about the PFD SVG, namely:
// - Roll, Pitch and Heading value in degrees
// - Pitch lines are 300px high for a +20/-20 range, which means
// 7.5 pixels per pitch degree.
// TODO: loosen this constraint and only require a +/- 20 deg range,
// and compute the height from the SVG element.
// Also: keep the integer value only, to avoid unnecessary redraws
rollTarget = -floor(rollField->getDouble() * 10) / 10;
if ((rollTarget - rollValue) > 180) {
rollValue += 360;
} else if (((rollTarget - rollValue) < -180)) {
rollValue -= 360;
}
pitchTarget = floor(pitchField->getDouble() * 7.5);
// These factors assume some things about the PFD SVG, namely:
// - Heading value in degrees
// - "Scale" element is 540 degrees wide
// Corvus Corax: "If you want a smooth transition between two angles, It is usually solved that by substracting
// one from another, and if the result is >180 or <-180 I substract (respectively add) 360 degrees
// to it. That way you always get the "shorter difference" to turn in."
double fac = compassBandWidth / 540;
headingTarget = yawField->getDouble() * (-fac);
if (headingTarget != headingTarget) {
headingTarget = headingValue; // NaN checking.
}
if ((headingValue - headingTarget) / fac > 180) {
headingTarget += 360 * fac;
} else if (((headingValue - headingTarget) / fac < -180)) {
headingTarget -= 360 * fac;
}
headingTarget = floor(headingTarget * 10) / 10; // Avoid stupid redraws
if (!dialTimer.isActive()) {
dialTimer.start(); // Rearm the dial Timer which might be stopped.
}
} else {
qDebug() << "Unable to get one of the fields for attitude update";
}
}
/*!
\brief Updates the compass reading and speed dial.
This also updates speed & altitude according to PositionActual data.
Note: the speed dial shows the ground speed at the moment, because
there is no airspeed by default. Should become configurable in a future
gadget release (TODO)
*/
void PFDGadgetWidget::updateHeading(UAVObject *object)
{
Q_UNUSED(object);
}
/*!
\brief Called by updates to @PositionActual to compute groundspeed from velocity
*/
void PFDGadgetWidget::updateGroundspeed(UAVObject *object)
{
UAVObjectField *northField = object->getField("North");
UAVObjectField *eastField = object->getField("East");
if (northField && eastField) {
double val = floor(sqrt(pow(northField->getDouble(), 2) + pow(eastField->getDouble(), 2)) * 10) / 10;
groundspeedTarget = val * speedScaleHeight / 30;
if (!dialTimer.isActive()) {
dialTimer.start(); // Rearm the dial Timer which might be stopped.
}
} else {
qDebug() << "UpdateHeading: Wrong field, maybe an issue with object disconnection ?";
}
}
/*!
\brief Called by updates to @AirspeedActual
*/
void PFDGadgetWidget::updateAirspeed(UAVObject *object)
{
UAVObjectField *airspeedField = object->getField("CalibratedAirspeed");
if (airspeedField) {
airspeedTarget = airspeedField->getDouble();
if (!dialTimer.isActive()) {
dialTimer.start(); // Rearm the dial Timer which might be stopped.
}
} else {
qDebug() << "UpdateHeading: Wrong field, maybe an issue with object disconnection ?";
}
}
/*!
\brief Called by the @ref PositionActual updates to show altitude
*/
void PFDGadgetWidget::updateAltitude(UAVObject *object)
{
UAVObjectField *downField = object->getField("Down");
if (downField) {
altitudeTarget = -downField->getDouble();
if (!dialTimer.isActive()) {
dialTimer.start(); // Rearm the dial Timer which might be stopped.
}
} else {
qDebug() << "Unable to get field for altitude update. Obj: " << object->getName();
}
}
/*!
\brief Called by the UAVObject which got updated
*/
void PFDGadgetWidget::updateBattery(UAVObject *object1)
{
// Double check that the field exists:
QString voltage = QString("Voltage");
QString current = QString("Current");
QString energy = QString("ConsumedEnergy");
UAVObjectField *field = object1->getField(voltage);
UAVObjectField *field2 = object1->getField(current);
UAVObjectField *field3 = object1->getField(energy);
if (field && field2 && field3) {
QString s = QString();
double v0 = field->getDouble();
double v1 = field2->getDouble();
double v2 = field3->getDouble();
s.sprintf("%.2fV\n%.2fA\n%.0fmAh", v0, v1, v2);
if (s != batString) {
gcsBatteryStats->setPlainText(s);
batString = s;
}
} else {
qDebug() << "UpdateBattery: Wrong field, maybe an issue with object disconnection ?";
}
}
/*!
\brief Sets up the PFD from the SVG master file.
Initializes the display, and does all the one-time calculations.
*/
void PFDGadgetWidget::setDialFile(QString dfn)
{
QGraphicsScene *l_scene = scene();
setBackgroundBrush(QBrush(Utils::StyleHelper::baseColor()));
if (QFile::exists(dfn) && m_renderer->load(dfn) && m_renderer->isValid()) {
/* The PFD element IDs are fixed, not like with the analog dial.
- Background: background
- Foreground: foreground (contains all fixed elements, including plane)
- earth/sky : world
- Roll scale: rollscale
- compass frame: compass (part of the foreground)
- compass band : compass-band
- Home point: homewaypoint
- Next point: nextwaypoint
- Home point bearing: homewaypoint-bearing
- Next point bearing: nextwaypoint-bearing
- Speed rectangle (left side): speed-bg
- Speed scale: speed-scale.
- Black speed window: speed-window.
- Altitude rectangle (right site): altitude-bg.
- Altitude scale: altitude-scale.
- Black altitude window: altitude-window.
- GCS Telemetry status arrow: gcstelemetry-XXXX
- Telemetry link rate: linkrate
- GPS status text: gps-txt
- Battery stats: battery-txt
*/
l_scene->clear(); // Deletes all items contained in the scene as well.
m_background = new CachedSvgItem();
// All other items will be clipped to the shape of the background
m_background->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
m_background->setSharedRenderer(m_renderer);
m_background->setElementId("background");
l_scene->addItem(m_background);
m_world = new CachedSvgItem();
m_world->setParentItem(m_background);
m_world->setSharedRenderer(m_renderer);
m_world->setElementId("world");
l_scene->addItem(m_world);
// red Roll scale: rollscale
m_rollscale = new CachedSvgItem();
m_rollscale->setSharedRenderer(m_renderer);
m_rollscale->setElementId("rollscale");
l_scene->addItem(m_rollscale);
// Home point:
m_homewaypoint = new CachedSvgItem();
// Next point:
m_nextwaypoint = new CachedSvgItem();
// Home point bearing:
m_homepointbearing = new CachedSvgItem();
// Next point bearing:
m_nextpointbearing = new CachedSvgItem();
QGraphicsSvgItem *m_foreground = new CachedSvgItem();
m_foreground->setParentItem(m_background);
m_foreground->setSharedRenderer(m_renderer);
m_foreground->setElementId("foreground");
l_scene->addItem(m_foreground);
////////////////////
// Compass
////////////////////
// Get the default location of the Compass:
QMatrix compassMatrix = m_renderer->matrixForElement("compass");
qreal startX = compassMatrix.mapRect(m_renderer->boundsOnElement("compass")).x();
qreal startY = compassMatrix.mapRect(m_renderer->boundsOnElement("compass")).y();
// Then once we have the initial location, we can put it
// into a QGraphicsSvgItem which we will display at the same
// place: we do this so that the heading scale can be clipped to
// the compass dial region.
m_compass = new CachedSvgItem();
m_compass->setSharedRenderer(m_renderer);
m_compass->setElementId("compass");
m_compass->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
l_scene->addItem(m_compass);
QTransform matrix;
matrix.translate(startX, startY);
m_compass->setTransform(matrix, false);
// Now place the compass scale inside:
m_compassband = new CachedSvgItem();
m_compassband->setSharedRenderer(m_renderer);
m_compassband->setElementId("compass-band");
m_compassband->setParentItem(m_compass);
l_scene->addItem(m_compassband);
matrix.reset();
// Note: the compass band has to be a path, which means all text elements have to be
// converted, ortherwise boundsOnElement does not compute the height correctly
// if the highest element is a text element. This is a Qt Bug as far as I can tell.
// compass-scale is the while bottom line inside the band: using the band's width
// includes half the width of the letters, which causes errors:
compassBandWidth = m_renderer->boundsOnElement("compass-scale").width();
////////////////////
// Speed
////////////////////
// Speedometer on the left hand:
//
compassMatrix = m_renderer->matrixForElement("speed-bg");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).y();
QGraphicsSvgItem *verticalbg = new CachedSvgItem();
verticalbg->setSharedRenderer(m_renderer);
verticalbg->setElementId("speed-bg");
verticalbg->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
l_scene->addItem(verticalbg);
matrix.reset();
matrix.translate(startX, startY);
verticalbg->setTransform(matrix, false);
// Note: speed-scale should contain exactly 6 major ticks
// for 30km/h
m_speedscale = new QGraphicsItemGroup();
m_speedscale->setParentItem(verticalbg);
QGraphicsSvgItem *speedscalelines = new CachedSvgItem();
speedscalelines->setSharedRenderer(m_renderer);
speedscalelines->setElementId("speed-scale");
speedScaleHeight = m_renderer->matrixForElement("speed-scale").mapRect(
m_renderer->boundsOnElement("speed-scale")).height();
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).width();
startX -= m_renderer->matrixForElement("speed-scale").mapRect(
m_renderer->boundsOnElement("speed-scale")).width();
matrix.reset();
matrix.translate(startX, 0);
speedscalelines->setTransform(matrix, false);
// Quick way to reposition the item before putting it in the group:
speedscalelines->setParentItem(verticalbg);
m_speedscale->addToGroup(speedscalelines); // (reparents the item)
// Add the scale text elements:
QGraphicsTextItem *speed0 = new QGraphicsTextItem("0");
speed0->setDefaultTextColor(QColor("White"));
speed0->setFont(QFont("Arial", (int)speedScaleHeight / 30));
if (hqFonts) {
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
matrix.reset();
matrix.translate(compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).width() / 10, -speedScaleHeight / 30);
speed0->setTransform(matrix, false);
speed0->setParentItem(verticalbg);
m_speedscale->addToGroup(speed0);
for (int i = 0; i < 6; i++) {
speed0 = new QGraphicsTextItem("");
speed0->setDefaultTextColor(QColor("White"));
speed0->setFont(QFont("Arial", (int)speedScaleHeight / 30));
speed0->setPlainText(QString().setNum(i * 5 + 1));
if (hqFonts) {
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
matrix.translate(0, speedScaleHeight / 6);
speed0->setTransform(matrix, false);
speed0->setParentItem(verticalbg);
m_speedscale->addToGroup(speed0);
}
// Now vertically center the speed scale on the speed background
QRectF rectB = verticalbg->boundingRect();
QRectF rectN = speedscalelines->boundingRect();
m_speedscale->setPos(0, rectB.height() / 2 - rectN.height() / 2 - rectN.height() / 6);
// Isolate the speed window and put it above the speed scale
compassMatrix = m_renderer->matrixForElement("speed-window");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).y();
qreal speedWindowHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).height();
QGraphicsSvgItem *speedwindow = new CachedSvgItem();
speedwindow->setSharedRenderer(m_renderer);
speedwindow->setElementId("speed-window");
speedwindow->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
l_scene->addItem(speedwindow);
matrix.reset();
matrix.translate(startX, startY);
speedwindow->setTransform(matrix, false);
// Last create a Text Item at the location of the speed window
// and save it for future updates:
m_speedtext = new QGraphicsTextItem("0000");
m_speedtext->setDefaultTextColor(QColor("White"));
m_speedtext->setFont(QFont("Arial", (int)speedWindowHeight / 2));
if (hqFonts) {
m_speedtext->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
m_speedtext->setParentItem(speedwindow);
////////////////////
// Altitude
////////////////////
// Right hand, very similar to speed
compassMatrix = m_renderer->matrixForElement("altitude-bg");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-bg")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-bg")).y();
verticalbg = new CachedSvgItem();
verticalbg->setSharedRenderer(m_renderer);
verticalbg->setElementId("altitude-bg");
verticalbg->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
l_scene->addItem(verticalbg);
matrix.reset();
matrix.translate(startX, startY);
verticalbg->setTransform(matrix, false);
// Note: altitude-scale should contain exactly 6 major ticks
// for 30 meters
m_altitudescale = new QGraphicsItemGroup();
m_altitudescale->setParentItem(verticalbg);
QGraphicsSvgItem *altitudescalelines = new CachedSvgItem();
altitudescalelines->setSharedRenderer(m_renderer);
altitudescalelines->setElementId("altitude-scale");
altitudeScaleHeight = m_renderer->matrixForElement("altitude-scale").mapRect(
m_renderer->boundsOnElement("altitude-scale")).height();
// Quick way to reposition the item before putting it in the group:
altitudescalelines->setParentItem(verticalbg);
m_altitudescale->addToGroup(altitudescalelines); // (reparents the item)
// Add the scale text elements:
speed0 = new QGraphicsTextItem("XXXX");
speed0->setDefaultTextColor(QColor("White"));
speed0->setFont(QFont("Arial", (int)altitudeScaleHeight / 30));
if (hqFonts) {
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
matrix.reset();
matrix.translate(m_renderer->matrixForElement("altitude-scale").mapRect(m_renderer->boundsOnElement("altitude-scale")).width()
+ m_renderer->matrixForElement("altitude-bg").mapRect(m_renderer->boundsOnElement("altitude-bg")).width() / 10, -altitudeScaleHeight / 30);
speed0->setTransform(matrix, false);
speed0->setParentItem(verticalbg);
m_altitudescale->addToGroup(speed0);
for (int i = 0; i < 6; i++) {
speed0 = new QGraphicsTextItem("XXXX");
speed0->setDefaultTextColor(QColor("White"));
speed0->setFont(QFont("Arial", (int)altitudeScaleHeight / 30));
speed0->setPlainText(QString().setNum(i * 5 + 1));
if (hqFonts) {
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
matrix.translate(0, altitudeScaleHeight / 6);
speed0->setTransform(matrix, false);
speed0->setParentItem(verticalbg);
m_altitudescale->addToGroup(speed0);
}
// Now vertically center the speed scale on the speed background
rectB = verticalbg->boundingRect();
rectN = altitudescalelines->boundingRect();
m_altitudescale->setPos(0, rectB.height() / 2 - rectN.height() / 2 - rectN.height() / 6);
// Isolate the Altitude window and put it above the altitude scale
compassMatrix = m_renderer->matrixForElement("altitude-window");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).y();
qreal altitudeWindowHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).height();
QGraphicsSvgItem *altitudewindow = new CachedSvgItem();
altitudewindow->setSharedRenderer(m_renderer);
altitudewindow->setElementId("altitude-window");
altitudewindow->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
QGraphicsItem::ItemClipsToShape);
l_scene->addItem(altitudewindow);
matrix.reset();
matrix.translate(startX, startY);
altitudewindow->setTransform(matrix, false);
// Last create a Text Item at the location of the speed window
// and save it for future updates:
m_altitudetext = new QGraphicsTextItem("0000");
m_altitudetext->setDefaultTextColor(QColor("White"));
m_altitudetext->setFont(QFont("Arial", (int)altitudeWindowHeight / 2));
if (hqFonts) {
m_altitudetext->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
m_altitudetext->setParentItem(altitudewindow);
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).width() / 10;
matrix.reset();
matrix.translate(startX, 0);
m_altitudetext->setTransform(matrix, false);
////////////////
// GCS Telemetry Indicator
////////////////
if (m_renderer->elementExists("gcstelemetry-Disconnected")) {
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
gcsTelemetryArrow = new CachedSvgItem();
gcsTelemetryArrow->setSharedRenderer(m_renderer);
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
l_scene->addItem(gcsTelemetryArrow);
matrix.reset();
matrix.translate(startX, startY);
gcsTelemetryArrow->setTransform(matrix, false);
} else {
gcsTelemetryArrow = NULL;
}
if (m_renderer->elementExists("linkrate")) {
compassMatrix = m_renderer->matrixForElement("linkrate");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).y();
qreal linkRateHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).height();
gcsTelemetryStats = new QGraphicsTextItem();
gcsTelemetryStats->setDefaultTextColor(QColor("White"));
gcsTelemetryStats->setFont(QFont("Arial", (int)linkRateHeight));
if (hqFonts) {
gcsTelemetryStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
l_scene->addItem(gcsTelemetryStats);
matrix.reset();
matrix.translate(startX, startY - linkRateHeight / 2);
gcsTelemetryStats->setTransform(matrix, false);
} else {
gcsTelemetryStats = NULL;
}
////////////////
// GCS Battery Indicator
////////////////
/* (to be used the day I add a green/yellow/red indicator)
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
gcsTelemetryArrow = new CachedSvgItem();
gcsTelemetryArrow->setSharedRenderer(m_renderer);
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
l_scene->addItem(gcsTelemetryArrow);
matrix.reset();
matrix.translate(startX,startY);
gcsTelemetryArrow->setTransform(matrix,false);
*/
if (m_renderer->elementExists("battery-txt")) {
compassMatrix = m_renderer->matrixForElement("battery-txt");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).y();
qreal batStatHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).height();
gcsBatteryStats = new QGraphicsTextItem("Battery");
gcsBatteryStats->setDefaultTextColor(QColor("White"));
gcsBatteryStats->setFont(QFont("Arial", (int)batStatHeight));
if (hqFonts) {
gcsBatteryStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
l_scene->addItem(gcsBatteryStats);
matrix.reset();
matrix.translate(startX, startY - batStatHeight / 2);
gcsBatteryStats->setTransform(matrix, false);
} else {
gcsBatteryStats = NULL;
}
////////////////
// GCS GPS Indicator
////////////////
/* (to be used the day I add a green/yellow/red indicator)
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
gcsTelemetryArrow = new CachedSvgItem();
gcsTelemetryArrow->setSharedRenderer(m_renderer);
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
l_scene->addItem(gcsTelemetryArrow);
matrix.reset();
matrix.translate(startX,startY);
gcsTelemetryArrow->setTransform(matrix,false);
*/
if (m_renderer->elementExists("gps-txt")) {
compassMatrix = m_renderer->matrixForElement("gps-txt");
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).x();
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).y();
qreal gpsStatHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).height();
gcsGPSStats = new QGraphicsTextItem("GPS");
gcsGPSStats->setDefaultTextColor(QColor("White"));
gcsGPSStats->setFont(QFont("Arial", (int)gpsStatHeight));
if (hqFonts) {
gcsGPSStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
l_scene->addItem(gcsGPSStats);
matrix.reset();
matrix.translate(startX, startY - gpsStatHeight / 2);
gcsGPSStats->setTransform(matrix, false);
} else {
gcsGPSStats = NULL;
}
l_scene->setSceneRect(m_background->boundingRect());
/////////////////
// Item placement
/////////////////
// Now Initialize the center for all transforms of the relevant elements to the
// center of the background:
// 1) Move the center of the needle to the center of the background.
rectB = m_background->boundingRect();
rectN = m_world->boundingRect();
m_world->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
// 2) Put the transform origin point of the needle at its center.
m_world->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
rectN = m_rollscale->boundingRect();
m_rollscale->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
m_rollscale->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
// Also to the same init for the compass:
rectB = m_compass->boundingRect();
rectN = m_compassband->boundingRect();
m_compassband->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
m_compassband->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
// Last: we just loaded the dial file which is by default valid for a "zero" value
// of the needles, so we have to reset the needles too upon dial file loading, otherwise
// we would end up with an offset when we change a dial file and the needle value
// is not zero at that time.
rollValue = 0;
pitchValue = 0;
headingValue = 0;
groundspeedValue = 0;
altitudeValue = 0;
pfdError = false;
if (!dialTimer.isActive()) {
dialTimer.start(); // Rearm the dial Timer which might be stopped.
}
} else { qDebug() << "Error on PFD artwork file.";
m_renderer->load(QString(":/pfd/images/pfd-default.svg"));
l_scene->clear(); // This also deletes all items contained in the scene.
m_background = new CachedSvgItem();
m_background->setSharedRenderer(m_renderer);
l_scene->addItem(m_background);
pfdError = true; }
}
void PFDGadgetWidget::paint()
{
// update();
}
void PFDGadgetWidget::paintEvent(QPaintEvent *event)
{
// Skip painting until the dial file is loaded
if (!m_renderer->isValid()) {
qDebug() << "Dial file not loaded, not rendering";
return;
}
QGraphicsView::paintEvent(event);
}
// This event enables the dial to be dynamically resized
// whenever the gadget is resized, taking advantage of the vector
// nature of SVG dials.
void PFDGadgetWidget::resizeEvent(QResizeEvent *event)
{
Q_UNUSED(event);
fitInView(m_background, Qt::KeepAspectRatio);
}
/*!
\brief Update method for the vertical scales
*/
void PFDGadgetWidget::moveVerticalScales() {}
void PFDGadgetWidget::moveSky()
{
int dialCount = 2; // Gets decreased by one for each element
// which has finished moving
// qDebug() << "MoveSky";
/// TODO: optimize!!!
if (pfdError) {
// skyDialTimer.stop();
return;
}
// In some instances, it can happen that the rollValue & target are
// invalid inside the UAVObjects, and become a "nan" value, which freezes
// the PFD and the whole GCS: for this reason, we check this here.
// The strange check below works, it is a workaround because "isnan(double)"
// is not supported on every compiler.
if (rollTarget != rollTarget || pitchTarget != pitchTarget) {
return;
}
//////
// Roll
//////
if (rollValue != rollTarget) {
double rollDiff;
if ((abs((rollValue - rollTarget) * 10) > 5) && beSmooth) {
rollDiff = (rollTarget - rollValue) / 2;
} else {
rollDiff = rollTarget - rollValue;
dialCount--;
}
m_world->setRotation(m_world->rotation() + rollDiff);
m_rollscale->setRotation(m_rollscale->rotation() + rollDiff);
rollValue += rollDiff;
} else {
dialCount--;
}
//////
// Pitch
//////
if (pitchValue != pitchTarget) {
double pitchDiff;
if ((abs((pitchValue - pitchTarget) * 10) > 5) && beSmooth) {
// if (0) {
pitchDiff = (pitchTarget - pitchValue) / 2;
} else {
pitchDiff = pitchTarget - pitchValue;
dialCount--;
}
QPointF opd = QPointF(0, pitchDiff);
m_world->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), true);
QPointF oop = m_world->transformOriginPoint();
m_world->setTransformOriginPoint((oop.x() - opd.x()), (oop.y() - opd.y()));
pitchValue += pitchDiff;
} else {
dialCount--;
}
if (dialCount) {
scene()->update(sceneRect());
}
// if (!dialCount)
// skyDialTimer.stop();
}
// Take an input value and move the elements accordingly.
// Movement is smooth, starts fast and slows down when
// approaching the target.
//
void PFDGadgetWidget::moveNeedles()
{
int dialCount = 3; // Gets decreased by one for each element
// which has finished moving
// qDebug() << "MoveNeedles";
/// TODO: optimize!!!
if (pfdError) {
dialTimer.stop();
return;
}
//////
// Heading
//
// If you want a smooth transition between two angles, It is usually solved that by substracting
// one from another, and if the result is >180 or <-180 I substract (respectively add) 360 degrees
// to it. That way you always get the "shorter difference" to turn in.
//////
if (headingValue != headingTarget) {
double headingDiff;
if ((abs((headingValue - headingTarget) * 10) > 5) && beSmooth) {
headingDiff = (headingTarget - headingValue) / 5;
} else {
headingDiff = headingTarget - headingValue;
dialCount--;
}
double threshold = 180 * compassBandWidth / 540;
// Note: rendering can jump oh so very slightly when crossing the 180 degree
// boundary, should not impact actual useability of the display.
if ((headingValue + headingDiff) >= threshold) {
// We went over 180°: activate a -360 degree offset
headingDiff -= 2 * threshold;
headingTarget -= 2 * threshold;
} else if ((headingValue + headingDiff) < -threshold) {
// We went under -180°: remove the -360 degree offset
headingDiff += 2 * threshold;
headingTarget += 2 * threshold;
}
QPointF opd = QPointF(headingDiff, 0);
m_compassband->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), true);
headingValue += headingDiff;
} else {
dialCount--;
}
//////
// Airspeed
//////
if (airspeedValue != airspeedTarget) {
if ((abs(airspeedValue - airspeedTarget) > speedScaleHeight / 100) && beSmooth) {
airspeedValue += (airspeedTarget - airspeedValue) / 2;
} else {
airspeedValue = airspeedTarget;
dialCount--;
}
float airspeed_kph = airspeedValue * 3.6;
float airspeed_kph_scale = airspeed_kph * speedScaleHeight / 30;
qreal x = m_speedscale->transform().dx();
// opd = QPointF(x,fmod(airspeed_kph,speedScaleHeight/6));
// fmod does rounding errors!! the formula below works better:
QPointF opd = QPointF(x, airspeed_kph_scale - floor(airspeed_kph_scale / speedScaleHeight * 6) * speedScaleHeight / 6);
m_speedscale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
double speedText = airspeed_kph;
QString s = QString().sprintf("%.0f", speedText);
m_speedtext->setPlainText(s);
// Now update the text elements inside the scale:
// (Qt documentation states that the list has the same order
// as the item add order in the QGraphicsItemGroup)
QList <QGraphicsItem *> textList = m_speedscale->childItems();
qreal val = 5 * floor(airspeed_kph_scale / speedScaleHeight * 6) + 20;
foreach(QGraphicsItem * item, textList) {
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
if (text->toPlainText() == s) {
break; // This should happen at element one if is has not changed, indicating
}
// that it's not necessary to do the rest of the list
text->setPlainText(s);
val -= 5;
}
}
} else {
dialCount--;
}
//////
// Groundspeed
//////
if (groundspeedValue != groundspeedTarget) {
groundspeedValue = groundspeedTarget;
qreal x = m_speedscale->transform().dx();
// opd = QPointF(x,fmod(groundspeedValue,speedScaleHeight/6));
// fmod does rounding errors!! the formula below works better:
QPointF opd = QPointF(x, groundspeedValue - floor(groundspeedValue / speedScaleHeight * 6) * speedScaleHeight / 6);
m_speedscale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
double speedText = groundspeedValue / speedScaleHeight * 30;
QString s = QString().sprintf("%.0f", speedText);
m_speedtext->setPlainText(s);
// Now update the text elements inside the scale:
// (Qt documentation states that the list has the same order
// as the item add order in the QGraphicsItemGroup)
QList <QGraphicsItem *> textList = m_speedscale->childItems();
qreal val = 5 * floor(groundspeedValue / speedScaleHeight * 6) + 20;
foreach(QGraphicsItem * item, textList) {
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
if (text->toPlainText() == s) {
break; // This should happen at element one if is has not changed, indicating
}
// that it's not necessary to do the rest of the list
text->setPlainText(s);
val -= 5;
}
}
}
//////
// Altitude
//////
if (altitudeValue != altitudeTarget) {
if ((abs(altitudeValue - altitudeTarget) > altitudeScaleHeight / 100) && beSmooth) {
altitudeValue += (altitudeTarget - altitudeValue) / 2;
} else {
altitudeValue = altitudeTarget;
dialCount--;
}
// The altitude scale represents 30 meters
float altitudeValue_scale = floor(altitudeValue * 10) / 10 * altitudeScaleHeight / 30;
qreal x = m_altitudescale->transform().dx();
// opd = QPointF(x,fmod(altitudeValue,altitudeScaleHeight/6));
// fmod does rounding errors!! the formula below works better:
QPointF opd = QPointF(x, altitudeValue_scale - floor(altitudeValue_scale / altitudeScaleHeight * 6) * altitudeScaleHeight / 6);
m_altitudescale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
double altitudeText = altitudeValue;
QString s = QString().sprintf("%.0f", altitudeText);
m_altitudetext->setPlainText(s);
// Now update the text elements inside the scale:
// (Qt documentation states that the list has the same order
// as the item add order in the QGraphicsItemGroup)
QList <QGraphicsItem *> textList = m_altitudescale->childItems();
qreal val = 5 * floor(altitudeValue_scale / altitudeScaleHeight * 6) + 20;
foreach(QGraphicsItem * item, textList) {
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
if (text->toPlainText() == s) {
break; // This should happen at element one if is has not changed, indicating
}
// that it's not necessary to do the rest of the list
text->setPlainText(s);
val -= 5;
}
}
} else {
dialCount--;
}
if (!dialCount) {
dialTimer.stop();
} else {
scene()->update(sceneRect());
}
}
/**
@}
@}
*/

View File

@ -1,160 +0,0 @@
/**
******************************************************************************
*
* @file pfdgadgetwidget.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDGADGETWIDGET_H_
#define PFDGADGETWIDGET_H_
#include "pfdgadgetconfiguration.h"
#include "extensionsystem/pluginmanager.h"
#include "uavobjectmanager.h"
#include "uavobject.h"
#include <QGraphicsView>
#include <QtSvg/QSvgRenderer>
#include <QtSvg/QGraphicsSvgItem>
#include <QFile>
#include <QTimer>
class PFDGadgetWidget : public QGraphicsView {
Q_OBJECT
public:
PFDGadgetWidget(QWidget *parent = 0);
~PFDGadgetWidget();
void setDialFile(QString dfn);
void paint();
// Sets up needle/UAVObject connections:
void connectNeedles();
void enableOpenGL(bool flag);
void setHqFonts(bool flag)
{
hqFonts = flag;
}
void enableSmoothUpdates(bool flag)
{
beSmooth = flag;
}
public slots:
void updateAttitude(UAVObject *object1);
void updateHeading(UAVObject *object1);
void updateGPS(UAVObject *object1);
void updateGroundspeed(UAVObject *object1);
void updateAirspeed(UAVObject *object1);
void updateAltitude(UAVObject *object1);
void updateBattery(UAVObject *object1);
void updateLinkStatus(UAVObject *object1);
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
private slots:
void moveNeedles();
void moveVerticalScales();
void moveSky();
void setToolTipPrivate();
private:
QSvgRenderer *m_renderer;
// Background: background
QGraphicsSvgItem *m_background;
// earth/sky : world
QGraphicsSvgItem *m_world;
// Roll scale: rollscale
QGraphicsSvgItem *m_rollscale;
// Compass dial:
QGraphicsSvgItem *m_compass;
// Compass band:
QGraphicsSvgItem *m_compassband;
// Home point:
QGraphicsSvgItem *m_homewaypoint;
// Next point:
QGraphicsSvgItem *m_nextwaypoint;
// Home point bearing:
QGraphicsSvgItem *m_homepointbearing;
// Next point bearing:
QGraphicsSvgItem *m_nextpointbearing;
// Speed scale:
QGraphicsItemGroup *m_speedscale;
// Speed indicator text:
QGraphicsTextItem *m_speedtext;
// Vertical altitude scale:
QGraphicsItemGroup *m_altitudescale;
// Altitude indicator text:
QGraphicsTextItem *m_altitudetext;
// GCS link status Arrow
QGraphicsSvgItem *gcsTelemetryArrow;
QGraphicsTextItem *gcsTelemetryStats;
QGraphicsTextItem *gcsBatteryStats;
QGraphicsTextItem *gcsGPSStats;
// The Value and target variables
// are expressed in degrees
double rollTarget;
double rollValue;
double pitchTarget;
double pitchValue;
double headingTarget;
double headingValue;
double groundspeedTarget;
double groundspeedValue;
double airspeedTarget;
double airspeedValue;
double altitudeTarget;
double altitudeValue;
qreal compassBandWidth;
qreal speedScaleHeight;
qreal altitudeScaleHeight;
// Name of the fields to read when an update is received:
UAVDataObject *airspeedObj;
UAVDataObject *altitudeObj;
UAVDataObject *attitudeObj;
UAVDataObject *groundspeedObj;
UAVDataObject *headingObj;
UAVDataObject *gpsObj;
UAVDataObject *gcsTelemetryObj;
UAVDataObject *gcsBatteryObj;
// Rotation timer
QTimer dialTimer;
QTimer skyDialTimer;
QString satString;
QString batString;
// Flag to check for pfd Error
bool pfdError;
// Flag to enable better rendering of fonts in OpenGL
bool hqFonts;
bool beSmooth;
};
#endif /* PFDGADGETWIDGET_H_ */

View File

@ -1,65 +0,0 @@
/**
******************************************************************************
*
* @file pfdplugin.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "pfdplugin.h"
#include "pfdgadgetfactory.h"
#include <QDebug>
#include <QtPlugin>
#include <QStringList>
#include <extensionsystem/pluginmanager.h>
PFDPlugin::PFDPlugin()
{
// Do nothing
}
PFDPlugin::~PFDPlugin()
{
// Do nothing
}
bool PFDPlugin::initialize(const QStringList & args, QString *errMsg)
{
Q_UNUSED(args);
Q_UNUSED(errMsg);
mf = new PFDGadgetFactory(this);
addAutoReleasedObject(mf);
return true;
}
void PFDPlugin::extensionsInitialized()
{
// Do nothing
}
void PFDPlugin::shutdown()
{
// Do nothing
}
Q_EXPORT_PLUGIN(PFDPlugin)

View File

@ -1,46 +0,0 @@
/**
******************************************************************************
*
* @file pfdplugin.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup OPMapPlugin Primary Flight Display Plugin
* @{
* @brief The Primary Flight Display Gadget
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PFDPLUGIN_H_
#define PFDPLUGIN_H_
#include <extensionsystem/iplugin.h>
class PFDGadgetFactory;
class PFDPlugin : public ExtensionSystem::IPlugin {
public:
PFDPlugin();
~PFDPlugin();
void extensionsInitialized();
bool initialize(const QStringList & arguments, QString *errorString);
void shutdown();
private:
PFDGadgetFactory *mf;
};
#endif /* PFDPLUGIN_H_ */

View File

@ -22,7 +22,7 @@
PfdQmlGadgetFactory::PfdQmlGadgetFactory(QObject *parent) :
IUAVGadgetFactory(QString("PfdQmlGadget"),
tr("PFD (qml)"),
tr("PFD"),
parent)
{}

View File

@ -132,12 +132,6 @@ plugin_gpsdisplay.depends = plugin_coreplugin
plugin_gpsdisplay.depends += plugin_uavobjects
SUBDIRS += plugin_gpsdisplay
# Primary Flight Display (PFD) gadget
plugin_pfd.subdir = pfd
plugin_pfd.depends = plugin_coreplugin
plugin_pfd.depends += plugin_uavobjects
SUBDIRS += plugin_pfd
# QML viewer gadget
plugin_qmlview.subdir = qmlview
plugin_qmlview.depends = plugin_coreplugin
@ -150,7 +144,7 @@ plugin_pathactioneditor.depends = plugin_coreplugin
plugin_pathactioneditor.depends += plugin_uavobjects
SUBDIRS += plugin_pathactioneditor
# Primary Flight Display (PFD) gadget, QML version
# Primary Flight Display (PFD) gadget
plugin_pfdqml.subdir = pfdqml
plugin_pfdqml.depends = plugin_coreplugin
plugin_pfdqml.depends += plugin_uavobjects