From 7eab04206ac2a4c8ba49f29514b68aed636ea2ee Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 29 May 2021 23:44:35 +0200 Subject: [PATCH] First draft --- .gitignore | 73 +++ bobbycar.cpp | 47 ++ bobbycar.pro | 21 + icons/bobbycar/44x44/air-con.png | Bin 0 -> 1394 bytes icons/bobbycar/44x44/command.png | Bin 0 -> 1350 bytes icons/bobbycar/44x44/message.png | Bin 0 -> 479 bytes icons/bobbycar/44x44/music.png | Bin 0 -> 622 bytes icons/bobbycar/44x44/seats.png | Bin 0 -> 1017 bytes icons/bobbycar/44x44/settings.png | Bin 0 -> 1406 bytes icons/bobbycar/44x44/statistics.png | Bin 0 -> 324 bytes icons/bobbycar/44x44/windows.png | Bin 0 -> 564 bytes icons/bobbycar/44x44@2/air-con.png | Bin 0 -> 2337 bytes icons/bobbycar/44x44@2/command.png | Bin 0 -> 2461 bytes icons/bobbycar/44x44@2/message.png | Bin 0 -> 639 bytes icons/bobbycar/44x44@2/music.png | Bin 0 -> 1106 bytes icons/bobbycar/44x44@2/navigation.png | Bin 0 -> 1604 bytes icons/bobbycar/44x44@2/seats.png | Bin 0 -> 1793 bytes icons/bobbycar/44x44@2/settings.png | Bin 0 -> 2413 bytes icons/bobbycar/44x44@2/statistics.png | Bin 0 -> 394 bytes icons/bobbycar/44x44@2/windows.png | Bin 0 -> 999 bytes icons/bobbycar/icons.svg | 526 ++++++++++++++++++ icons/bobbycar/index.theme | 14 + icons/car.png | Bin 0 -> 34416 bytes icons/car@2x.png | Bin 0 -> 37391 bytes icons/icons.qrc | 29 + icons/warning.png | Bin 0 -> 1212 bytes icons/warning@2x.png | Bin 0 -> 2118 bytes icons/weather.png | Bin 0 -> 1092 bytes icons/weather@2x.png | Bin 0 -> 1798 bytes .../applicationwindow-background.png | Bin 0 -> 91 bytes .../applicationwindow-background@2x.png | Bin 0 -> 98 bytes .../button-background-checked-hovered.9.png | Bin 0 -> 368 bytes ...button-background-checked-hovered@2x.9.png | Bin 0 -> 669 bytes .../button-background-checked.9.png | Bin 0 -> 291 bytes .../button-background-checked@2x.9.png | Bin 0 -> 506 bytes .../button-background-hovered.9.png | Bin 0 -> 315 bytes .../button-background-hovered@2x.9.png | Bin 0 -> 581 bytes .../button-background-pressed.9.png | Bin 0 -> 289 bytes .../button-background-pressed@2x.9.png | Bin 0 -> 501 bytes imagine-assets/button-background.9.png | Bin 0 -> 291 bytes imagine-assets/button-background@2x.9.png | Bin 0 -> 515 bytes imagine-assets/dial-background-hovered.png | Bin 0 -> 3383 bytes imagine-assets/dial-background-hovered@2x.png | Bin 0 -> 7128 bytes imagine-assets/dial-background-pressed.png | Bin 0 -> 3084 bytes imagine-assets/dial-background-pressed@2x.png | Bin 0 -> 6196 bytes imagine-assets/dial-background.png | Bin 0 -> 2746 bytes imagine-assets/dial-background@2x.png | Bin 0 -> 6094 bytes imagine-assets/dial-handle-pressed.png | Bin 0 -> 136 bytes imagine-assets/dial-handle-pressed@2x.png | Bin 0 -> 172 bytes imagine-assets/dial-handle.png | Bin 0 -> 164 bytes imagine-assets/dial-handle@2x.png | Bin 0 -> 177 bytes imagine-assets/frame-background.9.png | Bin 0 -> 257 bytes imagine-assets/frame-background@2x.9.png | Bin 0 -> 383 bytes imagine-assets/imagine-assets.qrc | 80 +++ .../itemdelegate-background-checked.9.png | Bin 0 -> 141 bytes .../itemdelegate-background-checked@2x.9.png | Bin 0 -> 180 bytes .../itemdelegate-background-hovered.9.png | Bin 0 -> 200 bytes .../itemdelegate-background-hovered@2x.9.png | Bin 0 -> 243 bytes .../itemdelegate-background-pressed.9.png | Bin 0 -> 139 bytes .../itemdelegate-background-pressed@2x.9.png | Bin 0 -> 178 bytes imagine-assets/itemdelegate-background.9.png | Bin 0 -> 134 bytes .../itemdelegate-background@2x.9.png | Bin 0 -> 172 bytes .../radiobutton-indicator-checked-hovered.png | Bin 0 -> 623 bytes ...diobutton-indicator-checked-hovered@2x.png | Bin 0 -> 1062 bytes .../radiobutton-indicator-checked-pressed.png | Bin 0 -> 271 bytes ...diobutton-indicator-checked-pressed@2x.png | Bin 0 -> 429 bytes .../radiobutton-indicator-checked.png | Bin 0 -> 291 bytes .../radiobutton-indicator-checked@2x.png | Bin 0 -> 452 bytes .../radiobutton-indicator-hovered.png | Bin 0 -> 444 bytes .../radiobutton-indicator-hovered@2x.png | Bin 0 -> 842 bytes .../radiobutton-indicator-pressed.png | Bin 0 -> 249 bytes .../radiobutton-indicator-pressed@2x.png | Bin 0 -> 420 bytes imagine-assets/radiobutton-indicator.png | Bin 0 -> 231 bytes imagine-assets/radiobutton-indicator@2x.png | Bin 0 -> 384 bytes imagine-assets/scrollindicator-handle.png | Bin 0 -> 99 bytes imagine-assets/scrollindicator-handle@2x.png | Bin 0 -> 100 bytes .../slider-background-horizontal.9.png | Bin 0 -> 177 bytes .../slider-background-horizontal@2x.9.png | Bin 0 -> 274 bytes imagine-assets/slider-handle-hovered.png | Bin 0 -> 217 bytes imagine-assets/slider-handle-hovered@2x.png | Bin 0 -> 385 bytes imagine-assets/slider-handle-pressed.png | Bin 0 -> 155 bytes imagine-assets/slider-handle-pressed@2x.png | Bin 0 -> 258 bytes imagine-assets/slider-handle.png | Bin 0 -> 166 bytes imagine-assets/slider-handle@2x.png | Bin 0 -> 312 bytes .../slider-progress-horizontal-pressed.9.png | Bin 0 -> 168 bytes ...lider-progress-horizontal-pressed@2x.9.png | Bin 0 -> 262 bytes .../slider-progress-horizontal.9.png | Bin 0 -> 175 bytes .../slider-progress-horizontal@2x.9.png | Bin 0 -> 269 bytes .../switchdelegate-background.9.png | Bin 0 -> 112 bytes .../switchdelegate-background@2x.9.png | Bin 0 -> 118 bytes .../switchdelegate-handle-checked-hovered.png | Bin 0 -> 253 bytes ...itchdelegate-handle-checked-hovered@2x.png | Bin 0 -> 441 bytes .../switchdelegate-handle-checked.png | Bin 0 -> 145 bytes .../switchdelegate-handle-checked@2x.png | Bin 0 -> 195 bytes .../switchdelegate-handle-hovered.png | Bin 0 -> 253 bytes .../switchdelegate-handle-hovered@2x.png | Bin 0 -> 452 bytes .../switchdelegate-handle-pressed.png | Bin 0 -> 145 bytes .../switchdelegate-handle-pressed@2x.png | Bin 0 -> 195 bytes imagine-assets/switchdelegate-handle.png | Bin 0 -> 217 bytes imagine-assets/switchdelegate-handle@2x.png | Bin 0 -> 354 bytes .../switchdelegate-indicator-pressed.png | Bin 0 -> 129 bytes .../switchdelegate-indicator-pressed@2x.png | Bin 0 -> 180 bytes imagine-assets/switchdelegate-indicator.png | Bin 0 -> 129 bytes .../switchdelegate-indicator@2x.png | Bin 0 -> 180 bytes .../toolseparator-separator-vertical.9.png | Bin 0 -> 145 bytes .../toolseparator-separator-vertical@2x.9.png | Bin 0 -> 213 bytes qml/BobbycarMainWindow.qml | 124 +++++ qml/CenterPane.qml | 71 +++ qml/CustomGlow.qml | 57 ++ qml/FeatureButton.qml | 70 +++ qml/GlowingLabel.qml | 90 +++ qml/LeftButtonBar.qml | 70 +++ qml/RightButtonBar.qml | 80 +++ qml/inputdemo/AutoScroller.qml | 104 ++++ qml/inputdemo/Basic.qml | 118 ++++ qml/inputdemo/FloatingButton_Active.svg | 41 ++ qml/inputdemo/FloatingButton_Available.svg | 41 ++ qml/inputdemo/FloatingButton_Unavailable.svg | 39 ++ qml/inputdemo/HandwritingModeButton.qml | 165 ++++++ qml/inputdemo/InputDemo.qml | 144 +++++ qml/inputdemo/TextArea.qml | 53 ++ qml/inputdemo/TextField.qml | 53 ++ qml/leftPanes/CommandPane.qml | 10 + qml/leftPanes/MessagePane.qml | 27 + qml/leftPanes/MusicPane.qml | 198 +++++++ qml/leftPanes/NavigationPane.qml | 27 + qml/leftPanes/SettingsPane.qml | 10 + qml/main-dev.qml | 5 + qml/main-raspberry.qml | 9 + qml/qml.qrc | 32 ++ qml/rightPanes/AirCondPane.qml | 159 ++++++ qml/rightPanes/SeatsPane.qml | 10 + qml/rightPanes/StatisticsPane.qml | 10 + qml/rightPanes/StatusPane.qml | 10 + qml/rightPanes/WindowsPane.qml | 10 + qtquickcontrols2.conf | 10 + 136 files changed, 2637 insertions(+) create mode 100644 .gitignore create mode 100644 bobbycar.cpp create mode 100644 bobbycar.pro create mode 100644 icons/bobbycar/44x44/air-con.png create mode 100644 icons/bobbycar/44x44/command.png create mode 100644 icons/bobbycar/44x44/message.png create mode 100644 icons/bobbycar/44x44/music.png create mode 100644 icons/bobbycar/44x44/seats.png create mode 100644 icons/bobbycar/44x44/settings.png create mode 100644 icons/bobbycar/44x44/statistics.png create mode 100644 icons/bobbycar/44x44/windows.png create mode 100644 icons/bobbycar/44x44@2/air-con.png create mode 100644 icons/bobbycar/44x44@2/command.png create mode 100644 icons/bobbycar/44x44@2/message.png create mode 100644 icons/bobbycar/44x44@2/music.png create mode 100644 icons/bobbycar/44x44@2/navigation.png create mode 100644 icons/bobbycar/44x44@2/seats.png create mode 100644 icons/bobbycar/44x44@2/settings.png create mode 100644 icons/bobbycar/44x44@2/statistics.png create mode 100644 icons/bobbycar/44x44@2/windows.png create mode 100644 icons/bobbycar/icons.svg create mode 100644 icons/bobbycar/index.theme create mode 100644 icons/car.png create mode 100644 icons/car@2x.png create mode 100644 icons/icons.qrc create mode 100644 icons/warning.png create mode 100644 icons/warning@2x.png create mode 100644 icons/weather.png create mode 100644 icons/weather@2x.png create mode 100644 imagine-assets/applicationwindow-background.png create mode 100644 imagine-assets/applicationwindow-background@2x.png create mode 100644 imagine-assets/button-background-checked-hovered.9.png create mode 100644 imagine-assets/button-background-checked-hovered@2x.9.png create mode 100644 imagine-assets/button-background-checked.9.png create mode 100644 imagine-assets/button-background-checked@2x.9.png create mode 100644 imagine-assets/button-background-hovered.9.png create mode 100644 imagine-assets/button-background-hovered@2x.9.png create mode 100644 imagine-assets/button-background-pressed.9.png create mode 100644 imagine-assets/button-background-pressed@2x.9.png create mode 100644 imagine-assets/button-background.9.png create mode 100644 imagine-assets/button-background@2x.9.png create mode 100644 imagine-assets/dial-background-hovered.png create mode 100644 imagine-assets/dial-background-hovered@2x.png create mode 100644 imagine-assets/dial-background-pressed.png create mode 100644 imagine-assets/dial-background-pressed@2x.png create mode 100644 imagine-assets/dial-background.png create mode 100644 imagine-assets/dial-background@2x.png create mode 100644 imagine-assets/dial-handle-pressed.png create mode 100644 imagine-assets/dial-handle-pressed@2x.png create mode 100644 imagine-assets/dial-handle.png create mode 100644 imagine-assets/dial-handle@2x.png create mode 100644 imagine-assets/frame-background.9.png create mode 100644 imagine-assets/frame-background@2x.9.png create mode 100644 imagine-assets/imagine-assets.qrc create mode 100644 imagine-assets/itemdelegate-background-checked.9.png create mode 100644 imagine-assets/itemdelegate-background-checked@2x.9.png create mode 100644 imagine-assets/itemdelegate-background-hovered.9.png create mode 100644 imagine-assets/itemdelegate-background-hovered@2x.9.png create mode 100644 imagine-assets/itemdelegate-background-pressed.9.png create mode 100644 imagine-assets/itemdelegate-background-pressed@2x.9.png create mode 100644 imagine-assets/itemdelegate-background.9.png create mode 100644 imagine-assets/itemdelegate-background@2x.9.png create mode 100644 imagine-assets/radiobutton-indicator-checked-hovered.png create mode 100644 imagine-assets/radiobutton-indicator-checked-hovered@2x.png create mode 100644 imagine-assets/radiobutton-indicator-checked-pressed.png create mode 100644 imagine-assets/radiobutton-indicator-checked-pressed@2x.png create mode 100644 imagine-assets/radiobutton-indicator-checked.png create mode 100644 imagine-assets/radiobutton-indicator-checked@2x.png create mode 100644 imagine-assets/radiobutton-indicator-hovered.png create mode 100644 imagine-assets/radiobutton-indicator-hovered@2x.png create mode 100644 imagine-assets/radiobutton-indicator-pressed.png create mode 100644 imagine-assets/radiobutton-indicator-pressed@2x.png create mode 100644 imagine-assets/radiobutton-indicator.png create mode 100644 imagine-assets/radiobutton-indicator@2x.png create mode 100644 imagine-assets/scrollindicator-handle.png create mode 100644 imagine-assets/scrollindicator-handle@2x.png create mode 100644 imagine-assets/slider-background-horizontal.9.png create mode 100644 imagine-assets/slider-background-horizontal@2x.9.png create mode 100644 imagine-assets/slider-handle-hovered.png create mode 100644 imagine-assets/slider-handle-hovered@2x.png create mode 100644 imagine-assets/slider-handle-pressed.png create mode 100644 imagine-assets/slider-handle-pressed@2x.png create mode 100644 imagine-assets/slider-handle.png create mode 100644 imagine-assets/slider-handle@2x.png create mode 100644 imagine-assets/slider-progress-horizontal-pressed.9.png create mode 100644 imagine-assets/slider-progress-horizontal-pressed@2x.9.png create mode 100644 imagine-assets/slider-progress-horizontal.9.png create mode 100644 imagine-assets/slider-progress-horizontal@2x.9.png create mode 100644 imagine-assets/switchdelegate-background.9.png create mode 100644 imagine-assets/switchdelegate-background@2x.9.png create mode 100644 imagine-assets/switchdelegate-handle-checked-hovered.png create mode 100644 imagine-assets/switchdelegate-handle-checked-hovered@2x.png create mode 100644 imagine-assets/switchdelegate-handle-checked.png create mode 100644 imagine-assets/switchdelegate-handle-checked@2x.png create mode 100644 imagine-assets/switchdelegate-handle-hovered.png create mode 100644 imagine-assets/switchdelegate-handle-hovered@2x.png create mode 100644 imagine-assets/switchdelegate-handle-pressed.png create mode 100644 imagine-assets/switchdelegate-handle-pressed@2x.png create mode 100644 imagine-assets/switchdelegate-handle.png create mode 100644 imagine-assets/switchdelegate-handle@2x.png create mode 100644 imagine-assets/switchdelegate-indicator-pressed.png create mode 100644 imagine-assets/switchdelegate-indicator-pressed@2x.png create mode 100644 imagine-assets/switchdelegate-indicator.png create mode 100644 imagine-assets/switchdelegate-indicator@2x.png create mode 100644 imagine-assets/toolseparator-separator-vertical.9.png create mode 100644 imagine-assets/toolseparator-separator-vertical@2x.9.png create mode 100644 qml/BobbycarMainWindow.qml create mode 100644 qml/CenterPane.qml create mode 100644 qml/CustomGlow.qml create mode 100644 qml/FeatureButton.qml create mode 100644 qml/GlowingLabel.qml create mode 100644 qml/LeftButtonBar.qml create mode 100644 qml/RightButtonBar.qml create mode 100644 qml/inputdemo/AutoScroller.qml create mode 100644 qml/inputdemo/Basic.qml create mode 100644 qml/inputdemo/FloatingButton_Active.svg create mode 100644 qml/inputdemo/FloatingButton_Available.svg create mode 100644 qml/inputdemo/FloatingButton_Unavailable.svg create mode 100644 qml/inputdemo/HandwritingModeButton.qml create mode 100644 qml/inputdemo/InputDemo.qml create mode 100644 qml/inputdemo/TextArea.qml create mode 100644 qml/inputdemo/TextField.qml create mode 100644 qml/leftPanes/CommandPane.qml create mode 100644 qml/leftPanes/MessagePane.qml create mode 100644 qml/leftPanes/MusicPane.qml create mode 100644 qml/leftPanes/NavigationPane.qml create mode 100644 qml/leftPanes/SettingsPane.qml create mode 100644 qml/main-dev.qml create mode 100644 qml/main-raspberry.qml create mode 100644 qml/qml.qrc create mode 100644 qml/rightPanes/AirCondPane.qml create mode 100644 qml/rightPanes/SeatsPane.qml create mode 100644 qml/rightPanes/StatisticsPane.qml create mode 100644 qml/rightPanes/StatusPane.qml create mode 100644 qml/rightPanes/WindowsPane.qml create mode 100644 qtquickcontrols2.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fab7372 --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/bobbycar.cpp b/bobbycar.cpp new file mode 100644 index 0000000..f3f8004 --- /dev/null +++ b/bobbycar.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); + + QGuiApplication::setApplicationName("Bobbycar HUD"); + QGuiApplication::setOrganizationName("Bobbycar Graz"); + QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + + QGuiApplication app(argc, argv); + + QtWebEngine::initialize(); + + QIcon::setThemeName("bobbycar"); + + QCommandLineParser parser; + parser.addHelpOption(); + parser.addVersionOption(); + + QCommandLineOption fullscreenOption { + QStringList{"f", "fullscreen"}, + QCoreApplication::translate("main", "Show in fullscreen (only raspberry)") + }; + parser.addOption(fullscreenOption); + + if (!parser.parse(app.arguments())) + { + qCritical("could not parse arguments!"); + return -1; + } + + QQmlApplicationEngine engine; + engine.load(QUrl(parser.isSet(fullscreenOption) ? "qrc:/qml/main-raspberry.qml" : "qrc:/qml/main-dev.qml")); + if (engine.rootObjects().isEmpty()) + return -1; + + return app.exec(); +} diff --git a/bobbycar.pro b/bobbycar.pro new file mode 100644 index 0000000..3f78022 --- /dev/null +++ b/bobbycar.pro @@ -0,0 +1,21 @@ +TEMPLATE = app + +TARGET = bobbycar + +QT += qml quick quickcontrols2 webengine + +CONFIG += link_pkgconfig + +static { + QT += svg + QTPLUGIN += qtvirtualkeyboardplugin +} + +SOURCES += \ + bobbycar.cpp + +RESOURCES += \ + icons/icons.qrc \ + imagine-assets/imagine-assets.qrc \ + qml/qml.qrc \ + qtquickcontrols2.conf diff --git a/icons/bobbycar/44x44/air-con.png b/icons/bobbycar/44x44/air-con.png new file mode 100644 index 0000000000000000000000000000000000000000..70175f6f05d41345794f1816a1b89698bdd429b4 GIT binary patch literal 1394 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taNh4go$Pt_%ze4FCT({Qn>N ze^tZ({b~Qtg#N#p`~P;r|NVvkkEQ)TQ}X{}*8i(X|BvMUKauwTOu_&2$^VaK|38`b z|4i=xa~c0H=KnvD_5W1b|1&ut?uA^CdJs1o#66$$|6=C<(^>z|rvE>m{r^JF|1;VD zFJ$~bo%#PPSo`Vh|7SA)pUwGyF6;mKjQ>z>*8lT4AYCA-?EmK=?2P|sv;UvV1gSie z^Z#tt|FfAO?imOp`~UgO{~&e-NWr;GkVPOhU@ai=Y?wG$J;#1Q`O>3u0vdKL^u(HVb4jl*|UZ3T(nzuxU^dYy!wVSzuqlxnSqP#i0zC zfe16f_MXcEIS-@;>}C)HE`r1WISQPHt+@d=4ZDd`zm z**OKpB^8xb)it$s^$pD}Z5^FmJrgEQo-%FvjG43M&0n}^@sg#>makZ~X5IRYo3?D- zzH`@}z5DhbIC$vDvEwIBoj!B+-1&=_uUx%;eU{dsSaSV}=e0uO_{OLl50}sEO$$D$ez7nK4rKokO&%3sn zPU}P_{yrhPXu_nT5UGnrE?QGE-FsxF*84`6)$Duwb=Cc9xn)w7HFJ7SUc4vsX8XUq zJEpyyXV?7xkZDI8_j z6gC`RHRq3dzOllMdRfPCuPS!A+w#gD8&`h(u5&t|-Tg(mY15^+WC^?S&#SvXRIPJe zQf-oBeBXZg;k6qU>+`G+(+w&*`$_lseLJ4SkVTn%cJav^E;H}Nwsp(Q-{S9~BERqV zqVj?lwLhztX!$8~tlu{E`C6YoC5FYRYX3yeih3~x<*$3`?Y!Z-io4Rw1G$&2Ps^tV zCt57pCbL8^r)14!8a)dwpNb zcF|S;54WymtvIZn68zki<+J_c(4F}wv;VYyPf>bt>cHVS3pXlSREr#(C|z;G^i(2C zc$c8dw`@salSK&zT=oaQskr=_7r8?<>cQEhKT}K;N?)a_=&^1s_$pu*RW0*)N^K0A z#_sC}XYsMh?P}c0vS7RYjo5^JY$v4jPZn}(m8J*4oL7q=Kr&~|IcOp zKcD^oOy>WyS^v*x{6CGvKAZXfT=xIdSzs*?b|y&U*{uH%sq+~i?dP)ppUnm{GQo^Y zu==e3=fGOdAZdrNL1ZRK{TaAvFzq0>K@7#$au3)9 zxOzAPB$WmA9mpJ*`g2)e(;()69RpDbCBdda*$|ar668Fv-$BlR8HM67uri27s1*aPaWa zV<%6YK6CccnAuU@}-`}W=YkDoq&f17u-jDdkE(bL5- z#Nu>v!UFjRSIR#1c6=zk@=Rq((22!)fx%fz*5{{WeO@G0?r7tcD)el*WZ}VzJ8CaK zKVDj(k;*$qR;fixMaJy*bk^BXFOLaj`UKv*RHf6l+V5l9kuT_kh5{Y zn-pm^i|c7@v$9@la%^?GtmO0dRQ6ASRqEc0eyqJHeJ*Skmzl;ImWNvVt5V|G#FSG$ z%{eF%yqPhkW91of&6;$@LyhTt(k&0Cv;-)aOFx{@BG9rUP4|ptu1A>rv4f8*}1+MKMr9vukaIeN`fDR`k_{!DFK!C=Ep z##gK*q<9q1)UY3x@=3Q)I?5TmzO8OM!;L<_Z6*FHM!&&UejGU1j=vdY#y7d#SIm^zA`&D_kU7But1%&-%U ziE*5%JC-ke60rJ}>SnPsUDKR7cj|~&2#LC#ov0&ha^chF7dDI%#&$fu>)Zu>6|~sS zO_`9At%x}LZjD}BBljxsP}^$j^DGIfpq)Wag7D^`dePh;zT|As>_ zL~-JZn|5a`PSu^f@l!IbVE)I5lylt^4+O8~*cGaq<=Ow`bN`u)$dH#x2OJm*GAw_z iwg0}AU1V^9pMin%RO8yecUZJQ1)`^`pUXO@geCx5Bi`)* literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44/message.png b/icons/bobbycar/44x44/message.png new file mode 100644 index 0000000000000000000000000000000000000000..7773ca63baf6df3f12dd37b0eab1b01e3ba71fbc GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taM$lLLH0Tp1V`vj1Pm{C_&< z|C!AHXEXkv&ia2o`~UeY5aV3t|1;VD&t?4wF)~5qxh#;fGui*oWc@!4ktPQQkex-58;A!oq>s*+57MAYX$}e!;&DsUYBR7=GGYtmM&es`tguIkO2={0(-{I)c#HG3#a`3=kFfIocX3`{jd0%pDMQ}$}||Y zo=Dh#_T;+!hfjAupPXr9CdT)Cy4BUGuH6@oHM(btl{V|JITds39oxD=;@Flg8f9BI zS)9wt<;;0~CFn=Ew0F{nby1sxvod2m^MW>i-usLH^SvS=vC>(Ey7H$jcRmw4kRkJW z?jM!B?pawPv;Y2`wkj(5$L}yTFJ+01QM)C!dRfod5S0G0Ws}qSoIO>3FPmleT@#a& j|Gcm1FvlqoCHatk$tUalnpznc7#KWV{an^LB{Ts5s5t+0 literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44/music.png b/icons/bobbycar/44x44/music.png new file mode 100644 index 0000000000000000000000000000000000000000..dc73322bfed1583f87cf053a9134df7fd17dd788 GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4mJh`2Dz3fMg|5ZQ%@Jikcif|(|xmr14Y{A z8?$_54rx*93MmPX6_MP^y8Z5s!i5*+3uI(CI*PyJYI+gn@OMjd6hqJleA9kdDw|pePvGPt*ZtF4l@u8#YWwnWWl;Z0k^shJ6{ z_dih)JEwhXPP5?#;R9+1811949@X({GM)If-c(&^UO?uBg}0mjg$DCSh2KuNEcqdi z^L_B5Umm6F8`r33ePX`BIcSifxZbs?8#60zfXO_(TytiI9Kk=aY1Bd37zYX85@ju3E zZNq=(_g bPU@eL*?pYr?NL?+1_lOCS3j3^P60%AY}v%rqY0-1RhVj9>n z5CtF-Y#oS^1+ojyI0NRM1N#~z2zDVv5X1$`LK#?1$ozk{gsWj90|P^ENswPK10xeN z3p)ol4=*3TfS{1DsDz}ntemo%x`vjnzJZacnT4%`i<`TLr=NddP-sL{bZmTLQc7Az zW_C_aUVdRwaY<=ec|}!qZGB@?b4zP`M^|@m--Jn1r_G!-XYRcD3zn~3y>`Rqt=o6( z+P!z*p<^dcojG^$(&Z~RZr;B0;NjyZPoF)1`RdKvcke%b{`&im=z+t$3=E7Vo-U3d z7N?UFBs>nB^xG12deymg4oX*liJUNua1mG@wq$01W5&^EfjmdF`8KLM7Ovps>^dvt z5pX7Mwd zh}>O}P<^MX_whxRH-`$e`?k0WPtZTSGHih>hi}Wu5ZU&qXFTydhEuI1-xSW9e5glr t)$I#ytXsmZ4HAu;r;1A_q%7cOV0aMj!Mc3)z2~4j?CI*~vd$@?2>=R@G4}uf literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44/settings.png b/icons/bobbycar/44x44/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b65598b58c6154d33f9f047406a38f18a8217d70 GIT binary patch literal 1406 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taNhssTPBt_%ze4FCT({Qn>N ze^tZ({b~Qtg#N#p`~P;r|NVvkkCpttnDzf^(*Gm5|4*d-KU47keCGd4$^Vb#{y&%T z|6>0C6IuUHrTssX^Z#5fNF|7!4U#&a^Z#Pz|I@ku&t&~SoBscN_WuhxQ1-cu|EDwm zp9Pz6I{W{b%>QSzK~m>){-4f*a?fS{KL_DvfMh}3Y_M$3|Fc>D&u0EVmjx0(p9#`< zHUq>xmkkm*m-YV~*gyyaWP3JL7R1g3>jhf}xA#moSTGA@6hzHAF#9aTa0m(3ayAoe zJA|DDVxP&Hyh)ZBx zs2kv12m_`D;tXVqK%oaw19m5}6bd^V4MW z1OFQjC8wmOWn^Y$=j9g^6_=EiS5(*4H@9?jc6ImmO_(@o%G7ByXV00t zVBzAW%U7&iy=LvY^&2;D+rE3x-hKNI96EgD*zpsm&YV4W;o_ysSFT>We&gn?+js8X zyZ`X%v*#~fzIyZa-TMz8KYjl8{m0K=zk{mF0~i>X0zF+ELo7}wCoE7GU|@Dzbj2$_ znwKTov?J(EG?!Abaz{|iLslhOsgGKdE;0rCXsbAg{I@C-I4ZHYKlJUPsg+I+QQ2xO z_mi1aDzblvCj{#5Hke?a?Aoy>-d)T^Vc~>U$J8{l)vU|17DOqmytQS`5nll*jkCdv zr&TjaN~}`Ma?EoP+LGV=gDJN3LXKI@!{C-fscX(1SbMEfPk$A|e;f6fEYWG%i?~;7g`@@ ze-^Tw^McCJOK8&GfZo??}_mN@(inSU>wx+~oI7GTQV0 z23Ve(^iz=SS7Nc&j)g{+CnYYPy}`YCs-yY##m46aj!lkI?U`wDY1M}1yKb=g7;ZlL z=!WR$Gap>UC&i@oX@6Y3*2VkJn%KY{o2R~(u@l*MH>&PVm*nrD09K>h2Qr(k@^}i* zH?`O&Y5ePgPmumZI;Wy-6b z__MQGe%3NvBvPHncFjI}xls7#jZN8RdAqJHW2lep;{AWhrV3P$db;|#taD0e0sxn) B1N;C0 literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44/statistics.png b/icons/bobbycar/44x44/statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..979702989b89498eb91c3878bfca96fe59c26c2c GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taM$2?0JKt_%ze4gdc){NEq? z|7ybj{e}OJmHfY$_5W(p|09|IFXjI~k@Npz#{bh<|Ig?AKb!UcZ07$nng7pZ|38-r z;-1R_anEJ_Kb!p@M1lp+LddNDXR`jE{h0L3oPmKsp(MyJn1P9fjf0b$hgVQsQODHX zBQz>DF}b9?x~8RT{^p%m-e+1kZew6zDE4%546*2ad&*O&$v}kRqT56cl`}>vjPL5b zzcrqX&j{tJzRjO>PMh)GXN`}aRS)d_{aDzKn{nN>55Dq@anG`Ij2Q2gG<^P>z9W;h zBF<@!Elb7Pca5?CdFSk5jmS4YdY2(Cu>XNq4{NrDY>(-w!xsdz+0D6?+^0z2D`a3` OVDNPHb6Mw<&;$U%?vu3u literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44/windows.png b/icons/bobbycar/44x44/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed8cec4bf8d676fc6d36a8f2ae25a8dce892ba8 GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taM$w*!1aTp1V`LjSL7_`g5& z|J9QJ7qk9fP5yr@U^~+3f#kGQo_T|EIx> zb2x1wtSLA?mY1hMWb< zo`r~Hfebtgw)Y&Iodt3U$ec{5EQpOH3sRp2HtN+R@huDt44x%He!&dPENt97LSoW# zib|>)ntDdY7S^`*4o=QKA)#Rj$tjsdP!BiDBu)uABGB;poI{t`j%R8hSogxAx`Ap0KF;dU2y6i`6}mmlh@I zB{6fEWcg}WD m_{G+GcJ7V?v0Ba7`}Z;?uaFm1y(1CH016;iKbLh*2~7YT054?# literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44@2/air-con.png b/icons/bobbycar/44x44@2/air-con.png new file mode 100644 index 0000000000000000000000000000000000000000..8822979e6a5a9104862ec6314209c2fe587b0ef8 GIT binary patch literal 2337 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 WoGS2~(?l3lIC#4HxvXN ze^tZ({b~Qtg#N#p`~P;r|NVvkkEQ)TQ}X{}*8i(X|BvMUKauwTOu_&2ng1^(|38-f z|76<#Gr9lIW&FRG|NlhR|5IuI&*c0+mkUx4VrTq6pY#7>=Ks^V|IcLoKbsEHcsd8l zK9~LfLdJg(H}n75-2dmY{-4kIe>(gBnauxZv;LolGjjf)&ia2Q8>HY&#{aXKU`E#e zv)TVoXMz-;%LK`u&H8^f10)6Ff@PtMERf*YOptnr$!B3EgBW0w&t@T+1FX_H)@_mxG-LG7w@iSS84J*-*DZbiwU92T>0;3Zx8XBgBNWNQRsPI~(Fbkaxf) zLm6Q0P<9sB88F#1*Q5m7O52}vm#SvdtoC1n*=bq!4|Z5>@beFH-y zV^ebrD{C7&M<*9I4=-=OfWV;OkkIgmsOY$a#FVu3%nDn|9ByUpKeXvTS>5dfB|6D=YtR_$+h(`tPqd)6?dqa|8wi1QfKX>H6{Ix&-de zv@Bh1we=j&o~3Jf_g~=l;ak+O>ZV%P1YOdE;5_)l96Ysrj}6W{COgW{TS!^ za9p?SS=C7p-2>`j`33#_a!lCr>NP-@dl-*Y}!;t&?~9gzT0tV|tOU zJm%+9WLew%xjfp-?w=pclaBJ_Kep-wcPSyn&Zj+tWm zpg|(LVV|VKZd86qYkChXO-&oA!+^To+T5;l6yQWpACn)^s+e>bfizwrzIh-;i?N)!rpLW#tZKAFTJAvXAAb(*5+t zUwSHna#MKc{Z{<1>?wU>uY764m@4` KT-G@yGywpQagl8R literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44@2/seats.png b/icons/bobbycar/44x44@2/seats.png new file mode 100644 index 0000000000000000000000000000000000000000..7d67f1be3f159540c12f0ebccdd4d59caa9b8390 GIT binary patch literal 1793 zcmeAS@N?(olHy`uVBq!ia0y~yV2A)=4rT@h1~=~mYzz!cSphyFt_%ze4FCT({Qn>N ze^tZ({b~Qtg#N#p`~P;~|6^(Y&y@VXnDzf^(*Gm5|4$_RKVR_weCGd4$^VaK|38`b z|4hdJi~0XgWc@#t_Ww-I|8p7tFXV#MgSgos?)jYm7c>8#&i#KT>;Kv8{}(djn82?4+|`6F>^!+$^xCASQs> zaQC0h0=f1q#MfXckan;aKn#co*n9*R>;ME8LoeJkkWV2dAXyEy5h4yV8RQ;_2sZK@ zniUW=UG63V3=9lsOM?7@85o(ESyVCA>Lc=0s;}Q~+Q_|8iv$AvZ z3rkANE32w&Y8x7xnwnc$+uA$2d;9t)O`bAs`iz;gX3v>BZ~lUXixw|lvUJ(<6)V@R z->_-R)@?g>?%K0=-+_aNj~qRA{KUyqr_Y={cj4lt%U7@8xOMx^oxAt$KX~-`$+PD# zUcG+v_T9VpA3lEi{Po-SA3uKn`u*qcznoPLTNxObD?MEtLnI{M9()@gTq?u%;CIfW zj&_DhkIR~2690_EuJ~-eFv-Zs+sJ6qnvPRFI@+gnj4uS7HZq<&ORP$%-DL*z6uAk! z;YV)%wSRg;qFsFM=C_|~L*vBP{k(r#Uw1d(qiK8YdtZ7H$q{J0T{30E_cs!vDwg)i zJ5o0?Us$P-DXf35Ph&1uQ=UYx&S93hTuo9t#SN`QS!ADk9eEKl;W1bLb0xRsO>wOh>PD#}YWe^jD%;^dAb5kP1W5uDe0`!9?75I+>%vxa7~A!x=K#6@tLfjqAp)9GH>p` z!NA$o%r_(BuTFc5?;Xa?OW!ybZDGA|@I>uKq0PhRp?~+)u3fu!eg4f)=jQ3}{~DhZ^WZ}C zYwei+j|ykv9zWk;{9U7R-_l(Sms9n2mDgT=cUjS`H}+YuL8MGq$N{%|{d+!a5dQBr zJO1v4x@!vF6CdnZKK=cnbJaF;*{yGuuXR3jOL5a_R_V=$>-Al_%+uA+Wt~$(69AEH;f4SJ literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44@2/settings.png b/icons/bobbycar/44x44@2/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce2a1f1b4d5b3ff1a2e151e33ab69cb14a05aad GIT binary patch literal 2413 zcmeAS@N?(olHy`uVBq!ia0y~yV2A)=4rT@h1~=~mYzz!c2LpUUTp1V`82fVkNp?)jYm7jyrg$@+gb{r~yw{}(d< zpU#1D&t?C=kn{gc=Kr&~|IcOpKcDgcbT*iqgUZbYb94Tm&H~G3|38=c{~Uyy@&9b* z|8v&Vm{Xbqqv77Rc`)Su}1oIM85PAPUYQbHOHq#9@M<_=2&|B6%OghKR$gfIAYR z9m<8Mfx8F7#jpjU1%-r!2}C`dWIFg+nt_4gRY{OvFaskKGYcylI|nBhHxDl#zkr~S zu!yLbxP+vXw2Z8ryn>>#imIBrhNhObuAaVup^>qPshPQjrIodft)0DtqmzrPyN9Qj zw~w!%e?VYRa7buaL}XNSY$dGXcJA7} zXYc+42M--Sa`f2o6DLodK6Cc`g^QOiU%7hy#?4!|@7%q2|G~pYkDok!_WZ@mSFhi^ zefR#u$4{TXeEs(Q$IoBC|NQ-T`HYJs0|RTJr;B4q#NoFyUq*+dN*t3I9iMV6m2-J-J4r$l8fk2i0xi?+Ceho`Q%5BrrHNrlXel2anz z?_b1kV4Obl>71FLPoDmL`M1tz>tfsYb$l0JN>8dOl)^Jbi?FNy%0hT(cjOV!3pEK;0Zhn)dwQA!Qkgr3;_P%rMf}DWx&r!$rmW%0tn#8k<{eX(h+xFmE(9IM3 zFa8eO@62)Ypz0z|(YvarkAIk~_Mb6kPw%dZ*@um19#vIp?cUSl_MoEW@HdxdMX}m1 zCdXJ_F7uz4a8NBjJ$;Sf?HG6S$Hxrx58l4`Vwu>cppX-LAD!DKHNRZEKksN-{*J}B zJ}&&-BQp7E=*O6+nKB=@98X)U>}Ilqp;vHT(I2mZYw;@O>#ojtVyV5Saqo=EYcKRt zI8S2qhsggLhBoy)^@tyi~S~iWEM^ggb*I(L%!+w+Qt(>I9itaiw~*eZ`tyHEieIOzUUs z99BA*usQGkD@ng9l?|*f|9D;&RTQvUdW(Z$h5o$>XFOw@)cn4;zS__i{bkC}?(2Cs z{}!i;=d<#9L~MG!MXq7u<|ijs7ihJ-{9xZy-(>N4*SV{&(wckXE132d&bjEj;|I%O zn^xRWKc=T5&kv)m=6Hyg}Xioc(v;cFVf%F}g0 z>W$jOOAFGQmdosK-XWqQ=3~F$+U4JKLSM+}&hl0a4|rmyd@><)vbfakR{lFj7e{Sq z-4itH>W@XUnWjISbI97@>0;GWr6tPm_CJsf-^Olxeplyvhwwe-G5hl`THlRr`lD`Q z9GBqwEPvLsJ!YCu-=Dns-~8s^#mw3ZH@{8i@?~$RZa4KW-0UXKyuwfPpeony7W?1l zSLnZPxFl=Ekih@;U^MTGi)IY$$vH8#o1Pc-W*iV?y*T6Wfv+Y?L8;dsm8KnPvfl7U z($Vo|mCXrW!858-A`f(Ht#J3jK%9G-aRbP z9(rcqO`B=zO{YUeFVdQ&MBb@0DVC^0{{R3 literal 0 HcmV?d00001 diff --git a/icons/bobbycar/44x44@2/statistics.png b/icons/bobbycar/44x44@2/statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..afc2cc0906763a9f8df743d003b046a5d032f004 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yV2A)=4rT@h1~=~mYzzzxIRQQ)t_%zeq5oGk{NJDZ z|8~Ov{U!e|=KepC`TtVx|8rUYPv!oMY(ipQaZN+-io-YWKKKz6W-H3Tz_7~G#W5t}@Y|cG`I-WFS{@1pgz$+o zJ`HkM^8SC{yBm`vq`##6tKI*12}5$+HLo1z^RtB1d@A&RJaUq*xYT5jc&MeG)h|C> zy5d6KYrPuV+y@@whvW}VO)>kh;;Y!4S3WnQfBdt!aiH7n-$8Zp+Xv?IwQvgGlhi9w z`cwYl;@sQ^QSOIYIEDY2-SK8v^S;YXDB*79(kBcPyg3RN ze^tZ({b~Qtg#N#p`~P;r|NVvkkEQ)TQ}X{}*8i(X|BvMUKauwTOy>VfY5&h;fCNv0 z85gqtpUU}vG4ucFod0Li|DVhLe<1_R&isEi>;L)8|7UYRf@iY+pU?h(F6aO0tp8`S z|DVhJe=h6)nH-RsvtahwOpxJcvi_e1%bv-EGC;Cmqt1dgp3V9X63P0128nw%8>AOR zW`PaN23Y}8304Nu2oVRH1F`~a3q%2egg67DG8^PPkQ7)8+ys!TAPSJka}YLM3xtbI zW`kXYERyyAtgX*aI|c@Z+L9o@U@b z17j0&D?0~AXBRhj4^Q8K(C~<;nAo(8?4109!lL4m(uUTKuHL>0lcr3aK7ZljCCgW@ zTfcGBwmk<99XWdJ#L2VgE?m5Fx{^IqUx9{G6{Pg+D_a8rh{r>a!-!X+5 zSquz}^F3W0Ln02pz3Lv!t1zg2m@JS&Pp_8YUcL+2r-V+&}E4iSj1w(?a!H~%yJpuoNo`8~F#-B#7l`3}!tQ}AJN zID^BHDN$x}3=J=CZYtk#Id;l`zDz&R(Pm0^0;`lp8)%pVG~y*bu9m+5`7heUzsy2~0LjNDoo(=+vNitJ!t?bNva zf?s3tJ*P6RJN>E)4_Id`JYc3f$*)m*qq4}2#s3@4+1@Xl#}utRtCz_zi66V}|o&F<8=+wgSba>Emi+XId_uAkuEsC%)%hE?xaXTSrsHN_9? zdOFMR!nPyJ22#aRr>v7WAeF6*2UngFZ6Bf0

+ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ! + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/bobbycar/index.theme b/icons/bobbycar/index.theme new file mode 100644 index 0000000..cd84146 --- /dev/null +++ b/icons/bobbycar/index.theme @@ -0,0 +1,14 @@ +[Icon Theme] +Name=Automotive +Comment=Icon theme for the Qt Quick Controls 2 Automotive Imagine Style Example + +Directories=44x44,44x44@2 + +[44x44] +Size=44 +Type=Fixed + +[44x44@2] +Size=44 +Scale=2 +Type=Fixed diff --git a/icons/car.png b/icons/car.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5dcbebe4b1c522127ee8b9dac0ae66af3cd15b GIT binary patch literal 34416 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 literal 0 HcmV?d00001 diff --git a/icons/icons.qrc b/icons/icons.qrc new file mode 100644 index 0000000..02c345e --- /dev/null +++ b/icons/icons.qrc @@ -0,0 +1,29 @@ + + + car.png + car@2x.png + warning.png + warning@2x.png + weather.png + weather@2x.png + bobbycar/icons.svg + bobbycar/index.theme + bobbycar/44x44/air-con.png + bobbycar/44x44/command.png + bobbycar/44x44/message.png + bobbycar/44x44/music.png + bobbycar/44x44/seats.png + bobbycar/44x44/settings.png + bobbycar/44x44/statistics.png + bobbycar/44x44/windows.png + bobbycar/44x44@2/air-con.png + bobbycar/44x44@2/command.png + bobbycar/44x44@2/message.png + bobbycar/44x44@2/music.png + bobbycar/44x44@2/navigation.png + bobbycar/44x44@2/seats.png + bobbycar/44x44@2/settings.png + bobbycar/44x44@2/statistics.png + bobbycar/44x44@2/windows.png + + diff --git a/icons/warning.png b/icons/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..590a61eb800db1fa51f663739d35086da44e3e9f GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taOMp8|YBTp1V`{zFmdRc-Ct zDk}FC6duc1o{=)XsHb;TTlQPl?tf(-%L2v&0qtPCu!e+^`{ z-c@D&tEwP2$T}z+WZE@Vy(?h7V3$CQ0;vT1R3EGh>Oz_r5Vo@ZMgz9L3=9lQOM?7@85o(E+1NQaxwv_F`2+-oMMTBK zB_yS!Wn|?P6cm+IRMphgHMF#K4GfKpO-#+qEUm0(lfI1i%Lq%$}4N@8XB8h+B>>>di(k(PMR`p=FD017A#!6bmgiw>o#rP zvUS_`9XogLJ#hHQu@fiHoIQW_#?4!|@7{m-=<(BM&tJTJ{qEiS4Z-uS$sKy>cTXL(VsRyunRHd^cDFHrBFl4HO7GpA(EQTbUoJ zQuHyIO-l0pZ4ZU|B5A9u!L3KWFPOa{t3Ta3vHzX$^<^(bTP$7u1j4@La~De7i*YLS zIMTW3@7l(nef<)FCLJ;^8=w3(d=~l2+R0_F2eY7it=pG%d{P}ZRD=Alyw-j(#V1@S zRC&|n6!hVltEm-TjIiI_x1mm4 zbLa0Fo6Bw5rxYFgZt(hNWl7iTS6ml%K2Tj^F{9hByF*yE_yX6Pe?4*C9m0DbMm_kT zP-Sg1@9c}c*(|GSmZX*_C(K!+z}siv&AIdM3=^9|!_ziJ)22k#KQUUKwdS%@(6rr) z`9xIDGu6J^)^g`>=ln+yyL44$rjF6*2UngDp{ B1G4}C literal 0 HcmV?d00001 diff --git a/icons/warning@2x.png b/icons/warning@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..487fbafcfd2a3147cc0774a6ae5d5e31cf943bdc GIT binary patch literal 2118 zcmeAS@N?(olHy`uVBq!ia0y~yV2A)=4rT@h1~=~mYzz!c*8+S(Tp1V`{zFmdeg}s$ z#>Q8*wQsAa+*eR|EMs{_%J`z5-VJs2+bZUFm5eXR>0Z^=zOJEhQ_c9IvfgDyovRAk z*EEf9s2ko?)4!;qcUf8Is*>?FMZ@a~2G=zVZm8>BQq#SxqH|T*=$ewjbtU~9>Ux(| zjjpN~URBY*uA~bxLDc}nR@S|&WOzl%;HskjRW<#qs(RN|3@CqXIFQ3PjBCZiIb*Goi=^Otl4ws&YQnr;gY4x zmakZ~YW3Q6>o;uNxM|boZQHl+*s*ih?mc_=?%RLh;Gx4ujvhUB{KUyqr%#_fcmBe~ zOP8-)y>{c~t=o6*-o5|e;iJb-o;`o@^7Wf{?>~I}^!dxzZ{L6X{Pp|K-+x}7H@g@Z zSoA$z977}|-yZxK9+Jwy_Tc-u2MP%jG*8?(l+>t_H0$ZCX-m^Gr`&Rq%v~1XIa?)D zD^P7M+cb@tj=s}oPEB=OnCrIEC30p|hD+KT-E8f8~k1^%bWM?-VCm6jmou8`n8v-++;`bI<#+mobd1=EtPLA%y6Rky7 zXjtEP;b0-QS(j64(ybj5i4s>1rCta*BK(o#u9aMGsR7~aM61AaU1 zc;`u~>NU2qvsBu~n&O4*V# z!a;f^DVJ@fc1<}SvE1Q!j^a~?^UK!+FL++H%iZz(Ri|0}wlnk6oZYV|?&FEQ++xDM z>r{mb+by}roh&bA=`4x7V7j8U^}>@s{goHWS58>hvae>_Ja*lwHWHk*;+!vyUKE>b z5|TPrWx>qm#*t~mb4Eek;pjJB`<96&ioJ~!bN`&WeTTq=G-%l^BL=l zba^aWr|>y1wGrcvSIv>*aAvNbc&>Hfj>kHU{Zq=G9b($~W(ULG+^3Bk5eNR+ZeKKA z^GQfVl8`0u@|)i_N{Ov}R3}|^CM{h{XVR^c*%u#kPdj`icJ&hJ#4OwFg09Plb!My* zpTxcF*ac&exX+aljVr4ZcP4mQp4#~#>aeasxW0<`nb6HFakF#;d~ie0btQu4#v|8Kn~zx;;Cf-8@euB28ju zU$E2;o@tQ>|GwDRQGfiPQlV~4hn(T@9eiS%>A@y`v%USzbPW5?xarTnStqJvu(?_K zV)PfeGTlvzKHK)>U2{F?{^oefSyhhHJEA@{Gk$m+@mB4-m`_i+0!!bIPS&p}-@Vwc zxaFqL*p})T{p*wMTb{t%@1DLixS(&CoWfxw^n0PdyzzhLsn0tYjD?PIGcYhPc)I$z JtaD0e0swX-oYVjS literal 0 HcmV?d00001 diff --git a/icons/weather.png b/icons/weather.png new file mode 100644 index 0000000000000000000000000000000000000000..b1479de27a28a8f8482760b7f73016be097a9aef GIT binary patch literal 1092 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4rT@h2F<8d#taOMrvrRKTp1V`{)54)Rjc;z z-+$)JnX6Z?Zrir)*s)`0&YZb;@#6md`;Qzsa^}pL{rmSHK79D($&+W!oH=yp(9xqu z4;?ym>eQ(tM~)mldi415<0ns^Jbd`@i4!M|A3qKeJaOX0;lqcI9zA;O*fEI6v17-M zA3u)9g=jx=6eSTKw!0+RvJ&zfhPW?*2LQ4-`A%)rRR%)-jX z&dJ5i!^CMhc?ub`-;s;RA`r*B|rVrph?@95<0;^yh);};MZ6cQQ{6&;h9 zl$?^9mYJ24n^#a+Tv}dJTi?*s+|t_C+t)vF($pCcq6FglULo7}wCrF4noUu}|JLf;WnPaKd(#yq6F)@d;)P4vBotu2;=?T_EEisdm zk3zL0=AY_*u=9)d!@$!qaz{JPY|j@zu=d8zS*)Q7W`et&IFr@S`{kCT`+oXdVl>S` zG{t1)%&18cqUT!jS}H?Al1^@sN>;gExZHf^#)oCHyDN*O%zF+;%{l6;;Ig?pVc$pH zWMz@iH=_3f;(aD6%52;;S#e=TxPwoZ<|ejaL%Aaw-+I`BE5(jzY&*jmJTvTw##)>~3 z_e>Y;PnulgG1EMd#pkx#!(!JZ(ldfqHx~qdc(yRj(%`8mkLHzME+1E<^0w@_7{VH~ g>ZbuuEdxW-)PVJ7-zUp6FfcH9y85}Sb4q9e04DftBme*a literal 0 HcmV?d00001 diff --git a/icons/weather@2x.png b/icons/weather@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4333ab1517bdccb750c115c0cf0465a15d1382 GIT binary patch literal 1798 zcmeAS@N?(olHy`uVBq!ia0y~yV2A)=4rT@h1~=~mYzz!c=>a|=t_%ze|G{9@s#W{< z?>}?q%+;$`w{6?DfB*ht$BvyjbLQg3i~INQKXT;Ai4!NzoH?_9|Ng^=4<9>r?BvOl zXU?2Cbm-90qeoAiIC1LKsUt^@96NRl&OUzp_~FBcPnTMnPmD zQpdmmE&>sRC!9#AIbkQ#*iBB^ ztopEi)=>f7ReS|c=Bi{&yzRU6Sl>&TvrjmMpNR5b-Yg|3v8{J=qFBmW&QDFO6W4NY zILTq@|Euy+PevH~4)LH%d;aLLUJMP;Z0c!#bMlDKs-MeQKSm3raHdUp^epkndx8Cq zJgPFK58|UkB5z-M__2aX$5m%~#cAP77lU>`H9T`7rm{70U&xV3>kER8rx`CY-1ke{ z^4g~Te||Pih&i%t(}TW4UCiRmOSUU<3ZBhW`W+MIv9tcSe9B^0!6y}x75coF-u+c@ zI4^YP=|j7FF~vU0O77y@O)I4;F7ut0dy{CpOyfxeU&#dNCBjUP z_184%**%?_vck*4fPL47UlBZ4CFR=u`aW>`81WWbmV6SaJ;@P$=3&Z^@>EseyRYWGZJlD+fzsa(gU>PT+c zD<8k#oRM^wrQBh2tW11&W=zO86-VL6ajp3e_1aGq^E)s{3;#4!s(5PF&Y$8G^lNuB z&z`o9Pq$7UOn#l)F+11!uENb}-5Qh3VpBcpub(e0zo*}Vp8oKcFQupnG0?m`7H2c zv+$%-k^GLj+nqPe4xLakXR1KOPL`%_ohBJ)eQ~F)4Yh15E*)>$tf)TQRv_o$a{-Z$ zLMl5eM4B$IX;{#;TXE&Yr2&$^E%}@L)-}j%jz8IyWqDWN%+m>+MPVCdn__L493@{X zzEqZLSIp?qh06nVu7XhEP<<- fIXVAV)-zuhU!8s7L*oht1_lOCS3j3^P62BR0 nuxb~_5RU7~2?+^5_!$^k7#Ws4SYyb*z`)??>gTe~DWM4f)M*n@ literal 0 HcmV?d00001 diff --git a/imagine-assets/applicationwindow-background@2x.png b/imagine-assets/applicationwindow-background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72bd2f1150f07f7773b942e858bb009931bfc544 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0y~yU|<4a4mJh`hN5k}Dhvz^oCO|{#S9E$svykh8Km-o xfq_B9)5S4_<9c#RLc)*p2M!!KaD;)Cflq^xIp5bHmw|zS!PC{xWt~$(698hu6|DdO literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-checked-hovered.9.png b/imagine-assets/button-background-checked-hovered.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec1a28d08ef2d982dce5fa8a31b0ce198db9722 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0y~yV9;Y=U{K;)qSB^3oA^j<~7U4wZk<{3K>p=A|C+!$-nwmevouvKF4>{yX!B7 Zk9dZi-K)5@fq{X6!PC{xWt~$(69DD-plJXA literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-checked-hovered@2x.9.png b/imagine-assets/button-background-checked-hovered@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..53e1041f00c957e28b78bab154f7058f31404d06 GIT binary patch literal 669 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U~uAKV_;you6ytc0|NtRfk$L91A~|<2s3&H zseE8yVDk5LaSW-L^Y+fhF5y6tV;}#|ovFp8&2ej)@SHTcgQwII#1c1NF*p3Jv9CeJ zRmyS0rW?mHl~PtSTDuk=U~x1*u4Jqz+`?jB{ODcXeyzzqg+GfdzWZ^g&yc*`BCzd# zN%PFe8)g0x{JZ?`v9cX7EVy#*(7K&M5=_m4k%9Yna_#b;$M`?rI@On>`SOnJ+HroY$cSk<%l|E!)Wt>n~pv+bT$aD%9;F? z-}=a_lhr~UUGXt%)=4|MuX?t(lf(F0GoRuO;ol4nH7i2zGW2$Z)#vp$l`WEco3eP( zQeH)t;MWC<7R=SiQ0KbUY38iHDns4M-8#_KIOt(Sy*^$$w@~N^OgjHOe{DpLhDd-HYn!j<=_OW#1b#Evr;;$pr=m1_n=8KbLh* G2~7ay=_67A literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-checked.9.png b/imagine-assets/button-background-checked.9.png new file mode 100644 index 0000000000000000000000000000000000000000..16ed8185cfdd6e0120d653fefa3a91132f8206c5 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yV9;Y=U{K;z_GG(mlfHXrKkF`^>0K+E*5&eUM>n zuIt#^(c9vnu;t|Mkk46lm6>PNSDi9ZGLrvixJt`-@v2J(YZ~NMcv#D=uHV?!qFp;}ry4Qmb6zmWNqYHGlH1i|b5}Ie?SwC~M^z7H9~1jB r;m5Js4Sj!q?EYDH|Hn!D-OQU;82m_?qHe&zz`)??>gTe~DWM4fXQ+1V literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-checked@2x.9.png b/imagine-assets/button-background-checked@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ca5d4db6bc4fab7bcf62d4fe00b28c887f0f8a36 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U~uAKV_;you6ytc0|NtRfk$L91A~|<2s3&H zseE8yU|i$r;uumf=j|Qqyh9EWt`Ci;csfpV@PDkjWO;+^!LUoq4zbowd(d{zyQ6!_ zToGgDBV8<<&(wqI-Qk-|hIdaVlRu=Isx0Nec z4l?(&apa*U zv%uBm?2g9&!aGXu99a7}4MMC+I>vj)>fhcKt5UM>xN;v=nw%Mu${`~xZp$zupq#ma zRj2m6KPS`nM!5|Pt9btwGsqX;mt7}h9#?tocio@6HB}$~=M?_eGJiGS(9r$v%K`=l O1_n=8KbLh*2~7Zdc6*Zm literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-hovered@2x.9.png b/imagine-assets/button-background-hovered@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..28a0d1f1bcc222b91c852167feb076dc090dc6a0 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U~uAKV_;you6ytc0|NtRfk$L91A~|<2s3&H zseE8yVEpds;uumf=k1-nzJ~)OS|5I26cTWNqeE(fxxym17D0(dK_jLlW;2BjDMty0 z&)1Ea@-p;W-}4@G;+pW|L%H0^qMW=$S=rh}znpp|W;$_P=Kq^)c+B9fPX?Rqf*97e z19BVgTy6hbC|bb8<1W(w^Qp=U##F|b2My1cGW}BS5(>Jo@}z3%3DE+Mm>~9i`RnZ4 z8kplY>$r*Z?=4BV@#C;r!Q^}T9`>KVOD}&dVzK;O3CEk~3g0jN<=Da6w0`Eg+f$yZ z+`jX|X8Q4$3(n@vd3XAQR7qLu@uPe0n9ARB+P}~?j0AE^0stH>poiGYGdVcCqs~3_t8bgM=*(Iv5zkV3KzS| zZ0T@s2Pp$f@I@V2?0lqGtnh*oU(^xfC=he8E0Si548eXrke$6^V9gFah7~0pJ1#2m zMJ*9e=3zdy=g+ytie7hFiOWVq5Q*%80ucPIQESHZ{ z(m#3bde4+y^Z(wC`*mxV>Zsq`x83Noqy_W4!rk`CoDrz`lhX0lkeb@N%frHjsOIHAa#|J}X(>2m#F|4uA=8@ZPu)jPYwmdK II;Vst0EQm|#{d8T literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-pressed.9.png b/imagine-assets/button-background-pressed.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8b0c4e2fddf1b6fc4eb15032d1ef031e30621f GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yV9;Y=U{K;^z$V8|nGso;+n$9_=q4Yza`2n#Vw{IlX hYu&$RUT2ifZ_ literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background-pressed@2x.9.png b/imagine-assets/button-background-pressed@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6048dba04b83d5b4f659a344a0944c6276c2d8e3 GIT binary patch literal 501 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U~uAKV_;you6ytc0|NtRfk$L91A~|<2s3&H zseE8yU|jC$;uumf=j|QCphFH4Z4b*ew;oVlviu>(H zd+Uu@PDfV7I*T8+#?~_#T%W0Kp74y{(Cr(i;+y{$?8TCKe%l$pnj7xGyQVQBtVeMD z`ta?cdEw8e$vZvoo5ytiz>gXESIf2>(B07F`$B8K0o%O>)en=V%jQkG&a*@5=sYH0 z&RFK}OHLFousj|bH-W1{EH+V$r2J*~FjsJ_JS@$Jt1 z%U{m>;(WUxZnwI!eNV=ZKC!|K!FI92j79;c5(o>-r4`X($Of`auw6`2)=1{O-*fAz zCGu58(^l{BxjW5VwdD87*=4gXZDPHq`X$)z+>5hUwk!@=GHt@`s+4C1>pW%m%g*GK zW3t||R&m2!`NN``--)|f#qol9Xp;*&}X{9w7i4cw97V= z;aJXF?mep|c?Aj&PG(SRc=oUHSFv9EvTd$4hF_nur7yp!8slzopr0P5^>XaE2J literal 0 HcmV?d00001 diff --git a/imagine-assets/button-background@2x.9.png b/imagine-assets/button-background@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb87ad3865780fc042405abb8f5b4bdc89d45f1 GIT binary patch literal 515 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 U857ITz`(%Z>FVdQ&MBb@0Oe5N5&!@I literal 0 HcmV?d00001 diff --git a/imagine-assets/dial-background-pressed@2x.png b/imagine-assets/dial-background-pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bf189c9a265f1e8eea3b8fcc44af78b14b5fa068 GIT binary patch literal 6196 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 literal 0 HcmV?d00001 diff --git a/imagine-assets/dial-background.png b/imagine-assets/dial-background.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb099ce4b71f97e7a2962f99c8d9c716fc4c6ed GIT binary patch literal 2746 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 literal 0 HcmV?d00001 diff --git a/imagine-assets/dial-handle-pressed.png b/imagine-assets/dial-handle-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..a65e68bd2ee775911c061992155d5d7b87a72ad5 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yVBlt8U|{25V_;wqHA?xxz`(#+;1OBOz`!j8!i<;h z*8O2%V6gIZaSV~T+S$kp)gX--AUH`e5B6zes n#Qr=GF8RR4W}qtjHJwjYZ@(AUw52Kx3=9mOu6{1-oD!Mg7{ literal 0 HcmV?d00001 diff --git a/imagine-assets/dial-handle-pressed@2x.png b/imagine-assets/dial-handle-pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b4c86adc8177d72429c7cad3919e1f388d6068 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yU=U?sVBqFpV_;yIaQav+0|NtRfk$L91A~|<2s3&H zseE8yV2JZ{aSYKozxL8W-Ub66=ZpMF4S9z=)?5peXbik@K!)++q%A9#-g#4gN`*6B zsGzE=n0W{D&8yQ=Vkecn@Y`m#b^-T0M&BLce_E9jMEjatD_DLsx;N@qRN8#=vXMT( ZDytc=@ef)0`rpm`@yDx2?1f53QY@av8<#UipID{6;dB4qJvyeJc{7w1 R7#J8BJYD@<);T3K0RWMqGpYap literal 0 HcmV?d00001 diff --git a/imagine-assets/dial-handle@2x.png b/imagine-assets/dial-handle@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a894eb6cd2106543f1f6bc710709434f16719c95 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0y~yU=U?sVBqFpV_;yIaQav+0|NtRfk$L91A~|<2s3&H zseE8yU`Y0KaSYKozx0eZZ-aq|%f-_gD};3xGc^v~!Zt3+&sT1D!?RSdZiQx~wVX8hB7m80&^D~9;Q(x(0o2JSCe e-^(5-VNz^P-*+b`e-Q%%1B0ilpUXO@geCxM4LiR8 literal 0 HcmV?d00001 diff --git a/imagine-assets/frame-background.9.png b/imagine-assets/frame-background.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb27a20e354314fa0a3cf524817d743c9c8b861 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoI14-?iy0WWg+Q3`(%rg0 z3=9mLJzX3_JdVGec96H(K!D}>8j%Tn9-K>HKtK6Az)u{A#Lv|95c(K&3#%?yl1O(&$J^Zz@Tp!=*Vbq9(W{9R(+G25U|?YIboFyt I=akR{0O>wMAUuE3od80+}Rn7$7NjVRAU-dokO_-eLAm3op`K$Tv zGbW+usz%=qi?=*!&wjdB-F#`tzr*z>s@K{tUEvyE%Y>*4#ZfyB@RqT~ zb#3@m9eqLBrQ*)Z>lL4Uew4p&EijjSWBgD==JBOE$Mc+doW~#US>V5Pf_>@+b*6i| z8Ma5hmMmMYv}(_!Ty}$)`zxPT)Lh-0`{UigTdxaV-fH#Ud+h)2vhqD93E8rGvF+a1 zA6_cmQ6j51Gw75#XS-YZo$B?oTAUYK^U3PP!(`tcDrR#vz4oqeI$O?LHaT|J(6W5* z0`YqOO>;t3XERrHi3=yjRG37psE)C4Jj{ISv}8YbwOzljujQeHG9T`&v+f+(-k1B_ d_h{QOe4Zc0dP24&mVtqR!PC{xWt~$(69DuFqP744 literal 0 HcmV?d00001 diff --git a/imagine-assets/imagine-assets.qrc b/imagine-assets/imagine-assets.qrc new file mode 100644 index 0000000..81eadda --- /dev/null +++ b/imagine-assets/imagine-assets.qrc @@ -0,0 +1,80 @@ + + + applicationwindow-background.png + applicationwindow-background@2x.png + button-background.9.png + button-background@2x.9.png + button-background-checked.9.png + button-background-checked@2x.9.png + button-background-checked-hovered.9.png + button-background-checked-hovered@2x.9.png + button-background-hovered.9.png + button-background-hovered@2x.9.png + button-background-pressed.9.png + button-background-pressed@2x.9.png + dial-background.png + dial-background@2x.png + dial-background-hovered.png + dial-background-hovered@2x.png + dial-background-pressed.png + dial-background-pressed@2x.png + dial-handle.png + dial-handle@2x.png + dial-handle-pressed.png + dial-handle-pressed@2x.png + frame-background.9.png + frame-background@2x.9.png + itemdelegate-background.9.png + itemdelegate-background@2x.9.png + itemdelegate-background-checked.9.png + itemdelegate-background-checked@2x.9.png + itemdelegate-background-hovered.9.png + itemdelegate-background-hovered@2x.9.png + itemdelegate-background-pressed.9.png + itemdelegate-background-pressed@2x.9.png + radiobutton-indicator.png + radiobutton-indicator@2x.png + radiobutton-indicator-checked.png + radiobutton-indicator-checked@2x.png + radiobutton-indicator-checked-hovered.png + radiobutton-indicator-checked-hovered@2x.png + radiobutton-indicator-checked-pressed.png + radiobutton-indicator-checked-pressed@2x.png + radiobutton-indicator-hovered.png + radiobutton-indicator-hovered@2x.png + radiobutton-indicator-pressed.png + radiobutton-indicator-pressed@2x.png + scrollindicator-handle.png + scrollindicator-handle@2x.png + slider-background-horizontal.9.png + slider-background-horizontal@2x.9.png + slider-handle.png + slider-handle@2x.png + slider-handle-hovered.png + slider-handle-hovered@2x.png + slider-handle-pressed.png + slider-handle-pressed@2x.png + slider-progress-horizontal.9.png + slider-progress-horizontal@2x.9.png + slider-progress-horizontal-pressed.9.png + slider-progress-horizontal-pressed@2x.9.png + switchdelegate-background.9.png + switchdelegate-background@2x.9.png + switchdelegate-handle.png + switchdelegate-handle@2x.png + switchdelegate-handle-checked.png + switchdelegate-handle-checked@2x.png + switchdelegate-handle-checked-hovered.png + switchdelegate-handle-checked-hovered@2x.png + switchdelegate-handle-hovered.png + switchdelegate-handle-hovered@2x.png + switchdelegate-handle-pressed.png + switchdelegate-handle-pressed@2x.png + switchdelegate-indicator.png + switchdelegate-indicator@2x.png + switchdelegate-indicator-pressed.png + switchdelegate-indicator-pressed@2x.png + toolseparator-separator-vertical.9.png + toolseparator-separator-vertical@2x.9.png + + diff --git a/imagine-assets/itemdelegate-background-checked.9.png b/imagine-assets/itemdelegate-background-checked.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8941ad9f04a927bc0d4a248ddca21806dcc6e19e GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uVBqIq1Ci@P!WbABI14-?iy0WWg+Q3`(%rg0 z3=9nRo-U3d7N_4{+Q`YEz{7fRj>Y`B#nzX0HZ^6cgtv#+G)Xmlw3y0g5o0WrH8J9$ q{KJOK9bUQrB>Sqq#%V48F1_ioXwUYT5N-wr1_n=8KbLh*2~7aw)+`YK literal 0 HcmV?d00001 diff --git a/imagine-assets/itemdelegate-background-checked@2x.9.png b/imagine-assets/itemdelegate-background-checked@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a17e44691ffc72b8074d8dc24afc060f4dff4beb GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;V36TpV_;yA`WL%~fq{Xuz$3Dlfk8|agc&`9 zR6Z~;Fr<09IEF;DzP)jfvmro$`J&63^Rr8%FI9Y6_n}!Qg)2hNavkGMH)f_ix1T+* z`hRRs?r-T2TbnM6&RO@Mgmt;L#a)dJxo(Y16SWI!+50$Xkkob4{tIAr& dxZ2-rkA90TTgtD&!N9=4;OXk;vd$@?2>@7_Kj#1d literal 0 HcmV?d00001 diff --git a/imagine-assets/itemdelegate-background-hovered.9.png b/imagine-assets/itemdelegate-background-hovered.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6d2947e1ab7c9116983eb049694028fefbd6d0 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uVBqIq1Ci@P!WbABI14-?iy0WWg+Q3`(%rg0 z3=9lao-U3d7N@UHG30AD5MU|KeI(F6tNx?B*T2cz83ld2mKF$XUAp_w?HKc@-Y|Dh z1x*Qep~!U{?IjEaI`i92EzVzF&)kqN|K_1X<9kcB>>nI5OMhysm_NU5ZTI)VO*y|H zahu9Ff7Yx1$c&6Gt}~ZUs*ciFnH6X1|BgkVRK0qs-S&G73=9mOu6{1-oD!MX@WCDPT84ii)psFJAuTRogF?+sL%!H3I_!gQu&X%Q~loCIH@2E&~7n literal 0 HcmV?d00001 diff --git a/imagine-assets/itemdelegate-background-pressed@2x.9.png b/imagine-assets/itemdelegate-background-pressed@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..cc3393e1f4e74559e53d89503ce92d7b0f0bd043 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;V36TpV_;yA`WL%~fq{Xuz$3Dlfk8|agc&`9 zR6Z~;Fr;|8IEF;DzP+)L^MHc@v*XDfuHWNNS^c`xCVswgTSIa{1zU`QiU>zyIfd{Qvv?|6jlV=ONs8|9?Rg`~(X^*tp35|NmDU>iomNz~EI9 zgwg^7ZH(=n3SBFnvqx4+}SyC(v)d)=FMBM zXvxxL%hzw(zT?1wLx+wXKYrozmFo{4J$v!-v&9=XSq27%51uZLArg|l2ivO{9YxqK z#0#x4%9a$oyUP2E&>}be@_YYli^M;#E&ibJJ6h@1H&vUYx*WAyyZB9&bGU7uuKc&` zs%HQ0LszT5M_gx`vEaw?)fSu#r`zsNEtFAzTy8q8!G<-WVp+`Qf`+*&Y;zTU2lMZD zye642-IPap`Ib3}5;tWvjzoE7w@NfBy@}4W7j#>ok*&Q}HnnAM?yR)P%+$*!Z*AKq zOGK||ckS_Qn~>hUH0;z?ugEt#jiu%fSADD6n|0`FEVDq0di+h516|usEni-w{b-%b zV*OkfRh!PUsZrj`FK>OBs{CN$V`f3wV?yQsOAAaB_t`r4GB7YOc)I$ztaD0e0sxQx BRCfRX literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-checked-hovered@2x.png b/imagine-assets/radiobutton-indicator-checked-hovered@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ace1717a97dec24036621ef2d5382d28f4ef7dc3 GIT binary patch literal 1062 zcmeAS@N?(olHy`uVBq!ia0y~yV9)|#4rT@hhEKAVnG6h!kpVs-uK)l4_xpdI5;Xn) zW556BC;xwhX~_Qn@6ZI-{C|liQt|(m-~aRFU=mqs2H03+5x@WEC;oqkCW6WR`v1@8 z|9?LG|Lynx{Ja0ZkQKcA|I_dP`RD(CKm?!s|MB?$cL*CR`RD(?-~a#p{Qvjo|G(e= z|NZv=FIHukg8%>j=L_5H%)r1vggFCZu^Dkd%|B`vF# zXJBY#WNcz?X>DU`@8Ia{;_B+=?&0O*C$D(SFBvMdh^!pyY}ooaOv`utJiPbx_#&FgNKivJbUr-)rZg4bKmS{U|{0*ba4!k zkgPrUQ~8dA1lxo4W0%dX^ci>b9MWM-*!nlO@mnavp+!pDSgv{97uAeq zUgFDW)BfhcZ;s~3Cl;a)4rCr}_Yhsqpgw=@;a|u9N4cLq@rEoW3B`<@EOnKA|KjCZsPU zeb*K(xSHw1Ei7-mi4VM(Mcbfpbj9Pu_Q(blli8+O*aFfcGMc)I$ztaD0e0svbAG*bWo literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-checked-pressed.png b/imagine-assets/radiobutton-indicator-checked-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..c77ad470c018a4a030d97ff613e8a6d8bd33e91e GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rgi7G?$phG@$jOBom#v;urWT>lddvVQyOf{ZH( z@(X4VFmOm{n6O~OfeQ~lEIX4?#=yYP?&;zf!V#UEkdR;yUtPYFky#=m&p5&0_DY7N zO);z!*MvJP;g4u>Jl@#Y_)^G4wc{C2LV^J=YgTVc!iKbj2|KF4w=pnpXLOciK740) z`Fk^i4Wb4*X$fpb@8i-E;tmuvHi{l$ld54nwy*C9TetFR_F0#?joEM3q*PD5+x*5) hxp86Dt=8vB?~5OKE1!?9Q25Hyuwu$_F}G#sW*KO_UBbCO=ibtz&+f8z>XdoO zbY(wT^6i%9eFmoB%90FYg{?E)nS&X`=l^ryJHyS;H+|DiW`$U19mxX@E-q;d3!f}8 zb=V*xIMJ6aKuo4~hu&N`o`EXyD zLyllWpnEvOC;pK2%gUGeFZ8$hv@O{5_C<5a|5?%3^{*8B{{6JeyTtwL4*znki7Su$ qO60|^t#>%T{Y#CQ%02OajJhU&&h44Ez?gx7fx*+&&t;ucLK6UicgI2i literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-checked.png b/imagine-assets/radiobutton-indicator-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..ea714eaaf96951cbd2ee8249f72c7faffac85047 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rgi4rT@hhIuDLmoP9eSO)lnxc>kD-|zoAv7=%iK{DK(_975ugOX`=c+PeS5sjJsteo6d%QBQGUtqL41 zfm-@6FMj(gzwN@DS$uW-6WkLS7qxw5b@(_<&S%v{!_D2MGZoiy*l%r=GtE%>2 xeO<=?^ReUi)#uG_Ht*YfvQB;bkNvkfwPx|eUHK%-!oa}5;OXk;vd$@?2>_IsiSz&f literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-checked@2x.png b/imagine-assets/radiobutton-indicator-checked@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4f29b80b31c9deef0d141cb25b070fd5146c63eb GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0y~yV9)|#4rT@hhEKAVnG6gJt^qzFuK)l4_xpdILX^9+ z$&i78L98UmFPK5Vz#$+cKC`60p=-g`{Ri$pc=+nWS55i7=?n~v5}q!OAr_~PPCY%X zSwX<%w#E-9hr)ON>tE?i>P)yWInMX3jhL%F_e3UN^H$LW-e7g}3|ZEgYF8eIsAm@? zl8;q-I;@x|&Hm$HiiFLBS;n6?Hg12$@;b44%9%X%-epaO8^wQ?3anju$nC_Ae%XAz zhd1vVnn+)~qp<1k(`O#v`m%)Ih5AdJ)pe`5W-ikB&6}meJHACaZqd!Jr!QVpwf;Y) zbmofQpByP)KU+*>YqK(b&Zlr`V%GNg$sQ#}viEJ}U+_=$Wcs``L(N(^#kNbze&t7v zw^|?i+POB(|L-5VWU0oqMXX)NPTk!xBPmA2Swq+Ue&4pFM3d|l5qZ6-8a*D#`BIl_ vA`9!)zKLpIli2g@W`M2R`9JIC?}+~+>@fFg+l5aI3=9mOu6{1-oD!M~pzB;6@lxa~OhsxC6`a?=A(vBjk6R!BFCoN=IERlFzWs$4G zPxWlW{FIn-$Gcw-#D;`6^GVcWJTX!|Xq= zu7rv6BwK6T+o8m(Yi`(gzg*$WN1YYxR2P}#*Gqa^l<&QI`&i|Q__j+St0Rw#@7d9Q zsO--XAJ)$|IOE@lTF=m5+!kx|%K6QrFh^1K+MueYEWa!KhqP@ZUP>NIxm10WI#o7O}wwu2aVn13U@^;e9(+ms@44$rjF6*2UngB-O B$4>wN literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-hovered@2x.png b/imagine-assets/radiobutton-indicator-hovered@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b0fff06e51e0e14334a6a42e887db741616cade4 GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0y~yV9)|#4rT@hhEKAVnG6h!A^|=juK)l4_xpc-6d{Me z9-~J}3=9m>B|(0{3`{I+oZP(p0)oP#V&alg(y|IlDry>9I(i0%M#d)Qme#iR4vx;Q zZtfmlKE8edfx#isu}SIqMddXO?GxuMSh#5EvK1>gZ{5CY&)x%-i5CS@>#tz6*^@5tcu}GCxAppid_K%IuF05fba~pT2TjoasStUboB!lZyR^9|%2A zD(z&}`EL8-(smxjus+|+e!Dk`TYR&w9y}EHfAPFu-w(WUo3rWD4?pcC8`rru{#9rF z#yN4FMPHUb_m#eaT`3Dbt_fi7(W|&NZ+gUG?c{_9uAPbolVo1&d#`=Ggu^XvsubhN zqCdNulGg}{WsB-eI$`{GSySd7rpfu*GgLU(v=|TW_Hy{JPe`C<1&c^V-I@iS6Vjgr zvl>^ZuBls>Fx6$+^rN!)U0q4&wsc5(|&NfNuIy9T`0OD*5Jag zxD~8!(`A+?e`QKuZV}tb#BR?eBcK%99lWjnUgm6*YrNd;!uzXcS+K0;Gkcozt(<>z z`jRlqLg}(u^}9^U7s#&me$sF^Y_W5;c)`RxV>yfaGv;rex$|dl@d4?tX)>1QRy6q5 gCzopr0Q#$}2LJ#7 literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator-pressed.png b/imagine-assets/radiobutton-indicator-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..7d657ac9c208a09f5c34cc514ea2eb25381326a2 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rgi7G?$phG@$jOBom#bOU@sT>p~-7F;r5Wnf_7 zD+%%oW-xFFNiL~hwrcB%>o33j{q*M#0|P^@r;B3v+{a8Z}Vm6I}G`^iqu|dPW-vP zEh*^&H`}tc+a1cngQjz?p8w#h5P$dnm#Z$Uy|cyc)w?C@pWZC^zamSeL*&98Z)t&* zCx12g=<5Cz&h*#reAl@}`D8`zopr02xl@QUCw| literal 0 HcmV?d00001 diff --git a/imagine-assets/radiobutton-indicator.png b/imagine-assets/radiobutton-indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..b59ba0cef88465217b69d9fc11406abe45a04c65 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rgi7G?$phG@$jOBom#R04cLT>t<7@Av;ae)NW4 z{0;*H19wS~UoeA#LqfxZ1qUuX_`r3@ZWaRrL%OGnV+codaza8v!0UT=moY49bf{Uy z)cmT1QDAZkz&cZ!s zuN>IGc#LgR!N!SKm1j5S*lpT-;+QcG(BFBEHGB z8brL;bJ^tdO7DoGnR&pR%heJ&SMITDEQ;CgIIZB0n1f*Io!bm5wd)sDaVQyVXY`%& zSnYylIqLFVdQ&MBb@0Fo)B A`Tzg` literal 0 HcmV?d00001 diff --git a/imagine-assets/scrollindicator-handle.png b/imagine-assets/scrollindicator-handle.png new file mode 100644 index 0000000000000000000000000000000000000000..0faa2592a67a67cb865c13abd231a9ada3e57605 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0y~yU|jeaUaf;&iD@Iv-Imu!F_jZ Y=1U4U8;YATFfcH9y85}Sb4q9e0Agf1UH||9 literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-background-horizontal@2x.9.png b/imagine-assets/slider-background-horizontal@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c14bf788d06629e9c0149f6e81b7a9b4f7459c96 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0y~yV4TFjz@Wmx#=yX^IBky_0|NtRfk$L91A~|<2s3&H zseE8yU^wFG;uumf=k48%yoVeFTpjh_UXT^t!L)1fJkmIdtI_&$I87d-G}ua{AKU_Wc&Z@ U&I{`p7#J8lUHx3vIVCg!0M(;bB>(^b literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-handle-hovered@2x.png b/imagine-assets/slider-handle-hovered@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..87a8126a788599e3b7f1b70765e04a5b5b5911a7 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHI14-?iy0WiR6&^0Gf3qF z0|TS6r;B4q#NoG7_5GP01>EnSyDD%<{(8vVg`3VkC`0wp`u@ztgVsxi$R%X_Qh?=XLFjp6RwxKdK*Hb7Z+`?-QDGz!S2p^C+muKflhAI nv_>_9z$0dc7jlHR)G>TIB@@1q<)-Y(ef?Oa+e>$ytH zg(Xjk)A;a2mGa{*GdtN2>+X2a#Ql$B(w;WE|YfFSGyv literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-handle-pressed@2x.png b/imagine-assets/slider-handle-pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b0edf7da9b489824c4260a6b1883f95616958339 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHI14-?iy0WiR6&^0Gf3qF z0|UbrPZ!6Kh{JDhF62F8z|;D$JTP*m`U{bpD#oQVd>)7%I=#E$Y**AtcfZh^2c`DN zM;iUy(A&|lYF%2H+oUsZLav%BHQb+I6dG%vR@QZ5%X{mp_Y%nu&StI6SeqCrw&QoG zOA6BjCU%Boo-g+p8I+8sK3DR-z3pzXlYvg)x^VMB;$v^+*|IgpC;H5n?GqdZB0>{hs`~N@x zZ~Wu0z5m8UgE!y*|EX7F(`pW6cITBbEx6)fC6%#bL1$8PLYhI)ZY~CfudGh&cT^85 RFfcGMc)I$ztaD0e0susPIeh>C literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-handle@2x.png b/imagine-assets/slider-handle@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8983436c25fdc733b60fb03597b126f7b06dc28d GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHI14-?iy0WiR6&^0Gf3qF z0|Ub=PZ!6Kh{JDhDsmqR5Mh0=d0|4J&!+=PLX-b7Cmvm<^F#R?Gf!6=Ya-k3--2uh zQ-aPk-8hm`pup_7g-0f)StI+{-U2?G9UmVTUf$W(vEX69&DFebMNfm+q*S;L{n&NK zkN;dn!j*LA^^Zz^Uoc3ow=;~IepNeMFIBExxNlwm>!i6_UN^OQC;hx3 zzhAf^z(GSnM1YHfwS}pE$~I$THuoJRNd+wN`VcWE#)S<54V%jgSoFmBuZs!4v;LOI Qz`(%Z>FVdQ&MBb@0Hs(ny8r+H literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-progress-horizontal-pressed@2x.9.png b/imagine-assets/slider-progress-horizontal-pressed@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d25c9e6369580212ae242d5ca1a1f50f2a7faaf1 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yV4TFjz@Wmx#=yX^IBky_0|NtRfk$L91A~|<2s3&H zseE8yVA$d5;uumf=j~lZzQYbY3gTe~DWM4f2-Qi_ literal 0 HcmV?d00001 diff --git a/imagine-assets/slider-progress-horizontal.9.png b/imagine-assets/slider-progress-horizontal.9.png new file mode 100644 index 0000000000000000000000000000000000000000..cff4e860bffd941c431070ab1e355d6da973f613 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0y~yU^vCVz#z=Q#=yXEF=UcI0|NtRfk$L90|U1Z2s2)~ zTla^7fg#b;#W5t~-rJiSIU5`VTrSFLZxYVlDr_yq9L&%CVegYqt^Dkhw@qHcyeDh6 zP5xt<4cjakIaphmoER521UP7XaL=?p9>eAyVUccb(X?J1N$P-8RJ3x zm+Kf97#K@}{DK)Ap4~`eU|^8&ba4#fh)!OU|Ks$H3kMpQjUP@)7Wl!yz%);Q@6`D_ SKN%Pp7(8A5T-G@yGywqW#vtDS literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-background@2x.9.png b/imagine-assets/switchdelegate-background@2x.9.png new file mode 100644 index 0000000000000000000000000000000000000000..18880980f0897b9bc4b0834a36f7dc38e592ce5b GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;V31*CW?*1YFgX97fq{W7z$e7@|Ns9C3=E-% zF4r+IFff(``2{mLJiC#`z`!8q>Eal|F*A9^e|{Ez2`PyK4Zo%^aJi;ROGw;kkYLa~ XC)9L?wP7v;0|SGntDnm{r-UW|c(Na- literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-handle-checked-hovered.png b/imagine-assets/switchdelegate-handle-checked-hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..e66ef7137cc797be3b3cbd4e29c9a74fe1232fb4 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yV2}b~4mJh`hLv7E=NK3mj(EB_hIn+ooo2|_WFXSE zUrfcoYDNLKC6l?ry#q7lnvJJKTNE(&A9!@?#e&Yw$6Bl$1E_&@*q*Z<>Y zg-9e91YY7is(M1ct0#*2=k%)SqMff=UX*QFd~ZvEU;)p>TWtl)L)k8Mxs=4s_fX0( zToW1T$e?6X`*a#02>$jNI=eSg?b2ulYyLdLwtms8gWg{D&O@DFT{d?ix zCO21)96!g!$7=5j9c6hs(|zCbDYw)*I8QAUJ6)cgwU;5$USt3IX$g`H3=9mOu6{1- HoD!M(1|K)`LS5p38&G>&U_y6_6|2ND2->Uk5yZ-;3=Kps){@?HU|6t<(hg1JQn)(0n zy#G%Z{eQOn|MS)VU#$QCa?AhMJO01f^Z)I^|L>0ee}C%#$8-NbUH4jJ&UKA3Ld>dVcp`0Bvl^NzD8Mw>WYI1p7{siFPtjsL%B znF|63C%9dA%y_pgt@YB+cBUfF({iqR?r|GxmK4UHQzYGivLIFM@uK)l4_xpby8JSjR zW-%}@u$Bb*1v7|-Ox-{8<98zl1_n(}7sn8ZsmTcnat7^(8W<<2zgoh=sKux-Pl%_X kV$I?H_D9iICMbw8Fa#PXIbZv_5@b1pr>mdKI;Vst0NhS6LjV8( literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-handle-checked@2x.png b/imagine-assets/switchdelegate-handle-checked@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b9985f0fe3236be24114eb8a42d882241a39c818 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU@!q;7G?$p2JyWEG;n3$%0SIYOA69#&+x3~IlbY>Cd+w; d5(}6aR&QN;^r>Y}Edv7sgQu&X%Q~loCIDO2Npt`J literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-handle-hovered.png b/imagine-assets/switchdelegate-handle-hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..3de8aa1512c7a1499420a762fa374b4683f93590 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yV2}b~4mJh`hLv7E=NK3mj(EB_hIn))|M~ylp4pZ` zI5ubDa#x)bGWBiTygWQSUqg&`7b-V9GWQ(j=vJ<8<7VRF;dw79DIunte!+X$kv5Mu z@8bW)21jyJ3=)oP&}e$N=|Oqh{`b#}Gl~O~IC)fzV*a+}2->^|GkCG@d-{$8ADSP^ zbC<21!pP&i-}ukc>8>T8FBaF{ z-yN-ZvFO>S7oe7#KWV{an^L HB{Ts51?yyo literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-handle-hovered@2x.png b/imagine-assets/switchdelegate-handle-hovered@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b955159055e7c930fbe4be80796dfcb98cc739da GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0y~yU@!q;4rT@hhEL00-(+B5SQ_9H;`;yp|8M{Qe)|9W z?f+jd|NngY|Hp&>-~Ild5C4DZ&i}91|9`ps|MR*3pPK*QJ@xGtN*`P_W${!|Ig(I3v_Dr|SRhvj4XV z|KH60e?8;>wUqx?RzXQcO+!mZ&(O%k+|t_C-qG3B z!^_7nATT&2GBK&8?c%)$FJ3P6?Kr@|z%awp#WBR=_}dGHe1{BpSTEeSP|OmT!>qse zzvYVyXYMdgZO~X_=&@r}0DD22{ogv)zMJK zdDUd4hqI(vQ~5#`vjy-LBpDuIy})~H`^j{L8up7>p05?ZH_zpfG)j3P?6tV+_Pzxt zCoXF$pTVNF_PE>saKRPt7sb5_th)KKL)H0@brsW^50aQzYGivLIFM@uKzK>uBRnT3=9mc zB|(0{45A@Z_s{(J-H3sKLDSR4F+^f&a)N@KLHnTw#tG`Lmas5tF)GXx;%TT@bGX0# fQS_Aw3StZlfd)#>*S@XgTe~DWM4ft;;n! literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-handle-pressed@2x.png b/imagine-assets/switchdelegate-handle-pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bb748aa46489667107bf9444a5cbb542d0416c GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU@!q;7G?$p2Jvf&^E?(nZX?TdWdtwq^A@LW#L2)e*){T}F1`GQHebvhZge*i z=HTa=bYh}Wx9aj0UER(S3}5s&9_Ku}!F-Ye=fZ1FO9TFzRqtwf)q1L;Y}YPM-|1CT zwB00g&#i3QUGx6x%o8qZMi=#6`3^33S}$>RVLwAv`-Nqv!miCbv@hC!GlTrw#92YF TWlIEceP}#ZsLmeXUo(mZAur`_0*^ zI+>+E#gp^v!<=c;R=wC}uI>5bbeVhB@u=e1|8Ezopr0K#pRTL1t6 literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-indicator-pressed.png b/imagine-assets/switchdelegate-indicator-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..6833d624ae4fa372a9b0fad9068c026b4435f614 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|V31;BW?*1w-7wvbfq{W1z$e7@KN9%5l&_e9 zfq}Us$S;_oVS%{v|5^qH21QR7#}J9j$t(W%Gt^7U87MHAA7)gM`>fHgA(zFms6~$< Yuu;1@{o0oM3=9kmp00i_>zopr04fzK#Q*>R literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-indicator-pressed@2x.png b/imagine-assets/switchdelegate-indicator-pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5498a09041aaafedc727f3834396633c6de29f GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#U@&1}W?*2LQkNjdz`!6B;1lBd9|P=qTEfJ@ zz`$A(u85kIRJY5_^JdVG;=E%#Sz~g+;NY$Hz?L!0OreE8e+TOWc zs;~dvZy~b!$f7$(Zwkz2UDnmKAj`mt!wm}J7lil*#BVoTZQeOow$?~GMO`iFunYqO O1B0ilpUXO@geCxt21eEZ literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-indicator.png b/imagine-assets/switchdelegate-indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..3db5fe2042db20e7fd6c989a38a6338e7714699d GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|V31;BW?*1w-7wvbfq{W1z$e7@|NsAf|Ib6v zLB+?c3=9m+B|(0{3=Ip!mH*c=Ffb^3x;TbNTuxr`zn`IAQqDku!Td0ziri<7ehs-S ejzukc41tZ>)#=x^+-G25VDNPHb6Mw<&;$TG2q)11 literal 0 HcmV?d00001 diff --git a/imagine-assets/switchdelegate-indicator@2x.png b/imagine-assets/switchdelegate-indicator@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c10f7497789f83c1332fbfb212636f05f7fac2 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#U@&1}W?*2LQkNjdz`!6B;1lBd|Nno#|L2jB zX?1260|NtVNswPKgFwKA2lxL({A6HY@bPqU4DmSr_L?Ivg94B9MI%*j4z>>sjGKOK zZ)$tzcB#Jpd%uOq>LZKp9K9(pn{`=N(}FAmD-Jg(h+h!m8xX(UaJ6~oT-jP9=@fOf Tq{A`{3=9mOu6{1-oD!M<48%d- literal 0 HcmV?d00001 diff --git a/imagine-assets/toolseparator-separator-vertical.9.png b/imagine-assets/toolseparator-separator-vertical.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d2009bc55706eaa877957ade282cc081725731 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU=U?sU{K;V%+^F@!0^>AD{s%D=P&1`e>IuA|KNJ&dlDX!L_t~k7uVTS6(F#*<^g|C YlGyfVZ0D;P7#J8lUHx3vIVCg!0685+#{d8T literal 0 HcmV?d00001 diff --git a/qml/BobbycarMainWindow.qml b/qml/BobbycarMainWindow.qml new file mode 100644 index 0000000..01862c5 --- /dev/null +++ b/qml/BobbycarMainWindow.qml @@ -0,0 +1,124 @@ +import QtQuick 2.9 +import QtQml 2.11 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import QtQuick.Controls.Imagine 2.3 +import QtQuick.Window 2.0 +import QtWebEngine 1.0 +import "./leftPanes" +import "./rightPanes" +import "./inputdemo" + +ApplicationWindow { + id: window + width: 800 + height: 480 + minimumWidth: 800 + minimumHeight: 480 + title: "Bobbycar" + + readonly property color colorGlow: "#1d6d64" + readonly property color colorWarning: "#d5232f" + readonly property color colorMain: "#6affcd" + readonly property color colorBright: "#ffffff" + readonly property color colorLightGrey: "#888" + readonly property color colorDarkGrey: "#333" + + readonly property int fontSizeExtraSmall: Qt.application.font.pixelSize * 0.8 + readonly property int fontSizeMedium: Qt.application.font.pixelSize * 1.5 + readonly property int fontSizeLarge: Qt.application.font.pixelSize * 2 + readonly property int fontSizeExtraLarge: Qt.application.font.pixelSize * 5 + + RowLayout { + anchors.fill: parent + anchors.margins: 0 + spacing: 10 + + StackLayout { + currentIndex: rightTabBar.currentIndex == 0 ? 1 : (rightTabBar.currentIndex == 1 ? 2 : 0) + + RowLayout { + anchors.fill: parent + anchors.margins: 0 + spacing: 10 + + LeftButtonBar { + id: leftTabBar + } + + StackLayout { + currentIndex: leftTabBar.currentIndex + + Layout.preferredWidth: 200 + //Layout.maximumWidth: 150 + Layout.fillWidth: false + + NavigationPane { + } + + MusicPane { + } + + MessagePane { + } + + CommandPane { + } + + SettingsPane { + } + } + + Rectangle { + color: colorMain + implicitWidth: 1 + Layout.fillHeight: true + } + + CenterPane { + } + + Rectangle { + color: colorMain + implicitWidth: 1 + Layout.fillHeight: true + } + + StackLayout { + currentIndex: rightTabBar.currentIndex + + Layout.preferredWidth: 150 + Layout.maximumWidth: 150 + Layout.fillWidth: false + + StatusPane { + } + + StatusPane { + } + + AirCondPane { + } + + SeatsPane { + } + + StatisticsPane { + } + } + } + + WebEngineView { + anchors.fill: parent + url: "https://maps.google.com" + } + + InputDemo { + } + } + + RightButtonBar { + id: rightTabBar + } + } +} diff --git a/qml/CenterPane.qml b/qml/CenterPane.qml new file mode 100644 index 0000000..f4e5bf5 --- /dev/null +++ b/qml/CenterPane.qml @@ -0,0 +1,71 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 + +ColumnLayout { + Layout.preferredWidth: 250 + Layout.fillWidth: true + Layout.fillHeight: true + + GlowingLabel { + id: timeLabel + font.pixelSize: fontSizeExtraLarge + text: Qt.formatTime(new Date(), "hh:mm:ss") + + Layout.alignment: Qt.AlignHCenter + } + + Label { + id: dateLabel + color: colorLightGrey + font.pixelSize: fontSizeMedium + text: Qt.formatDate(new Date(), "dd.MM.yyyy") + + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: 2 + Layout.bottomMargin: 10 + } + + Timer { + interval: 1000 + repeat: true + running: true + onTriggered: + { + const ts = new Date(); + timeLabel.text = Qt.formatTime(ts, "hh:mm:ss"); + dateLabel.text = Qt.formatDate(ts, "dd.MM.yyyy"); + } + } + + Image { + source: "qrc:/icons/car.png" + fillMode: Image.PreserveAspectFit + + Layout.fillHeight: true + + Column { + x: parent.width * 0.88 + y: parent.height * 0.56 + spacing: 3 + + Image { + source: "qrc:/icons/warning.png" + anchors.horizontalCenter: parent.horizontalCenter + + layer.enabled: true + layer.effect: CustomGlow { + spread: 0.2 + samples: 40 + color: colorWarning + } + } + + GlowingLabel { + text: qsTr("FOC err 4") + color: colorWarning + glowColor: Qt.rgba(colorWarning.r, colorWarning.g, colorWarning.b, 0.4) + } + } + } +} diff --git a/qml/CustomGlow.qml b/qml/CustomGlow.qml new file mode 100644 index 0000000..dfd66ad --- /dev/null +++ b/qml/CustomGlow.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, 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$ +** +****************************************************************************/ + +import QtGraphicalEffects 1.0 + +Glow { + color: glowColor + samples: 20 + spread: 0.3 +} diff --git a/qml/FeatureButton.qml b/qml/FeatureButton.qml new file mode 100644 index 0000000..e19d866 --- /dev/null +++ b/qml/FeatureButton.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, 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$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 + +Button { + id: button + checkable: true + font.pixelSize: fontSizeExtraSmall + leftPadding: 4 + rightPadding: 4 + topPadding: 12 + bottomPadding: 12 + implicitWidth: 60 + implicitHeight: 90 + + icon.name: "placeholder" + icon.width: 44 + icon.height: 44 + display: Button.TextUnderIcon +} diff --git a/qml/GlowingLabel.qml b/qml/GlowingLabel.qml new file mode 100644 index 0000000..50f816c --- /dev/null +++ b/qml/GlowingLabel.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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. +** +** BSD License Usage +** Alternatively, 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$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 2.3 + +// This container and the transform on the Label are +// necessary to get precise bounding rect of the text for layouting reasons, +// since some of the labels' font sizes can get quite large. +Item { + id: root + implicitHeight: labelTextMetrics.tightBoundingRect.height + implicitWidth: label.implicitWidth + + property alias text: label.text + property alias font: label.font + property alias horizontalAlignment: label.horizontalAlignment + property alias verticalAlignment: label.verticalAlignment + property bool glowEnabled: true + property color glowColor: colorGlow + property color color: colorBright + + Label { + id: label + anchors.baseline: root.baseline + color: root.color + + layer.enabled: root.glowEnabled + layer.effect: CustomGlow { + color: glowColor + } + + TextMetrics { + id: labelTextMetrics + text: label.text + font: label.font + } + + transform: Translate { + y: -labelTextMetrics.tightBoundingRect.y + } + } +} diff --git a/qml/LeftButtonBar.qml b/qml/LeftButtonBar.qml new file mode 100644 index 0000000..6ccd1fe --- /dev/null +++ b/qml/LeftButtonBar.qml @@ -0,0 +1,70 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 + +Container { + id: leftTabBar + + currentIndex: 0 + + Layout.fillWidth: false + Layout.fillHeight: true + + ButtonGroup { + buttons: columnLayout.children + } + + contentItem: ColumnLayout { + id: columnLayout + spacing: 3 + + Repeater { + model: leftTabBar.contentModel + } + } + + FeatureButton { + text: qsTr("Navigation") + icon.name: "navigation" + Layout.fillHeight: true + property int myIndex: 0 + onClicked: leftTabBar.currentIndex = myIndex + checked: leftTabBar.currentIndex == myIndex + } + + FeatureButton { + text: qsTr("Music") + icon.name: "music" + Layout.fillHeight: true + property int myIndex: 1 + onClicked: leftTabBar.currentIndex = myIndex + checked: leftTabBar.currentIndex == myIndex + } + + FeatureButton { + text: qsTr("Message") + icon.name: "message" + Layout.fillHeight: true + property int myIndex: 2 + onClicked: leftTabBar.currentIndex = myIndex + checked: leftTabBar.currentIndex == myIndex + } + + FeatureButton { + text: qsTr("Command") + icon.name: "command" + Layout.fillHeight: true + property int myIndex: 3 + onClicked: leftTabBar.currentIndex = myIndex + checked: leftTabBar.currentIndex == myIndex + } + + FeatureButton { + text: qsTr("Settings") + icon.name: "settings" + Layout.fillHeight: true + property int myIndex: 4 + onClicked: leftTabBar.currentIndex = myIndex + checked: leftTabBar.currentIndex == myIndex + } +} diff --git a/qml/RightButtonBar.qml b/qml/RightButtonBar.qml new file mode 100644 index 0000000..8ea14d4 --- /dev/null +++ b/qml/RightButtonBar.qml @@ -0,0 +1,80 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 + +Container { + id: rightTabBar + + currentIndex: 2 + + Layout.fillHeight: true + + ButtonGroup { + buttons: rightTabBarContentLayout.children + } + + contentItem: ColumnLayout { + id: rightTabBarContentLayout + spacing: 3 + + Repeater { + model: rightTabBar.contentModel + } + } + + Item { + Layout.fillHeight: true + } + + FeatureButton { + id: mapsButton + text: qsTr("Maps") + icon.name: "windows" + + Layout.fillHeight: true + + property int myIndex: 0 + onClicked: rightTabBar.currentIndex = myIndex + checked: rightTabBar.currentIndex == myIndex + } + FeatureButton { + text: qsTr("Windows") + icon.name: "windows" + + Layout.fillHeight: true + + property int myIndex: 1 + onClicked: rightTabBar.currentIndex = myIndex + checked: rightTabBar.currentIndex == myIndex + } + FeatureButton { + text: qsTr("Air Con.") + icon.name: "air-con" + + Layout.fillHeight: true + + property int myIndex: 2 + onClicked: rightTabBar.currentIndex = myIndex + checked: rightTabBar.currentIndex == myIndex + } + FeatureButton { + text: qsTr("Seats") + icon.name: "seats" + + Layout.fillHeight: true + + property int myIndex: 3 + onClicked: rightTabBar.currentIndex = myIndex + checked: rightTabBar.currentIndex == myIndex + } + FeatureButton { + text: qsTr("Statistics") + icon.name: "statistics" + + Layout.fillHeight: true + + property int myIndex: 4 + onClicked: rightTabBar.currentIndex = myIndex + checked: rightTabBar.currentIndex == myIndex + } +} diff --git a/qml/inputdemo/AutoScroller.qml b/qml/inputdemo/AutoScroller.qml new file mode 100644 index 0000000..9df74b7 --- /dev/null +++ b/qml/inputdemo/AutoScroller.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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 QtQuick.VirtualKeyboard 2.1 + +Item { + + property var innerFlickable + property var outerFlickable + property var inputItem: InputContext.priv.inputItem + + onInputItemChanged: { + innerFlickable = null + outerFlickable = null + if (inputItem !== null) { + var parent_ = inputItem.parent + while (parent_) { + if (parent_.maximumFlickVelocity) { + if (innerFlickable) { + outerFlickable = parent_ + break + } else { + innerFlickable = parent_ + } + } + parent_ = parent_.parent + } + delayedLoading.restart() + } + } + + function ensureVisible(flickable) { + if (Qt.inputMethod.visible && inputItem && flickable && flickable.visible && flickable.interactive) { + + var verticallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.VerticalFlick + || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentHeight > flickable.height)) + var horizontallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.HorizontalFlick + || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentWidth > flickable.width)) + + if ((!verticallyFlickable && !horizontallyFlickable) || !inputItem.hasOwnProperty("cursorRectangle")) + return + + var cursorRectangle = flickable.contentItem.mapFromItem(inputItem, inputItem.cursorRectangle.x, inputItem.cursorRectangle.y) + + var oldContentY = flickable.contentY + if (verticallyFlickable) { + var scrollMarginVertical = (flickable && flickable.scrollMarginVertical) ? flickable.scrollMarginVertical : 10 + if (flickable.contentY >= cursorRectangle.y - scrollMarginVertical) + flickable.contentY = Math.max(0, cursorRectangle.y - scrollMarginVertical) + else if (flickable.contentY + flickable.height <= cursorRectangle.y + inputItem.cursorRectangle.height + scrollMarginVertical) + flickable.contentY = Math.min(flickable.contentHeight - flickable.height, cursorRectangle.y + inputItem.cursorRectangle.height - flickable.height + scrollMarginVertical) + } + if (horizontallyFlickable) { + var scrollMarginHorizontal = (flickable && flickable.scrollMarginHorizontal) ? flickable.scrollMarginHorizontal : 10 + if (flickable.contentX >= cursorRectangle.x - scrollMarginHorizontal) + flickable.contentX = Math.max(0, cursorRectangle.x - scrollMarginHorizontal) + else if (flickable.contentX + flickable.width <= cursorRectangle.x + inputItem.cursorRectangle.width + scrollMarginHorizontal) + flickable.contentX = Math.min(flickable.contentWidth - flickable.width, cursorRectangle.x + inputItem.cursorRectangle.width - flickable.width + scrollMarginHorizontal) + } + } + } + Timer { + id: delayedLoading + interval: 10 + onTriggered: { + ensureVisible(innerFlickable) + ensureVisible(outerFlickable) + } + } + Connections { + ignoreUnknownSignals: true + target: Qt.inputMethod + function onAnimatingChanged() { if (inputItem && !Qt.inputMethod.animating) delayedLoading.restart() } + function onKeyboardRectangleChanged() { if (inputItem) delayedLoading.restart() } + function onCursorRectangleChanged() { if (inputItem && inputItem.activeFocus) delayedLoading.restart() } + } +} diff --git a/qml/inputdemo/Basic.qml b/qml/inputdemo/Basic.qml new file mode 100644 index 0000000..aea76c5 --- /dev/null +++ b/qml/inputdemo/Basic.qml @@ -0,0 +1,118 @@ +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.VirtualKeyboard 2.1 +import "." + +Rectangle { + anchors.fill: parent + anchors.margins: 0 + color: "#F6F6F6" + + // Only set with CONFIG+=disable-desktop. + property bool handwritingInputPanelActive: false + + Flickable { + id: flickable + anchors.fill: parent + anchors.margins: 0 + contentWidth: content.width + contentHeight: content.height + interactive: contentHeight > height + flickableDirection: Flickable.VerticalFlick + + property real scrollMarginVertical: 20 + + ScrollBar.vertical: ScrollBar {} + + MouseArea { + id: content + width: flickable.width + height: textEditors.height + 24 + + onClicked: focus = true + + Column { + id: textEditors + spacing: 15 + x: 12 + y: 12 + width: parent.width - 26 + + Label { + color: "#565758" + text: "Tap fields to enter text" + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 22 + } + TextField { + width: parent.width + placeholderText: "One line field" + enterKeyAction: EnterKeyAction.Next + onAccepted: passwordField.focus = true + } + TextField { + id: passwordField + width: parent.width + echoMode: TextInput.Password + placeholderText: "Password field" + inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase | Qt.ImhSensitiveData | Qt.ImhNoPredictiveText + enterKeyAction: EnterKeyAction.Next + onAccepted: upperCaseField.focus = true + } + TextField { + id: upperCaseField + width: parent.width + placeholderText: "Upper case field" + inputMethodHints: Qt.ImhUppercaseOnly + enterKeyAction: EnterKeyAction.Next + onAccepted: lowerCaseField.focus = true + } + TextField { + id: lowerCaseField + width: parent.width + placeholderText: "Lower case field" + inputMethodHints: Qt.ImhLowercaseOnly + enterKeyAction: EnterKeyAction.Next + onAccepted: phoneNumberField.focus = true + } + TextField { + id: phoneNumberField + validator: RegExpValidator { regExp: /^[0-9\+\-\#\*\ ]{6,}$/ } + width: parent.width + placeholderText: "Phone number field" + inputMethodHints: Qt.ImhDialableCharactersOnly + enterKeyAction: EnterKeyAction.Next + onAccepted: formattedNumberField.focus = true + } + TextField { + id: formattedNumberField + width: parent.width + placeholderText: "Formatted number field" + inputMethodHints: Qt.ImhFormattedNumbersOnly + enterKeyAction: EnterKeyAction.Next + onAccepted: digitsField.focus = true + } + TextField { + id: digitsField + width: parent.width + placeholderText: "Digits only field" + inputMethodHints: Qt.ImhDigitsOnly + enterKeyAction: EnterKeyAction.Next + onAccepted: textArea.focus = true + } + TextArea { + id: textArea + width: parent.width + placeholderText: "Multiple line field" + height: Math.max(206, implicitHeight) + } + } + } + } + + // Hide the text fields' cursors when fullscreen handwriting is active. + MouseArea { + anchors.fill: parent + visible: handwritingInputPanelActive + } +} diff --git a/qml/inputdemo/FloatingButton_Active.svg b/qml/inputdemo/FloatingButton_Active.svg new file mode 100644 index 0000000..ef10835 --- /dev/null +++ b/qml/inputdemo/FloatingButton_Active.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/qml/inputdemo/FloatingButton_Available.svg b/qml/inputdemo/FloatingButton_Available.svg new file mode 100644 index 0000000..1178c8c --- /dev/null +++ b/qml/inputdemo/FloatingButton_Available.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/qml/inputdemo/FloatingButton_Unavailable.svg b/qml/inputdemo/FloatingButton_Unavailable.svg new file mode 100644 index 0000000..d8149b5 --- /dev/null +++ b/qml/inputdemo/FloatingButton_Unavailable.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/qml/inputdemo/HandwritingModeButton.qml b/qml/inputdemo/HandwritingModeButton.qml new file mode 100644 index 0000000..6b2f9db --- /dev/null +++ b/qml/inputdemo/HandwritingModeButton.qml @@ -0,0 +1,165 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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 + +Item { + id: handwritingModeButton + state: "unavailable" + property bool floating + property bool flipable + readonly property real __minWidthHeight: Math.min(width, height) + + signal clicked() + signal doubleClicked() + + Flipable { + id: flipableImage + anchors.fill: parent + + property bool flipped + + front: Image { + sourceSize.width: handwritingModeButton.__minWidthHeight + sourceSize.height: handwritingModeButton.__minWidthHeight + smooth: false + source: "qrc:/content/FloatingButton_Unavailable.svg" + } + + back: Image { + id: buttonImage + sourceSize.width: handwritingModeButton.__minWidthHeight + sourceSize.height: handwritingModeButton.__minWidthHeight + smooth: false + source: "qrc:/content/FloatingButton_Available.svg" + } + + states: State { + PropertyChanges { target: rotation; angle: 180 } + when: flipableImage.flipped + } + + transform: Rotation { + id: rotation + origin.x: flipableImage.width / 2 + origin.y: flipableImage.height / 2 + axis { x: 0; y: 1; z: 0 } + angle: 0 + } + + transitions: Transition { + enabled: handwritingModeButton.flipable + NumberAnimation { target: rotation; property: "angle"; duration: 400 } + } + } + + states: [ + State { + name: "available" + PropertyChanges { target: flipableImage; flipped: true } + }, + State { + name: "active" + PropertyChanges { target: flipableImage; flipped: true } + PropertyChanges { target: buttonImage; source: "qrc:/content/FloatingButton_Active.svg" } + } + ] + + function snapHorizontal() { + if (!floating) + return + if (mouseArea.drag.maximumX > mouseArea.drag.minimumX) { + if (x + 20 >= mouseArea.drag.maximumX) { + anchors.left = undefined + anchors.right = parent.right + } else if (x - 20 <= mouseArea.drag.minimumX) { + anchors.right = undefined + anchors.left = parent.left + } + } + } + + function snapVertical() { + if (!floating) + return + if (mouseArea.drag.maximumY > mouseArea.drag.minimumY) { + if (y + 20 >= mouseArea.drag.maximumY) { + anchors.top = undefined + anchors.bottom = parent.bottom + } else if (y - 20 <= mouseArea.drag.minimumY) { + anchors.bottom = undefined + anchors.top = parent.top + } + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + drag { + target: handwritingModeButton.floating ? handwritingModeButton : undefined + axis: Drag.XAxis | Drag.YAxis + minimumX: 0 + maximumX: handwritingModeButton.parent.width - handwritingModeButton.width + onMaximumXChanged: !mouseArea.drag.active && handwritingModeButton.snapHorizontal() + minimumY: 0 + maximumY: handwritingModeButton.parent.height - handwritingModeButton.height + onMaximumYChanged: !mouseArea.drag.active && handwritingModeButton.snapVertical() + } + onPressed: { + if (!handwritingModeButton.floating) + return + handwritingModeButton.anchors.left = undefined + handwritingModeButton.anchors.top = undefined + handwritingModeButton.anchors.right = undefined + handwritingModeButton.anchors.bottom = undefined + } + onReleased: { + handwritingModeButton.snapHorizontal() + handwritingModeButton.snapVertical() + } + onClicked: { + handwritingModeButton.snapHorizontal() + handwritingModeButton.snapVertical() + clickTimer.restart() + } + onDoubleClicked: { + clickTimer.stop() + handwritingModeButton.snapHorizontal() + handwritingModeButton.snapVertical() + handwritingModeButton.doubleClicked() + } + Timer { + id: clickTimer + interval: Qt.styleHints ? Qt.styleHints.mouseDoubleClickInterval / 3 : 0 + repeat: false + onTriggered: handwritingModeButton.clicked() + } + } +} diff --git a/qml/inputdemo/InputDemo.qml b/qml/inputdemo/InputDemo.qml new file mode 100644 index 0000000..904922e --- /dev/null +++ b/qml/inputdemo/InputDemo.qml @@ -0,0 +1,144 @@ +import QtQuick 2.0 +import QtQml 2.11 +import QtQuick.Window 2.2 +import QtQuick.VirtualKeyboard 2.2 +import QtQuick.VirtualKeyboard.Settings 2.2 + +Item { + anchors.fill: parent + anchors.margins: 0 + + Item { + anchors.fill: parent + anchors.margins: 0 + + id: appContainer + anchors.centerIn: parent + + Basic { + id: virtualKeyboard + anchors.left: parent.left + anchors.top: parent.top + anchors.right: parent.right + anchors.bottom: parent.bottom + handwritingInputPanelActive: handwritingInputPanel.available && handwritingInputPanel.active + } + + /* Handwriting input panel for full screen handwriting input. + + This component is an optional add-on for the InputPanel component, that + is, its use does not affect the operation of the InputPanel component, + but it also can not be used as a standalone component. + + The handwriting input panel is positioned to cover the entire area of + application. The panel itself is transparent, but once it is active the + user can draw handwriting on it. + */ + HandwritingInputPanel { + z: 79 + id: handwritingInputPanel + anchors.fill: parent + inputPanel: inputPanel + Rectangle { + z: -1 + anchors.fill: parent + color: "black" + opacity: 0.10 + } + } + + /* Container area for the handwriting mode button. + + Handwriting mode button can be moved freely within the container area. + In this example, a single click changes the handwriting mode and a + double-click changes the availability of the full screen handwriting input. + */ + Item { + z: 99 + visible: handwritingInputPanel.enabled && Qt.inputMethod.visible + anchors { left: parent.left; top: parent.top; right: parent.right; bottom: inputPanel.top; } + HandwritingModeButton { + id: handwritingModeButton + anchors.top: parent.top + anchors.right: parent.right + anchors.margins: 10 + floating: true + flipable: true + width: 76 + height: width + state: handwritingInputPanel.state + onClicked: handwritingInputPanel.active = !handwritingInputPanel.active + onDoubleClicked: handwritingInputPanel.available = !handwritingInputPanel.available + } + } + + /* Keyboard input panel. + + The keyboard is anchored to the bottom of the application. + */ + InputPanel { + id: inputPanel + z: 89 + y: yPositionWhenHidden + x: Screen.orientation === Qt.LandscapeOrientation ? 0 : (parent.width-parent.height) / 2 + width: Screen.orientation === Qt.LandscapeOrientation ? parent.width : parent.height + + keyboard.shadowInputControl.height: (Screen.orientation === Qt.LandscapeOrientation ? parent.height : parent.width) - keyboard.height + + property real yPositionWhenHidden: Screen.orientation === Qt.LandscapeOrientation ? parent.height : parent.width + (parent.height-parent.width) / 2 + + states: State { + name: "visible" + /* The visibility of the InputPanel can be bound to the Qt.inputMethod.visible property, + but then the handwriting input panel and the keyboard input panel can be visible + at the same time. Here the visibility is bound to InputPanel.active property instead, + which allows the handwriting panel to control the visibility when necessary. + */ + when: inputPanel.active + PropertyChanges { + target: inputPanel + y: inputPanel.yPositionWhenHidden - inputPanel.height + } + } + transitions: Transition { + id: inputPanelTransition + from: "" + to: "visible" + reversible: true + enabled: !VirtualKeyboardSettings.fullScreenMode + ParallelAnimation { + NumberAnimation { + properties: "y" + duration: 250 + easing.type: Easing.InOutQuad + } + } + } + Binding { + target: InputContext + property: "animating" + value: inputPanelTransition.running + //restoreMode: Binding.RestoreBinding + } + AutoScroller {} + } + + Binding { + target: VirtualKeyboardSettings + property: "fullScreenMode" + value: appContainer.height > 0 && (appContainer.width / appContainer.height) > (16.0 / 9.0) + //restoreMode: Binding.RestoreBinding + } + + } + + property bool inLandscapeOrientation: Screen.orientation === Qt.LandscapeOrientation + + Screen.orientationUpdateMask: Qt.LandscapeOrientation | Qt.PortraitOrientation + + Binding { + target: appContainer.Window.window !== null ? appContainer.Window.window.contentItem : null + property: "rotation" + value: inLandscapeOrientation ? 0 : 90 + } +} diff --git a/qml/inputdemo/TextArea.qml b/qml/inputdemo/TextArea.qml new file mode 100644 index 0000000..899882a --- /dev/null +++ b/qml/inputdemo/TextArea.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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.10 +import QtQuick.Controls 2.3 as Controls +import QtQuick.VirtualKeyboard 2.3 + +Controls.TextArea { + id: control + color: "#2B2C2E" + selectionColor: Qt.rgba(0.0, 0.0, 0.0, 0.15) + selectedTextColor: color + selectByMouse: true + font.pixelSize: Qt.application.font.pixelSize * 2 + + property int enterKeyAction: EnterKeyAction.None + readonly property bool enterKeyEnabled: enterKeyAction === EnterKeyAction.None || text.length > 0 || inputMethodComposing + + EnterKeyAction.actionId: control.enterKeyAction + EnterKeyAction.enabled: control.enterKeyEnabled + + background: Rectangle { + color: "#FFFFFF" + border.width: 1 + border.color: control.activeFocus ? "#5CAA15" : "#BDBEBF" + } +} diff --git a/qml/inputdemo/TextField.qml b/qml/inputdemo/TextField.qml new file mode 100644 index 0000000..6ce4f61 --- /dev/null +++ b/qml/inputdemo/TextField.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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.10 +import QtQuick.Controls 2.3 as Controls +import QtQuick.VirtualKeyboard 2.3 + +Controls.TextField { + id: control + color: "#2B2C2E" + selectionColor: Qt.rgba(0.0, 0.0, 0.0, 0.15) + selectedTextColor: color + selectByMouse: true + font.pixelSize: Qt.application.font.pixelSize * 2 + + property int enterKeyAction: EnterKeyAction.None + readonly property bool enterKeyEnabled: enterKeyAction === EnterKeyAction.None || acceptableInput || inputMethodComposing + + EnterKeyAction.actionId: control.enterKeyAction + EnterKeyAction.enabled: control.enterKeyEnabled + + background: Rectangle { + color: "#FFFFFF" + border.width: 1 + border.color: control.activeFocus ? "#5CAA15" : "#BDBEBF" + } +} diff --git a/qml/leftPanes/CommandPane.qml b/qml/leftPanes/CommandPane.qml new file mode 100644 index 0000000..2fffd44 --- /dev/null +++ b/qml/leftPanes/CommandPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Command' + } +} diff --git a/qml/leftPanes/MessagePane.qml b/qml/leftPanes/MessagePane.qml new file mode 100644 index 0000000..308b173 --- /dev/null +++ b/qml/leftPanes/MessagePane.qml @@ -0,0 +1,27 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import QtLocation 5.6 +import QtPositioning 5.6 +import ".." + +Item { + Plugin { + id: mapPlugin + name: "osm" + // name: "mapboxgl" + // name: "esri" + // specify plugin parameters if necessary + // PluginParameter { + // name: + // value: + // } + } + + Map { + anchors.fill: parent + plugin: mapPlugin + center: QtPositioning.coordinate(47.0582267, 15.4460315) + zoomLevel: 14 + } +} diff --git a/qml/leftPanes/MusicPane.qml b/qml/leftPanes/MusicPane.qml new file mode 100644 index 0000000..cd2c89d --- /dev/null +++ b/qml/leftPanes/MusicPane.qml @@ -0,0 +1,198 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +ColumnLayout { + spacing: 16 + + ButtonGroup { + id: viewButtonGroup + buttons: viewTypeRowLayout.children + } + + RowLayout { + id: viewTypeRowLayout + spacing: 3 + + Layout.bottomMargin: 12 + + Button { + text: qsTr("Compact") + font.pixelSize: fontSizeExtraSmall + checked: true + + Layout.fillWidth: true + } + Button { + text: qsTr("Full") + font.pixelSize: fontSizeExtraSmall + checkable: true + + Layout.fillWidth: true + } + } + + GlowingLabel { + text: qsTr("VOLUME") + color: "white" + font.pixelSize: fontSizeMedium + } + + Dial { + id: volumeDial + from: 0 + value: 42 + to: 100 + stepSize: 1 + + Layout.alignment: Qt.AlignHCenter + Layout.minimumWidth: 64 + Layout.minimumHeight: 64 + Layout.preferredWidth: 128 + Layout.preferredHeight: 128 + Layout.maximumWidth: 128 + Layout.maximumHeight: 128 + Layout.fillHeight: true + + Label { + text: volumeDial.value.toFixed(0) + color: "white" + font.pixelSize: Qt.application.font.pixelSize * 3 + anchors.centerIn: parent + } + } + + ButtonGroup { + id: audioSourceButtonGroup + } + + RowLayout { + Layout.topMargin: 16 + + GlowingLabel { + id: radioOption + text: qsTr("RADIO") + color: "white" + font.pixelSize: fontSizeMedium + horizontalAlignment: Label.AlignLeft + + Layout.fillWidth: true + } + GlowingLabel { + text: qsTr("AUX") + color: colorLightGrey + font.pixelSize: fontSizeMedium * 0.8 + horizontalAlignment: Label.AlignHCenter + glowEnabled: false + + Layout.alignment: Qt.AlignBottom + Layout.fillWidth: true + } + GlowingLabel { + text: qsTr("MP3") + color: colorDarkGrey + font.pixelSize: fontSizeMedium * 0.6 + horizontalAlignment: Label.AlignRight + glowEnabled: false + + Layout.alignment: Qt.AlignBottom + Layout.fillWidth: true + } + } + + Frame { + id: stationFrame + leftPadding: 1 + rightPadding: 1 + topPadding: 1 + bottomPadding: 1 + + Layout.fillWidth: true + Layout.fillHeight: true + Layout.preferredHeight: 128 + + ListView { + clip: true + anchors.fill: parent + + ScrollIndicator.vertical: ScrollIndicator { + parent: stationFrame + anchors.top: parent.top + anchors.right: parent.right + anchors.rightMargin: 1 + anchors.bottom: parent.bottom + } + + model: ListModel { + ListElement { name: "V-Radio"; frequency: "105.5 MHz" } + ListElement { name: "World News"; frequency: "93.4 MHz" } + ListElement { name: "TekStep FM"; frequency: "95.0 MHz" } + ListElement { name: "Classic Radio"; frequency: "89.9 MHz" } + ListElement { name: "Buena Vista FM"; frequency: "100.8 MHz" } + ListElement { name: "Drive-by Radio"; frequency: "99.1 MHz" } + ListElement { name: "Unknown #1"; frequency: "104.5 MHz" } + ListElement { name: "Unknown #2"; frequency: "91.2 MHz" } + ListElement { name: "Unknown #3"; frequency: "93.8 MHz" } + ListElement { name: "Unknown #4"; frequency: "80.4 MHz" } + ListElement { name: "Unknown #5"; frequency: "101.1 MHz" } + ListElement { name: "Unknown #6"; frequency: "92.2 MHz" } + } + delegate: ItemDelegate { + id: stationDelegate + width: parent.width + height: 22 + text: model.name + font.pixelSize: fontSizeExtraSmall + topPadding: 0 + bottomPadding: 0 + + contentItem: RowLayout { + Label { + text: model.name + font: stationDelegate.font + horizontalAlignment: Text.AlignLeft + Layout.fillWidth: true + } + Label { + text: model.frequency + font: stationDelegate.font + horizontalAlignment: Text.AlignRight + Layout.fillWidth: true + } + } + } + } + } + + Frame { + Layout.fillWidth: true + + RowLayout { + anchors.fill: parent + + Label { + text: qsTr("Sort by") + font.pixelSize: fontSizeExtraSmall + + Layout.alignment: Qt.AlignTop + } + + ColumnLayout { + RadioButton { + text: qsTr("Name") + font.pixelSize: fontSizeExtraSmall + } + RadioButton { + text: qsTr("Frequency") + font.pixelSize: fontSizeExtraSmall + } + RadioButton { + text: qsTr("Favourites") + font.pixelSize: fontSizeExtraSmall + checked: true + } + } + } + } +} diff --git a/qml/leftPanes/NavigationPane.qml b/qml/leftPanes/NavigationPane.qml new file mode 100644 index 0000000..380cd10 --- /dev/null +++ b/qml/leftPanes/NavigationPane.qml @@ -0,0 +1,27 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import QtLocation 5.6 +import QtPositioning 5.6 +import ".." + +Item { + Plugin { + id: mapPlugin + // name: "osm" + // name: "mapboxgl" + name: "esri" + // specify plugin parameters if necessary + // PluginParameter { + // name: + // value: + // } + } + + Map { + anchors.fill: parent + plugin: mapPlugin + center: QtPositioning.coordinate(47.0582267, 15.4460315) + zoomLevel: 14 + } +} diff --git a/qml/leftPanes/SettingsPane.qml b/qml/leftPanes/SettingsPane.qml new file mode 100644 index 0000000..391e921 --- /dev/null +++ b/qml/leftPanes/SettingsPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Settings' + } +} diff --git a/qml/main-dev.qml b/qml/main-dev.qml new file mode 100644 index 0000000..7a9b4bb --- /dev/null +++ b/qml/main-dev.qml @@ -0,0 +1,5 @@ +import QtQuick 2.9 + +BobbycarMainWindow { + visible: true +} diff --git a/qml/main-raspberry.qml b/qml/main-raspberry.qml new file mode 100644 index 0000000..8dce37f --- /dev/null +++ b/qml/main-raspberry.qml @@ -0,0 +1,9 @@ +import QtQuick 2.9 + +BobbycarMainWindow { + id: window + + Component.onCompleted: { + window.showFullScreen(); + } +} diff --git a/qml/qml.qrc b/qml/qml.qrc new file mode 100644 index 0000000..c928f1e --- /dev/null +++ b/qml/qml.qrc @@ -0,0 +1,32 @@ + + + FeatureButton.qml + GlowingLabel.qml + CustomGlow.qml + BobbycarMainWindow.qml + main-dev.qml + main-raspberry.qml + CenterPane.qml + leftPanes/CommandPane.qml + leftPanes/MessagePane.qml + leftPanes/MusicPane.qml + leftPanes/NavigationPane.qml + leftPanes/SettingsPane.qml + rightPanes/AirCondPane.qml + rightPanes/SeatsPane.qml + rightPanes/StatisticsPane.qml + rightPanes/StatusPane.qml + rightPanes/WindowsPane.qml + LeftButtonBar.qml + RightButtonBar.qml + inputdemo/AutoScroller.qml + inputdemo/FloatingButton_Active.svg + inputdemo/FloatingButton_Available.svg + inputdemo/FloatingButton_Unavailable.svg + inputdemo/HandwritingModeButton.qml + inputdemo/InputDemo.qml + inputdemo/TextArea.qml + inputdemo/TextField.qml + inputdemo/Basic.qml + + diff --git a/qml/rightPanes/AirCondPane.qml b/qml/rightPanes/AirCondPane.qml new file mode 100644 index 0000000..23c1f23 --- /dev/null +++ b/qml/rightPanes/AirCondPane.qml @@ -0,0 +1,159 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +ColumnLayout { + Row { + spacing: 8 + + Image { + source: "qrc:/icons/weather.png" + } + + Column { + spacing: 8 + + Row { + anchors.horizontalCenter: parent.horizontalCenter + + GlowingLabel { + id: outsideTempValueLabel + text: qsTr("31") + font.pixelSize: fontSizeLarge + } + + GlowingLabel { + text: qsTr("°C") + font.pixelSize: Qt.application.font.pixelSize * 2.5 + anchors.baseline: outsideTempValueLabel.baseline + } + } + + Label { + text: qsTr("Graz") + color: colorLightGrey + font.pixelSize: fontSizeMedium + } + } + } + + ColumnLayout { + id: airConRowLayout + spacing: 8 + + Layout.preferredWidth: 32 + Layout.preferredHeight: 380 + Layout.fillHeight: true + + Item { + Layout.fillHeight: true + } + + SwitchDelegate { + text: qsTr("AC") + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + + Layout.fillWidth: true + } + + // QTBUG-63269 + Item { + implicitHeight: temperatureValueLabel.implicitHeight + Layout.fillWidth: true + Layout.topMargin: 16 + + Label { + text: qsTr("Temperature") + anchors.baseline: temperatureValueLabel.bottom + anchors.left: parent.left + } + + GlowingLabel { + id: temperatureValueLabel + text: qsTr("24°C") + font.pixelSize: fontSizeLarge + anchors.right: parent.right + } + } + + Slider { + value: 0.35 + Layout.fillWidth: true + } + + // QTBUG-63269 + Item { + implicitHeight: powerValueLabel.implicitHeight + Layout.fillWidth: true + Layout.topMargin: 16 + + Label { + text: qsTr("Power") + anchors.baseline: powerValueLabel.bottom + anchors.left: parent.left + } + + GlowingLabel { + id: powerValueLabel + text: qsTr("10%") + font.pixelSize: fontSizeLarge + anchors.right: parent.right + } + } + + Slider { + value: 0.25 + Layout.fillWidth: true + } + + SwitchDelegate { + text: qsTr("Low") + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + + Layout.fillWidth: true + Layout.topMargin: 16 + } + + SwitchDelegate { + text: qsTr("High") + checked: true + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + + Layout.fillWidth: true + } + + SwitchDelegate { + text: qsTr("Defog") + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + + Layout.fillWidth: true + } + + SwitchDelegate { + text: qsTr("Recirculate") + leftPadding: 0 + rightPadding: 0 + topPadding: 0 + bottomPadding: 0 + + Layout.fillWidth: true + } + + Item { + Layout.fillHeight: true + } + } +} diff --git a/qml/rightPanes/SeatsPane.qml b/qml/rightPanes/SeatsPane.qml new file mode 100644 index 0000000..f73f6fd --- /dev/null +++ b/qml/rightPanes/SeatsPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Seats' + } +} diff --git a/qml/rightPanes/StatisticsPane.qml b/qml/rightPanes/StatisticsPane.qml new file mode 100644 index 0000000..04acaee --- /dev/null +++ b/qml/rightPanes/StatisticsPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Statistics' + } +} diff --git a/qml/rightPanes/StatusPane.qml b/qml/rightPanes/StatusPane.qml new file mode 100644 index 0000000..5a601c8 --- /dev/null +++ b/qml/rightPanes/StatusPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Status' + } +} diff --git a/qml/rightPanes/WindowsPane.qml b/qml/rightPanes/WindowsPane.qml new file mode 100644 index 0000000..356bf63 --- /dev/null +++ b/qml/rightPanes/WindowsPane.qml @@ -0,0 +1,10 @@ +import QtQuick 2.9 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 +import ".." + +Item { + Label { + text: 'Window' + } +} diff --git a/qtquickcontrols2.conf b/qtquickcontrols2.conf new file mode 100644 index 0000000..c7fc7a6 --- /dev/null +++ b/qtquickcontrols2.conf @@ -0,0 +1,10 @@ +[Controls] +Style=Imagine + +[Imagine] +Path=:/imagine-assets + +[Imagine\Palette] +Text=#6affcd +ButtonText=#6affcd +WindowText=#6affcd