diff options
Diffstat (limited to 'imports/shared')
96 files changed, 3981 insertions, 0 deletions
diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/backspace-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/backspace-868482.svg new file mode 100644 index 0000000..09928cc --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/backspace-868482.svg @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="-420 107 159 88" + enable-background="new -420 107 159 88" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="backspace-868482.svg"><metadata + id="metadata3483"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs3481" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1136" + id="namedview3479" + showgrid="false" + inkscape:zoom="4.327044" + inkscape:cx="109.27575" + inkscape:cy="20.181193" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="g3463" /><g + id="g3459"><rect + x="-420" + y="107" + fill="none" + width="159" + height="88" + id="rect3461" /><g + id="g3463"><g + id="g3465"><path + d="m -261.2,195 -114.8,0 -44,-44 44,-44 114.8,0 z m -112.17994,-3.67355 107.81308,-0.2311 0,-79.72849 -108.27529,0 -39.40204,39.40204 z" + id="path3467" + inkscape:connector-curvature="0" + style="fill:#868482" + sodipodi:nodetypes="cccccccccccc" /></g><g + id="g3469" + transform="translate(5.315407,3.0043605)"><g + id="g3471"><rect + x="-327.47067" + y="128.42934" + transform="matrix(-0.7071,-0.7071,0.7071,-0.7071,-665.0558,26.5252)" + width="6.0706396" + height="50.470654" + id="rect3473" + style="fill:#868482" /></g><g + id="g3475"><rect + x="-351.79507" + y="151.44643" + transform="matrix(-0.7071,-0.7071,0.7071,-0.7071,-665.0499,26.5255)" + width="52.595058" + height="5.2535815" + id="rect3477" + style="fill:#868482" /></g></g></g></g></svg>
\ No newline at end of file diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/check-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/check-868482.svg new file mode 100644 index 0000000..c8af5f3 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/check-868482.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-414 91 170 119" enable-background="new -414 91 170 119" xml:space="preserve"> +<g> + <polygon fill="#868482" points="-351.7,210 -414,147.7 -402.7,136.3 -351.7,187.3 -255.3,91 -244,102.3 "/> +</g> +</svg> diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/enter-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/enter-868482.svg new file mode 100644 index 0000000..75080f6 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/enter-868482.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-394 111 211 80" enable-background="new -394 111 211 80" xml:space="preserve"> +<g> + <rect x="-394" y="111" fill="none" width="211" height="80"/> + <g> + <rect x="-384.8" y="144.8" fill="#868482" width="201.8" height="12.3"/> + <rect x="-195.3" y="121.7" fill="#868482" width="12.3" height="35.3"/> + <polygon fill="#868482" points="-349.5,111 -349.5,190.8 -394,151.7 "/> + </g> +</g> +</svg> diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/globe-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/globe-868482.svg new file mode 100644 index 0000000..318fea8 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/globe-868482.svg @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="-427 79 144 144" + enable-background="new -427 79 144 144" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="globe-868482.svg"><metadata + id="metadata3793"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs3791" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1136" + id="namedview3789" + showgrid="false" + inkscape:zoom="4.6354778" + inkscape:cx="15.443116" + inkscape:cy="49.492945" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><g + id="g3781"><rect + x="-427" + y="79" + fill="none" + width="144" + height="144" + id="rect3783" /><g + id="g3785"><path + d="m -355,223 c -39.5,0 -71.8,-32.1 -72,-71.6 -0.2,-39.7 31.9,-72.2 71.6,-72.4 l 0.7,0 c 19.1,0.1 37.1,7.6 50.6,21.1 13.5,13.5 21,31.5 21.1,50.5 0.1,19.2 -7.3,37.4 -20.8,51 -13.5,13.7 -31.6,21.3 -50.8,21.4 z m 3.22136,-42.7 0,35.96737 c 9,-8.1 18.80446,-20.05728 23.40446,-30.85728 -6.7,-2 -16.40446,-4.71009 -23.40446,-5.11009 z M -380,183.9 c 3.2,7.4 9.01009,18.18309 14.31009,24.48309 2.4,2.9 5.74718,4.95282 8.54718,7.45282 L -357.57418,180.3 c -7,0.4 -15.62582,1.6 -22.42582,3.6 z m 58.2,3 c -3.9,9.1 -15.88755,21.48309 -22.58755,28.98309 10.4,-2.9 26.58755,-12.38309 34.48755,-20.28309 0.5,-0.5 1,-1.1 1.6,-1.6 -4.4,-2.9 -8.9,-5.2 -13.5,-7.1 z m -82.073,8.72582 c 7.8,8.5 28.47064,18.03591 39.87064,21.23591 -0.5,-0.6 -4.98309,-5.51455 -5.48309,-6.11455 -6,-7.1 -11.01573,-15.54718 -14.51573,-23.94718 -4.7,2 -15.57182,6.02582 -19.87182,8.82582 z m 83.03145,-13.68991 c 5.5,2.3 12.95728,7.04155 18.05728,10.34155 6.5,-9.4 12.773,-28.06619 13.573,-39.56619 l -25.48873,0 c -0.1,1.2 -0.1,4.98873 -0.2,6.28873 -0.7,6.8 -3.94155,16.63591 -5.94155,22.93591 z m -100.59436,-27.93027 c 0.8,11.8 7.60446,27.13027 14.00446,36.33027 5.1,-3.3 15.36173,-6.96291 20.76173,-9.26291 -2.4,-7.5 -8.23028,-19.71455 -8.63028,-27.71455 z m 31.16854,-0.64719 c 0.3,7 6.03028,19.84037 8.13028,26.44037 7.7,-2.4 16.56291,-3.36854 24.56291,-3.66854 l 0.21573,-23.20328 z m 38.48873,22.34037 c 8,0.4 16.97864,2.77864 24.67864,5.17864 1.7,-5.6 5.70446,-15.59882 6.20446,-21.59882 0.1,-1 0.53145,-6.53028 0.63145,-7.43028 l -31.51455,0.64718 z M -314.8,146.7 l 25.58873,0 c -0.8,-11.5 -6.973,-24.55727 -13.573,-33.95727 -5.1,3.4 -11.79437,5.76854 -17.39437,8.06854 2.5,7.5 4.97864,17.88873 5.37864,25.88873 z m -37.19436,0.86291 31.73027,-1.07864 c -0.4,-7 -3.32582,-17.46736 -5.42582,-24.06736 -7.7,2.4 -18.95164,4.34718 -26.95164,4.74718 z m -37.95728,0.43145 32.16173,0 0,-20.83027 c -7.9,-0.4 -20.97746,-0.83709 -28.57746,-3.23709 -1.8,5.8 -3.21572,13.41009 -3.81572,19.61009 -0.1,0.8 0.23145,3.65727 0.23145,4.45727 z m -31.69999,0.86292 26.45163,-0.64719 c 0.1,-1 0.1,-3.51009 0.2,-4.51009 0.6,-7 2,-13.8 4,-20.3 -5.5,-2.3 -13.92018,-6.39436 -19.02018,-9.79436 -6.4,9.1 -10.83145,23.45164 -11.63145,35.25164 z m 68.57863,-63.07183 0.21573,35.69882 c 6.9,-0.3 18.23027,-1.5 24.93027,-3.5 -1.37418,-7.31572 -7.3,-14.54718 -12.5,-20.64718 -2.4,-2.9 -9.846,-9.05164 -12.646,-11.55164 z m -30.94155,33.27746 c 6.7,2 18.89319,2.33709 25.79319,2.63709 l 0.64718,-35.698822 c -8.9,7.9 -21.84037,22.461732 -26.44037,33.061732 z m 38.29554,-34.224642 c 0.8,0.9 7.42465,6.977459 8.22465,7.977459 5.9,6.9 11.89436,14.384273 15.39436,22.484273 4.7,-2 12.96737,-4.73145 17.36737,-7.63145 -0.6,-0.6 -1.63146,-1.84719 -2.23146,-2.54719 -9.29436,-11.451637 -28.15492,-17.483092 -38.75492,-20.283092 z M -406.246,107.88427 c 4.4,2.8 12.78309,7.78873 17.48309,9.68873 4,-9.3 17.48192,-24.803277 24.48192,-32.303277 -11.8,3.2 -33.96501,13.91455 -41.96501,22.614547 z" + id="path3787" + inkscape:connector-curvature="0" + style="fill:#868482" + sodipodi:nodetypes="scccscccscccccccccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /></g></g></svg>
\ No newline at end of file diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/handwriting-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/handwriting-868482.svg new file mode 100644 index 0000000..1474654 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/handwriting-868482.svg @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 156 104" + enable-background="new 0 0 156 104" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="handwriting-868482.svg"><metadata + id="metadata3399"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs3397" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1136" + id="namedview3395" + showgrid="false" + inkscape:zoom="9.2948718" + inkscape:cx="83.191118" + inkscape:cy="52" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><g + id="g3387"><g + id="g3389"><path + d="m 37.922759,97.167586 c -10.1,0 -11.046207,-1.342069 -16.967587,-8.651034 -8.271034,-21 1.526897,-31.697931 17.826897,-48.997931 1.2,-1.2 7.241379,-9.493104 8.441379,-10.793104 5.3,-5.7 1.111724,-14.727586 -0.588276,-18.027586 -1.8,-3.4 -11.309655,-4.0393103 -16.009655,-3.3393103 -16.5,2.6 -24.7503446,30.7034483 -24.7503446,30.9034483 L 0,36.6 C 0.3,35.3 6.4,4.3 31.2,0.3 41,-1.3 49.7,2.7 53.9,10.7 c 4.7,8.9 2.6,20.1 -5.3,28.6 -1.2,1.3 -2.4,2.6 -3.6,3.8 -16.7,17.8 -25.9,28.5 -19.6,41.4 3.3,6.8 11.1,7.6 16.9,6.3 C 51.5,88.7 62.1,79.7 62,61.3 61.8,33.2 78.2,19.5 92.2,16.4 c 14.5,-3.2 26.67862,3.922759 32.97862,17.322759 1.3,2.8 2.83793,5.077241 3.63793,7.777241 13.3,0.7 25.82276,5.375862 26.32276,5.475862 l -2.32414,5.044828 c -0.1,0 -12.71241,-4.306207 -23.61241,-5.306207 2.11379,17.360689 -3.65104,36.323448 -15.68897,41.155172 C 101.61379,93.869655 87.9,92.1 83,83.1 79.9,77.5 81.1,68.4 85.9,60.6 c 7.9,-13 25.71103,-17.615172 35.91103,-19.015172 -0.4,-1.2 -3.26689,-7.456552 -3.76689,-8.456552 -3.9,-8.3 -16.07311,-13.368276 -24.973106,-11.368276 -9.7,2.2 -26.056551,18.017241 -25.856551,39.017241 0.2,25.5 -9.682759,32.613104 -23.082759,35.813104 -2.6,0.6 -3.808965,0.577241 -6.208965,0.577241 z M 123.02759,47.137241 c -14,1.5 -27.377935,6.671035 -32.222073,16.235173 -4.569547,5.48009 -6.825089,15.074863 -1.501379,19.937241 10.744832,7.956552 19.564832,1.708966 24.404142,-1.198621 10.58482,-6.253103 9.81931,-26.073793 9.31931,-34.973793 z" + id="path3391" + inkscape:connector-curvature="0" + style="fill:#868482" + sodipodi:nodetypes="sccccccccccccccccccccccccccccsccccc" /></g><rect + fill="none" + width="156" + height="104" + id="rect3393" /></g></svg>
\ No newline at end of file diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/hidekeyboard-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/hidekeyboard-868482.svg new file mode 100644 index 0000000..5443e30 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/hidekeyboard-868482.svg @@ -0,0 +1,281 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="-427 87 144 127" + enable-background="new -427 87 144 127" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="hidekeyboard-868482.svg"><metadata + id="metadata3534"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs3532" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1136" + id="namedview3530" + showgrid="false" + inkscape:zoom="3.8188977" + inkscape:cx="57.633466" + inkscape:cy="81.826203" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="g3468" /><g + id="g3464"><rect + x="-427" + y="87" + fill="none" + width="144" + height="127" + id="rect3466" /><g + id="g3468"><g + id="g3470" /><g + id="g3498" + transform="matrix(0.6642876,0,0,0.60833553,-135.10074,52.111516)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500" + style="fill:#868482" /></g><g + id="g3522" + transform="matrix(1,0,0,0.53000264,-0.26185567,72.641448)"><rect + x="-388.89999" + y="146.2" + width="67.699997" + height="11.7" + id="rect3524" + style="fill:#868482" /></g><polygon + style="fill:#868482" + id="polygon3528" + points="-381.1,195.2 -355,213.9 -328.9,195.2 -345.2,195.2 -355,202.2 -364.8,195.2 " /><g + id="g3498-5" + transform="matrix(0.6642876,0,0,0.60833553,-116.19714,52.058942)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7" + style="fill:#868482" /></g><g + id="g3498-5-4" + transform="matrix(0.6642876,0,0,0.60833553,-78.8827,51.666158)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-0" + style="fill:#868482" /></g><g + id="g3498-5-43" + transform="matrix(0.6642876,0,0,0.60833553,-97.474452,51.928014)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-4" + style="fill:#868482" /></g><g + id="g3498-5-2" + transform="matrix(0.6642876,0,0,0.60833553,-60.16002,51.666158)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-6" + style="fill:#868482" /></g><g + id="g3498-5-3" + transform="matrix(0.6642876,0,0,0.60833553,-41.568267,51.797086)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-64" + style="fill:#868482" /></g><g + id="g3498-5-0" + transform="matrix(0.6642876,0,0,0.60833553,-41.306411,32.419767)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-60" + style="fill:#868482" /></g><g + id="g3498-5-5" + transform="matrix(0.6642876,0,0,0.60833553,-60.290947,32.419767)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-1" + style="fill:#868482" /></g><g + id="g3498-5-34" + transform="matrix(0.6642876,0,0,0.60833553,-78.751772,32.288839)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-8" + style="fill:#868482" /></g><g + id="g3498-5-28" + transform="matrix(0.6642876,0,0,0.60833553,-97.60538,32.419766)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-08" + style="fill:#868482" /></g><g + id="g3498-5-8" + transform="matrix(0.6642876,0,0,0.60833553,-116.45899,32.288839)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-66" + style="fill:#868482" /></g><g + id="g3498-5-6" + transform="matrix(0.6642876,0,0,0.60833553,-134.91981,32.550694)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-7-85" + style="fill:#868482" /></g><g + id="g3498-2" + transform="matrix(0.56357388,0,0,7.7030576,-197.43282,-888.87016)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-3" + style="fill:#868482" /></g><g + id="g3498-2-4" + transform="matrix(0.56357388,0,0,7.7030576,-59.762201,-888.87016)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-3-6" + style="fill:#868482" /></g><g + id="g3498-50" + transform="matrix(11.474227,0,0,0.60833553,4253.5026,93.039354)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-1" + style="fill:#868482" /></g><g + id="g3498-50-9" + transform="matrix(11.474227,0,0,0.60833553,4252.9789,9.9001791)"><rect + x="-407.5" + y="126.7" + width="11.7" + height="11.7" + id="rect3500-1-4" + style="fill:#868482" /></g><path + style="fill:#999999;fill-opacity:1" + d="m -0.0757732,45.191067 0,-45.0182098 3.2404639,-0.08614494 C 7.3998563,-0.02587596 134.35087,-0.02575465 139.85335,0.08684287 l 4.22242,0.08640373 0,45.0180154 0,45.018016 -72.07577,0 -72.0757732,0 0,-45.018211 z m 137.7360832,-0.08643 0,-38.0345359 -65.594846,0 -65.5948454,0 0,38.0345359 0,38.034536 65.5948454,0 65.594846,0 0,-38.034536 z" + id="path3720" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#ffffff" + d="m 21.265464,45.759278 0,-3.469587 3.796907,0 3.796907,0 0,3.469587 0,3.469588 -3.796907,0 -3.796907,0 0,-3.469588 z" + id="path3722" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 21.396392,26.185567 0,-3.535052 3.862371,0 3.862371,0 0,3.535052 0,3.535052 -3.862371,0 -3.862371,0 0,-3.535052 z" + id="path3724" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 39.857216,25.923711 0,-3.535051 3.862372,0 3.862371,0 0,3.535051 0,3.535052 -3.862371,0 -3.862372,0 0,-3.535052 z" + id="path3726" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#ffffff" + d="m 40.119072,45.693814 0,-3.535051 3.862371,0 3.862371,0 0,3.535051 0,3.535052 -3.862371,0 -3.862371,0 0,-3.535052 z" + id="path3728" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 58.841753,45.562887 0,-3.535052 3.862371,0 3.862371,0 0,3.535052 0,3.535051 -3.862371,0 -3.862371,0 0,-3.535051 z" + id="path3730" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#ffffff" + d="m 58.710825,26.054639 0,-3.535051 3.862371,0 3.862371,0 0,3.535051 0,3.535052 -3.862371,0 -3.862371,0 0,-3.535052 z" + id="path3732" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 77.564433,25.923711 0,-3.535051 3.862371,0 3.862371,0 0,3.535051 0,3.535052 -3.862371,0 -3.862371,0 0,-3.535052 z" + id="path3734" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 77.433505,45.301031 0,-3.535052 3.862371,0 3.862371,0 0,3.535052 0,3.535051 -3.862371,0 -3.862371,0 0,-3.535051 z" + id="path3736" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 96.156186,45.301031 0,-3.535052 3.862374,0 3.86237,0 0,3.535052 0,3.535051 -3.86237,0 -3.862374,0 0,-3.535051 z" + id="path3738" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 96.025258,26.054639 0,-3.535051 3.862371,0 3.862371,0 0,3.535051 0,3.535052 -3.862371,0 -3.862371,0 0,-3.535052 z" + id="path3740" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 115.00979,26.054639 0,-3.535051 3.86237,0 3.86238,0 0,3.535051 0,3.535052 -3.86238,0 -3.86237,0 0,-3.535052 z" + id="path3742" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 114.74794,45.431959 0,-3.535052 3.86237,0 3.86237,0 0,3.535052 0,3.535051 -3.86237,0 -3.86237,0 0,-3.535051 z" + id="path3744" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 37.893299,66.249485 0,-3.011341 33.779381,0 33.77938,0 0,3.011341 0,3.01134 -33.77938,0 -33.779381,0 0,-3.01134 z" + id="path3746" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1" + d="m 64.14433,121.20799 c -4.320619,-3.09875 -10.146368,-7.27582 -12.94611,-9.28238 l -5.090439,-3.64829 8.049329,0 8.04933,0 4.883685,3.48882 c 3.894822,2.78239 4.926318,3.46219 5.094241,3.35732 0.115806,-0.0723 2.325191,-1.64229 4.909744,-3.48882 l 4.699189,-3.35732 8.052119,0 8.052118,0 -0.510624,0.36756 c -0.280842,0.20216 -5.931036,4.24862 -12.555984,8.99213 -6.624949,4.7435 -12.222114,8.75517 -12.438144,8.91481 L 72,126.84208 64.14433,121.20799 Z" + id="path3748" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 58.890373,26.058333 0,-3.404124 3.665979,0 3.66598,0 0,3.404124 0,3.404124 -3.66598,0 -3.665979,0 0,-3.404124 z" + id="path5455" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 21.445012,45.697508 0,-3.404124 3.66598,0 3.665979,0 0,3.404124 0,3.404124 -3.665979,0 -3.66598,0 0,-3.404124 z" + id="path5482" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /><path + style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 40.29862,45.697508 0,-3.404124 3.66598,0 3.665979,0 0,3.404124 0,3.404124 -3.665979,0 -3.66598,0 0,-3.404124 z" + id="path5484" + inkscape:connector-curvature="0" + transform="translate(-427,87)" /></g></g></svg>
\ No newline at end of file diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/search-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/search-868482.svg new file mode 100644 index 0000000..6ee0ba9 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/search-868482.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-425 77 148 148" enable-background="new -425 77 148 148" xml:space="preserve"> +<g> + <rect x="-425" y="77" fill="none" width="148" height="148"/> + <g> + <path fill="#868482" d="M-278.2,209.7c1.6,1.6,1.6,4.1,0,5.7l-8.5,8.5c-1.6,1.6-4.1,1.6-5.7,0l-44.6-44.6c-1.6-1.6-1.6-4.1,0-5.7 + l8.5-8.5c1.6-1.6,4.1-1.6,5.7,0L-278.2,209.7z"/> + <path fill="#868482" d="M-367,89c25.4,0,46,20.6,46,46s-20.6,46-46,46c-25.4,0-46-20.6-46-46S-392.4,89-367,89 M-367,77 + c-32,0-58,26-58,58s26,58,58,58c32,0,58-26,58-58S-335,77-367,77L-367,77z"/> + </g> +</g> +</svg> diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-80c342.png b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-80c342.png Binary files differnew file mode 100644 index 0000000..a864a6e --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-80c342.png diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-868482.svg new file mode 100644 index 0000000..f0ce693 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-868482.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-427 84 144 134" enable-background="new -427 84 144 134" xml:space="preserve"> +<g> + <rect x="-427" y="84" fill="none" width="144" height="134"/> + <g> + <path fill="#868482" d="M-323.4,218h-63.4v-56.5H-427l71.9-77.5l71.9,77.5h-40.2L-323.4,218L-323.4,218z M-375.3,206.5h40.5v-56.5 + h25.4l-45.7-49.2l-45.7,49.2h25.4L-375.3,206.5L-375.3,206.5z"/> + </g> +</g> +</svg> diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-c5d6b6.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-c5d6b6.svg new file mode 100644 index 0000000..6cfc345 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/shift-c5d6b6.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-427 84 144 134" enable-background="new -427 84 144 134" xml:space="preserve"> +<g> + <rect x="-427" y="84" fill="none" width="144" height="134"/> + <g> + <path fill="#C5D6B6" d="M-323.4,218h-63.4v-56.5H-427l71.9-77.5l71.9,77.5h-40.2L-323.4,218L-323.4,218z M-375.3,206.5h40.5v-56.5 + h25.4l-45.7-49.2l-45.7,49.2h25.4L-375.3,206.5L-375.3,206.5z"/> + </g> +</g> +</svg> diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/textmode-868482.svg b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/textmode-868482.svg new file mode 100644 index 0000000..16b4071 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/images/textmode-868482.svg @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="124px" + height="96px" + viewBox="0 0 124 96" + enable-background="new 0 0 124 96" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="textmode-868482.svg"><metadata + id="metadata3875"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs3873" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1136" + id="namedview3871" + showgrid="false" + inkscape:zoom="2.4583333" + inkscape:cx="-2.4745771" + inkscape:cy="47.999999" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><g + id="g3853" + style="fill:#999999;fill-opacity:1"><g + id="g3855" + style="fill:#999999;fill-opacity:1"><g + id="g3857" + style="fill:#999999;fill-opacity:1"><path + fill="#868482" + d="M55.4,70.8L46.9,49H19.4L11,70.8H2.9L30,2h6.7l27,68.8H55.4z M44.4,41.8l-8-21.2c-1-2.7-2.1-6-3.2-9.9 c-0.7,3-1.7,6.3-3,9.9l-8.1,21.2H44.4z" + id="path3859" + style="fill:#999999;fill-opacity:1" /><path + fill="#868482" + d="M66.6,72.8H54.1L45.5,51H20.8l-8.4,21.8H0L28.7,0h9.4L66.6,72.8z M56.8,68.8h4L35.4,4h-1.9l1.7,6.2 c1.1,3.8,2.1,7.1,3.1,9.7l9,24h-28l9.1-23.9c1.2-3.5,2.2-6.7,2.9-9.6L32.8,4h-1.4L5.9,68.8h3.8L18.1,47h30.2L56.8,68.8z M25.1,39.8h16.4l-7-18.5c-0.4-1.1-0.8-2.2-1.2-3.4c-0.4,1.1-0.7,2.2-1.2,3.4L25.1,39.8z" + id="path3861" + style="fill:#999999;fill-opacity:1" /></g><g + id="g3863" + style="fill:#999999;fill-opacity:1"><path + fill="#868482" + d="M116.2,70.8l-1.5-7.3h-0.4c-2.6,3.2-5.1,5.4-7.7,6.5s-5.7,1.7-9.5,1.7c-5.1,0-9.1-1.3-12-3.9 s-4.3-6.4-4.3-11.2c0-10.4,8.3-15.8,24.9-16.3l8.7-0.3v-3.2c0-4-0.9-7-2.6-8.9s-4.5-2.9-8.3-2.9c-4.3,0-9.1,1.3-14.5,3.9l-2.4-6 c2.5-1.4,5.3-2.5,8.3-3.2s6-1.2,9.1-1.2c6.1,0,10.7,1.4,13.6,4.1s4.4,7.1,4.4,13.1v35.1H116.2z M98.7,65.3c4.8,0,8.6-1.3,11.4-4 s4.1-6.4,4.1-11.2v-4.6l-7.8,0.3c-6.2,0.2-10.6,1.2-13.4,2.9S89,53.1,89,56.7c0,2.8,0.9,5,2.6,6.4S95.6,65.3,98.7,65.3z" + id="path3865" + style="fill:#999999;fill-opacity:1" /><path + fill="#868482" + d="M97.1,73.8c-5.6,0-10.1-1.5-13.3-4.5c-3.3-3-5-7.3-5-12.7c0-11.6,9-17.8,26.8-18.3l6.8-0.2v-1.3 c0-3.5-0.7-6.1-2.1-7.6c-1.3-1.5-3.6-2.2-6.8-2.2c-4,0-8.6,1.3-13.7,3.7l-1.9,0.9L84,22.1l1.6-0.8c2.7-1.4,5.6-2.6,8.8-3.4 c3.2-0.8,6.4-1.2,9.6-1.2c6.6,0,11.7,1.6,15,4.6c3.4,3.1,5.1,8,5.1,14.5v37.1h-9.4l-1.1-5.3c-2,2-4,3.5-6,4.4 C104.7,73.1,101.2,73.8,97.1,73.8z M103.5,23c4.4,0,7.7,1.2,9.8,3.5c2.1,2.3,3.1,5.7,3.1,10.3V42l-10.7,0.3 c-23,0.7-23,10.9-23,14.3c0,4.3,1.2,7.5,3.7,9.7c2.5,2.3,6.1,3.4,10.6,3.4c3.5,0,6.4-0.5,8.7-1.5c2.2-1,4.6-3,6.9-6l0.6-0.8h2.6 l0.7,1.6l1.2,5.7h2.1V35.8c0-5.4-1.3-9.3-3.8-11.6c-2.6-2.4-6.7-3.5-12.3-3.5c-2.8,0-5.7,0.4-8.6,1.1c-2.2,0.6-4.3,1.3-6.3,2.3 l0.9,2.3C94.9,24.1,99.4,23,103.5,23z M98.7,67.3c-3.5,0-6.4-0.9-8.5-2.7C88,62.8,87,60.1,87,56.7c0-4.3,1.7-7.6,5-9.6 c3.1-1.9,7.8-3,14.4-3.2l9.9-0.4v6.7c0,5.3-1.6,9.6-4.8,12.6C108.3,65.8,104,67.3,98.7,67.3z M112.2,47.6l-5.7,0.2 c-5.8,0.2-10,1.1-12.4,2.6C92,51.8,91,53.8,91,56.7c0,2.2,0.6,3.8,1.9,4.9c1.3,1.1,3.3,1.7,5.8,1.7c4.3,0,7.6-1.1,10-3.4 c2.4-2.3,3.5-5.5,3.5-9.7V47.6z" + id="path3867" + style="fill:#999999;fill-opacity:1" /></g></g><rect + y="88" + fill="#868482" + width="124" + height="8" + id="rect3869" + style="fill:#999999;fill-opacity:1" /></g><path + style="fill:#999999;fill-opacity:1" + d="m 0.33220339,72.63421 c 0,-0.155512 11.21134461,-28.667467 28.36096261,-72.12573542 0.143964,-0.36481583 1.481288,-0.50697527 4.733406,-0.50316785 L 37.959322,0.01061345 51.99322,35.862443 c 7.718644,19.718506 14.093085,36.099169 14.165419,36.401472 0.105888,0.442511 -1.021912,0.549644 -5.786164,0.549644 l -5.917684,0 -0.546838,-1.118644 C 53.607192,71.079661 51.634697,66.138911 49.524625,60.715473 l -3.836489,-9.860803 -12.536913,0.09809 -12.536911,0.09809 -4.160608,10.779661 -4.160608,10.779661 -5.9804461,0.112569 c -3.2892456,0.06192 -5.98044651,0.02208 -5.98044651,-0.08853 z M 41.423311,39.559322 c 0.0112,-0.536844 -7.930409,-21.643254 -8.141955,-21.638878 -0.210051,0.0043 -8.141912,21.095451 -8.137865,21.638878 0.003,0.398954 16.271502,0.398954 16.27982,0 z" + id="path3877" + inkscape:connector-curvature="0" /><path + style="fill:#999999;fill-opacity:1" + d="m 92.065151,73.149063 c -3.134892,-0.597811 -6.806633,-2.545615 -8.728039,-4.630092 -3.392162,-3.680063 -4.988275,-9.313558 -4.123086,-14.552476 0.655241,-3.967636 1.662266,-6.021269 4.194145,-8.553147 4.290577,-4.290579 10.117905,-6.121781 21.824109,-6.858095 l 7.47634,-0.470258 -0.23843,-2.843927 c -0.31037,-3.702079 -1.57377,-6.208129 -3.6811,-7.301736 -3.65637,-1.897491 -10.292169,-1.160169 -17.463875,1.940458 -1.80721,0.781333 -3.322385,1.379711 -3.367056,1.329729 -0.04467,-0.04998 -0.915507,-2.104434 -1.935193,-4.565451 l -1.853974,-4.474576 2.725673,-1.292565 c 3.14265,-1.490302 7.040665,-2.780454 10.251098,-3.392873 3.029187,-0.577844 10.434727,-0.568505 13.314347,0.01679 7.53165,1.530841 11.84608,6.107198 13.11198,13.90799 0.24028,1.480703 0.41628,10.734302 0.41806,21.980995 l 0.003,19.423728 -4.60617,0 -4.60616,0 -0.46374,-2.493636 c -0.25506,-1.371499 -0.554,-2.583889 -0.6643,-2.694191 -0.11031,-0.110307 -1.04828,0.545637 -2.08439,1.457658 -1.03611,0.91202 -2.66587,2.03679 -3.62169,2.499498 -3.64892,1.766412 -11.019819,2.493295 -15.881619,1.566175 z M 106.05095,61.766929 c 4.32066,-2.196863 6.139,-5.519149 6.14339,-11.224556 l 0.002,-2.949153 -3.76271,0.0081 c -2.06949,0.0044 -5.04407,0.190591 -6.61017,0.413687 -8.020819,1.142591 -10.808919,3.331507 -10.833665,8.505426 -0.02458,5.139533 2.569947,7.10421 8.959187,6.784237 2.870148,-0.143735 3.841638,-0.388564 6.101698,-1.5377 z" + id="path3879" + inkscape:connector-curvature="0" /><path + style="fill:#999999;fill-opacity:1" + d="m 0.33220339,92.135593 0,-3.864407 61.83050861,0 61.830508,0 0,3.864407 0,3.864407 -61.830508,0 -61.83050861,0 0,-3.864407 z" + id="path3881" + inkscape:connector-curvature="0" /></svg>
\ No newline at end of file diff --git a/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/style.qml b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/style.qml new file mode 100644 index 0000000..9d140d0 --- /dev/null +++ b/imports/shared/QtQuick/VirtualKeyboard/Styles/automotive/style.qml @@ -0,0 +1,888 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard.Styles 2.1 + +import utils 1.0 as Utils + +KeyboardStyle { + id: currentStyle + readonly property bool compactSelectionList: [InputEngine.Pinyin, InputEngine.Cangjie].indexOf(InputContext.inputEngine.inputMode) !== -1 + readonly property string fontFamily: Utils.Style.fontFamily + readonly property real keyBackgroundMargin: Math.round(13 * scaleHint) + readonly property real keyContentMargin: Math.round(45 * scaleHint) + readonly property real keyIconScale: scaleHint * 0.6 + readonly property string resourcePrefix: "" + + readonly property string inputLocale: InputContext.locale + property color inputLocaleIndicatorColor: "white" + property Timer inputLocaleIndicatorHighlightTimer: Timer { + interval: 1000 + onTriggered: inputLocaleIndicatorColor = "gray" + } + onInputLocaleChanged: { + inputLocaleIndicatorColor = "white" + inputLocaleIndicatorHighlightTimer.restart() + } + + keyboardDesignWidth: 2560 + keyboardDesignHeight: 800 + keyboardRelativeLeftMargin: 114 / keyboardDesignWidth + keyboardRelativeRightMargin: 114 / keyboardDesignWidth + keyboardRelativeTopMargin: 13 / keyboardDesignHeight + keyboardRelativeBottomMargin: 86 / keyboardDesignHeight + + keyboardBackground: Rectangle { + color: "black" + opacity: 0.9 + } + + keyPanel: KeyPanel { + Rectangle { + id: keyBackground + radius: Utils.Style.buttonRadius + color: "#262a32" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Text { + id: keySmallText + text: control.smallText + visible: control.smallTextVisible + color: "gray" + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: keyContentMargin / 3 + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 38 * scaleHint + capitalization: control.uppercased ? Font.AllUppercase : Font.MixedCase + } + } + Text { + id: keyText + text: control.displayText + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent + anchors.leftMargin: keyContentMargin + anchors.topMargin: control.smallTextVisible ? keyContentMargin * 1.2 : keyContentMargin + anchors.rightMargin: keyContentMargin + anchors.bottomMargin: control.smallTextVisible ? keyContentMargin * 0.8 : keyContentMargin + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 52 * scaleHint + capitalization: control.uppercased ? Font.AllUppercase : Font.MixedCase + } + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: keyBackground + opacity: 0.75 + } + PropertyChanges { + target: keyText + opacity: 0.5 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: keyBackground + opacity: 0.75 + } + PropertyChanges { + target: keyText + opacity: 0.05 + } + } + ] + } + + backspaceKeyPanel: KeyPanel { + Rectangle { + id: backspaceKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: backspaceKeyIcon + anchors.centerIn: parent + sourceSize.width: 159 * keyIconScale + sourceSize.height: 88 * keyIconScale + smooth: false + source: resourcePrefix + "images/backspace-868482.svg" + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: backspaceKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: backspaceKeyIcon + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: backspaceKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: backspaceKeyIcon + opacity: 0.2 + } + } + ] + } + + languageKeyPanel: KeyPanel { + Rectangle { + id: languageKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: languageKeyIcon + anchors.centerIn: parent + sourceSize.width: 144 * keyIconScale + sourceSize.height: 144 * keyIconScale + smooth: false + source: resourcePrefix + "images/globe-868482.svg" + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: languageKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: languageKeyIcon + opacity: 0.75 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: languageKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: languageKeyIcon + opacity: 0.2 + } + } + ] + } + + enterKeyPanel: KeyPanel { + Rectangle { + id: enterKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: enterKeyIcon + visible: enterKeyText.text.length === 0 + anchors.centerIn: parent + readonly property size enterKeyIconSize: { + switch (control.actionId) { + case EnterKeyAction.Go: + case EnterKeyAction.Send: + case EnterKeyAction.Next: + case EnterKeyAction.Done: + return Qt.size(170, 119) + case EnterKeyAction.Search: + return Qt.size(148, 148) + default: + return Qt.size(211, 80) + } + } + sourceSize.width: enterKeyIconSize.width * keyIconScale + sourceSize.height: enterKeyIconSize.height * keyIconScale + smooth: false + source: { + switch (control.actionId) { + case EnterKeyAction.Go: + case EnterKeyAction.Send: + case EnterKeyAction.Next: + case EnterKeyAction.Done: + return resourcePrefix + "images/check-868482.svg" + case EnterKeyAction.Search: + return resourcePrefix + "images/search-868482.svg" + default: + return resourcePrefix + "images/enter-868482.svg" + } + } + } + Text { + id: enterKeyText + visible: text.length !== 0 + text: control.actionId !== EnterKeyAction.None ? "" : control.displayText + clip: true + fontSizeMode: Text.HorizontalFit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#80c342" + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 44 * scaleHint + capitalization: Font.AllUppercase + } + anchors.fill: parent + anchors.margins: Math.round(42 * scaleHint) + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: enterKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: enterKeyIcon + opacity: 0.6 + } + PropertyChanges { + target: enterKeyText + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: enterKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: enterKeyIcon + opacity: 0.2 + } + PropertyChanges { + target: enterKeyText + opacity: 0.05 + } + } + ] + } + + hideKeyPanel: KeyPanel { + Rectangle { + id: hideKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: hideKeyIcon + anchors.centerIn: parent + sourceSize.width: 144 * keyIconScale + sourceSize.height: 127 * keyIconScale + smooth: false + source: resourcePrefix + "images/hidekeyboard-868482.svg" + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: hideKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: hideKeyIcon + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: hideKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: hideKeyIcon + opacity: 0.2 + } + } + ] + } + + shiftKeyPanel: KeyPanel { + Rectangle { + id: shiftKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: shiftKeyIcon + anchors.centerIn: parent + sourceSize.width: 144 * keyIconScale + sourceSize.height: 134 * keyIconScale + smooth: false + source: resourcePrefix + "images/shift-868482.svg" + } + states: [ + State { + name: "capslock" + when: InputContext.capsLock + PropertyChanges { + target: shiftKeyBackground + color: Utils.Style.colorPink + } + PropertyChanges { + target: shiftKeyIcon + source: resourcePrefix + "images/shift-c5d6b6.svg" + } + }, + State { + name: "shift" + when: InputContext.shift + PropertyChanges { + target: shiftKeyIcon + source: resourcePrefix + "images/shift-80c342.png" + } + } + ] + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: shiftKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: shiftKeyIcon + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: shiftKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: shiftKeyIcon + opacity: 0.2 + } + } + ] + } + + spaceKeyPanel: KeyPanel { + Rectangle { + id: spaceKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Text { + id: spaceKeyText + text: Qt.locale(InputContext.locale).nativeLanguageName + color: currentStyle.inputLocaleIndicatorColor + Behavior on color { PropertyAnimation { duration: 250 } } + anchors.centerIn: parent + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 48 * scaleHint + } + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: spaceKeyBackground + opacity: 0.80 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: spaceKeyBackground + opacity: 0.8 + } + } + ] + } + + symbolKeyPanel: KeyPanel { + Rectangle { + id: symbolKeyBackground + radius: Utils.Style.buttonRadius + color: "#14161b" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Text { + id: symbolKeyText + text: control.displayText + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent + anchors.margins: keyContentMargin + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 44 * scaleHint + capitalization: Font.AllUppercase + } + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: symbolKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: symbolKeyText + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: symbolKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: symbolKeyText + opacity: 0.2 + } + } + ] + } + + modeKeyPanel: KeyPanel { + Rectangle { + id: modeKeyBackground + radius: Utils.Style.buttonRadius + color: "#1e1b18" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Text { + id: modeKeyText + text: control.displayText + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent + anchors.margins: keyContentMargin + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 44 * scaleHint + capitalization: Font.AllUppercase + } + } + Rectangle { + id: modeKeyIndicator + implicitHeight: parent.height * 0.1 + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.leftMargin: parent.width * 0.4 + anchors.rightMargin: parent.width * 0.4 + anchors.bottomMargin: parent.height * 0.12 + color: "#80c342" + radius: Utils.Style.buttonRadius + visible: control.mode + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: modeKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: modeKeyText + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: modeKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: modeKeyText + opacity: 0.2 + } + } + ] + } + + handwritingKeyPanel: KeyPanel { + Rectangle { + id: hwrKeyBackground + radius: Utils.Style.buttonRadius + color: "#35322f" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Image { + id: hwrKeyIcon + anchors.centerIn: parent + readonly property size hwrKeyIconSize: keyboard.handwritingMode ? Qt.size(124, 96) : Qt.size(156, 104) + sourceSize.width: hwrKeyIconSize.width * keyIconScale + sourceSize.height: hwrKeyIconSize.height * keyIconScale + smooth: false + source: resourcePrefix + (keyboard.handwritingMode ? "images/textmode-868482.svg" : "images/handwriting-868482.svg") + } + } + states: [ + State { + name: "pressed" + when: control.pressed + PropertyChanges { + target: hwrKeyBackground + opacity: 0.80 + } + PropertyChanges { + target: hwrKeyIcon + opacity: 0.6 + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges { + target: hwrKeyBackground + opacity: 0.8 + } + PropertyChanges { + target: hwrKeyIcon + opacity: 0.2 + } + } + ] + } + + characterPreviewMargin: 0 + characterPreviewDelegate: Item { + property string text + id: characterPreview + Rectangle { + id: characterPreviewBackground + anchors.fill: parent + color: "#262a32" + radius: Utils.Style.buttonRadius + Text { + id: characterPreviewText + color: "white" + text: characterPreview.text + fontSizeMode: Text.HorizontalFit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent + anchors.margins: Math.round(48 * scaleHint) + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 82 * scaleHint + } + } + } + } + + alternateKeysListItemWidth: 99 * scaleHint + alternateKeysListItemHeight: 150 * scaleHint + alternateKeysListDelegate: Item { + id: alternateKeysListItem + width: alternateKeysListItemWidth + height: alternateKeysListItemHeight + Text { + id: listItemText + text: model.text + color: "#262a32" + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 52 * scaleHint + } + anchors.centerIn: parent + } + states: State { + name: "current" + when: alternateKeysListItem.ListView.isCurrentItem + PropertyChanges { + target: listItemText + color: "white" + } + } + } + alternateKeysListHighlight: Rectangle { + color: "#262a32" + radius: Utils.Style.buttonRadius + } + alternateKeysListBackground: Rectangle { + color: "#14161b" + radius: Utils.Style.buttonRadius + } + + selectionListHeight: 85 * scaleHint + selectionListDelegate: SelectionListItem { + id: selectionListItem + width: Math.round(selectionListLabel.width + selectionListLabel.anchors.leftMargin * 2) + Text { + id: selectionListLabel + anchors.left: parent.left + anchors.leftMargin: Math.round((compactSelectionList ? 50 : 140) * scaleHint) + anchors.verticalCenter: parent.verticalCenter + text: decorateText(display, wordCompletionLength) + color: "#BC6608" + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 44 * scaleHint + } + function decorateText(text, wordCompletionLength) { + if (wordCompletionLength > 0) { + return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>' + } + return text + } + } + Rectangle { + id: selectionListSeparator + width: 4 * scaleHint + height: 36 * scaleHint + radius: 2 + color: "#35322f" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.left + } + states: State { + name: "current" + when: selectionListItem.ListView.isCurrentItem + PropertyChanges { + target: selectionListLabel + color: "white" + } + } + } + selectionListBackground: keyboardBackground + + selectionListAdd: Transition { + NumberAnimation { property: "y"; from: wordCandidateView.height; duration: 200 } + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200 } + } + selectionListRemove: Transition { + NumberAnimation { property: "y"; to: -wordCandidateView.height; duration: 200 } + NumberAnimation { property: "opacity"; to: 0; duration: 200 } + } + + navigationHighlight: Rectangle { + color: "transparent" + border.color: "yellow" + border.width: 5 + } + + traceInputKeyPanelDelegate: TraceInputKeyPanel { + traceMargins: keyBackgroundMargin + Rectangle { + id: traceInputKeyPanelBackground + radius: Utils.Style.buttonRadius + color: "#35322f" + anchors.fill: parent + anchors.margins: keyBackgroundMargin + Text { + id: hwrInputModeIndicator + visible: control.patternRecognitionMode === InputEngine.HandwritingRecoginition + text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "Abc" : "123" + color: "white" + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: keyContentMargin + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: 44 * scaleHint + capitalization: { + if (InputContext.capsLock) + return Font.AllUppercase + if (InputContext.shift) + return Font.MixedCase + return Font.AllLowercase + } + } + } + } + Canvas { + id: traceInputKeyGuideLines + anchors.fill: traceInputKeyPanelBackground + opacity: 0.1 + onPaint: { + console.error("PAINT") + var ctx = getContext("2d") + ctx.lineWidth = 1 + ctx.strokeStyle = "#BC6608" + ctx.clearRect(0, 0, width, height) + var i + if (control.horizontalRulers) { + for (i = 0; i < control.horizontalRulers.length; i++) { + ctx.beginPath() + ctx.moveTo(0, control.horizontalRulers[i]) + ctx.lineTo(width, control.horizontalRulers[i]) + ctx.stroke() + } + } + if (control.verticalRulers) { + for (i = 0; i < control.verticalRulers.length; i++) { + ctx.beginPath() + ctx.moveTo(control.verticalRulers[i], 0) + ctx.lineTo(control.verticalRulers[i], height) + ctx.stroke() + } + } + } + } + } + + traceCanvasDelegate: TraceCanvas { + id: traceCanvas + onAvailableChanged: { + if (!available) + return + var ctx = getContext("2d") + if (parent.canvasType === "fullscreen") { + ctx.lineWidth = 10 + ctx.strokeStyle = "#BC6608" + } else { + ctx.lineWidth = 10 * scaleHint + ctx.strokeStyle = "#BC6608" + } + ctx.lineCap = "round" + ctx.fillStyle = ctx.strokeStyle + } + autoDestroyDelay: 800 + onTraceChanged: if (trace === null) opacity = 0 + Behavior on opacity { PropertyAnimation { easing.type: Easing.OutCubic; duration: 150 } } + } + + popupListDelegate: SelectionListItem { + property real cursorAnchor: popupListLabel.x + popupListLabel.width + id: popupListItem + width: popupListLabel.width + popupListLabel.anchors.leftMargin * 2 + height: popupListLabel.height + popupListLabel.anchors.topMargin * 2 + Text { + id: popupListLabel + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: popupListLabel.height / 2 + anchors.topMargin: popupListLabel.height / 3 + text: decorateText(display, wordCompletionLength) + color: "#5CAA15" + font { + family: fontFamily + weight: Utils.Style.fontWeight + pixelSize: Qt.inputMethod.cursorRectangle.height * 0.8 + } + function decorateText(text, wordCompletionLength) { + if (wordCompletionLength > 0) { + return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>' + } + return text + } + } + states: State { + name: "current" + when: popupListItem.ListView.isCurrentItem + PropertyChanges { + target: popupListLabel + color: "black" + } + } + } + + popupListBackground: Item { + Rectangle { + width: parent.width + height: parent.height + color: "white" + border { + width: 1 + color: "#929495" + } + } + } + + popupListAdd: Transition { + NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 200 } + } + + popupListRemove: Transition { + NumberAnimation { property: "opacity"; to: 0; duration: 200 } + } +} diff --git a/imports/shared/assets/drawable-ldpi/FloatingButton_Active.svg b/imports/shared/assets/drawable-ldpi/FloatingButton_Active.svg new file mode 100644 index 0000000..ef10835 --- /dev/null +++ b/imports/shared/assets/drawable-ldpi/FloatingButton_Active.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="390px" height="390px" viewBox="0 0 390 390" style="enable-background:new 0 0 390 390;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.3;enable-background:new ;} + .st1{opacity:0.5;} + .st2{fill:#FFFFFF;} + .st3{fill:#5CAA15;} + .st4{fill:none;} +</style> +<g id="Active"> + <g> + <circle class="st0" cx="195" cy="195" r="191"/> + <g class="st1"> + <path class="st2" d="M195,4c105.5,0,191,85.5,191,191s-85.5,191-191,191S4,300.5,4,195S89.5,4,195,4 M195,0 + c-26.3,0-51.9,5.2-75.9,15.3c-23.2,9.8-44.1,23.9-62,41.8s-32,38.8-41.8,62C5.2,143.1,0,168.7,0,195s5.2,51.9,15.3,75.9 + c9.8,23.2,23.9,44.1,41.8,62s38.8,32,62,41.8c24,10.2,49.6,15.3,75.9,15.3s51.9-5.2,75.9-15.3c23.2-9.8,44.1-23.9,62-41.8 + s32-38.8,41.8-62c10.2-24,15.3-49.6,15.3-75.9s-5.2-51.9-15.3-75.9c-9.8-23.2-23.9-44.1-41.8-62s-38.8-32-62-41.8 + C246.9,5.2,221.3,0,195,0L195,0z"/> + </g> + </g> + <circle class="st3" cx="195" cy="195" r="141"/> +</g> +<g id="icon"> + <g> + <g> + <path class="st2" d="M155.6,247.3c-10.1,0-18.9-5-23.1-13.6c-10.1-21,5.4-37.4,21.7-54.7c1.2-1.2,2.4-2.5,3.6-3.8 + c5.3-5.7,5.2-11.5,3.5-14.8c-1.8-3.4-5.5-4.9-10.2-4.2c-16.5,2.6-21.2,26.4-21.2,26.6l-11.9-2.2c0.3-1.3,6.4-32.3,31.2-36.3 + c9.8-1.6,18.5,2.4,22.7,10.4c4.7,8.9,2.6,20.1-5.3,28.6c-1.2,1.3-2.4,2.6-3.6,3.8c-16.7,17.8-25.9,28.5-19.6,41.4 + c3.3,6.8,11.1,7.6,16.9,6.3c9.2-2.1,19.8-11.1,19.7-29.5c-0.2-28.1,16.2-41.8,30.2-44.9c14.5-3.2,28.4,3.6,34.7,17 + c1.3,2.8,2.3,5.4,3.1,8.1c13.3,0.7,25.5,4.3,26,4.4l-3.4,11.5c-0.1,0-9.7-2.8-20.6-3.8c0.5,16.5-8.6,28.9-20.1,34.7 + c-11.9,6-24,3.8-28.9-5.2c-3.1-5.6-1.9-14.7,2.9-22.5c7.9-13,21.3-17.4,31.5-18.8c-0.4-1.2-0.9-2.4-1.4-3.4 + c-3.9-8.3-12.2-12.4-21.1-10.4c-9.7,2.2-21,12.1-20.8,33.1c0.2,25.5-15.6,38.1-29,41.3C160.5,247,158,247.3,155.6,247.3z + M237.8,197.7c-14,1.5-20.6,8.5-23.4,12.9c-3.3,5.2-3.4,9.8-2.9,10.9c1.6,2.9,7.3,3,13,0.2C235.3,216.2,238.3,206.6,237.8,197.7z + "/> + </g> + <rect x="118" y="144" class="st4" width="156" height="104"/> + </g> +</g> +</svg> diff --git a/imports/shared/assets/drawable-ldpi/FloatingButton_Available.svg b/imports/shared/assets/drawable-ldpi/FloatingButton_Available.svg new file mode 100644 index 0000000..1178c8c --- /dev/null +++ b/imports/shared/assets/drawable-ldpi/FloatingButton_Available.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="390px" height="390px" viewBox="0 0 390 390" style="enable-background:new 0 0 390 390;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.3;enable-background:new ;} + .st1{opacity:0.5;} + .st2{fill:#FFFFFF;} + .st3{fill:#26282A;} + .st4{fill:none;} +</style> +<g id="Available"> + <g> + <circle class="st0" cx="195" cy="195" r="191"/> + <g class="st1"> + <path class="st2" d="M195,4c105.5,0,191,85.5,191,191s-85.5,191-191,191S4,300.5,4,195S89.5,4,195,4 M195,0 + c-26.3,0-51.9,5.2-75.9,15.3c-23.2,9.8-44.1,23.9-62,41.8s-32,38.8-41.8,62C5.2,143.1,0,168.7,0,195s5.2,51.9,15.3,75.9 + c9.8,23.2,23.9,44.1,41.8,62s38.8,32,62,41.8c24,10.2,49.6,15.3,75.9,15.3s51.9-5.2,75.9-15.3c23.2-9.8,44.1-23.9,62-41.8 + s32-38.8,41.8-62c10.2-24,15.3-49.6,15.3-75.9s-5.2-51.9-15.3-75.9c-9.8-23.2-23.9-44.1-41.8-62s-38.8-32-62-41.8 + C246.9,5.2,221.3,0,195,0L195,0z"/> + </g> + </g> + <circle class="st3" cx="195" cy="195" r="141"/> +</g> +<g id="icon"> + <g> + <g> + <path class="st2" d="M155.6,247.3c-10.1,0-18.9-5-23.1-13.6c-10.1-21,5.4-37.4,21.7-54.7c1.2-1.2,2.4-2.5,3.6-3.8 + c5.3-5.7,5.2-11.5,3.5-14.8c-1.8-3.4-5.5-4.9-10.2-4.2c-16.5,2.6-21.2,26.4-21.2,26.6l-11.9-2.2c0.3-1.3,6.4-32.3,31.2-36.3 + c9.8-1.6,18.5,2.4,22.7,10.4c4.7,8.9,2.6,20.1-5.3,28.6c-1.2,1.3-2.4,2.6-3.6,3.8c-16.7,17.8-25.9,28.5-19.6,41.4 + c3.3,6.8,11.1,7.6,16.9,6.3c9.2-2.1,19.8-11.1,19.7-29.5c-0.2-28.1,16.2-41.8,30.2-44.9c14.5-3.2,28.4,3.6,34.7,17 + c1.3,2.8,2.3,5.4,3.1,8.1c13.3,0.7,25.5,4.3,26,4.4l-3.4,11.5c-0.1,0-9.7-2.8-20.6-3.8c0.5,16.5-8.6,28.9-20.1,34.7 + c-11.9,6-24,3.8-28.9-5.2c-3.1-5.6-1.9-14.7,2.9-22.5c7.9-13,21.3-17.4,31.5-18.8c-0.4-1.2-0.9-2.4-1.4-3.4 + c-3.9-8.3-12.2-12.4-21.1-10.4c-9.7,2.2-21,12.1-20.8,33.1c0.2,25.5-15.6,38.1-29,41.3C160.5,247,158,247.3,155.6,247.3z + M237.8,197.7c-14,1.5-20.6,8.5-23.4,12.9c-3.3,5.2-3.4,9.8-2.9,10.9c1.6,2.9,7.3,3,13,0.2C235.3,216.2,238.3,206.6,237.8,197.7z + "/> + </g> + <rect x="118" y="144" class="st4" width="156" height="104"/> + </g> +</g> +</svg> diff --git a/imports/shared/assets/drawable-ldpi/FloatingButton_Unavailable.svg b/imports/shared/assets/drawable-ldpi/FloatingButton_Unavailable.svg new file mode 100644 index 0000000..d8149b5 --- /dev/null +++ b/imports/shared/assets/drawable-ldpi/FloatingButton_Unavailable.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="390px" height="390px" viewBox="0 0 390 390" style="enable-background:new 0 0 390 390;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.3;enable-background:new ;} + .st1{opacity:0.5;} + .st2{fill:#FFFFFF;} + .st3{fill:none;} +</style> +<g id="Unavailable"> + <g> + <circle class="st0" cx="195" cy="195" r="191"/> + <g class="st1"> + <path class="st2" d="M195,4c105.5,0,191,85.5,191,191s-85.5,191-191,191S4,300.5,4,195S89.5,4,195,4 M195,0 + c-26.3,0-51.9,5.2-75.9,15.3c-23.2,9.8-44.1,23.9-62,41.8s-32,38.8-41.8,62C5.2,143.1,0,168.7,0,195s5.2,51.9,15.3,75.9 + c9.8,23.2,23.9,44.1,41.8,62s38.8,32,62,41.8c24,10.2,49.6,15.3,75.9,15.3s51.9-5.2,75.9-15.3c23.2-9.8,44.1-23.9,62-41.8 + s32-38.8,41.8-62c10.2-24,15.3-49.6,15.3-75.9s-5.2-51.9-15.3-75.9c-9.8-23.2-23.9-44.1-41.8-62s-38.8-32-62-41.8 + C246.9,5.2,221.3,0,195,0L195,0z"/> + </g> + </g> +</g> +<g id="icon"> + <g> + <g> + <path class="st2" d="M155.6,247.3c-10.1,0-18.9-5-23.1-13.6c-10.1-21,5.4-37.4,21.7-54.7c1.2-1.2,2.4-2.5,3.6-3.8 + c5.3-5.7,5.2-11.5,3.5-14.8c-1.8-3.4-5.5-4.9-10.2-4.2c-16.5,2.6-21.2,26.4-21.2,26.6l-11.9-2.2c0.3-1.3,6.4-32.3,31.2-36.3 + c9.8-1.6,18.5,2.4,22.7,10.4c4.7,8.9,2.6,20.1-5.3,28.6c-1.2,1.3-2.4,2.6-3.6,3.8c-16.7,17.8-25.9,28.5-19.6,41.4 + c3.3,6.8,11.1,7.6,16.9,6.3c9.2-2.1,19.8-11.1,19.7-29.5c-0.2-28.1,16.2-41.8,30.2-44.9c14.5-3.2,28.4,3.6,34.7,17 + c1.3,2.8,2.3,5.4,3.1,8.1c13.3,0.7,25.5,4.3,26,4.4l-3.4,11.5c-0.1,0-9.7-2.8-20.6-3.8c0.5,16.5-8.6,28.9-20.1,34.7 + c-11.9,6-24,3.8-28.9-5.2c-3.1-5.6-1.9-14.7,2.9-22.5c7.9-13,21.3-17.4,31.5-18.8c-0.4-1.2-0.9-2.4-1.4-3.4 + c-3.9-8.3-12.2-12.4-21.1-10.4c-9.7,2.2-21,12.1-20.8,33.1c0.2,25.5-15.6,38.1-29,41.3C160.5,247,158,247.3,155.6,247.3z + M237.8,197.7c-14,1.5-20.6,8.5-23.4,12.9c-3.3,5.2-3.4,9.8-2.9,10.9c1.6,2.9,7.3,3,13,0.2C235.3,216.2,238.3,206.6,237.8,197.7z + "/> + </g> + <rect x="118" y="144" class="st3" width="156" height="104"/> + </g> +</g> +</svg> diff --git a/imports/shared/assets/icons/4g-signal-strength.png b/imports/shared/assets/icons/4g-signal-strength.png Binary files differnew file mode 100644 index 0000000..1a90381 --- /dev/null +++ b/imports/shared/assets/icons/4g-signal-strength.png diff --git a/imports/shared/assets/icons/Built_with_Qt_RGB_logo_white.png b/imports/shared/assets/icons/Built_with_Qt_RGB_logo_white.png Binary files differnew file mode 100644 index 0000000..38300a2 --- /dev/null +++ b/imports/shared/assets/icons/Built_with_Qt_RGB_logo_white.png diff --git a/imports/shared/assets/icons/CarFocusButton.png b/imports/shared/assets/icons/CarFocusButton.png Binary files differnew file mode 100644 index 0000000..0b2a167 --- /dev/null +++ b/imports/shared/assets/icons/CarFocusButton.png diff --git a/imports/shared/assets/icons/CarInfo.png b/imports/shared/assets/icons/CarInfo.png Binary files differnew file mode 100644 index 0000000..ad7f0fd --- /dev/null +++ b/imports/shared/assets/icons/CarInfo.png diff --git a/imports/shared/assets/icons/FullScreenGradient.png b/imports/shared/assets/icons/FullScreenGradient.png Binary files differnew file mode 100644 index 0000000..417ad98 --- /dev/null +++ b/imports/shared/assets/icons/FullScreenGradient.png diff --git a/imports/shared/assets/icons/Highlight.png b/imports/shared/assets/icons/Highlight.png Binary files differnew file mode 100644 index 0000000..5f22e74 --- /dev/null +++ b/imports/shared/assets/icons/Highlight.png diff --git a/imports/shared/assets/icons/MapOverlayEdgeGradient.png b/imports/shared/assets/icons/MapOverlayEdgeGradient.png Binary files differnew file mode 100644 index 0000000..88d99e8 --- /dev/null +++ b/imports/shared/assets/icons/MapOverlayEdgeGradient.png diff --git a/imports/shared/assets/icons/MiddleMask.png b/imports/shared/assets/icons/MiddleMask.png Binary files differnew file mode 100644 index 0000000..7112637 --- /dev/null +++ b/imports/shared/assets/icons/MiddleMask.png diff --git a/imports/shared/assets/icons/MusicOverlayGradient.png b/imports/shared/assets/icons/MusicOverlayGradient.png Binary files differnew file mode 100644 index 0000000..b604a23 --- /dev/null +++ b/imports/shared/assets/icons/MusicOverlayGradient.png diff --git a/imports/shared/assets/icons/MusicOverlayGradient2.png b/imports/shared/assets/icons/MusicOverlayGradient2.png Binary files differnew file mode 100644 index 0000000..da672eb --- /dev/null +++ b/imports/shared/assets/icons/MusicOverlayGradient2.png diff --git a/imports/shared/assets/icons/NavRoundmarker.png b/imports/shared/assets/icons/NavRoundmarker.png Binary files differnew file mode 100644 index 0000000..9841616 --- /dev/null +++ b/imports/shared/assets/icons/NavRoundmarker.png diff --git a/imports/shared/assets/icons/RectangleGradient256x512.png b/imports/shared/assets/icons/RectangleGradient256x512.png Binary files differnew file mode 100644 index 0000000..f83eb63 --- /dev/null +++ b/imports/shared/assets/icons/RectangleGradient256x512.png diff --git a/imports/shared/assets/icons/SimpleBottomBackground.png b/imports/shared/assets/icons/SimpleBottomBackground.png Binary files differnew file mode 100644 index 0000000..75f28ce --- /dev/null +++ b/imports/shared/assets/icons/SimpleBottomBackground.png diff --git a/imports/shared/assets/icons/acautosync-knob-down.png b/imports/shared/assets/icons/acautosync-knob-down.png Binary files differnew file mode 100644 index 0000000..cf0d6ba --- /dev/null +++ b/imports/shared/assets/icons/acautosync-knob-down.png diff --git a/imports/shared/assets/icons/acautosync-knob-up.png b/imports/shared/assets/icons/acautosync-knob-up.png Binary files differnew file mode 100644 index 0000000..1996977 --- /dev/null +++ b/imports/shared/assets/icons/acautosync-knob-up.png diff --git a/imports/shared/assets/icons/back-background.png b/imports/shared/assets/icons/back-background.png Binary files differnew file mode 100644 index 0000000..5e83e7f --- /dev/null +++ b/imports/shared/assets/icons/back-background.png diff --git a/imports/shared/assets/icons/back.png b/imports/shared/assets/icons/back.png Binary files differnew file mode 100644 index 0000000..8edc62c --- /dev/null +++ b/imports/shared/assets/icons/back.png diff --git a/imports/shared/assets/icons/background-contacts.png b/imports/shared/assets/icons/background-contacts.png Binary files differnew file mode 100644 index 0000000..ce8ee44 --- /dev/null +++ b/imports/shared/assets/icons/background-contacts.png diff --git a/imports/shared/assets/icons/bluetooth.png b/imports/shared/assets/icons/bluetooth.png Binary files differnew file mode 100644 index 0000000..7d76c79 --- /dev/null +++ b/imports/shared/assets/icons/bluetooth.png diff --git a/imports/shared/assets/icons/calendar.png b/imports/shared/assets/icons/calendar.png Binary files differnew file mode 100644 index 0000000..cb95cdb --- /dev/null +++ b/imports/shared/assets/icons/calendar.png diff --git a/imports/shared/assets/icons/cancel.png b/imports/shared/assets/icons/cancel.png Binary files differnew file mode 100644 index 0000000..b546ab1 --- /dev/null +++ b/imports/shared/assets/icons/cancel.png diff --git a/imports/shared/assets/icons/car-info.png b/imports/shared/assets/icons/car-info.png Binary files differnew file mode 100644 index 0000000..b6856f0 --- /dev/null +++ b/imports/shared/assets/icons/car-info.png diff --git a/imports/shared/assets/icons/contacts.png b/imports/shared/assets/icons/contacts.png Binary files differnew file mode 100644 index 0000000..c9b257c --- /dev/null +++ b/imports/shared/assets/icons/contacts.png diff --git a/imports/shared/assets/icons/destination-airport.png b/imports/shared/assets/icons/destination-airport.png Binary files differnew file mode 100644 index 0000000..76a7ee2 --- /dev/null +++ b/imports/shared/assets/icons/destination-airport.png diff --git a/imports/shared/assets/icons/destination-home.png b/imports/shared/assets/icons/destination-home.png Binary files differnew file mode 100644 index 0000000..6581c9f --- /dev/null +++ b/imports/shared/assets/icons/destination-home.png diff --git a/imports/shared/assets/icons/destination-work.png b/imports/shared/assets/icons/destination-work.png Binary files differnew file mode 100644 index 0000000..d7959a6 --- /dev/null +++ b/imports/shared/assets/icons/destination-work.png diff --git a/imports/shared/assets/icons/fandirection-head.png b/imports/shared/assets/icons/fandirection-head.png Binary files differnew file mode 100644 index 0000000..813d9b1 --- /dev/null +++ b/imports/shared/assets/icons/fandirection-head.png diff --git a/imports/shared/assets/icons/fandirection-headandlegs.png b/imports/shared/assets/icons/fandirection-headandlegs.png Binary files differnew file mode 100644 index 0000000..008355f --- /dev/null +++ b/imports/shared/assets/icons/fandirection-headandlegs.png diff --git a/imports/shared/assets/icons/fandirection-knob-down.png b/imports/shared/assets/icons/fandirection-knob-down.png Binary files differnew file mode 100644 index 0000000..f9663ab --- /dev/null +++ b/imports/shared/assets/icons/fandirection-knob-down.png diff --git a/imports/shared/assets/icons/fandirection-knob-up.png b/imports/shared/assets/icons/fandirection-knob-up.png Binary files differnew file mode 100644 index 0000000..cccf882 --- /dev/null +++ b/imports/shared/assets/icons/fandirection-knob-up.png diff --git a/imports/shared/assets/icons/fandirection-legs.png b/imports/shared/assets/icons/fandirection-legs.png Binary files differnew file mode 100644 index 0000000..82b06b8 --- /dev/null +++ b/imports/shared/assets/icons/fandirection-legs.png diff --git a/imports/shared/assets/icons/fandirection-windshield.png b/imports/shared/assets/icons/fandirection-windshield.png Binary files differnew file mode 100644 index 0000000..7565f24 --- /dev/null +++ b/imports/shared/assets/icons/fandirection-windshield.png diff --git a/imports/shared/assets/icons/fandirection-windshieldandlegs.png b/imports/shared/assets/icons/fandirection-windshieldandlegs.png Binary files differnew file mode 100644 index 0000000..c368b20 --- /dev/null +++ b/imports/shared/assets/icons/fandirection-windshieldandlegs.png diff --git a/imports/shared/assets/icons/fandirection.png b/imports/shared/assets/icons/fandirection.png Binary files differnew file mode 100644 index 0000000..0f47466 --- /dev/null +++ b/imports/shared/assets/icons/fandirection.png diff --git a/imports/shared/assets/icons/jane.png b/imports/shared/assets/icons/jane.png Binary files differnew file mode 100644 index 0000000..b971522 --- /dev/null +++ b/imports/shared/assets/icons/jane.png diff --git a/imports/shared/assets/icons/john.png b/imports/shared/assets/icons/john.png Binary files differnew file mode 100644 index 0000000..6099666 --- /dev/null +++ b/imports/shared/assets/icons/john.png diff --git a/imports/shared/assets/icons/music.png b/imports/shared/assets/icons/music.png Binary files differnew file mode 100644 index 0000000..77bd3df --- /dev/null +++ b/imports/shared/assets/icons/music.png diff --git a/imports/shared/assets/icons/placeofinterest-charging.png b/imports/shared/assets/icons/placeofinterest-charging.png Binary files differnew file mode 100644 index 0000000..b3bf6ad --- /dev/null +++ b/imports/shared/assets/icons/placeofinterest-charging.png diff --git a/imports/shared/assets/icons/placeofinterest-coffee.png b/imports/shared/assets/icons/placeofinterest-coffee.png Binary files differnew file mode 100644 index 0000000..20bfb4f --- /dev/null +++ b/imports/shared/assets/icons/placeofinterest-coffee.png diff --git a/imports/shared/assets/icons/placeofinterest-parking.png b/imports/shared/assets/icons/placeofinterest-parking.png Binary files differnew file mode 100644 index 0000000..922b000 --- /dev/null +++ b/imports/shared/assets/icons/placeofinterest-parking.png diff --git a/imports/shared/assets/icons/placeofinterest-shopping.png b/imports/shared/assets/icons/placeofinterest-shopping.png Binary files differnew file mode 100644 index 0000000..850d0b5 --- /dev/null +++ b/imports/shared/assets/icons/placeofinterest-shopping.png diff --git a/imports/shared/assets/icons/screencast.png b/imports/shared/assets/icons/screencast.png Binary files differnew file mode 100644 index 0000000..587f06c --- /dev/null +++ b/imports/shared/assets/icons/screencast.png diff --git a/imports/shared/assets/icons/search.png b/imports/shared/assets/icons/search.png Binary files differnew file mode 100644 index 0000000..2c673b5 --- /dev/null +++ b/imports/shared/assets/icons/search.png diff --git a/imports/shared/assets/icons/video-next.png b/imports/shared/assets/icons/video-next.png Binary files differnew file mode 100644 index 0000000..f529265 --- /dev/null +++ b/imports/shared/assets/icons/video-next.png diff --git a/imports/shared/assets/icons/video-pause.png b/imports/shared/assets/icons/video-pause.png Binary files differnew file mode 100644 index 0000000..cfe9cc8 --- /dev/null +++ b/imports/shared/assets/icons/video-pause.png diff --git a/imports/shared/assets/icons/video-play.png b/imports/shared/assets/icons/video-play.png Binary files differnew file mode 100644 index 0000000..8933bb4 --- /dev/null +++ b/imports/shared/assets/icons/video-play.png diff --git a/imports/shared/assets/icons/video-previous.png b/imports/shared/assets/icons/video-previous.png Binary files differnew file mode 100644 index 0000000..e9aa0de --- /dev/null +++ b/imports/shared/assets/icons/video-previous.png diff --git a/imports/shared/assets/icons/video.png b/imports/shared/assets/icons/video.png Binary files differnew file mode 100644 index 0000000..7057d94 --- /dev/null +++ b/imports/shared/assets/icons/video.png diff --git a/imports/shared/assets/icons/wifi-signal-strength.png b/imports/shared/assets/icons/wifi-signal-strength.png Binary files differnew file mode 100644 index 0000000..61dd6f3 --- /dev/null +++ b/imports/shared/assets/icons/wifi-signal-strength.png diff --git a/imports/shared/controls/AppStackView.qml b/imports/shared/controls/AppStackView.qml new file mode 100644 index 0000000..d9ec1e1 --- /dev/null +++ b/imports/shared/controls/AppStackView.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 1.0 +import controls 1.0 +import utils 1.0 + +StackView { + id: stack + + delegate: StackViewDelegate { + function transitionFinished(properties) + { + } + + pushTransition: StackViewTransition { + id: pushTransition + property int duration: 400 + + + PropertyAnimation { + target: exitItem + property: "x" + to: -(2*exitItem.width) + duration: pushTransition.duration + } + + PropertyAnimation { + target: enterItem + property: "x" + from: 2*enterItem.width + to: 0 + duration: pushTransition.duration + } + } + popTransition: StackViewTransition { + id: popTransition + property int duration: 250 + + PropertyAnimation { + target: exitItem + property: "x" + to: 2*exitItem.width + duration: popTransition.duration + } + + PropertyAnimation { + target: enterItem + property: "x" + from: -(2*enterItem.width) + to: 0 + duration: popTransition.duration + } + } + } + Tracer{} +} diff --git a/imports/shared/controls/Button_neptune.qml b/imports/shared/controls/Button_neptune.qml new file mode 100644 index 0000000..cb01758 --- /dev/null +++ b/imports/shared/controls/Button_neptune.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 + +import utils 1.0 + +UIElement { + id: root + vspan: 2 + + property alias text: label.text + property string iconName + property alias label: label + property alias icon: icon + property alias pressed: mouseArea.pressed + + property int spacing: Style.padding + + signal pressed + + Rectangle { + anchors.fill: parent + color: '#000' + opacity: 0.85 + + Behavior on scale { NumberAnimation {} } + } + + Column { + id: layout + + anchors.centerIn: parent + + spacing: root.spacing + + Image { + id: icon + + source: iconName ? Style.symbol(iconName) : "" + anchors.horizontalCenter: parent.horizontalCenter + visible: source !== undefined + asynchronous: true + } + + Label { + id: label + visible: text + opacity: root.enabled ? 1.0 : 0.6 + horizontalAlignment: Text.AlignHCenter + font.pixelSize: Style.fontSizeM + scale: mouseArea.pressed?0.85:1.0 + Behavior on scale { NumberAnimation {} } + } + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + onClicked: root.pressed() + } +} diff --git a/imports/shared/controls/DisplayBackground.qml b/imports/shared/controls/DisplayBackground.qml new file mode 100644 index 0000000..ab3a11c --- /dev/null +++ b/imports/shared/controls/DisplayBackground.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import QtGraphicalEffects 1.0 +import utils 1.0 + +Item { + + property string background: Style.displayBackground + + Image { + source: Style.symbol("FullScreenGradient") + + } +} diff --git a/imports/shared/controls/Icon.qml b/imports/shared/controls/Icon.qml new file mode 100644 index 0000000..7adb677 --- /dev/null +++ b/imports/shared/controls/Icon.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import utils 1.0 + +UIElement { + id: root + hspan: 2 + vspan: 2 + + property string source + property bool fit: false + + Image { + id: defaultIcon + width: root.fit ? root.width : undefined + height: root.fit ? root.height : undefined + anchors.centerIn: parent + source: root.source ? root.source : "" + opacity: root.enabled ? 1.0 : 0.5 + asynchronous: true + fillMode: root.fit ? Image.PreserveAspectFit : Image.Pad + Behavior on opacity { NumberAnimation { duration: 250 } } + } +} diff --git a/imports/shared/controls/Label.qml b/imports/shared/controls/Label.qml new file mode 100644 index 0000000..4b1ec7f --- /dev/null +++ b/imports/shared/controls/Label.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import utils 1.0 + +Text { + id: textElement + + verticalAlignment: Text.AlignVCenter + font.family: Style.fontFamily + font.weight: Style.fontWeight + color: Style.colorWhite + clip: Style.debugMode + font.pixelSize: Style.fontSizeS +} diff --git a/imports/shared/controls/LaunchItemBackground.qml b/imports/shared/controls/LaunchItemBackground.qml new file mode 100644 index 0000000..e6cf537 --- /dev/null +++ b/imports/shared/controls/LaunchItemBackground.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt multiscreen demo application. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +import QtApplicationManager 1.0 +import utils 1.0 + +Item { + property alias text: title.text + property string applicationName + scale: area.pressed?0.85:1.0 + + Behavior on scale { + NumberAnimation {} + } + + Image { + source: Style.symbol("RectangleGradient256x512") + anchors.fill: parent + } + + Label { + id: title + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: Style.paddingXXL + } + + MouseArea { + id: area + anchors.fill: parent + onClicked: { + ApplicationManager.startApplication(applicationName) + } + } +} diff --git a/imports/shared/controls/Slider.qml b/imports/shared/controls/Slider.qml new file mode 100644 index 0000000..9614290 --- /dev/null +++ b/imports/shared/controls/Slider.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 +import utils 1.0 + +UIElement { + id: root; + hspan: 7 + vspan: 2 + property real value // value is read/write. + property real minimum: 0 + property real maximum: 1 + property int length: width - handle.width + property int timeLineHeight: 15 + property real activeValue + + function valueToString() { + return activeValue.toFixed(2) + } + + Rectangle { + id: background + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + height: timeLineHeight + radius: 4 + border.color: Qt.lighter(color, 1.1) + color: "#999" + opacity: 0.25 + } + + Rectangle { + id: labelRect + width: label.width + height: label.height + 4 + radius: 4 + smooth: true + color: "#000" + border.color: Qt.lighter(color, 1.1) + anchors.bottom: handle.top + anchors.bottomMargin: 4 + x: Math.max(Math.min(handle.x + (handle.width - width )/2, root.width - width),0) + visible: area.pressed + opacity: 0.75 + + Text{ + id: label + color: Style.colorWhite + font.family: Style.fontFamily + font.pixelSize: Style.fontSizeS + text: root.valueToString() + width: font.pointSize * 3.5 + anchors.horizontalCenter: labelRect.horizontalCenter + horizontalAlignment: Text.AlignHCenter + anchors.baseline: parent.bottom + anchors.baselineOffset: -6 + } + } + + Rectangle { + id: handle; + smooth: true + width: handle.x ? 10 : 0 + y: (root.height - height)/2; + x: (root.value - root.minimum) * root.length / (root.maximum - root.minimum) + + height: timeLineHeight; radius: 4 + border.color: Qt.lighter(color, 1.1) + color: Style.colorPink + + MouseArea { + id: area + hoverEnabled: false + anchors.fill: parent; drag.target: parent + drag.axis: Drag.XAxis; drag.minimumX: 0; drag.maximumX: root.length + onPositionChanged: { + root.activeValue = root.minimum + (root.maximum - root.minimum) * handle.x / root.length + } + } + } + Rectangle { + id: handleTail + y: handle.y; + radius: handle.radius; color: handle.color + anchors.left: background.left + anchors.right: handle.right + width: handle.x; height: handle.height + } +} diff --git a/imports/shared/controls/SwipeView.qml b/imports/shared/controls/SwipeView.qml new file mode 100644 index 0000000..cad2771 --- /dev/null +++ b/imports/shared/controls/SwipeView.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 + +import utils 1.0 + +UIElement { + id: root + + property alias delegate: pathView.delegate + property alias items: pathView.model + property alias currentViewIndex: pathView.currentIndex + + property int itemWidth + + PathView { + id: pathView + + property int padding: (width-root.itemWidth)/2 + + anchors.fill: parent + clip: true + + snapMode: PathView.SnapOneItem + + pathItemCount: 3 + + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + + path: Path { + startX: -root.itemWidth+pathView.padding + startY: pathView.height/2 + PathAttribute { name: "scale"; value: 0.5 } + PathAttribute { name: "angle"; value: -100 } + PathAttribute { name: "z"; value: 0 } + PathAttribute { name: "yTranslate"; value: Style.vspan(4) } + + PathLine { x: pathView.width/2; y: pathView.height/2 } + PathAttribute { name: "scale"; value: 1 } + PathAttribute { name: "angle"; value: 0 } + PathAttribute { name: "z"; value: 1 } + PathAttribute { name: "yTranslate"; value: 0 } + + PathLine { x: pathView.width + root.itemWidth-pathView.padding; y: pathView.height/2 } + PathAttribute { name: "scale"; value: 0.5 } + PathAttribute { name: "angle"; value: 100 } + PathAttribute { name: "z"; value: 0 } + PathAttribute { name: "yTranslate"; value: Style.vspan(4) } + } + } +} diff --git a/imports/shared/controls/Symbol.qml b/imports/shared/controls/Symbol.qml new file mode 100644 index 0000000..ed1717a --- /dev/null +++ b/imports/shared/controls/Symbol.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import utils 1.0 + +Item { + id: root + implicitHeight: image.height + implicitWidth: image.width + + signal activeSymbolChanged() + + property string name + property bool active + property int size: Style.defaultSymbolSize + property alias rotate: image.rotation + Image { + id: image + anchors.centerIn: parent + source: root.name ? Style.symbol(root.name, root.active) : "" + asynchronous: true + } +} diff --git a/imports/shared/controls/Tool.qml b/imports/shared/controls/Tool.qml new file mode 100644 index 0000000..d5b6af2 --- /dev/null +++ b/imports/shared/controls/Tool.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import controls 1.0 +import utils 1.0 + +UIElement { + id: root + hspan: 1 + vspan: 2 + property alias name: icon.name + property alias size: icon.size + property bool active + scale: area.pressed ? 1.1 : 1.0 + Behavior on scale { NumberAnimation { duration: 25 } } + + signal clicked() + + function toggle() { + active = !active + } + + Symbol { + id: icon + anchors.fill: parent + active: area.pressed || root.active + opacity: 0.75 + } + + MouseArea { + id: area + anchors.fill: parent + onClicked: root.clicked() + } +} diff --git a/imports/shared/controls/qmldir b/imports/shared/controls/qmldir new file mode 100644 index 0000000..3a052d2 --- /dev/null +++ b/imports/shared/controls/qmldir @@ -0,0 +1,14 @@ +Icon 1.0 Icon.qml +Label 1.0 Label.qml +Button_neptune 1.0 Button_neptune.qml +DisplayBackground 1.0 DisplayBackground.qml +TabView 1.0 TabView.qml +Tool 1.0 Tool.qml +TextTool 1.0 TextTool.qml +Slider 1.0 Slider.qml +Symbol 1.0 Symbol.qml +AppStackView 1.0 AppStackView.qml +SwipeView 1.0 SwipeView.qml +LetterPicker 1.0 LetterPicker.qml +Title 1.0 Title.qml +LaunchItemBackground 1.0 LaunchItemBackground.qml diff --git a/imports/shared/service/climate/ClimateService.qml b/imports/shared/service/climate/ClimateService.qml new file mode 100644 index 0000000..ffdf71b --- /dev/null +++ b/imports/shared/service/climate/ClimateService.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.0 +import QtIvi.VehicleFunctions 1.0 +import service.settings 1.0 + +QtObject { + id: root + + property ClimateControl climateControl: ClimateControl { + discoveryMode: ClimateControl.AutoDiscovery + } + + property QtObject leftSeat: QtObject { + property real minValue: calculateUnitValue(16) + property real maxValue: calculateUnitValue(28) + property real stepValue: calculateUnitValue(0.5) + property real value: calculateUnitValue(climateControl.zoneAt.FrontLeft.targetTemperature.value) + property bool heat: climateControl.zoneAt.FrontLeft.seatHeater + } + + property QtObject rightSeat: QtObject { + property real minValue: calculateUnitValue(16) + property real maxValue: calculateUnitValue(28) + property real stepValue: calculateUnitValue(0.5) + property real value: calculateUnitValue(climateControl.zoneAt.FrontRight.targetTemperature.value) + + property bool heat: climateControl.zoneAt.FrontRight.seatHeater + + onValueChanged: climateControl.zoneAt.FrontRight.targetTemperature.value = value + onHeatChanged: climateControl.zoneAt.FrontRight.seatHeater.value = heat + } + + property QtObject frontHeat: QtObject { + property string symbol: "front" + property bool enabled: true + } + + property QtObject rearHeat: QtObject { + property string symbol: "rear" + property bool enabled: true + } + + property QtObject airCondition: QtObject { + property string symbol: "ac" + property bool enabled: climateControl.airConditioning.value + + onEnabledChanged: { + climateControl.airConditioning.value = enabled; + enabled = Qt.binding(function() { return climateControl.airConditioning.value; }); + } + } + + property QtObject airflow: QtObject { + property int windshield: ClimateControl.Windshield + property int dashboard: ClimateControl.Dashboard + property int floor: ClimateControl.Floor + property int value: climateControl.airflowDirections.value + property var availableValues: climateControl.airflowDirections.availableValues + } + + property QtObject airQuality: QtObject { + property string symbol: "air_quality" + property bool enabled: climateControl.recirculationMode.value == ClimateControl.RecirculationOn + + onEnabledChanged: { + climateControl.recirculationMode.value = enabled ? ClimateControl.RecirculationOn : ClimateControl.RecirculationOff; + enabled = Qt.binding(function() { return climateControl.recirculationMode.value == ClimateControl.RecirculationOn }); + } + } + + property QtObject eco: QtObject { + property string symbol: "eco" + property bool enabled: false + } + + property QtObject steeringWheelHeat: QtObject { + property string symbol: "stearing_wheel" + property bool enabled: climateControl.steeringWheelHeater.value >= 5 + + onEnabledChanged: { + climateControl.steeringWheelHeater.value = enabled ? 10 : 0; + enabled = Qt.binding(function() { return climateControl.steeringWheelHeater.value >= 5 }); + } + } + + property var climateOptions: [frontHeat, rearHeat, airCondition, airQuality, eco, steeringWheelHeat] + + property int outsideTemp: calculateUnitValue(15) + property string outsideTempText: qsTr("%1" + tempSuffix).arg(outsideTemp) + property int ventilation: climateControl.fanSpeedLevel.value + property string tempSuffix: SettingsService.metric ? "°C" : "°F" + property int ventilationLevels: climateControl.fanSpeedLevel.maximumValue // 6 + off (0) + onVentilationChanged: climateControl.fanSpeedLevel.value = ventilation + + property QtObject stateMachine: ClimateStateMachine { + climateControl: root.climateControl + doorsOpen: eco.enabled // TODO use QtIVI doors/window state for this eventually + } + + function calculateUnitValue(value) { + // Defualt value is the celsius + return (SettingsService.unitSystem === "metric") ? value : (Math.round(value * 1.8 + 32)) + } +} diff --git a/imports/shared/service/climate/ClimateStateMachine.qml b/imports/shared/service/climate/ClimateStateMachine.qml new file mode 100644 index 0000000..596be08 --- /dev/null +++ b/imports/shared/service/climate/ClimateStateMachine.qml @@ -0,0 +1,169 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQml.StateMachine 1.0 as DSM +import QtIvi.VehicleFunctions 1.0 + +QtObject { + id: root + property ClimateControl climateControl + property bool doorsOpen: false + + property QtObject stateMachine: DSM.StateMachine { + id: climateStateMachine + running: true + initialState: runningState + + DSM.State { + childMode: DSM.State.ParallelStates + id: runningState + + DSM.State { + id: suspendable + initialState: doorsClosedState + + DSM.State { + id: doorsClosedState + childMode: DSM.State.ParallelStates + + DSM.State { + id: airConditionState + initialState: climateControl.airConditioning.value ? airConditionOn : airConditionOff + + DSM.State { + id: airConditionOff + onEntered: climateControl.airConditioning.value = false + DSM.SignalTransition { + targetState: airConditionOn + signal: climateControl.airConditioning.valueChanged + guard: climateControl.airConditioning.value + } + } + + DSM.State { + id: airConditionOn + onEntered: { + climateControl.airConditioning.value = true + steeringWheelHeat.enabled = false + } + DSM.SignalTransition { + targetState: airConditionOff + signal: climateControl.airConditioning.valueChanged + guard: !climateControl.airConditioning.value + } + } + } // airConditionState + + DSM.State { + id: airRecirculationState + initialState: climateControl.recirculation.value ? airRecirculationOn : airRecirculationOff + + DSM.State { + id: airRecirculationOff + onEntered: climateControl.recirculationMode.value = ClimateControl.RecirculationOff + DSM.SignalTransition { + targetState: airRecirculationOn + signal: climateControl.recirculationMode.valueChanged + guard: climateControl.recirculationMode.value == ClimateControl.RecirculationOn + } + } + + DSM.State { + id: airRecirculationOn + onEntered: { + climateControl.recirculationMode.value = ClimateControl.RecirculationOn + } + DSM.SignalTransition { + targetState: airRecirculationOff + signal: climateControl.recirculationMode.valueChanged + guard: climateControl.recirculationMode.value == ClimateControl.RecirculationOff + } + } + } // airRecirculationState + + DSM.HistoryState { + id: historyState + defaultState: doorsClosedState + historyType: DSM.HistoryState.DeepHistory + } + + DSM.SignalTransition { + targetState: suspended + signal: doorsOpenChanged + guard: doorsOpen + } + } // door closed state + + DSM.State { + id: suspended + onEntered: { + climateControl.airConditioning.value = false + climateControl.recirculationMode.value = ClimateControl.RecirculationOff + } + DSM.SignalTransition { + targetState: historyState + signal: doorsOpenChanged + guard: !doorsOpen + } + } + + } // suspendable state + + DSM.State { + id: steeringWheelHeatState + initialState: (climateControl.steeringWheelHeater.value >= 5) ? steeringWheelHeatOn : steeringWheelHeatOff + + DSM.State { + id: steeringWheelHeatOff + onEntered: climateControl.steeringWheelHeater.value = 0 + DSM.SignalTransition { + targetState: steeringWheelHeatOn + signal: climateControl.steeringWheelHeater.valueChanged + guard: climateControl.steeringWheelHeater.value >= 5 + } + } + + DSM.State { + id: steeringWheelHeatOn + onEntered: { + climateControl.steeringWheelHeater.value = 10 + climateControl.airConditioning.value = false + } + DSM.SignalTransition { + targetState: steeringWheelHeatOff + signal: climateControl.steeringWheelHeater.valueChanged + guard: climateControl.steeringWheelHeater.value < 5 + } + } + } + } // running state + } +} diff --git a/imports/shared/service/climate/qmldir b/imports/shared/service/climate/qmldir new file mode 100644 index 0000000..322284f --- /dev/null +++ b/imports/shared/service/climate/qmldir @@ -0,0 +1 @@ +singleton ClimateService 1.0 ClimateService.qml diff --git a/imports/shared/service/movie/MovieService.qml b/imports/shared/service/movie/MovieService.qml new file mode 100644 index 0000000..0e9655b --- /dev/null +++ b/imports/shared/service/movie/MovieService.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton + +import QtQuick 2.0 +import "." 1.0 + +QtObject { + id: root + property var movieProvider + property int currentIndex: 0 + property int trackCount + property var currentTrack + + + function nextTrack() { + if (movieProvider) + movieProvider.next() + } + + function previousTrack() { + if (movieProvider) + movieProvider.previous() + } + + function sourcePath(source) { + return movieProvider ? movieProvider.sourcePath(source) : "" + } + + + function coverPath(cover) { + return movieProvider ? movieProvider.coverPath(cover) : "" + } + + function selectRandomTracks() { + if (movieProvider) + movieProvider.selectRandom() + } +} diff --git a/imports/shared/service/movie/qmldir b/imports/shared/service/movie/qmldir new file mode 100644 index 0000000..764d674 --- /dev/null +++ b/imports/shared/service/movie/qmldir @@ -0,0 +1 @@ +singleton MovieService 1.0 MovieService.qml diff --git a/imports/shared/service/music/MusicService.qml b/imports/shared/service/music/MusicService.qml new file mode 100644 index 0000000..22e858b --- /dev/null +++ b/imports/shared/service/music/MusicService.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.0 +import QtMultimedia 5.0 +import "." 1.0 + +QtObject { + id: root + + property string defaultMusicApp: "com.pelagicore.media" + property var musicProvider + property Audio player: Audio { + id: player + source: currentTrack ? root.url : "" + onVolumeChanged: { + print('volume: ' + volume) + } + onStatusChanged: { + if (status == Audio.EndOfMedia) + nextTrack() + } + } + + property alias volume: player.volume + + property int currentIndex + property int trackCount + property var currentTrack + property string coverPath + property bool playing: player.playbackState === Audio.PlayingState + property alias duration: player.duration + property alias position: player.position + property string currentTime: Qt.formatTime(new Date(position), 'mm:ss') + property string durationTime: Qt.formatTime(new Date(duration), 'mm:ss') + property int remaining: player.duration - player.position + property string remainingTime: Qt.formatTime(new Date(remaining), 'mm:ss') + property string url + + function musicPlay() { + player.source = Qt.binding(function() { return currentTrack ? root.url : ""}) + play() + } + + function play() { + print('MusicService.play: ' + player.source) + player.autoPlay = true + player.play() + } + + function pause() { + print('MusicService.pause: ' + player.source) + player.autoPlay = false + player.pause() + } + + function togglePlay() { + if (playing) { + pause() + } else { + play() + } + } + + function nextTrack() { + if (root.musicProvider) + root.musicProvider.next() + } + + function previousTrack() { + if (root.musicProvider) + root.musicProvider.previous() + } + + function selectAllAlbums() { + provider.query = 'select distinct album, cover, artist from music' + } + + function seek(value) { + player.seek(value) + } + + Component.onDestruction: { + // required to avoid crashing qmllive + player.autoLoad = false + player.autoPlay = false + player.stop() + player.source = '' + } +} diff --git a/imports/shared/service/music/qmldir b/imports/shared/service/music/qmldir new file mode 100644 index 0000000..3ca99e6 --- /dev/null +++ b/imports/shared/service/music/qmldir @@ -0,0 +1 @@ +singleton MusicService 1.0 MusicService.qml diff --git a/imports/shared/service/settings/SettingsService.qml b/imports/shared/service/settings/SettingsService.qml new file mode 100644 index 0000000..10577bc --- /dev/null +++ b/imports/shared/service/settings/SettingsService.qml @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.1 + +QtObject { + id: root + + property bool clusterVisible: true + property string unitSystem: "metric" // "metric" or "imp_us" + property bool metric: unitSystem === "metric" + + property ListModel entries: ListModel { + ListElement { title: "USER PROFILE"; icon: "profile"; checked: true; hasChildren: true } + ListElement { title: "SERVICE & SUPPORT"; icon: "service"; checked: false; hasChildren: false } + ListElement { title: "TRAFFIC INFORMATION"; icon: "warning"; checked: true; hasChildren: true } + ListElement { title: "TOLL & CONGESTION FEES"; icon: "toll"; checked: false; hasChildren: true } + ListElement { title: "METRIC SYSTEM"; icon: "fees"; checked: true; hasChildren: false } + ListElement { title: "APP UPDATES"; icon: "updates"; checked: true; hasChildren: true } + ListElement { title: "INSURANCE FEATURES"; icon: "insurance"; checked: true; hasChildren: true } + } + + property var carSettings: [ + { section: "Units", option: clockOption }, + { section: "Units", option: speedOption }, + { section: "Communication", option: bluetoothOption } + ] + + property var clockOption: QtObject { + property string format: active === 0 ? "hh:mm" : "h:mm AP" + property var options: ['24H', 'AM/PM'] + property string name: "Time" + property int active: 0 + + function setActive(index) { active = index } + } + + property var speedOption: QtObject { + property var options: ['KMH', 'MPH'] + property string name: "Speed" + property int active: 0 + + function setActive(index) { active = index } + } + + property var bluetoothOption: QtObject { + + property string name: "Bluetooth" + property bool active: false + + function setActive(value) { active = value } + } + + property ListModel functions: ListModel { + ListElement { + description: "Hill descent control" + icon: "hill_descent_control" + active: true + } + ListElement { + description: "Intelligent speed adaptation" + icon: "intelligent_speed_adaptation" + active: false + } + ListElement { + description: "Automatic beam switching" + icon: "automatic_beam_switching" + active: true + } + ListElement { + description: "Collision avoidance" + icon: "collision_avoidance" + active: false + } + ListElement { + description: "Lane keeping assist" + icon: "lane_keeping_assist" + active: false + } + ListElement { + description: "Traffic jam assist" + icon: "traffic_jam_assist" + active: false + } + ListElement { + description: "Driver drowsyness alert" + icon: "driver_drownsyness_alert" + active: true + } + ListElement { + description: "Park assist" + icon: "park_assist" + active: false + } + } +} diff --git a/imports/shared/service/settings/qmldir b/imports/shared/service/settings/qmldir new file mode 100644 index 0000000..950972f --- /dev/null +++ b/imports/shared/service/settings/qmldir @@ -0,0 +1 @@ +singleton SettingsService 1.0 SettingsService.qml diff --git a/imports/shared/service/statusbar/StatusBarService.qml b/imports/shared/service/statusbar/StatusBarService.qml new file mode 100644 index 0000000..e14bc30 --- /dev/null +++ b/imports/shared/service/statusbar/StatusBarService.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.0 +import service.settings 1.0 + +Item { + id: root + + property string clusterTitle: "" + property int pageIndicatorSize: 3 + property int currentPage: 0 + + property var indicators: [ + { name: "4g-signal-strength", active: true }, + { name: "bluetooth", active: SettingsService.bluetoothOption.active }, + { name: "wifi-signal-strength", active: true } + ] + + property var currentDate: new Date(); + + Timer { + interval: 1000 + repeat: true + running: true + onTriggered: { + currentDate = new Date() + } + } + + visible: false +} diff --git a/imports/shared/service/statusbar/qmldir b/imports/shared/service/statusbar/qmldir new file mode 100644 index 0000000..129171d --- /dev/null +++ b/imports/shared/service/statusbar/qmldir @@ -0,0 +1 @@ +singleton StatusBarService 1.0 StatusBarService.qml diff --git a/imports/shared/service/valuesource/ValueSource.qml b/imports/shared/service/valuesource/ValueSource.qml new file mode 100644 index 0000000..a534903 --- /dev/null +++ b/imports/shared/service/valuesource/ValueSource.qml @@ -0,0 +1,282 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.6 +import com.qtcompany.clusterdemodata 1.0 + +Item { + id: valueSource + property real kph: 0 + property real consumeKW: 0 + property real maxConsumeKWValue: 90 + property real maxChargeKWValue: 40 + property real chargeKW: 0 + property real maxRange: 600 + property real range: (batteryLevel / 100) * maxRange + + property string destination: "Ernst-Reuter-Platz" + property string currentLocation: "Kurt-Schumacher-Damm" + + property var consumption: [300, 600, 700, 800, 900, 700, 600, 300, 50, 50, -100, 50, -100, -150, + -200, 50, 150, 200, 300, 200, 300, 200, 500, 50, -100, -100, -150, -80, 50, 300, 600, 700, 800, + 600, 700, 300, 50, 50] + + property var turnSignal + property var currentDate: new Date() + //property string date: currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM") + //property string time: currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm") + property string date: currentDate.toLocaleDateString(Qt.locale("en_GB")) + property string time: currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm") + + ClusterData { + id: clusterDataSource + + onVehicleSpeedChanged: { + kph = vehicleSpeed + } + property int notLeft: ~Qt.LeftArrow + property int notRight: ~Qt.RightArrow + onLeftTurnLightChanged: leftTurnLight ? turnSignal |= Qt.LeftArrow + : turnSignal &= notLeft + onRightTurnLightChanged: rightTurnLight ? turnSignal |= Qt.RightArrow + : turnSignal &= notRight + } + + property real latitude: clusterDataSource.latitude + property real longitude: clusterDataSource.longitude + property real direction: clusterDataSource.direction + property bool lowBeam: automaticDemoMode//clusterDataSource.headLight + property int carId: clusterDataSource.carId + property bool lightFailure: clusterDataSource.lightFailure + property bool flatTire: clusterDataSource.flatTire + + property bool frontLeftOpen: clusterDataSource.zoneAt.frontLeft.doorOpen + property bool frontRightOpen: clusterDataSource.zoneAt.frontRight.doorOpen + property bool rearLeftDoorOpen: clusterDataSource.zoneAt.rearLeft.doorOpen + property bool rearRighDoorOpen: clusterDataSource.zoneAt.rearRight.doorOpen + property bool hoodOpen: clusterDataSource.zoneAt.hood.doorOpen + property bool trunkOpen: clusterDataSource.zoneAt.trunk.doorOpen + + property double batteryLevel: clusterDataSource.batteryPotential + property double fuelLevel: clusterDataSource.gasLevel + property int gear: clusterDataSource.gear + property bool parkingBrake: clusterDataSource.brake + // TODO: These two are hacks. View change messages might not come through CAN. + property bool viewChange: clusterDataSource.oilTemp + property bool rightViewChange: clusterDataSource.oilPressure + + // + // ENABLE FOR FULLY AUTOMATIC DEMO MODE (in case there is no CanController) + // + property bool automaticDemoMode: true + property bool startAnimations: false + + onAutomaticDemoModeChanged: { + if (startAnimations) { + kph = 0 + if (automaticDemoMode) { + animation.start() + } else { + gear = 1 + parkingBrake = false + animation.stop() + } + } + } + + onStartAnimationsChanged: { + if (startAnimations) + animation.start() + } + + // + // Speed animations for automatic demo mode + // + Timer { + running: startAnimations && automaticDemoMode + property bool turnLeft: true + repeat: true + interval: 7500 + onTriggered: { + turnLeft = !turnLeft + if (turnLeft) + turnSignal = Qt.LeftArrow + else + turnSignal = Qt.RightArrow + stopSignaling.restart() + } + } + + Timer { + id: stopSignaling + running: false + interval: 2750 + onTriggered: turnSignal = Qt.NoArrow + } + + Behavior on fuelLevel { + enabled: automaticDemoMode + PropertyAnimation { + duration: 18000 + } + } + + Behavior on batteryLevel { + enabled: automaticDemoMode + PropertyAnimation { + duration: 18000 + } + } + + onFuelLevelChanged: { + if (automaticDemoMode && fuelLevel <= 5) + fuelLevel = 100 + } + + onBatteryLevelChanged: { + if (automaticDemoMode && batteryLevel <= 5) + batteryLevel = 100 + } + + SequentialAnimation { + id: animation + running: false + loops: Animation.Infinite + + ScriptAction { + script: { + gear = 0 + parkingBrake = true + } + } + PauseAnimation { duration: 2000 } + ScriptAction { + script: { + parkingBrake = false + gear = 1 + fuelLevel -= 10. + batteryLevel -= 10. + } + } + PropertyAnimation { + target: valueSource + property: "kph" + from: 0 + to: 150 + duration: 10000 + } + PropertyAnimation { + target: valueSource + property: "kph" + from: 150 + to: 120 + duration: 500 + } + PropertyAnimation { + target: valueSource + property: "kph" + from: 120 + to: 200 + duration: 1500 + } + PropertyAnimation { + target: valueSource + property: "kph" + from: 200 + to: 0 + duration: 6000 + } + } + + // In normal Car UI mode only speed is animated based on gps data + // In automatic demo mode rpm, turbo, consumption and engine temperature are based on speed + //property int rpm: automaticDemoMode ? kph * 40 : kph * 150 + //property double engineTemperature: automaticDemoMode ? kph * .25 + 60. : kph * .5 + 50. + // New route is faster, we can use the same values for both modes + property int rpm: kph * 40 + property double engineTemperature: kph * .22 + 60. + + property int totalDistance: 42300 + property int kmSinceCharge: 8 + property int avRangePerCharge: 425 + property int energyPerKm: 324 + + property real totalDistanceSince: 0. + + property string gearString: { + var g + if (gear === 0 || gear < -1) + return "N" + else if (gear === -1) + return "R" + else if (carId === 1) //sports car + return gear.toString() + else + return "D" + } + + Timer { + id: timeTimer + interval: 15000 + repeat: true + running: true + onTriggered: { + currentDate = new Date() + //date = currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM") + //time = currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm") + date = currentDate.toLocaleDateString(Qt.locale("en_GB")) + time = currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm") + // Approximate total distance based on current speed + totalDistanceSince += kph / 240. // = km / 15 min + if (totalDistanceSince > 1.) { + var totalInt = Math.floor(totalDistanceSince) + totalDistance += totalInt + kmSinceCharge += totalInt + totalDistanceSince -= totalInt + } + } + } + + Behavior on kph { + enabled: !automaticDemoMode + PropertyAnimation { duration: 2000 } + } +} diff --git a/imports/shared/service/valuesource/qmldir b/imports/shared/service/valuesource/qmldir new file mode 100644 index 0000000..844c635 --- /dev/null +++ b/imports/shared/service/valuesource/qmldir @@ -0,0 +1 @@ +singleton ValueSource 1.0 ValueSource.qml diff --git a/imports/shared/utils/AppUIScreen.qml b/imports/shared/utils/AppUIScreen.qml new file mode 100644 index 0000000..fc80c06 --- /dev/null +++ b/imports/shared/utils/AppUIScreen.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.1 + +import QtApplicationManager 1.0 +import controls 1.0 +import utils 1.0 + +ApplicationManagerWindow { + id: pelagicoreWindow + width: Style.cellWidth * 24 + height: Style.cellHeight * 24 + + default property alias content: content.children + property var clusterComponent + property alias cluster: clusterContainer.children + property alias passenger: passengerContainer.children + + signal clusterKeyPressed(int key) + signal raiseApp() + + onWindowPropertyChanged: { + //print(":::AppUIScreen::: Window property changed", name, value) + if (name === "visibility" && value === true) { + pelagicoreWindow.raiseApp() + } + } + + function back() { + pelagicoreWindow.setWindowProperty("visibility", false) + } + + DisplayBackground { + anchors.fill: parent + } + + ApplicationManagerWindow { + id: clusterSurface + width: typeof parent !== 'undefined' ? parent.width : Style.cellWidth * 24 + height: typeof parent !== 'undefined' ? parent.height : Style.cellHeight * 24 + color: "transparent" + visible: clusterContainer.children.length > 0 && Style.withCluster + Item { + id: clusterContainer + anchors.fill: parent + } + + Component.onCompleted: { + clusterSurface.setWindowProperty("windowType", "clusterWidget") + } + + onWindowPropertyChanged: { + //print(":::AppUIScreen::: window property changed", name, value, Qt.Key_Up) + pelagicoreWindow.clusterKeyPressed(value) + if (name === "visibility") { + clusterSurface.visible = value + } + } + } + + ApplicationManagerWindow { + id: passengerSurface + width: typeof parent !== 'undefined' ? parent.width : Style.cellWidth * 24 + height: typeof parent !== 'undefined' ? parent.height : Style.cellHeight * 24 + visible: passengerContainer.children.length > 0 + color: "transparent" + + Item { + id: passengerContainer + anchors.fill: parent + } + Component.onCompleted: { + passengerSurface.setWindowProperty("windowType", "passengerWidget") + } + } + + Item { + id: content + anchors.fill: parent + } +} diff --git a/imports/shared/utils/AutoConfig.qml b/imports/shared/utils/AutoConfig.qml new file mode 100644 index 0000000..fb4c07d --- /dev/null +++ b/imports/shared/utils/AutoConfig.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Window 2.2 +import com.pelagicore.ScreenManager 1.0 + +QtObject { + property bool withCluster: false + property int cellWidth: 53 // 1280/24 + property int cellHeight: 33 // 800/24 + property var fontWeight: Font.Light + property int fontSizeXXS: 12 + property int fontSizeXS: 18 + property int fontSizeS: 24 + property int fontSizeM: 28 + property int fontSizeL: 38 + property int fontSizeXL: 60 + property int fontSizeXXL: 80 + + property int defaultSymbolSize: symbolSizeS + property int defaultGfxSize: 1 + property int symbolSizeXS: 32 + property int symbolSizeS: 48 + property int symbolSizeM: 72 + property int symbolSizeL: 96 + property int symbolSizeXL: 114 + property int symbolSizeXXL: 192 + + property string displayBackground: "background_1920x1080" + + + property int screenWidth: Screen.width + property int screenHeight: Math.min(screenWidth * 0.62, Screen.height) + property int clusterWidth: 1920 + property int clusterHeight: 720 + + onScreenWidthChanged: cellWidth = Math.floor(screenWidth/24) + onScreenHeightChanged: cellHeight = Math.floor(screenHeight/24) + + Component.onCompleted: { + var scalFactor = (screenWidth/1280); + + print("resolution: " + screenWidth + "x" + screenHeight) + print("scalFactor: ", scalFactor) + + cellWidth = Math.floor(screenWidth/24) + cellHeight = Math.floor(screenHeight/24) + + var symbolSize = symbolSizeS + var gfxSize = 1 + if (scalFactor >= 6) { + symbolSize = symbolSizeXL + gfxSize = 4 + } else if (scalFactor >= 2) { + symbolSize = symbolSizeL + gfxSize = 3 + } else if (scalFactor >= 1.5) { + symbolSize = symbolSizeM + gfxSize = 2 + } + + defaultSymbolSize = symbolSize + defaultGfxSize = 4 + + + fontSizeXXS = scalFactor * 14 + + fontSizeXS = scalFactor * 16 + + fontSizeS = scalFactor * 18 + + fontSizeM = scalFactor * 24 + + fontSizeL = scalFactor * 28 + + fontSizeXL = scalFactor * 36 + + fontSizeXXL = scalFactor * 48 + + fontWeight = Font.Light + + if (showClusterIfPossible) { + print("Instrument Cluster enabled") + withCluster = true + clusterWidth = ScreenManager.availableScreens[1].size.width + clusterHeight = Math.min(ScreenManager.availableScreens[1].size.width * 0.375, ScreenManager.availableScreens[1].size.height) + print("cluster resolution: " + clusterWidth + "x" + clusterHeight) + } + } +} diff --git a/imports/shared/utils/Spacer.qml b/imports/shared/utils/Spacer.qml new file mode 100644 index 0000000..0322c18 --- /dev/null +++ b/imports/shared/utils/Spacer.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 + +import utils 1.0 + +UIElement { + id: root + hspan: 1 + vspan: 1 + property bool divider: false + property alias size: text.font.pixelSize + + Text { + id: text + anchors.centerIn: parent + font.family: Style.fontFamily + color: Style.colorWhite + font.pixelSize: Style.fontSizeM + text: '|' + visible: root.divider + } +} diff --git a/imports/shared/utils/Style.qml b/imports/shared/utils/Style.qml new file mode 100644 index 0000000..8a6549a --- /dev/null +++ b/imports/shared/utils/Style.qml @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.1 +import QtApplicationManager 1.0 +import QtQuick.Window 2.2 + +QtObject { + id: root + + property bool withCluster + property bool withPassengerView + property int paddingXS + property int paddingS + property int padding + property int paddingL + property int paddingXL + property int paddingXXL + + property int screenWidth: 1080//Screen.width + property int screenHeight: 1920//Screen.height + property int bottomBarWidth: screenWidth + property int bottomBarHeight: 270 + property int launchBarHeight: 512 + property int statusBarHeight: 100 + property int searchInputHeight: 50 + + property int cellWidth + property int cellHeight + property int tumblerWidth + property int buttonRadius + + property string fontFamily + property real fontWeight + property int fontSizeXXS + property int fontSizeXS + property int fontSizeS + property int fontSizeM + property int fontSizeL + property int fontSizeXL + property int fontSizeXXL + + property color colorWhite + property color colorOrange + property color colorGrey + property color colorBlack + property color colorPink + + property color textcolor: '#ffffff' + + property color darkGrey: '#101A1A' + property bool debugMode + property bool fakeBackground + property string displayBackground + property real disabledIconOpacity + + property int defaultSymbolSize + property int defaultGfxSize + property int symbolSizeXS + property int symbolSizeS + property int symbolSizeM + property int symbolSizeL + + property bool clusterWidgetReady: false + + property url drawableUrl: Qt.resolvedUrl('../assets/drawable-ldpi') + property url symbolUrl: Qt.resolvedUrl('../assets/icons') + property url gfxUrl: Qt.resolvedUrl('../assets/gfx/') + property url fonts: Qt.resolvedUrl('../assets/fonts/') + + property bool isClient: typeof ApplicationInterface !== 'undefined' + property string styleConfig: isClient ? ApplicationInterface.additionalConfiguration.styleConfig : ApplicationManager.additionalConfiguration.styleConfig + property bool showClusterIfPossible: isClient ? ApplicationInterface.additionalConfiguration.showCluster :ApplicationManager.additionalConfiguration.showCluster + + property Loader styleLoader: Loader { + property bool showClusterIfPossible: root.showClusterIfPossible + source: styleConfig === "auto" ? Qt.resolvedUrl("AutoConfig.qml") : styleConfig + + onLoaded: { + print("StyleConfig loaded: ", source) + withCluster = configValue("withCluster", true) + withPassengerView = configValue("withPassengerView", false) + paddingXS = configValue("paddingXS", 2) + paddingS = configValue("paddingS", 4) + padding = configValue("padding", 10) + paddingL = configValue("paddingL", 12) + paddingXL = configValue("paddingXL", 16) + paddingXXL = configValue("paddingXL", 20) + + cellWidth = configValue("cellWidth", 53) + cellHeight = configValue("cellHeight", 33) + tumblerWidth = configValue("tumblerWidth", 150) + buttonRadius = configValue("buttomRadius", 5) + + fontFamily = configValue("fontFamily", true ? 'Lato' : fontRegular.name) + fontWeight = configValue("fontWeight", Font.Light) + fontSizeXXS = configValue("fontSizeXXS", 12) + fontSizeXS = configValue("fontSizeXS", 18) + fontSizeS = configValue("fontSizeS", 24) + fontSizeM = configValue("fontSizeM", 28) + fontSizeL = configValue("fontSizeL", 38) + fontSizeXL = configValue("fontSizeXL", 60) + fontSizeXXL = configValue("fontSizeXXL", 80) + + colorWhite = configValue("colorWhite", '#ffffff') + colorOrange = configValue("colorOrange", '#f07d00') + colorGrey = configValue("colorGrey", '#999999') + colorBlack = configValue("colorBlack", '#000000') + colorPink = configValue("colorPink", '#EF0080') + + debugMode = configValue("debugMode", false) + fakeBackground = configValue("fakeBackground", false) + displayBackground = configValue("displayBackground", "background_1280x800") + disabledIconOpacity = configValue("disabledIconOpacity", 0.6) + + defaultSymbolSize = configValue("defaultSymbolSize", symbolSizeS) + defaultGfxSize = configValue("defaultGfxSize", 1) + symbolSizeXS = configValue("symbolSizeXS", 32) + symbolSizeS = configValue("symbolSizeS", 48) + symbolSizeL = configValue("symbolSizeL", 96) + symbolSizeM = configValue("symbolSizeM", 72) + } + } + + property FontLoader fontRegular: FontLoader { + source: font('Lato-Regular') + } + + property FontLoader fontLight: FontLoader { + source: font('Lato-Light') + } + + function configValue(key, defaultValue) { + //console.log("configValue: " + key + " = ") + //console.log(styleLoader.item[key] ? styleLoader.item[key] : defaultValue) + return styleLoader.item[key] ? styleLoader.item[key] : defaultValue + } + + function symbol(name, active) { + return symbolUrl + '/' + name + '.png' + } + + function symbolXS(name, active) { + return symbol(name, symbolSizeXS, active); + } + + function symbolS(name, active) { + return symbol(name, symbolSizeS, active); + } + + function symbolM(name, active) { + return symbol(name, symbolSizeM, active); + } + + function symbolL(name, active) { + return symbol(name, symbolSizeL, active); + } + + function symbolXL(name, active) { + return symbol(name, symbolSizeXL, active); + } + + function symbolXXL(name, active) { + return symbol(name, symbolSizeXXL, active); + } + + + function gfx2(name) { + return gfxUrl + name + '.png' + } + + function gfx2Dynamic(name, size) { + return gfxUrl + name + '@' + size + 'x.png' + } + + function icon(name) { + return drawableUrl + '/' + name + '.png'; + } + + function gfx(name) { + return drawableUrl + '/' + name + '.png'; + } + + function hspan(value) { + return cellWidth * value + } + + function vspan(value) { + return cellHeight * value + } + + function asset(name) { + return Qt.resolvedUrl('../assets/' + name) + } + + function font(name) { + return Qt.resolvedUrl('../assets/fonts/' + name + '.ttf') + } +} diff --git a/imports/shared/utils/Tracer.qml b/imports/shared/utils/Tracer.qml new file mode 100644 index 0000000..f24ba95 --- /dev/null +++ b/imports/shared/utils/Tracer.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 + +import utils 1.0 + +Item { + id: root + anchors.fill: parent + property color color: '#ac193d' + property alias text: note.text + property int padding: 1 + visible: Style.debugMode + + Rectangle { + id: frame + anchors.fill: parent + anchors.margins: root.padding + color: 'transparent' + border.color: root.color + border.width: 2 + opacity: 0.5 + } + + Text { + id: note + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.margins: 4 + horizontalAlignment: Text.AlignRight + font.pixelSize: 12 + color: root.color + } +} diff --git a/imports/shared/utils/UIElement.qml b/imports/shared/utils/UIElement.qml new file mode 100644 index 0000000..843b3bb --- /dev/null +++ b/imports/shared/utils/UIElement.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 + +import utils 1.0 + +Item { + width: Style.cellWidth * hspan + height: Style.cellHeight * vspan + property int hspan: 4 + property int vspan: 1 + + property alias _tracer_color: tracer.color + property alias _tracer_padding: tracer.padding + + Tracer { + id: tracer + } +} diff --git a/imports/shared/utils/UIScreen.qml b/imports/shared/utils/UIScreen.qml new file mode 100644 index 0000000..88086da --- /dev/null +++ b/imports/shared/utils/UIScreen.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Controls 1.0 +import utils 1.0 +import controls 1.0 + +UIElement { + id: root + hspan: 24 + vspan: 24 + + property Component statusItem: Item {} + property string title + property bool showBack: true + + signal backScreen() + + DisplayBackground { + anchors.fill: parent + visible: root.parent && root.parent.parent === null + } + + Tool { + id: backButton + z: 5 + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: Style.padding + visible: root.showBack + name: 'back' + onClicked: root.backScreen() + } + Label { + anchors.verticalCenter: backButton.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + text: title + font.pixelSize: Style.fontSizeXXL + } + +} + diff --git a/imports/shared/utils/qmldir b/imports/shared/utils/qmldir new file mode 100644 index 0000000..6202c12 --- /dev/null +++ b/imports/shared/utils/qmldir @@ -0,0 +1,12 @@ +singleton Style 1.0 Style.qml +AutoConfig 1.0 AutoConfig.qml +Marker 1.0 Marker.qml +Spacer 1.0 Spacer.qml +Tracer 1.0 Tracer.qml +UIElement 1.0 UIElement.qml +UIPanel 1.0 UIPanel.qml +UIScreen 1.0 UIScreen.qml +UIPage 1.0 UIPage.qml +AppUIScreen 1.0 AppUIScreen.qml +NavigationUIScreen 1.0 NavigationUIScreen.qml +Layouter 1.0 Layouter.qml |