summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--dist/changes-5.10.026
-rw-r--r--doc/src/getting-started/examples.qdoc1
-rw-r--r--doc/src/getting-started/gettingstartedqt.qdoc516
-rw-r--r--doc/src/images/coffee_machine_emptycup.pngbin0 -> 16905 bytes
-rw-r--r--doc/src/images/coffee_machine_modify.pngbin0 -> 22094 bytes
-rw-r--r--doc/src/images/coffee_machine_overview.pngbin0 -> 38140 bytes
-rw-r--r--doc/src/images/coffee_machine_selection.pngbin0 -> 43989 bytes
-rw-r--r--doc/src/platforms/osx.qdoc9
-rw-r--r--doc/src/platforms/supported-platforms.qdocinc91
-rw-r--r--doc/src/qmlapp/internationalization.qdoc13
-rw-r--r--doc/src/qt5-intro.qdoc1
-rw-r--r--doc/src/signalslotsyntaxes.qdoc4
-rw-r--r--doc/src/snippets/coffee/ApplicationFlow.qml152
-rw-r--r--doc/src/snippets/coffee/ApplicationFlowForm.ui.qml198
-rw-r--r--doc/src/snippets/coffee/Brewing.qml100
-rw-r--r--doc/src/snippets/coffee/BrewingForm.ui.qml122
-rw-r--r--doc/src/snippets/coffee/ChoosingCoffee.ui.qml235
-rw-r--r--doc/src/snippets/coffee/CoffeeButton.qml159
-rw-r--r--doc/src/snippets/coffee/Cup.qml4
-rw-r--r--doc/src/snippets/coffee/CupForm.ui.qml197
-rw-r--r--doc/src/snippets/coffee/EmptyCup.qml4
-rw-r--r--doc/src/snippets/coffee/EmptyCupForm.ui.qml51
-rw-r--r--doc/src/snippets/coffee/NavigationButton.ui.qml95
-rw-r--r--doc/src/snippets/coffee/SideBar.qml97
-rw-r--r--doc/src/snippets/coffee/SideBarForm.ui.qml107
-rw-r--r--doc/src/snippets/coffee/coffee.pro35
-rw-r--r--doc/src/snippets/coffee/coffee.qdoc114
-rw-r--r--doc/src/snippets/coffee/images/cup structure/coffee_cup_large.pngbin0 -> 11148 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/coffee_cup_outline.pngbin0 -> 7511 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_back.pngbin0 -> 10351 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_coverplate.pngbin0 -> 16630 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_front.pngbin0 -> 15775 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/liquids/liquid_coffee.pngbin0 -> 30278 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/liquids/liquid_foam.pngbin0 -> 28867 bytes
-rw-r--r--doc/src/snippets/coffee/images/cup structure/liquids/liquid_milk.pngbin0 -> 31452 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/coffees/Americano.pngbin0 -> 22801 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/coffees/Espresso.pngbin0 -> 22734 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/coffees/Latte.pngbin0 -> 23218 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/coffees/Macchiato.pngbin0 -> 23007 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/coffees/cappucino.pngbin0 -> 23148 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/contents/coffee.pngbin0 -> 725 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/contents/milk.pngbin0 -> 519 bytes
-rw-r--r--doc/src/snippets/coffee/images/icons/contents/sugar.pngbin0 -> 165 bytes
-rw-r--r--doc/src/snippets/coffee/images/ui controls/buttons/back/white.pngbin0 -> 1758 bytes
-rw-r--r--doc/src/snippets/coffee/images/ui controls/buttons/go/white.pngbin0 -> 1784 bytes
-rw-r--r--doc/src/snippets/coffee/images/ui controls/line.pngbin0 -> 123 bytes
-rw-r--r--doc/src/snippets/coffee/imports/Coffee/Constants.qml (renamed from doc/src/snippets/gs/notepad1.cpp)41
-rw-r--r--doc/src/snippets/coffee/imports/Coffee/TitilliumWeb-Regular.ttfbin0 -> 63752 bytes
-rw-r--r--doc/src/snippets/coffee/imports/Coffee/qmldir1
-rw-r--r--doc/src/snippets/coffee/main.cpp (renamed from doc/src/snippets/gs/notepad1.h)46
-rw-r--r--doc/src/snippets/coffee/main.qml (renamed from doc/src/snippets/gs/notepad2.h)34
-rw-r--r--doc/src/snippets/coffee/qml.qrc39
-rw-r--r--doc/src/snippets/coffee/qtquickcontrols2.conf10
-rw-r--r--doc/src/snippets/qtcluster/circularindicator.cpp263
-rw-r--r--doc/src/snippets/qtcluster/circularindicator.h121
-rw-r--r--doc/src/snippets/qtcluster/designerImports/ClusterDemo/ValueSource.qml101
-rw-r--r--doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.cpp71
-rw-r--r--doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.pro40
-rw-r--r--doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.qrc5
-rw-r--r--doc/src/snippets/qtcluster/designerImports/ClusterDemo/qmldir3
-rw-r--r--doc/src/snippets/qtcluster/etcprovider.cpp76
-rw-r--r--doc/src/snippets/qtcluster/etcprovider.h55
-rw-r--r--doc/src/snippets/qtcluster/gauge.cpp286
-rw-r--r--doc/src/snippets/qtcluster/gauge.h161
-rw-r--r--doc/src/snippets/qtcluster/gaugenode.cpp328
-rw-r--r--doc/src/snippets/qtcluster/gaugenode.h186
-rw-r--r--doc/src/snippets/qtcluster/hybridimages.qrc26
-rw-r--r--doc/src/snippets/qtcluster/hybridqml.qrc27
-rw-r--r--doc/src/snippets/qtcluster/images.qrc14
-rw-r--r--doc/src/snippets/qtcluster/images/BottomPanel.pngbin0 -> 8335 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Built_with_Qt.pngbin0 -> 2956 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/CarForParkSensors.pngbin0 -> 34577 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/CarInfoIcon.pngbin0 -> 6551 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/CentreMask.pngbin0 -> 7928 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Cluster8Gauges.pngbin0 -> 195629 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.pngbin0 -> 22485 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/DashboardMask.pngbin0 -> 47425 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.pngbin0 -> 5983 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.pngbin0 -> 5690 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.pngbin0 -> 16357 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.pngbin0 -> 17748 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.pngbin0 -> 2345 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.pngbin0 -> 4645 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.pngbin0 -> 3222 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Gauge_RPM.pngbin0 -> 31088 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Gauge_Speed.pngbin0 -> 31672 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.pngbin0 -> 322 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.pngbin0 -> 232 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.pngbin0 -> 1174 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.pngbin0 -> 880 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/InfoNoteBackground.pngbin0 -> 4315 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/MapLocation.pngbin0 -> 909 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/MapLocationSport.pngbin0 -> 905 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.pngbin0 -> 2048 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/MusicPlayer_Cover.pngbin0 -> 28602 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/ParkingSensorOff.pngbin0 -> 3880 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/RearCameraOverlay.pngbin0 -> 2481 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/RearCameraOverlaySport.pngbin0 -> 1441 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/RearCameraStill.jpgbin0 -> 12384 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/SpeedometerNeedle.pngbin0 -> 193 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.pngbin0 -> 165 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/SportCarFloorShadow.pngbin0 -> 1108 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/SportCarForParkSensors.pngbin0 -> 23760 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/calendar.pngbin0 -> 385 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/center.pngbin0 -> 15987 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/contacts.pngbin0 -> 1991 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/convert_premultiplied_alpha.sh6
-rw-r--r--doc/src/snippets/qtcluster/images/cover.pngbin0 -> 31029 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/greenglow.pngbin0 -> 20072 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/jane.pngbin0 -> 18249 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/john.pngbin0 -> 13993 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/knob.pngbin0 -> 4941 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/left.pngbin0 -> 21956 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/leftgauge.pngbin0 -> 52418 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/redglow.pngbin0 -> 19959 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/right.pngbin0 -> 21655 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/rightgauge.pngbin0 -> 52681 bytes
-rw-r--r--doc/src/snippets/qtcluster/images/temperature.pngbin0 -> 21949 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons.qrc15
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0083.datbin0 -> 4648 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0238.datbin0 -> 3993 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0245.datbin0 -> 2307 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0246.datbin0 -> 4462 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0247.datbin0 -> 2674 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0249.datbin0 -> 2482 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0456.datbin0 -> 3511 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1434A.datbin0 -> 4042 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1555.datbin0 -> 3167 bytes
-rw-r--r--doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1702.datbin0 -> 2522 bytes
-rw-r--r--doc/src/snippets/qtcluster/main.cpp119
-rw-r--r--doc/src/snippets/qtcluster/qml/CarModelMain.qml186
-rw-r--r--doc/src/snippets/qtcluster/qml/CarModelSports.qml569
-rw-r--r--doc/src/snippets/qtcluster/qml/CarParking.qml71
-rw-r--r--doc/src/snippets/qtcluster/qml/CarParkingSports.qml79
-rw-r--r--doc/src/snippets/qtcluster/qml/CarViewElectric.qml108
-rw-r--r--doc/src/snippets/qtcluster/qml/CarViewSports.qml108
-rw-r--r--doc/src/snippets/qtcluster/qml/Circular_route.txt595
-rw-r--r--doc/src/snippets/qtcluster/qml/ConsumptionView.qml176
-rw-r--r--doc/src/snippets/qtcluster/qml/FpsCounter.qml99
-rw-r--r--doc/src/snippets/qtcluster/qml/MapView.qml136
-rw-r--r--doc/src/snippets/qtcluster/qml/MediaPlayerView.qml116
-rw-r--r--doc/src/snippets/qtcluster/qml/TurnIndicator.qml64
-rw-r--r--doc/src/snippets/qtcluster/qml/ValueSource.qml436
-rw-r--r--doc/src/snippets/qtcluster/qml/VehicleInfoNote.qml163
-rw-r--r--doc/src/snippets/qtcluster/qml/VideoView.qml102
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/BottomPanel.ui.qml190
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CarInfoField.qml81
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CenterView.qml151
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCalendar.qml109
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCarInfo.qml97
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewContacts.qml119
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewMusic.qml108
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/Dashboard.qml117
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackground.qml151
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackgroundForm.ui.qml205
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardForm.ui.qml100
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardFrame.qml88
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardView.qml57
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/Gadget.qml117
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/SafeRendererPicture.qml (renamed from doc/src/snippets/gs/notepad2.cpp)8
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/BatteryMeter.qml72
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/ConsumptionMeter.qml92
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FpsMeter.qml83
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FuelMeter.qml73
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/SpeedoMeter.qml157
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TachoMeter.qml113
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TemperatureMeter.qml90
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TurboMeter.qml72
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/BatteryMeterSpecifics.qml176
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/ConsumptionMeterSpecifics.qml210
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/FuelMeterSpecifics.qml176
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/SpeedoMeterSpecifics.qml209
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TachoMeterSpecifics.qml210
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TemperatureMeterSpecifics.qml210
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TurboMeterSpecifics.qml176
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/CameraLoader.qml53
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/CarLoader.qml55
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/CenterStack.qml124
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/Dashboard.qml52
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/DashboardForm.ui.qml250
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/DashboardFrame.qml61
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/DashboardView.qml320
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/Gauge.qml109
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/RPMFlipable.qml130
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge.qml240
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_painter.qml169
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_vertex.qml170
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter.qml224
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeterLoader.qml63
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_painter.qml181
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_vertex.qml159
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/designer/RPMFlipableSpecifics.qml77
-rw-r--r--doc/src/snippets/qtcluster/qml/dash_sports/designer/SpeedoMeterLoaderSpecifics.qml77
-rw-r--r--doc/src/snippets/qtcluster/qml/functions.js40
-rw-r--r--doc/src/snippets/qtcluster/qml/models/Map11.jpgbin0 -> 70588 bytes
-rw-r--r--doc/src/snippets/qtcluster/qml/models/Map3.jpgbin0 -> 54918 bytes
-rw-r--r--doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltfbin0 -> 56100 bytes
-rw-r--r--doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.binbin0 -> 949422 bytes
-rw-r--r--doc/src/snippets/qtcluster/qml/route.txt1188
-rw-r--r--doc/src/snippets/qtcluster/qtcluster-base.pro109
-rw-r--r--doc/src/snippets/qtcluster/qtcluster.pro8
-rw-r--r--doc/src/snippets/qtcluster/qtcluster.qrc14
-rw-r--r--doc/src/snippets/qtcluster/qtiviclusterdata.cpp344
-rw-r--r--doc/src/snippets/qtcluster/qtiviclusterdata.h223
-rw-r--r--doc/src/snippets/qtcluster/scenehelper.cpp219
-rw-r--r--doc/src/snippets/qtcluster/scenehelper.h92
-rw-r--r--doc/src/snippets/qtcluster/sportscar_15k.qrc7
-rw-r--r--doc/src/snippets/qtcluster/sportsimages.qrc11
-rw-r--r--doc/src/snippets/qtcluster/sportsqml.qrc23
-rw-r--r--doc/src/whatsnew/whatsnew510.qdoc274
211 files changed, 15686 insertions, 612 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 4f571fb5..0338efe0 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,3 @@
load(qt_build_config)
-MODULE_VERSION = 5.9.4
+MODULE_VERSION = 5.10.1
diff --git a/dist/changes-5.10.0 b/dist/changes-5.10.0
new file mode 100644
index 00000000..958006cc
--- /dev/null
+++ b/dist/changes-5.10.0
@@ -0,0 +1,26 @@
+Qt 5.10 introduces many new features and improvements as well as bugfixes
+over the 5.9.x series. For more details, refer to the documentation included
+in this distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/
+
+The Qt version 5.10 series is binary compatible with the 5.9.x series.
+Applications compiled for 5.9 will continue to run with 5.10.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Qt 5.10.0 Changes *
+****************************************************************************
+
+ - Updated documentation for Qt for VxWorks.
+ - Clarified on where Qt license files are stored locally.
+ - Documented dynamic language changes in Qt Quick applications.
+ - Added examples/demos: Qt Cluster Demo, Coffee.
+ - Fixed several instances of missing, incorrect, or obsolete information.
diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc
index 75cfb4e7..6f49d566 100644
--- a/doc/src/getting-started/examples.qdoc
+++ b/doc/src/getting-started/examples.qdoc
@@ -263,7 +263,6 @@
\list
\li \l{animation/animatedtiles}{Animated Tiles}
- \li \l{animation/appchooser}{Application Chooser}
\li \l{animation/easing}{Easing Curves}
\li \l{animation/moveblocks}{Move Blocks}\raisedaster
\li \l{animation/states}{States}
diff --git a/doc/src/getting-started/gettingstartedqt.qdoc b/doc/src/getting-started/gettingstartedqt.qdoc
deleted file mode 100644
index 7c448c28..00000000
--- a/doc/src/getting-started/gettingstartedqt.qdoc
+++ /dev/null
@@ -1,516 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page gettingstartedqt.html
-
- \title Getting Started Programming with Qt Widgets
-
- In this topic, we teach basic Qt knowledge by implementing a simple Notepad
- application using C++ and the \l{Qt Widgets} module. The application is a
- small text editor which allows you to create a text file, save it, print it,
- or reopen and edit it again. You can also set the font to be used.
-
- \image notepad1.png "Notepad application"
-
- You can find the final Notepad source files in the qtdoc repository in the
- snippets/widgets-tutorial/notepad directory. You can either fetch
- the Qt 5 sources from Qt Project or install them as part of Qt 5.
-
- \section1 Creating the Notepad Project
-
- Setting up a new project in Qt Creator is aided by a wizard that guides you
- step-by-step through the project creation process. The wizard prompts you
- to enter the settings needed for that particular type of project and creates
- the project for you.
-
- \image notepad2.png "Qt Creator New File or Project dialog"
-
- To create the Notepad project, select \b File > \b{New File or Project} >
- \b Applications > \b {Qt Widgets Application} > \b Choose, and follow the
- instructions of the wizard. In the \b {Class Information} dialog, type
- \b Notepad as the class name and select \b QMainWindow as the base class.
-
- \image notepad3.png "Class Information Dialog"
-
- The \b {Qt Widgets Application} wizard creates a project that contains a main
- source file and a set of files that specify a user interface (Notepad
- widget):
-
- \list
- \li notepad.pro - the project file.
- \li main.cpp - the main source file for the application.
- \li notepad.cpp - the source file of the notepad class of the Notepad
- widget.
- \li notepad.h - the header file of the notepad class for the Notepad
- widget.
- \li notepad.ui - the UI form for the Notepad widget.
- \endlist
-
- The .cpp, .h, and .ui files come with the necessary boiler plate code for
- you to be able to build and run the project. The .pro file is complete.
- We will take a closer look at the file contents in the following sections.
-
- \b{Learn More}
-
- \table
- \header
- \li About
- \li Here
- \row
- \li Using Qt Creator
- \li \l{Qt Creator Manual}{Qt Creator}
- \row
- \li Creating other kind of applications with Qt Creator
- \li \l{Qt Creator: Tutorials}{Qt Creator Tutorials}
- \endtable
-
-
- \section1 Main Source File
-
- The wizard generates the following code in the main.cpp file:
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp all
-
- We will go through the code line by line. The following lines include
- the header files for the Notepad widget and QApplication. All Qt classes
- have a header file named after them.
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 1
-
- The following line defines the main function that is the entry point for
- all C and C++ based applications:
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 2
-
- The following line creates a QApplication object. This object manages
- application-wide resources and is necessary to run any Qt program
- that uses Qt Widgets. It constructs an application object with \c argc
- command line arguments run in \c argv. (For GUI applications that do not
- use Qt Widgets, you can use QGuiApplication instead.)
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 3
-
- The following line creates the Notepad object. This is the object for
- which the wizard
- created the class and the UI file. The user interface contains visual
- elements that are called \c widgets in Qt. Examples of widgets are text
- edits, scroll bars, labels, and radio buttons. A widget can also be a
- container for other widgets; a dialog or a main application window, for
- example.
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 4
-
- The following line shows the Notepad widget on the screen in its own
- window. Widgets can also function as containers. An example of this
- is QMainWindow which often contains several types of widgets. Widgets
- are not visible by default; the function \l{QWidget::}{show()} makes
- the widget visible.
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 5
-
- The following line makes the QApplication enter its event loop. When a Qt
- application is running, events are generated and sent to the
- widgets of the application. Examples of events are mouse presses
- and key strokes.
-
- \snippet snippets/widgets-tutorial/notepad/main.cpp 6
-
- \b{Learn More}
-
- \table
- \header
- \li About
- \li Here
- \row
- \li Widgets and Window Geometry
- \li \l{Window and Dialog Widgets}
- \row
- \li Events and event handling
- \li \l{The Event System}
- \endtable
-
- \section1 Designing a UI
-
- The wizard generates a user interface definition in XML format: notepad.ui.
- When you open the notepad.ui file in Qt Creator, it automatically opens
- in the integrated Qt Designer.
-
- When you build the application, Qt Creator launches the Qt
- \l{User Interface Compiler (uic)} that reads the .ui file and creates a
- corresponding C++ header file, ui_notepad.h.
-
- \section2 Using Qt Designer
-
- The wizard creates an application that uses a QMainWindow. It has its own
- layout to which you can add a menu bar, dock widgets, toolbars, and a
- status bar. The center area can be occupied by any kind of widget. The
- wizard places the Notepad widget there.
-
- To add widgets in Qt Designer:
-
- \list 1
- \li In the Qt Creator \b Editor mode, double-click the notepad.ui file
- in the \b Projects view to launch the file in the integrated Qt
- Designer.
- \li Drag and drop widgets Text Edit (QTextEdit) to the form.
- \li Press \b {Ctrl+A} (or \b {Cmd+A}) to select the widgets and click
- \b {Lay out Vertically} (or press \b {Ctrl+L}) to apply a vertical
- layout (QVBoxLayout).
- \li Press \b {Ctrl+S} (or \b {Cmd+S}) to save your changes.
- \endlist
-
- The UI now looks as follows in Qt Designer:
-
- \image notepad4.png
-
- You can view the generated XML file in the code editor:
-
- \quotefromfile snippets/widgets-tutorial/notepad/notepad.ui
-
- \printuntil QMenuBar
- \dots
-
- The following line contains the XML declaration, which specifies the XML
- version and character encoding used in the document:
-
- \code
- <?xml version="1.0" encoding="UTF-8"?>
- \endcode
-
- The rest of the file specifies an \c ui element that defines a Notepad
- widget:
-
- \code
- <ui version="4.0">
- \endcode
-
- The UI file is used together with the header and source file of the Notepad
- class. We will look at the rest of the UI file in the later sections.
-
- \section2 Notepad Header File
-
- The wizard generated a header file for the Notepad class that has the
- necessary #includes, a constructor, a destructor, and the Ui object. The
- file looks as follows:
-
- \snippet snippets/gs/notepad1.h all
-
- The following line includes QMainWindow that provides a main application
- window:
-
- \snippet snippets/gs/notepad1.h 1
-
- The following lines declare the Notepad class in the Ui namespace, which is the
- standard namespace for the UI classes generated from .ui files by the
- \c uic tool:
-
- \snippet snippets/gs/notepad1.h 2
-
- The class declaration contains the \c Q_OBJECT macro. It must come first in the class
- definition, and declares our class as a QObject. Naturally, it must also
- inherit from QObject. A QObject adds several abilities to a normal C++
- class. Notably, the class name and slot names can be
- queried at runtime. It is also possible to query a slot's
- parameter types and invoke it.
-
- \snippet snippets/gs/notepad1.h 3
-
- The following lines declare a constructor that has a default argument
- called \c parent.
- The value 0 indicates that the widget has no parent (it is a top-level
- widget).
-
- \snippet snippets/gs/notepad1.h 4
-
- The following line declares a virtual destructor to free the resources that were
- acquired by the object during its life-cycle. According to the C++
- naming convention, destructors have the same name as the class they are
- associated with, prefixed with a tilde (~). In QObject, destructors are
- virtual to ensure that the destructors of derived classes are invoked
- properly when an object is deleted through a pointer-to-base-class.
-
- \snippet snippets/gs/notepad1.h 5
-
- The following lines declare a member variable which is a pointer to the Notepad UI
- class. A member variable is associated with a specific class, and accessible
- for all its methods.
-
- \snippet snippets/gs/notepad1.h 6
-
- \section2 Notepad Source File
-
- The source file that the wizard generated for the Notepad class looks as
- follows:
-
- \snippet snippets/gs/notepad1.cpp all
-
- The following lines include the Notepad class header file that was generated
- by the wizard and the UI header file that was generated by the \c uic tool:
-
- \snippet snippets/gs/notepad1.cpp 0
-
- The following line defines the \c {Notepad} constructor:
-
- \snippet snippets/gs/notepad1.cpp 1
-
- The following line calls the QMainWindow constructor, which is the base
- class for the Notepad class:
-
- \snippet snippets/gs/notepad1.cpp 2
-
- The following line creates the UI class instance and assigns it to the
- \c ui member:
-
- \snippet snippets/gs/notepad1.cpp 3
-
- The following line sets up the UI:
-
- \snippet snippets/gs/notepad1.cpp 4
-
- In the destructor, we delete the \c ui:
-
- \snippet snippets/gs/notepad1.cpp 5
-
- In order to have the text edit field occupy the whole screen, we add
- \c setCentralWidget to the main window.
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 1
-
- \section2 Project File
-
- The wizard generates the following project file, \c {notepad.pro}, for us:
-
- \quotefile snippets/widgets-tutorial/notepad/notepad.pro
-
- The project file specifies the application name and the \c qmake template to
- use for generating the project, as well as the source, header, and UI files
- included in the project.
-
- You could also use \c qmake's \c -project option to generate the \.pro file. Although,
- in that case, you have to remember to add the line \c{QT += widgets} to the generated
- file in order to link against the Qt Widgets Module.
-
- \b{Learn More}
-
- \table
- \header
- \li About
- \li Here
- \row
- \li Using Qt Designer
- \li \l{Qt Designer Manual}
- \row
- \li Layouts
- \li \l{Layout Management},
- \l{Widgets and Layouts},
- \l{Layout Examples}
- \row
- \li The widgets that come with Qt
- \li \l{Qt Widget Gallery}
- \row
- \li Main windows and main window classes
- \li \l{Application Main Window},
- \l{Main Window Examples}
- \row
- \li QObjects and the Qt Object model (This is essential to
- understand Qt)
- \li \l{Object Model}
- \row
- \li qmake and the Qt build system
- \li \l{qmake Manual}
- \endtable
-
- \section1 Adding User Interaction
-
-
- To add functionality to the editor, we start by adding menu items and buttons on a toolbar.
-
- Click on "Type Here", and add the options New, Open, Save, Save as, Print
- and Exit. This creates 5 lines in the Action Editor below. To connect the
- actions to slots, right-click an action and select Go to slot > triggered(),
- and complete the code for that given slot.
-
- If we also want to add the actions to a toolbar, we can assign an icon
- to each QAction, and then drag the QAction to the toolbar. You assign an icon
- by entering an icon name in the Icon property of the action concerned. When the QAction
- has been dragged to the toolbar, clicking the icon will launch the associated
- slot.
-
- Complete the method \c on_actionNew_triggered() :
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 2
-
- \c current_file is a global variable containing the file presently being edited.
- It is defined in the private part of notepad.h:
-
- \snippet snippets/widgets-tutorial/notepad/notepad.h 6
-
- \c setText("") clears the text buffer.
-
- \section2 Opening a file
-
- In \c notepad.ui, right click on \c actionOpen and select \c {Go to slot}
-
- Complete method \c on_actionOpen_triggered().
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 3
-
- \c QFileDialog::getOpenFileName opens a dialog enabling you to select a file.
- QFile object \c myfile has the selected \c file_name as parameter.
- We store the selected file also into the global variable \c current_file for later purposes.
- We open the file with \c file.open as a readonly text file. If it
- cannot be opened, a warning is issued, and the program stops.
-
- We define a QTextStream \c instream for parameter \c myfile.
- The contents of file \c myfile is copied into QString \a text.
- \c setText(text) fille the buffer of our editor with \c text.
-
- \c section2 Saving a file
-
- We create the method for saving a file in the same way as for \l {Opening a file},
- by right clicking on \c actionSave, and selecting \c {Go to Slot}.
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 4
-
- QFile object \c myfile is linked to global variable \c current_file, the variable that
- contains the file we were working with.
- If we cannot open \c myfile, an error message is issued and the method stops.
- We create a QTextStream \c outstream. The contents of the editor buffer is converted
- to plain text, and then written to \c outstream.
-
- \c section2 Saving a file with \c {Save as}
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 5
-
- This is the same procedure as for \c {Saving a file}, the only difference
- being that here you need to enter a new file name for the file to
- be created.
-
-
- \section2 Print a file
-
- If you want to use print functionalities, you need to add \c printsupport to
- the project file:
-
- QT += core gui printsupport
-
- We declare a QPrinter object called \c printer.
- We launch a printer dialog box and store the selected printer in object \c printer.
- If we clicked on \c Cancel and did not select a printer, the methods returns.
- The actual printer command is given with \a ui->textEdit->print with our QPrinter
- object as parameter.
-
- \section2 Select a font
-
- \snippet snippets/widgets-tutorial/notepad/notepad.cpp 7
-
- We declare a boolean indicating if we did select a font with QFontDialog. If so, we
- set the font with \c ui->textEdit->setFont(myfont).
-
- \section2 Copy, cut, paste, undo, redo
-
- If you select some text, and want to copy it to the clipboard,
- you call the appropriate method of ui->textEdit. The same counts
- for cut, paste, undo, and redo.
-
- This table shows the method name to use.
-
- \table
- \header
- \li Task
- \li Method called
- \row
- \li Copy
- \li ui->textEdit->copy()
- \row
- \li Cut
- \li ui->textEdit->cut()
- \row
- \li Paste
- \li ui->textEdit->paste()
- \row
- \li Undo
- \li ui->textEdit->undo()
- \row
- \li Redo
- \li ui->textEdit->redo()
- \endtable
-
- This project contains the following files:
-
- \list
- \li {main.cpp}
- \li {notepad.cpp}
- \li {notepad.h}
- \li {notepad.pro}
- \li {notepad.ui}
- \endlist
- \b{Learn More}
-
- \table
- \header
- \li About
- \li Here
- \row
- \li MDI applications
- \li QMdiArea,
- \l{MDI Example}
- \row
- \li Files and I/O devices
- \li QFile, QIODevice
- \row
- \li tr() and internationalization
- \li \l{Qt Linguist Manual},
- \l{Writing Source Code for Translation},
- \l{Internationalization with Qt}
- \endtable
-
- \section1 Building and Running Notepad
-
- Now that you have all the necessary files, select \b Build >
- \b {Build Project Notepad} to build and run the application. Qt Creator
- uses \c qmake and \c make to create an executable in the directory
- specified in the build settings of the project and runs it.
-
- \section2 Building and Running from the Command Line
-
- To build the application from the command line, switch to the
- directory in which you have the \c .cpp file of the application and add the
- project file (suffixed .pro) described earlier. The following shell commands
- then build the application:
-
- \code
- qmake
- make (or nmake on Windows)
- \endcode
-
- The commands create an executable in the project directory. The \c qmake tool reads the
- project file and produces a \c Makefile with instructions on how to build the application.
- The \c make tool (or the \c nmake tool) then reads the \c Makefile and produces the executable
- binary.
-*/
diff --git a/doc/src/images/coffee_machine_emptycup.png b/doc/src/images/coffee_machine_emptycup.png
new file mode 100644
index 00000000..d13d91f5
--- /dev/null
+++ b/doc/src/images/coffee_machine_emptycup.png
Binary files differ
diff --git a/doc/src/images/coffee_machine_modify.png b/doc/src/images/coffee_machine_modify.png
new file mode 100644
index 00000000..16ad7e85
--- /dev/null
+++ b/doc/src/images/coffee_machine_modify.png
Binary files differ
diff --git a/doc/src/images/coffee_machine_overview.png b/doc/src/images/coffee_machine_overview.png
new file mode 100644
index 00000000..3ac002d3
--- /dev/null
+++ b/doc/src/images/coffee_machine_overview.png
Binary files differ
diff --git a/doc/src/images/coffee_machine_selection.png b/doc/src/images/coffee_machine_selection.png
new file mode 100644
index 00000000..ae1d5111
--- /dev/null
+++ b/doc/src/images/coffee_machine_selection.png
Binary files differ
diff --git a/doc/src/platforms/osx.qdoc b/doc/src/platforms/osx.qdoc
index 5d357767..5505a44b 100644
--- a/doc/src/platforms/osx.qdoc
+++ b/doc/src/platforms/osx.qdoc
@@ -63,19 +63,20 @@
See \l{Supported Platforms} for the list of \macos versions supported by Qt.
- Qt can be built for either x86 or x86_64. 64-bit is used by default.
- To select a 32-bit build, use the \c QMAKE_APPLE_DEVICE_ARCHS \c qmake variable.
+ Qt can be built for either x86_64 or x86_64h (Haswell). x86_64 is used by default.
+ To select a x86_64h build, use the \c QMAKE_APPLE_DEVICE_ARCHS \c qmake variable.
This is selectable at configure time:
\code
- ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS=i386
+ ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS=x86_64h
\endcode
\c QMAKE_APPLE_DEVICE_ARCHS can also be specified as a space-delimited list
in order to build for multiple architectures simultaneously:
\code
- ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS="i386 x86_64 x86_64h"
+ ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS="x86_64 x86_64h"
\endcode
+ \note Qt 5.10+ does not support 32-bit builds.
\note Qt 5 does not support OS X on PowerPC.
\note Static builds are not tested.
diff --git a/doc/src/platforms/supported-platforms.qdocinc b/doc/src/platforms/supported-platforms.qdocinc
index 3e7729a5..f9f7a496 100644
--- a/doc/src/platforms/supported-platforms.qdocinc
+++ b/doc/src/platforms/supported-platforms.qdocinc
@@ -39,10 +39,97 @@ Mobile Platforms: \l {Qt for Android}{Android},
//! [mobile]
//! [all]
+\section1 Qt 5.10
+\b {Supported until one year after release}
+//! [5.10] //! [latest]
+ \table 80%
+ \header \li Platform \li Compiler \li Notes
+ \header \li {3,1} \l {Qt for Windows}{Windows}
+ \row \li Windows 10 (x86_64)
+ \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3
+ \li Tested on \e {Windows 10 Creators Update}
+ \row \li Windows 10 (x86)
+ \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3
+ \li Tested on \e {Windows 10 Creators Update}
+ \row \li Windows 8.1 (x86_64)
+ \li MSVC 2017, MSVC 2015, \b {MSVC 2013}, MinGW 5.3
+ \li
+ \row \li Windows 8.1 (x86)
+ \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3
+ \li
+ \row \li Windows 7 (x86_64)
+ \li MSVC 2017, MSVC 2015, MSVC 2013, \b {MinGW 5.3}
+ \li
+ \row \li Windows 7 (x86)
+ \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3
+ \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (x86)}
+
+ \row \li {3,1} \header \li {3,1} Universal Windows Platform (UWP)
+ \row \li UWP 10 (\b x86, \b x86_64, \b armv7)
+ \li \b {MSVC 2017}, \b {MSVC 2015}
+ \li Host: \b {Windows 10 (x86_64)} \e {Creators Update}
+
+ \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11}
+ \row \li openSUSE 42.2 (x86_64)
+ \li GCC 4.8, \b {GCC 7}, \b {ICC}
+ \li
+ \row \li Red Hat Enterprise Linux 6.6 (x86_64)
+ \li GCC 4.9.1
+ \li devtoolset-3
+ \row \li Red Hat Enterprise Linux 7.2 (x86_64)
+ \li \b {GCC 5.3.1}
+ \li devtoolset-4
+ \row \li Ubuntu 16.04 (x86_64)
+ \li GCC as provided by Canonical, \b {GCC 6}
+ \li
+ \row \li Linux (x86 and x86_64)
+ \li GCC 4.8, GCC 4.9, GCC 5, GCC 6, GCC 7
+ \li
+
+ \row \li {3,1} \header \li {3,1} \l {Qt for Android}{Android}
+ \row \li Android 4.1, 5, 6, 7, 8 (armv7, x86)\br
+ API Level 16
+ \li \b {GCC as provided by Google}, \b {MinGW 5.3}
+ \li Hosts: \b {RHEL 7.2 (x86_64)}, \b{\macos 10.12 (x86_64)}, \b {Windows 7 (x86_64)}
+
+ \row \li {3,1} \header \li {3,1} Darwin Platforms: \l {Qt for macOS}{\macos},
+ \l {Qt for iOS}{iOS}, tvOS, watchOS
+ \row \li \l {Qt for macOS}{\macos} \b 10.11, \b 10.12, \b 10.13 (x86_64)
+ \li \b {Clang as provided by Apple}
+ \li \b {Xcode 8.2 (\macos 10.11)}, \b {Xcode 8.3.3 (\macos 10.12)}, \b {Xcode 9 (\macos 10.13)}
+ \row \li \l {Qt for iOS}{iOS} 10, \b {iOS 11} (armv8)
+ \li \b {Clang as provided by Apple}
+ \li \b {Xcode 9 (\macos 10.13)}
+ \row \li tvOS 10, \b {tvOS 11} (armv8) (Technology Preview)
+ \li \b {Clang as provided by Apple}
+ \li \b {Xcode 9 (\macos 10.13)}
+ \row \li watchOS 3, \b {watchOS 4} (armv7k) (Technology Preview)
+ \li \b {Clang as provided by Apple}
+ \li \b {Xcode 9 (\macos 10.13)}
+
+ \row \li {3,1} \header \li {3,1}
+ Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX}, \l {INTEGRITY}
+ \row \li \l {Qt for Embedded Linux}{Embedded Linux}
+ \li GCC
+ \li ARM Cortex-A, Intel boards with GCC-based toolchains
+ \row \li \l {Qt for Device Creation}{Embedded Linux (Boot2Qt)} (armv7, armv8, x86, x86_64)
+ \li \b {GCC 6.2}
+ \li \b {Yocto 2.3}, Hosts: RHEL 7.2 (x86_64), Windows 7 (x86_64)
+ \row \li \b {QNX 6.6.0}, 7.0 (armv7 and x86)
+ \li \b {QCC as provided by QNX}
+ \li Hosts: \b {RHEL 7.2 (x86_64)}, \b {Windows 7 (x86_64)},
+ \b {Windows 10 (x86_64)}, \b {Windows 7 (x86)},
+ \b {\macos 10.12}
+ \row \li \l {INTEGRITY} {INTEGRITY 11.4.4}
+ \li As provided by Green Hills INTEGRITY
+ \li Host: RHEL 7.2 (x86_64)
+ \endtable
+//! [5.10] //! [latest]
+
\section1 Qt 5.9
\b {Long-term support (LTS)}: Supported until May 31, 2020
-//! [5.9] //! [latest]
+//! [5.9]
\table 80%
\header \li Platform \li Compiler \li Notes
@@ -119,7 +206,7 @@ Mobile Platforms: \l {Qt for Android}{Android},
\li Hosts: \b {RHEL 7.2 (64-bit)}, \b{\macos 10.12}, \b {Windows 7 (64-bit)}
\endtable
-//! [5.9] //! [latest]
+//! [5.9]
\section1 Qt 5.8
diff --git a/doc/src/qmlapp/internationalization.qdoc b/doc/src/qmlapp/internationalization.qdoc
index 78716c38..acdd9ef1 100644
--- a/doc/src/qmlapp/internationalization.qdoc
+++ b/doc/src/qmlapp/internationalization.qdoc
@@ -227,6 +227,19 @@ Component.onCompleted: {
}
\endcode
+\section2 9. Prepare for Dynamic Language Changes
+
+You can change the language that Qt translation functions use by adding and
+removing translators with QCoreApplication::installTranslator() and
+QCoreApplication::removeTranslator(). Afterwards you can call
+QQmlEngine::retranslate() to trigger a refresh of all bindings that use
+translations. As a result, your user interface will switch, dynamically, to the
+newly selected language.
+
+Alternatively, you can also forward a QEvent::LanguageChange event to your
+application's QQmlEngine instance or connect your own signal to
+QQmlEngine::retranslate().
+
\section1 Localizing Your Application
Qt Quick applications use the same underlying localization system as Qt C++
diff --git a/doc/src/qt5-intro.qdoc b/doc/src/qt5-intro.qdoc
index c28ea764..4f249ab0 100644
--- a/doc/src/qt5-intro.qdoc
+++ b/doc/src/qt5-intro.qdoc
@@ -508,6 +508,7 @@
\section1 Related Topics
\list
+ \li \l{What's New in Qt 5.10}
\li \l{What's New in Qt 5.9}
\li \l{What's New in Qt 5.8}
\li \l{What's New in Qt 5.7}
diff --git a/doc/src/signalslotsyntaxes.qdoc b/doc/src/signalslotsyntaxes.qdoc
index 14400b43..1b88afae 100644
--- a/doc/src/signalslotsyntaxes.qdoc
+++ b/doc/src/signalslotsyntaxes.qdoc
@@ -61,10 +61,6 @@ The table below summarizes their differences.
\li Can connect C++ functions to QML functions
\li Y
\li
-\row
- \li Selecting an instance of an overloaded signal or slot is...
- \li Simple
- \li Complex
\endtable
The following sections explain these differences in detail and demonstrate how
diff --git a/doc/src/snippets/coffee/ApplicationFlow.qml b/doc/src/snippets/coffee/ApplicationFlow.qml
new file mode 100644
index 00000000..406a19b8
--- /dev/null
+++ b/doc/src/snippets/coffee/ApplicationFlow.qml
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import Coffee 1.0
+
+ApplicationFlowForm {
+ id: applicationFlow
+ state: "initial"
+
+ property int animationDuration: 400
+
+//! [0]
+ choosingCoffee.brewButtonSelection.onClicked: {
+ applicationFlow.state = "settings"
+ applicationFlow.choosingCoffee.milkSlider.value = applicationFlow.choosingCoffee.sideBar.currentMilk
+ applicationFlow.choosingCoffee.sugarSlider.value = 2
+ }
+//! [0]
+
+
+ choosingCoffee.sideBar.onCoffeeSelected: {
+ applicationFlow.state = "selection"
+ }
+
+ choosingCoffee.backButton.onClicked: {
+ applicationFlow.state = "selection"
+ }
+
+//! [2]
+ choosingCoffee.brewButton.onClicked: {
+ applicationFlow.state = "empty cup"
+ }
+//! [2]
+
+//! [1]
+ emptyCup.continueButton.onClicked: {
+ applicationFlow.state = "brewing"
+ brewing.coffeeName = choosingCoffee.sideBar.currentCoffee
+ brewing.start()
+ }
+//! [1]
+
+ brewing.onFinished: {
+ finalAnimation.start()
+ }
+
+ SequentialAnimation {
+ id: finalAnimation
+
+ PropertyAction {
+ target: applicationFlow
+ property: "state"
+ value: "finished"
+ }
+
+ PauseAnimation {
+ duration: 1000
+ }
+
+ PropertyAction {
+ target: applicationFlow
+ property: "state"
+ value: "start"
+ }
+
+ PauseAnimation {
+ duration: applicationFlow.animationDuration
+ }
+
+ PauseAnimation {
+ duration: 400
+ }
+
+ PropertyAction {
+ target: applicationFlow
+ property: "state"
+ value: "initial"
+ }
+ }
+
+
+ Behavior on choosingCoffee.x {
+ PropertyAnimation {
+ duration: applicationFlow.animationDuration
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+
+ Behavior on emptyCup.x {
+ PropertyAnimation {
+ duration: applicationFlow.animationDuration
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ Behavior on brewing.x {
+ PropertyAnimation {
+ duration: applicationFlow.animationDuration
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+}
diff --git a/doc/src/snippets/coffee/ApplicationFlowForm.ui.qml b/doc/src/snippets/coffee/ApplicationFlowForm.ui.qml
new file mode 100644
index 00000000..1844d133
--- /dev/null
+++ b/doc/src/snippets/coffee/ApplicationFlowForm.ui.qml
@@ -0,0 +1,198 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import Coffee 1.0
+
+Rectangle {
+ id: root
+ width: Constants.width
+ height: Constants.height
+ property alias choosingCoffee: choosingCoffee
+ property alias brewing: brewing
+ property alias emptyCup: emptyCup
+
+ color: Constants.backgroundColor
+
+ state: intital
+
+ EmptyCupForm {
+ id: emptyCup
+ x: Constants.width
+ y: 0
+ }
+
+ Brewing {
+ id: brewing
+ x: Constants.width * 2
+ y: 0
+ }
+
+ ChoosingCoffee {
+ id: choosingCoffee
+ }
+
+ states: [
+ State {
+ name: "initial"
+ },
+ State {
+ name: "selection"
+
+ PropertyChanges {
+ target: choosingCoffee
+ selected: true
+ }
+ },
+ State {
+ name: "settings"
+
+ PropertyChanges {
+ target: choosingCoffee
+ x: -Constants.leftSideBarWidth
+ selected: false
+ inSettings: true
+ }
+
+ PropertyChanges {
+ target: emptyCup
+ x: Constants.width
+ y: 0
+ }
+
+ PropertyChanges {
+ target: brewing
+ x: Constants.width * 2
+ y: 0
+ }
+ },
+ State {
+ name: "empty cup"
+
+ PropertyChanges {
+ target: emptyCup
+ x: 0
+ }
+
+ PropertyChanges {
+ target: choosingCoffee
+ x: -Constants.width - Constants.leftSideBarWidth
+ inSettings: true
+ selected: false
+ }
+
+ PropertyChanges {
+ target: brewing
+ x: Constants.width
+ }
+ },
+ State {
+ name: "brewing"
+
+ PropertyChanges {
+ target: emptyCup
+ x: -Constants.width
+ }
+
+ PropertyChanges {
+ target: brewing
+ x: 0
+ }
+
+ PropertyChanges {
+ target: choosingCoffee
+ x: -Constants.width * 2 - Constants.leftSideBarWidth
+ }
+ },
+ State {
+ name: "finished"
+
+ PropertyChanges {
+ target: emptyCup
+ x: -Constants.width
+ y: 0
+ visible: false
+ }
+
+ PropertyChanges {
+ target: brewing
+ x: 0
+ }
+
+ PropertyChanges {
+ target: choosingCoffee
+ x: -Constants.leftSideBarWidth - Constants.width
+ questionVisible: true
+ inSettings: true
+ }
+ },
+ State {
+ name: "start"
+
+ PropertyChanges {
+ target: emptyCup
+ x: 0
+ visible: false
+ }
+
+ PropertyChanges {
+ target: brewing
+ x: Constants.width
+ y: 0
+ }
+
+ PropertyChanges {
+ target: choosingCoffee
+ x: 0
+ inSettings: true
+ }
+ }
+ ]
+}
diff --git a/doc/src/snippets/coffee/Brewing.qml b/doc/src/snippets/coffee/Brewing.qml
new file mode 100644
index 00000000..3abe35b3
--- /dev/null
+++ b/doc/src/snippets/coffee/Brewing.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+
+//! [0]
+BrewingForm {
+ id: root
+ function start() {
+ animation.start()
+ }
+
+ signal finished()
+
+ SequentialAnimation {
+ id: animation
+ PauseAnimation {
+ duration: 1500
+ }
+ PropertyAction {
+ target: root
+ property: "state"
+ value: "coffee"
+ }
+ PauseAnimation {
+ duration: 1500
+ }
+ PropertyAction {
+ target: root
+ property: "state"
+ value: "milk"
+ }
+ PauseAnimation {
+ duration: 1500
+ }
+ ScriptAction {
+ script: root.finished()
+ }
+ }
+
+ Behavior on cup.coffeeAmount {
+ PropertyAnimation {
+
+ }
+ }
+
+ Behavior on cup.milkAmount {
+ PropertyAnimation {
+ }
+ }
+}
+//! [0]
diff --git a/doc/src/snippets/coffee/BrewingForm.ui.qml b/doc/src/snippets/coffee/BrewingForm.ui.qml
new file mode 100644
index 00000000..8de3d880
--- /dev/null
+++ b/doc/src/snippets/coffee/BrewingForm.ui.qml
@@ -0,0 +1,122 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Item {
+ id: root
+ width: Constants.width
+ height: Constants.height
+ clip: true
+ property string coffeeName: qsTr("Cappucino")
+ property alias cup: cup
+
+ state: "initial state"
+
+ Rectangle {
+ id: rectangle
+ color: Constants.backgroundColor
+ anchors.fill: parent
+
+ CupForm {
+ id: cup
+ x: 256
+ y: 96
+ anchors.horizontalCenterOffset: 150
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ questionVisible: false
+ coffeeLabel: ""
+ showLabels: false
+ milkAmount: 0
+ coffeeAmount: 0
+ sugarAmount: 0
+ }
+ }
+ Text {
+ id: brewLabel
+
+ color: "#ffffff"
+ text: qsTr("Making ") + root.coffeeName
+ anchors.topMargin: Constants.defaultMargin
+ anchors.top: parent.top
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 64
+ font.capitalization: Font.AllUppercase
+ }
+ states: [
+ State {
+ name: "coffee"
+
+ PropertyChanges {
+ target: cup
+ coffeeAmount: 4
+ }
+ },
+ State {
+ name: "milk"
+ PropertyChanges {
+ target: cup
+ milkAmount: 6
+ coffeeAmount: 4
+ }
+
+ PropertyChanges {
+ target: brewLabel
+ text: root.coffeeName + qsTr(" Ready")
+ }
+ }
+ ]
+}
diff --git a/doc/src/snippets/coffee/ChoosingCoffee.ui.qml b/doc/src/snippets/coffee/ChoosingCoffee.ui.qml
new file mode 100644
index 00000000..8b9be8b9
--- /dev/null
+++ b/doc/src/snippets/coffee/ChoosingCoffee.ui.qml
@@ -0,0 +1,235 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Item {
+ id: root
+
+ width: Constants.width + Constants.leftSideBarWidth
+ height: Constants.height
+
+ property alias milkSlider: milkSlider
+ property alias sugarSlider: sugarSlider
+
+ property alias brewButtonSelection: brewButtonSelection
+ property bool selected: false
+ property alias brewButton: brewButton
+ property alias sideBar: sideBar
+ property alias backButton: backButton
+
+ property alias questionVisible: cup.questionVisible
+
+ property real coffeeAmount: 5
+
+ property bool inSettings: false
+
+ state: "initial state"
+
+ Rectangle {
+ id: rectangle
+ color: Constants.backgroundColor
+ anchors.fill: parent
+ }
+
+ Rectangle {
+ id: rightSideBar
+
+ x: 658
+ y: 0
+ width: Constants.leftSideBarWidth
+ height: 768
+ color: "#eec1a2"
+ visible: false
+ anchors.right: parent.right
+
+ Column {
+ spacing: 32
+ anchors.bottom: brewButton.top
+ anchors.bottomMargin: 100
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Slider {
+ id: milkSlider
+ width: 256
+ height: 48
+
+ to: 10
+ value: 6
+
+ Image {
+ x: 48
+ y: -12
+ source: "images/icons/contents/milk.png"
+ }
+ }
+ Slider {
+ id: sugarSlider
+
+ width: 256
+ height: 48
+ to: 10
+ stepSize: 1
+ value: 0
+
+ Image {
+ x: 48
+ y: -12
+ source: "images/icons/contents/sugar.png"
+ }
+ }
+ }
+
+ NavigationButton {
+ id: brewButton
+
+ text: "Brew"
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ anchors.rightMargin: Constants.defaultMargin
+ anchors.bottomMargin: Constants.defaultMargin
+ }
+ }
+
+ SideBar {
+ id: sideBar
+ width: Constants.leftSideBarWidth
+ }
+
+ states: [
+ State {
+ name: "initial state"
+ when: !root.selected && !root.inSettings
+ },
+ State {
+ name: "selected state"
+ when: root.selected
+
+ PropertyChanges {
+ target: cup
+
+ questionVisible: false
+ visible: true
+ }
+
+ PropertyChanges {
+ target: brewButton
+ visible: true
+ }
+
+ PropertyChanges {
+ target: brewButtonSelection
+ visible: true
+ }
+ },
+ State {
+ name: "settings"
+ when: root.inSettings
+ PropertyChanges {
+ target: cup
+ x: 354
+ y: 0
+ questionVisible: false
+ visible: true
+ milkAmount: milkSlider.value
+ sugarAmount: sugarSlider.value
+ }
+
+ PropertyChanges {
+ target: brewButton
+ visible: true
+ }
+
+ PropertyChanges {
+ target: backButton
+ opacity: 1
+ }
+
+ PropertyChanges {
+ target: rightSideBar
+ visible: true
+ }
+ }
+ ]
+
+ CupForm {
+ id: cup
+ anchors.right: rightSideBar.left
+ anchors.left: sideBar.right
+ visible: true
+ milkAmount: sideBar.currentMilk
+ coffeeAmount: sideBar.currentCoffeeAmount
+ coffeeLabel: sideBar.currentCoffee
+ questionVisible: true
+ }
+ NavigationButton {
+ id: backButton
+ text: "Back"
+ opacity: 0
+ anchors.leftMargin: Constants.defaultMargin
+ anchors.bottom: parent.bottom
+ anchors.left: sideBar.right
+ anchors.bottomMargin: Constants.defaultMargin
+ forward: false
+ }
+
+ NavigationButton {
+ id: brewButtonSelection
+
+ anchors.left: sideBar.right
+ anchors.leftMargin: Constants.defaultMargin
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: Constants.defaultMargin
+ visible: false
+ }
+}
diff --git a/doc/src/snippets/coffee/CoffeeButton.qml b/doc/src/snippets/coffee/CoffeeButton.qml
new file mode 100644
index 00000000..35480a9c
--- /dev/null
+++ b/doc/src/snippets/coffee/CoffeeButton.qml
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Image {
+ id: root
+ source: "images/icons/coffees/cappucino.png"
+ signal clicked
+
+ property int duration: 250
+ property alias text: label.text
+//! [0]
+ MouseArea {
+ anchors.fill: parent
+ onClicked: root.clicked()
+ onPressed: {
+ glow.visible = true
+ animation1.start()
+ animation2.start()
+ }
+ }
+//! [0]
+
+ Rectangle {
+ id: glow
+ visible: false
+
+ width: 250
+ height: 250
+ color: "#00000000"
+ radius: 125
+ scale: 1.05
+ border.color: "#ffffff"
+ }
+
+ Label {
+ id: label
+ x: 292
+ y: 252
+ text: qsTr("Label")
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#443224"
+ font.family: Constants.fontFamily
+ font.pixelSize: 28
+ }
+
+ PropertyAnimation {
+ target: glow
+ id: animation1
+ duration: root.duration
+ loops: 1
+ from: 1.05
+ to: 1.2
+ property: "scale"
+ }
+
+ ParallelAnimation {
+ id: animation2
+ SequentialAnimation {
+ PropertyAnimation {
+ target: glow
+ duration: root.duration
+ loops: 1
+ from: 0.2
+ to: 1.0
+ property: "opacity"
+ }
+ PropertyAnimation {
+ target: glow
+ duration: root.duration
+ loops: 1
+ from: 1.0
+ to: 0.0
+ property: "opacity"
+ }
+
+ PropertyAction {
+ target: glow
+ property: "visible"
+ value: false
+ }
+ }
+
+ SequentialAnimation {
+ PropertyAction {
+ target: glow
+ property: "border.width"
+ value: 20
+ }
+
+ PauseAnimation {
+ duration: 200
+ }
+
+ PropertyAnimation {
+ target: glow
+ duration: root.duration
+ loops: 1
+ from: 20
+ to: 10
+ property: "border.width"
+ }
+ }
+ }
+
+
+
+}
diff --git a/doc/src/snippets/coffee/Cup.qml b/doc/src/snippets/coffee/Cup.qml
new file mode 100644
index 00000000..c950a2ef
--- /dev/null
+++ b/doc/src/snippets/coffee/Cup.qml
@@ -0,0 +1,4 @@
+import QtQuick 2.4
+
+CupForm {
+}
diff --git a/doc/src/snippets/coffee/CupForm.ui.qml b/doc/src/snippets/coffee/CupForm.ui.qml
new file mode 100644
index 00000000..bf82a9ff
--- /dev/null
+++ b/doc/src/snippets/coffee/CupForm.ui.qml
@@ -0,0 +1,197 @@
+import QtQuick 2.7
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Item {
+ id: root
+
+ width: 768
+ height: 768
+ property alias questionVisible: question.visible
+ property bool showLabels: true
+ property alias coffeeLabel: cappuccinoLabel.text
+
+ property real sugarAmount: 2
+ property real milkAmount: 4
+ property real coffeeAmount: 4
+
+ Rectangle {
+ id: rectangle
+ color: "#443224"
+ anchors.fill: parent
+
+ Image {
+ id: background
+ x: 12
+ y: 170
+ source: "images/cup structure/cup elements/coffee_cup_back.png"
+ }
+
+ Item {
+ id: foam
+ x: 12
+ width: 457
+ anchors.topMargin: milk.anchors.topMargin - 40
+ anchors.bottom: background.bottom
+ anchors.top: background.top
+ clip: true
+ Image {
+ anchors.bottom: parent.bottom
+ source: "images/cup structure/liquids/liquid_foam.png"
+ }
+ }
+
+ Item {
+ id: milk
+ x: 12
+ width: 457
+ anchors.topMargin: 400 - coffee.height - root.milkAmount * 15 + 20
+ anchors.bottom: background.bottom
+ anchors.top: background.top
+ clip: true
+ Image {
+ source: "images/cup structure/liquids/liquid_milk.png"
+ anchors.bottom: parent.bottom
+ }
+ }
+
+ Item {
+ id: coffee
+ x: 12
+ width: 457
+ height: root.coffeeAmount * 40
+ anchors.bottomMargin: 0
+ anchors.bottom: background.bottom
+ clip: true
+
+ Image {
+ anchors.bottom: parent.bottom
+ source: "images/cup structure/liquids/liquid_coffee.png"
+ }
+ }
+
+ Image {
+ id: cupFront
+ x: 11
+ y: 170
+ source: "images/cup structure/cup elements/coffee_cup_front.png"
+ }
+
+ Text {
+ x: 499
+ y: 370
+ color: "#ffffff"
+ text: qsTr("Hot Milk")
+ font.capitalization: Font.AllUppercase
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 18
+ visible: root.showLabels
+ }
+
+ Text {
+ x: 486
+ y: 468
+ color: "#ffffff"
+ text: qsTr("Espresso Coffee")
+ font.capitalization: Font.AllUppercase
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 18
+ visible: root.showLabels
+ }
+
+ Image {
+ x: 414
+ y: 274
+ visible: root.showLabels
+ source: "images/ui controls/line.png"
+ }
+
+ Text {
+ x: 512
+ y: 259
+ color: "#ffffff"
+ text: qsTr("Milk Foam")
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 18
+ font.capitalization: Font.AllUppercase
+ visible: root.showLabels
+ }
+
+ Image {
+ x: 404
+ y: 382
+ source: "images/ui controls/line.png"
+ visible: root.showLabels
+ }
+
+ Image {
+ x: 388
+ y: 482
+ source: "images/ui controls/line.png"
+ visible: root.showLabels
+ }
+
+ Text {
+ id: cappuccinoLabel
+ color: "#ffffff"
+ text: qsTr("CAPPUCCINO")
+ visible: !question.visible
+ anchors.top: parent.top
+ anchors.topMargin: 32
+ anchors.left: parent.left
+ anchors.leftMargin: Constants.defaultMargin
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 64
+ font.capitalization: Font.AllUppercase
+ }
+
+ Item {
+ id: sugarItem
+ x: 181
+ y: 419
+ width: 119
+ height: 111
+ rotation: -45
+
+ Rectangle {
+ x: 21
+ y: 8
+ width: 48
+ height: 48
+ color: "#ffffff"
+ opacity: root.sugarAmount / 10
+ }
+
+ Rectangle {
+ x: 74
+ y: 40
+ width: 32
+ height: 32
+ color: "#ffffff"
+ visible: root.sugarAmount > 5
+ opacity: root.sugarAmount / 30
+ }
+
+ Rectangle {
+ x: 45
+ y: 62
+ width: 24
+ height: 24
+ color: "#ffffff"
+ opacity: root.sugarAmount / 25
+ }
+ }
+ }
+ Image {
+ id: question
+ y: 170
+ anchors.left: parent.left
+ anchors.leftMargin: 11
+ source: "images/cup structure/coffee_cup_large.png"
+ }
+}
diff --git a/doc/src/snippets/coffee/EmptyCup.qml b/doc/src/snippets/coffee/EmptyCup.qml
new file mode 100644
index 00000000..4d7a3ec5
--- /dev/null
+++ b/doc/src/snippets/coffee/EmptyCup.qml
@@ -0,0 +1,4 @@
+import QtQuick 2.4
+
+EmptyCupForm {
+}
diff --git a/doc/src/snippets/coffee/EmptyCupForm.ui.qml b/doc/src/snippets/coffee/EmptyCupForm.ui.qml
new file mode 100644
index 00000000..c70b3c5e
--- /dev/null
+++ b/doc/src/snippets/coffee/EmptyCupForm.ui.qml
@@ -0,0 +1,51 @@
+import QtQuick 2.4
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Item {
+ id: root
+ width: Constants.width
+ height: Constants.height
+ property alias continueButton: continueButton
+
+ state: "initial state"
+
+ Rectangle {
+ id: rectangle
+ color: Constants.backgroundColor
+ anchors.fill: parent
+
+ Image {
+ id: image
+ x: 284
+ y: 174
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ source: "images/cup structure/coffee_cup_outline.png"
+ }
+ }
+
+ Text {
+ id: brewLabel
+ x: 84
+ y: 26
+ color: "#ffffff"
+ text: qsTr("Please insert cup into tray")
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 64
+ font.capitalization: Font.AllUppercase
+ }
+
+ NavigationButton {
+ id: continueButton
+ x: 324
+ y: 650
+ text: "Continue"
+ anchors.bottomMargin: Constants.defaultMargin
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ }
+}
diff --git a/doc/src/snippets/coffee/NavigationButton.ui.qml b/doc/src/snippets/coffee/NavigationButton.ui.qml
new file mode 100644
index 00000000..66216e6f
--- /dev/null
+++ b/doc/src/snippets/coffee/NavigationButton.ui.qml
@@ -0,0 +1,95 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
+
+Row {
+ id: row
+
+ signal clicked
+
+ property alias text: brewLabel.text
+
+ property bool forward: true
+ layoutDirection: row.forward ? Qt.LeftToRight : Qt.RightToLeft
+
+ spacing: 17
+
+ Text {
+ id: brewLabel
+ color: "#ffffff"
+ text: qsTr("Brew Me a CUP")
+ font.family: Constants.fontFamily
+ wrapMode: Text.WrapAnywhere
+ font.pixelSize: 64
+ font.capitalization: Font.AllUppercase
+ }
+
+ Image {
+ id: image
+
+ anchors.verticalCenter: parent.verticalCenter
+ source: row.forward ? "images/ui controls/buttons/go/white.png" : "images/ui controls/buttons/back/white.png"
+ scale: mouseArea.containsMouse ? 1.1 : 1
+ MouseArea {
+ id: mouseArea
+ hoverEnabled: true
+
+ anchors.fill: parent
+ Connections {
+ target: mouseArea
+ onClicked: row.clicked()
+ }
+ }
+ }
+}
diff --git a/doc/src/snippets/coffee/SideBar.qml b/doc/src/snippets/coffee/SideBar.qml
new file mode 100644
index 00000000..bd11f16b
--- /dev/null
+++ b/doc/src/snippets/coffee/SideBar.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+
+SideBarForm {
+ id: sideBar
+ property string currentCoffee: qsTr("Cappucino")
+ signal coffeeSelected
+ property real currentMilk: 0
+ property real currentCoffeeAmount: 4
+
+ Behavior on currentMilk {
+ NumberAnimation { duration: 250 }
+ }
+
+ Behavior on currentCoffeeAmount {
+ NumberAnimation { duration: 250 }
+ }
+
+ macchiatoButton.onClicked: {
+ sideBar.currentCoffee = qsTr("Macchiato")
+ sideBar.currentMilk = 1
+ sideBar.currentCoffeeAmount = 4
+ sideBar.coffeeSelected()
+ }
+
+ latteButton.onClicked: {
+ sideBar.currentCoffee = qsTr("Latte")
+ sideBar.currentMilk = 10
+ sideBar.currentCoffeeAmount = 3
+ sideBar.coffeeSelected()
+ }
+
+ espressoButton.onClicked: {
+ sideBar.currentCoffee = qsTr("Espresso")
+ sideBar.currentMilk = 0
+ sideBar.currentCoffeeAmount = 4
+ sideBar.coffeeSelected()
+ }
+
+//! [0]
+ cappuccinoButton.onClicked: {
+ sideBar.currentCoffee = qsTr("Cappucino")
+ sideBar.currentMilk = 7
+ sideBar.currentCoffeeAmount = 3.5
+ sideBar.coffeeSelected()
+ }
+//! [0]
+}
diff --git a/doc/src/snippets/coffee/SideBarForm.ui.qml b/doc/src/snippets/coffee/SideBarForm.ui.qml
new file mode 100644
index 00000000..adcf0cc1
--- /dev/null
+++ b/doc/src/snippets/coffee/SideBarForm.ui.qml
@@ -0,0 +1,107 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.4
+import QtQuick.Layouts 1.3
+
+Flickable {
+ id: flickable
+ x: 0
+ y: 0
+ width: 354
+ height: 768
+
+ property alias macchiatoButton: macchiatoButton
+ property alias latteButton: latteButton
+ property alias espressoButton: espressoButton
+ property alias cappuccinoButton: cappuccinoButton
+
+ contentWidth: 250
+ boundsBehavior: Flickable.StopAtBounds
+ contentHeight: 1506
+ clip: true
+
+ Rectangle {
+ id: background
+ x: 0
+ width: 354
+ height: 1506
+ color: "#eec1a2"
+ }
+
+ ColumnLayout {
+ x: 52
+ y: 0
+ spacing: 64
+
+ CoffeeButton {
+ id: cappuccinoButton
+ text: "Cappuccino"
+ }
+
+ CoffeeButton {
+ id: espressoButton
+ text: "Espresso"
+ source: "images/icons/coffees/Espresso.png"
+ }
+
+ CoffeeButton {
+ id: latteButton
+ text: "Latte"
+ source: "images/icons/coffees/Latte.png"
+ }
+
+ CoffeeButton {
+ id: macchiatoButton
+ text: "Macchiato"
+ source: "images/icons/coffees/Macchiato.png"
+ }
+ }
+}
diff --git a/doc/src/snippets/coffee/coffee.pro b/doc/src/snippets/coffee/coffee.pro
new file mode 100644
index 00000000..0c9dce00
--- /dev/null
+++ b/doc/src/snippets/coffee/coffee.pro
@@ -0,0 +1,35 @@
+QT += qml quick
+
+CONFIG += c++11
+
+SOURCES += main.cpp
+
+RESOURCES += qml.qrc
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH = $$PWD/imports
+
+# Additional import path used to resolve QML modules just for Qt Quick Designer
+QML_DESIGNER_IMPORT_PATH =
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which as been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+DISTFILES += \
+ images/ui components/loader/loading bar 1.png \
+ images/ui components/loader/loading bar 2.png \
+ images/ui components/loader/loading bar 3.png \
+ images/ui components/loader/loading bg.png
diff --git a/doc/src/snippets/coffee/coffee.qdoc b/doc/src/snippets/coffee/coffee.qdoc
new file mode 100644
index 00000000..c274870c
--- /dev/null
+++ b/doc/src/snippets/coffee/coffee.qdoc
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+
+ \example coffee
+ \title Coffee Machine Example
+ \ingroup examples-tutorials
+
+ \borderedimage coffee_machine_overview.png
+
+ The coffee machine application lets you choose a type of coffee on the
+ left side of the main screen. After selection, the app displays what
+ the coffee blend will contain (ratio coffee/hot milk/milk foam).
+ This can be modified with two sliders. When the brew has been started,
+ the app shows an animated display of the brewing process, then returns
+ to the start screen.
+
+ First the start screen \c Animationflowform is displayed, showing a
+ sidebar with several types of coffee, and an empty cup on the right
+ screen.
+
+ Selecting a coffee type - for example, cappuccino - triggers \c animation1
+ and \c animation2 in CoffeeButton.qml. On the right side, you will see
+ the coffee blend you selected.
+
+ \snippet coffee/CoffeeButton.qml 0
+
+ It also triggers cappuccinoButton.onClicked(), which sets the default
+ mix for the coffee type selected:
+
+ \snippet coffee/SideBar.qml 0
+
+ \borderedimage coffee_machine_selection.png
+ \caption Coffee blend cappuccino
+
+ \c sideBar.coffeeSelected() \c sets applicationFlow.state to "selection"
+
+ If you click "Brew me a cup", choosingCoffee.brewButtonSelection.onClicked
+ is triggered:
+
+ \snippet coffee/ApplicationFlow.qml 0
+
+ On the right side of the screen, you will see two sliders, one for
+ the amount of milk, and one for sugar. They will have default values,
+ but can be modified by the user.
+
+ \borderedimage coffee_machine_modify.png
+
+ If you click on \c Brew, \c choosingCoffee.brewButton.onClicked() is triggered,
+ which displays a screen with the message "Please insert cup into tray".
+
+ \snippet coffee/ApplicationFlow.qml 2
+
+ \borderedimage coffee_machine_emptycup.png
+
+ Clicking on \c Continue starts the brewing of the coffee type you
+ selected.
+
+ \snippet coffee/ApplicationFlow.qml 1
+
+ The brewing process is defined as follows in \c Brewing.qml:
+
+ \snippet coffee/Brewing.qml 0
+
+ After completion, the application returns to the start screen.
+*/
diff --git a/doc/src/snippets/coffee/images/cup structure/coffee_cup_large.png b/doc/src/snippets/coffee/images/cup structure/coffee_cup_large.png
new file mode 100644
index 00000000..e69889af
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/coffee_cup_large.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/coffee_cup_outline.png b/doc/src/snippets/coffee/images/cup structure/coffee_cup_outline.png
new file mode 100644
index 00000000..941e0c14
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/coffee_cup_outline.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_back.png b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_back.png
new file mode 100644
index 00000000..045732ca
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_back.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_coverplate.png b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_coverplate.png
new file mode 100644
index 00000000..48041c53
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_coverplate.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_front.png b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_front.png
new file mode 100644
index 00000000..e2c2a774
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_front.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/liquids/liquid_coffee.png b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_coffee.png
new file mode 100644
index 00000000..0fff3e39
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_coffee.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/liquids/liquid_foam.png b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_foam.png
new file mode 100644
index 00000000..d07496ce
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_foam.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/cup structure/liquids/liquid_milk.png b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_milk.png
new file mode 100644
index 00000000..3235b4d6
--- /dev/null
+++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_milk.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/coffees/Americano.png b/doc/src/snippets/coffee/images/icons/coffees/Americano.png
new file mode 100644
index 00000000..b1c0c384
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/coffees/Americano.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/coffees/Espresso.png b/doc/src/snippets/coffee/images/icons/coffees/Espresso.png
new file mode 100644
index 00000000..faac7593
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/coffees/Espresso.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/coffees/Latte.png b/doc/src/snippets/coffee/images/icons/coffees/Latte.png
new file mode 100644
index 00000000..d9e4e616
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/coffees/Latte.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png b/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png
new file mode 100644
index 00000000..fb7c1c91
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/coffees/cappucino.png b/doc/src/snippets/coffee/images/icons/coffees/cappucino.png
new file mode 100644
index 00000000..d5557e8d
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/coffees/cappucino.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/contents/coffee.png b/doc/src/snippets/coffee/images/icons/contents/coffee.png
new file mode 100644
index 00000000..c4b35be1
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/contents/coffee.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/contents/milk.png b/doc/src/snippets/coffee/images/icons/contents/milk.png
new file mode 100644
index 00000000..19709cfe
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/contents/milk.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/icons/contents/sugar.png b/doc/src/snippets/coffee/images/icons/contents/sugar.png
new file mode 100644
index 00000000..ac83a7f3
--- /dev/null
+++ b/doc/src/snippets/coffee/images/icons/contents/sugar.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/ui controls/buttons/back/white.png b/doc/src/snippets/coffee/images/ui controls/buttons/back/white.png
new file mode 100644
index 00000000..633f0f30
--- /dev/null
+++ b/doc/src/snippets/coffee/images/ui controls/buttons/back/white.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/ui controls/buttons/go/white.png b/doc/src/snippets/coffee/images/ui controls/buttons/go/white.png
new file mode 100644
index 00000000..0172138d
--- /dev/null
+++ b/doc/src/snippets/coffee/images/ui controls/buttons/go/white.png
Binary files differ
diff --git a/doc/src/snippets/coffee/images/ui controls/line.png b/doc/src/snippets/coffee/images/ui controls/line.png
new file mode 100644
index 00000000..bd4484ef
--- /dev/null
+++ b/doc/src/snippets/coffee/images/ui controls/line.png
Binary files differ
diff --git a/doc/src/snippets/gs/notepad1.cpp b/doc/src/snippets/coffee/imports/Coffee/Constants.qml
index 11362d26..8816a9f5 100644
--- a/doc/src/snippets/gs/notepad1.cpp
+++ b/doc/src/snippets/coffee/imports/Coffee/Constants.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@@ -48,32 +48,21 @@
**
****************************************************************************/
-//! [all]
-//! [0]
-#include "notepad.h"
-#include "ui_notepad.h"
-//! [0]
-//! [1]
-Notepad::Notepad(QWidget *parent) :
-//! [1]
-//! [2]
- QMainWindow(parent),
-//! [2]
-//! [3]
- ui(new Ui::Notepad)
-//! [3]
-{
+pragma Singleton
+import QtQuick 2.6
-//! [4]
- ui->setupUi(this);
-//! [4]
-}
+QtObject {
+ property FontLoader fontLoader: FontLoader {
+ id: fontLoader
+ source: "TitilliumWeb-Regular.ttf"
+ }
+ readonly property alias fontFamily: fontLoader.name
+
+ readonly property int width: 1024
+ readonly property int height: 768
+ readonly property int leftSideBarWidth: 366
-//! [5]
-Notepad::~Notepad()
-{
- delete ui;
+ readonly property color backgroundColor: "#443224"
+ readonly property int defaultMargin: 8
}
-//! [5]
-//! [all]
diff --git a/doc/src/snippets/coffee/imports/Coffee/TitilliumWeb-Regular.ttf b/doc/src/snippets/coffee/imports/Coffee/TitilliumWeb-Regular.ttf
new file mode 100644
index 00000000..6da82193
--- /dev/null
+++ b/doc/src/snippets/coffee/imports/Coffee/TitilliumWeb-Regular.ttf
Binary files differ
diff --git a/doc/src/snippets/coffee/imports/Coffee/qmldir b/doc/src/snippets/coffee/imports/Coffee/qmldir
new file mode 100644
index 00000000..616ac203
--- /dev/null
+++ b/doc/src/snippets/coffee/imports/Coffee/qmldir
@@ -0,0 +1 @@
+singleton Constants 1.0 Constants.qml
diff --git a/doc/src/snippets/gs/notepad1.h b/doc/src/snippets/coffee/main.cpp
index 1f25c1a7..40c7e757 100644
--- a/doc/src/snippets/gs/notepad1.h
+++ b/doc/src/snippets/coffee/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@@ -48,39 +48,19 @@
**
****************************************************************************/
-#ifndef NOTEPAD_H
-#define NOTEPAD_H
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
-//! [all]
-//! [1]
-#include <QMainWindow>
-//! [1]
-
-//! [2]
-namespace Ui {
-class Notepad;
-}
-//! [2]
-
-//! [3]
-class Notepad : public QMainWindow
+int main(int argc, char *argv[])
{
- Q_OBJECT
-//! [3]
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication app(argc, argv);
-//! [4]
-public:
- explicit Notepad(QWidget *parent = 0);
-//! [4]
-//! [5]
- ~Notepad();
-//! [5]
+ QQmlApplicationEngine engine;
+ engine.addImportPath(":/imports");
+ engine.load(QUrl(QLatin1String("qrc:/main.qml")));
+ if (engine.rootObjects().isEmpty())
+ return -1;
-//! [6]
-private:
- Ui::Notepad *ui;
-//! [6]
-};
-//! [all]
-
-#endif // NOTEPAD_H
+ return app.exec();
+}
diff --git a/doc/src/snippets/gs/notepad2.h b/doc/src/snippets/coffee/main.qml
index 237f8a32..14488156 100644
--- a/doc/src/snippets/gs/notepad2.h
+++ b/doc/src/snippets/coffee/main.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@@ -48,25 +48,17 @@
**
****************************************************************************/
-//! [all]
-namespace Ui {
-class Notepad;
-}
-
-class Notepad : public QMainWindow
-{
- Q_OBJECT
+import QtQuick 2.7
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import Coffee 1.0
-public:
- explicit Notepad(QWidget *parent = 0);
- ~Notepad();
+ApplicationWindow {
+ visible: true
+ width: Constants.width
+ height: Constants.height
+ title: qsTr("Coffee")
-//! [1]
-private slots:
- void on_quitButton_clicked();
-//! [1]
-
-private:
- Ui::Notepad *ui;
-};
-//! [all]
+ ApplicationFlow {
+ }
+}
diff --git a/doc/src/snippets/coffee/qml.qrc b/doc/src/snippets/coffee/qml.qrc
new file mode 100644
index 00000000..2f8c143b
--- /dev/null
+++ b/doc/src/snippets/coffee/qml.qrc
@@ -0,0 +1,39 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ <file>qtquickcontrols2.conf</file>
+ <file>images/cup structure/cup elements/coffee_cup_back.png</file>
+ <file>images/cup structure/cup elements/coffee_cup_coverplate.png</file>
+ <file>images/cup structure/cup elements/coffee_cup_front.png</file>
+ <file>images/cup structure/liquids/liquid_coffee.png</file>
+ <file>images/cup structure/liquids/liquid_foam.png</file>
+ <file>images/cup structure/liquids/liquid_milk.png</file>
+ <file>images/cup structure/coffee_cup_large.png</file>
+ <file>images/cup structure/coffee_cup_outline.png</file>
+ <file>images/icons/contents/coffee.png</file>
+ <file>images/icons/contents/milk.png</file>
+ <file>images/icons/contents/sugar.png</file>
+ <file>images/icons/coffees/Americano.png</file>
+ <file>images/icons/coffees/cappucino.png</file>
+ <file>images/icons/coffees/Espresso.png</file>
+ <file>images/icons/coffees/Latte.png</file>
+ <file>images/icons/coffees/Macchiato.png</file>
+ <file>images/ui controls/buttons/back/white.png</file>
+ <file>images/ui controls/buttons/go/white.png</file>
+ <file>images/ui controls/line.png</file>
+ <file>CoffeeButton.qml</file>
+ <file>CupForm.ui.qml</file>
+ <file>SideBar.qml</file>
+ <file>SideBarForm.ui.qml</file>
+ <file>NavigationButton.ui.qml</file>
+ <file>ApplicationFlow.qml</file>
+ <file>ApplicationFlowForm.ui.qml</file>
+ <file>EmptyCupForm.ui.qml</file>
+ <file>Brewing.qml</file>
+ <file>BrewingForm.ui.qml</file>
+ <file>ChoosingCoffee.ui.qml</file>
+ <file>imports/Coffee/Constants.qml</file>
+ <file>imports/Coffee/qmldir</file>
+ <file>imports/Coffee/TitilliumWeb-Regular.ttf</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/coffee/qtquickcontrols2.conf b/doc/src/snippets/coffee/qtquickcontrols2.conf
new file mode 100644
index 00000000..e16b5bb5
--- /dev/null
+++ b/doc/src/snippets/coffee/qtquickcontrols2.conf
@@ -0,0 +1,10 @@
+[Controls]
+Style=Material
+
+[Universal]
+Theme=Light
+
+[Material]
+Theme=Dark
+Primary=Grey
+Accent=White
diff --git a/doc/src/snippets/qtcluster/circularindicator.cpp b/doc/src/snippets/qtcluster/circularindicator.cpp
new file mode 100644
index 00000000..7b2a1f21
--- /dev/null
+++ b/doc/src/snippets/qtcluster/circularindicator.cpp
@@ -0,0 +1,263 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#include "circularindicator.h"
+
+CircularIndicator::CircularIndicator(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+ , mStartAngle(0)
+ , mEndAngle(360)
+ , mMinimumValue(0.0)
+ , mMaximumValue(100.0)
+ , mValue(0.0)
+ , mLineWidth(10)
+ , mProgressColor(QColor(255, 0, 0))
+ , mBackgroundColor(QColor(240, 240, 240))
+ , mPadding(1)
+{
+}
+
+CircularIndicator::~CircularIndicator()
+{
+}
+
+int CircularIndicator::startAngle() const
+{
+ return mStartAngle;
+}
+
+void CircularIndicator::setStartAngle(int angle)
+{
+ if (angle == mStartAngle)
+ return;
+
+ mStartAngle = angle;
+ emit startAngleChanged(mStartAngle);
+ update();
+}
+
+int CircularIndicator::endAngle() const
+{
+ return mEndAngle;
+}
+
+void CircularIndicator::setEndAngle(int angle)
+{
+ if (angle == mEndAngle)
+ return;
+
+ mEndAngle = angle;
+ emit endAngleChanged(mEndAngle);
+ update();
+}
+
+qreal CircularIndicator::minimumValue() const
+{
+ return mMinimumValue;
+}
+
+void CircularIndicator::setMinimumValue(qreal value)
+{
+ if (qFuzzyCompare(value, mMinimumValue))
+ return;
+
+ if (value > mMaximumValue) {
+ qWarning() << this << "\nMinimum value can't exceed maximum value.";
+ return;
+ }
+
+ mMinimumValue = value;
+ emit minimumValueChanged(mMinimumValue);
+ update();
+}
+
+qreal CircularIndicator::maximumValue() const
+{
+ return mMaximumValue;
+}
+
+void CircularIndicator::setMaximumValue(qreal value)
+{
+ if (qFuzzyCompare(value, mMaximumValue))
+ return;
+
+ if (value < mMinimumValue) {
+ qWarning() << this << "\nMaximum value can't be less than minimum value.";
+ return;
+ }
+
+ mMaximumValue = value;
+ emit maximumValueChanged(value);
+ update();
+}
+
+qreal CircularIndicator::value() const
+{
+ return mValue;
+}
+
+void CircularIndicator::setValue(qreal value)
+{
+ if (qFuzzyCompare(value, mValue))
+ return;
+
+ if (value < mMinimumValue) {
+ qWarning() << this << "\nValue can't be less than minimum value.";
+ return;
+ }
+
+ if (value > mMaximumValue) {
+ qWarning() << this << "\nValue can't exceed maximum value.";
+ return;
+ }
+
+ mValue = value;
+ emit valueChanged(mValue);
+ update();
+}
+
+int CircularIndicator::lineWidth() const
+{
+ return mLineWidth;
+}
+
+void CircularIndicator::setLineWidth(int width)
+{
+ if (width == mLineWidth)
+ return;
+
+ mLineWidth = width;
+ emit lineWidthChanged(mLineWidth);
+ update();
+}
+
+QColor CircularIndicator::progressColor() const
+{
+ return mProgressColor;
+}
+
+void CircularIndicator::setProgressColor(QColor color)
+{
+ if (color == mProgressColor)
+ return;
+
+ mProgressColor = color;
+ emit progressColorChanged(mProgressColor);
+ update();
+}
+
+QColor CircularIndicator::backgroundColor() const
+{
+ return mBackgroundColor;
+}
+
+void CircularIndicator::setBackgroundColor(QColor color)
+{
+ if (color == mBackgroundColor)
+ return;
+
+ mBackgroundColor = color;
+ emit backgroundColorChanged(mBackgroundColor);
+ update();
+}
+
+int CircularIndicator::padding() const
+{
+ return mPadding;
+}
+
+void CircularIndicator::setPadding(int padding)
+{
+ if (padding == mPadding)
+ return;
+
+ mPadding = padding;
+ emit paddingChanged(mPadding);
+ update();
+}
+
+void CircularIndicator::paint(QPainter *painter)
+{
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ int indicatorSize = qMin(width(), height()) - mPadding * 2 - mLineWidth;
+
+ if (indicatorSize <= 0)
+ return;
+
+ QRect indicatorRect(width() / 2 - indicatorSize / 2,
+ height() / 2 - indicatorSize / 2,
+ indicatorSize,
+ indicatorSize);
+
+ QPen pen;
+ pen.setCapStyle(Qt::FlatCap);
+ pen.setWidth(mLineWidth);
+ pen.setColor(mBackgroundColor);
+ painter->setPen(pen);
+
+ int endAngle = (qAbs(mEndAngle) > 360) ? mEndAngle % 360 : mEndAngle;
+
+ // See http://doc.qt.io/qt-5/qpainter.html#drawArc for details
+ int minimumAngle = (90 - mStartAngle) * 16;
+ int maximumAngle = (90 - endAngle) * 16 - minimumAngle;
+
+ painter->drawArc(indicatorRect, minimumAngle, maximumAngle);
+
+ if (qFuzzyCompare(mValue, mMinimumValue))
+ return;
+
+ pen.setColor(mProgressColor);
+ painter->setPen(pen);
+
+ int currentAngle = ((mValue - mMinimumValue) / (mMaximumValue - mMinimumValue)) * maximumAngle;
+
+ painter->drawArc(indicatorRect, minimumAngle, currentAngle);
+}
diff --git a/doc/src/snippets/qtcluster/circularindicator.h b/doc/src/snippets/qtcluster/circularindicator.h
new file mode 100644
index 00000000..d8b0a83f
--- /dev/null
+++ b/doc/src/snippets/qtcluster/circularindicator.h
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#ifndef CIRCULARINDICATOR_H
+#define CIRCULARINDICATOR_H
+
+#include <QQuickPaintedItem>
+#include <QPainter>
+
+class CircularIndicator : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(int startAngle READ startAngle WRITE setStartAngle NOTIFY startAngleChanged)
+ Q_PROPERTY(int endAngle READ endAngle WRITE setEndAngle NOTIFY endAngleChanged)
+ Q_PROPERTY(qreal minimumValue READ minimumValue WRITE setMinimumValue NOTIFY minimumValueChanged)
+ Q_PROPERTY(qreal maximumValue READ maximumValue WRITE setMaximumValue NOTIFY maximumValueChanged)
+ Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
+ Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth NOTIFY lineWidthChanged)
+ Q_PROPERTY(QColor progressColor READ progressColor WRITE setProgressColor NOTIFY progressColorChanged)
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
+ Q_PROPERTY(int padding READ padding WRITE setPadding NOTIFY paddingChanged)
+
+public:
+ CircularIndicator(QQuickItem *parent = 0);
+ ~CircularIndicator();
+
+ int startAngle() const;
+ int endAngle() const;
+ qreal minimumValue() const;
+ qreal maximumValue() const;
+ qreal value() const;
+ int lineWidth() const;
+ QColor progressColor() const;
+ QColor backgroundColor() const;
+ int padding() const;
+
+public slots:
+ void setStartAngle(int angle);
+ void setEndAngle(int angle);
+ void setMinimumValue(qreal value);
+ void setMaximumValue(qreal value);
+ void setValue(qreal value);
+ void setLineWidth(int width);
+ void setProgressColor(QColor color);
+ void setBackgroundColor(QColor color);
+ void setPadding(int padding);
+
+signals:
+ void startAngleChanged(int);
+ void endAngleChanged(int);
+ void minimumValueChanged(qreal);
+ void maximumValueChanged(qreal);
+ void valueChanged(qreal);
+ void lineWidthChanged(int);
+ void progressColorChanged(QColor);
+ void backgroundColorChanged(QColor);
+ void paddingChanged(int);
+
+protected:
+ void paint(QPainter *painter);
+
+private:
+ int mStartAngle;
+ int mEndAngle;
+ qreal mMinimumValue;
+ qreal mMaximumValue;
+ qreal mValue;
+ int mLineWidth;
+ QColor mProgressColor;
+ QColor mBackgroundColor;
+ int mPadding;
+};
+
+#endif // CIRCULARINDICATOR_H
diff --git a/doc/src/snippets/qtcluster/designerImports/ClusterDemo/ValueSource.qml b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/ValueSource.qml
new file mode 100644
index 00000000..40286067
--- /dev/null
+++ b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/ValueSource.qml
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+pragma Singleton
+import QtQuick 2.6
+
+Item {
+ id: valueSource
+
+ property real kph: 30
+ property real consumeKW: 0
+ property real maxConsumeKWValue: 90
+ property real maxChargeKWValue: 40
+ property real chargeKW: 10
+ property real maxRange: 600
+ property real range: (batteryLevel / 100) * maxRange
+
+ property bool runningInDesigner: true
+
+ property var consumption: [300, 600, 700, 800, 900, 700, 600, 300, 50, 50, -100, 50, -100, -150,
+ -200, 50, 150, 200, 300, 200, 300, 200, 500, 50, -100, -100, -150, -80, 50, 300, 600, 700, 800,
+ 600, 700, 300, 50, 50]
+
+ property var turnSignal
+ property var currentDate: new Date()
+ //property string date: currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM")
+ //property string time: currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm")
+ property string date: currentDate.toLocaleDateString(Qt.locale("en_GB"))
+ property string time: currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm")
+
+ property real latitude: 0
+ property real longitude: 0
+ property real direction: 0
+ property bool lowBeam: false
+ property int carId: 4
+ property bool lightFailure: true
+ property bool flatTire: false
+
+ property bool frontLeftOpen: false
+ property bool frontRightOpen: true
+ property bool rearLeftDoorOpen: false
+ property bool rearRighDoorOpen: true
+ property bool hoodOpen: false
+ property bool trunkOpen: true
+
+ property double batteryLevel: 45
+ property double fuelLevel: 55
+ property int gear: -1
+ property bool parkingBrake: true
+ // TODO: These two are hacks. View change messages might not come through CAN.
+ property bool viewChange: false
+ property bool rightViewChange: false
+ property string gearString: "1"
+
+ property int rpm: 1450
+ property double engineTemperature: 40
+
+ property int totalDistance: 42300
+ property int kmSinceCharge: 8
+ property int avRangePerCharge: 425
+ property int energyPerKm: 324
+
+ property real totalDistanceSince: 10
+}
diff --git a/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.cpp b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.cpp
new file mode 100644
index 00000000..14e73660
--- /dev/null
+++ b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.cpp
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or 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.GPL2 and 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-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../../etcprovider.h"
+#include "../../circularindicator.h"
+#include "../../gauge.h"
+
+#include <QtQml/qqmlextensionplugin.h>
+
+#include <QDebug>
+
+class ClusterDemoPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+public:
+ ClusterDemoPlugin(QObject *parent = 0) : QQmlExtensionPlugin(parent) {}
+ void registerTypes(const char *) Q_DECL_OVERRIDE
+ {
+ qmlRegisterType<CircularIndicator>("ClusterDemo", 1, 0, "CircularIndicator");
+ qmlRegisterType<Gauge>("ClusterDemo", 1, 0, "GaugeFiller");
+ qmlRegisterSingletonType(QUrl("qrc:/ValueSource.qml"), "ClusterDemo", 1, 0, "ValueSource");
+ }
+
+ void initializeEngine(QQmlEngine *engine, const char *uri) Q_DECL_OVERRIDE
+ {
+ EtcProvider *etcProvider = new EtcProvider();
+ etcProvider->setBaseUrl(QUrl("qrc:///images/"));
+ engine->addImageProvider("etc", etcProvider);
+ QQmlExtensionPlugin::initializeEngine(engine, uri);
+ }
+};
+
+#include "plugin.moc"
diff --git a/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.pro b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.pro
new file mode 100644
index 00000000..ab910650
--- /dev/null
+++ b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.pro
@@ -0,0 +1,40 @@
+CXX_MODULE = qml
+TARGET = clusterdemo
+QT += qml quick
+TEMPLATE = lib
+CONFIG -= debug
+CONFIG += release
+DESTDIR = $$PWD
+TARGET = $$qtLibraryTarget($$TARGET)
+
+OUT_PWD = $$PWD
+
+SOURCES += \
+ plugin.cpp \
+ ../../etcprovider.cpp \
+ ../../circularindicator.cpp \
+ ../../gauge.cpp \
+ ../../gaugenode.cpp
+
+HEADERS += \
+ ../../etcprovider.h \
+ ../../circularindicator.h \
+ ../../gauge.h \
+ ../../gaugenode.h
+
+RESOURCES += plugin.qrc \
+ ../../images.qrc \
+ ../../sportsimages.qrc \
+ ../../hybridimages.qrc
+
+
+DISTFILES = qmldir
+
+!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
+ copy_qmldir.target = $$OUT_PWD/qmldir
+ copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
+ copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
+ QMAKE_EXTRA_TARGETS += copy_qmldir
+ PRE_TARGETDEPS += $$copy_qmldir.target
+}
+
diff --git a/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.qrc b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.qrc
new file mode 100644
index 00000000..ef65b52d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/plugin.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>ValueSource.qml</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/designerImports/ClusterDemo/qmldir b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/qmldir
new file mode 100644
index 00000000..7b370ff0
--- /dev/null
+++ b/doc/src/snippets/qtcluster/designerImports/ClusterDemo/qmldir
@@ -0,0 +1,3 @@
+module ClusterDemo
+plugin clusterdemo
+singleton ValueSource 1.0 ValueSource.qml
diff --git a/doc/src/snippets/qtcluster/etcprovider.cpp b/doc/src/snippets/qtcluster/etcprovider.cpp
new file mode 100644
index 00000000..38ca5b93
--- /dev/null
+++ b/doc/src/snippets/qtcluster/etcprovider.cpp
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#include "etcprovider.h"
+
+#include <QFile>
+#include <QDebug>
+#include <qopenglfunctions.h>
+#include <qqmlfile.h>
+
+QImage EtcProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
+{
+ Q_UNUSED(requestedSize);
+ QImage ret;
+
+ QUrl url = QUrl(id);
+ if (url.isRelative() && !m_baseUrl.isEmpty())
+ url = m_baseUrl.resolved(url);
+ QString path = QQmlFile::urlToLocalFileOrQrc(url);
+ ret.load(path);
+ *size = ret.size();
+
+ return ret;
+}
+
+void EtcProvider::setBaseUrl(const QUrl &base)
+{
+ m_baseUrl = base;
+}
diff --git a/doc/src/snippets/qtcluster/etcprovider.h b/doc/src/snippets/qtcluster/etcprovider.h
new file mode 100644
index 00000000..965bc9fc
--- /dev/null
+++ b/doc/src/snippets/qtcluster/etcprovider.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ETCPROVIDER_H
+#define ETCPROVIDER_H
+
+#include <qopengl.h>
+#include <QQuickImageProvider>
+#include <QtQuick/QSGTexture>
+#include <QUrl>
+
+class EtcProvider : public QQuickImageProvider
+{
+public:
+ EtcProvider() : QQuickImageProvider(QQuickImageProvider::Image)
+ {}
+
+ QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);
+ void setBaseUrl(const QUrl &base);
+
+private:
+ QUrl m_baseUrl;
+};
+
+#endif // ETCPROVIDER_H
diff --git a/doc/src/snippets/qtcluster/gauge.cpp b/doc/src/snippets/qtcluster/gauge.cpp
new file mode 100644
index 00000000..e552456d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/gauge.cpp
@@ -0,0 +1,286 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#include "gauge.h"
+#include "gaugenode.h"
+
+#include <QtQuick/qsgnode.h>
+#include <QtQuick/qsgflatcolormaterial.h>
+#include <QtMath>
+
+Gauge::Gauge(QQuickItem *parent)
+ : QQuickItem(parent)
+ , m_value(0)
+ , m_angle(0)
+ , m_numVertices(128)
+ , m_fillWidth(10)
+ , m_radius(0)
+ , m_updateGeometry(true)
+ , m_lefttoright(true)
+ , m_minAngle(0)
+ , m_maxAngle(270)
+ , m_minValue(0)
+ , m_maxValue(240)
+ , m_doNotFill(false)
+ , m_color(QColor(255, 0, 0))
+ , arc_length(0)
+ , arc_dist_per_vertices(0)
+ , frontCutDeg(0.0)
+ , backCutDeg(0.0)
+ , frontCutRad(0.0)
+ , backCutRad(0.0)
+ , m_cutRad(0)
+{
+ setFlag(ItemHasContents, true);
+}
+
+Gauge::~Gauge()
+{
+}
+
+void Gauge::setValue(qreal value)
+{
+ if (m_value == value)
+ return;
+
+ m_value = value;
+ updateValue();
+
+ emit valueChanged(value);
+ update();
+}
+
+void Gauge::setNumVertices(int numVertices)
+{
+ if (m_numVertices == numVertices)
+ return;
+
+ m_numVertices = numVertices;
+ emit numVerticesChanged(numVertices);
+ update();
+}
+
+void Gauge::setFillWidth(double fillWidth)
+{
+ if (m_fillWidth == fillWidth)
+ return;
+
+ m_fillWidth = fillWidth;
+ emit fillWidthChanged(m_fillWidth);
+ update();
+}
+
+void Gauge::setRadius(int radius)
+{
+ if (m_radius == radius)
+ return;
+
+ m_radius = radius;
+ emit radiusChanged(m_radius);
+ update();
+}
+
+void Gauge::setMinAngle(double minAngle)
+{
+ if (m_minAngle == minAngle)
+ return;
+
+ m_minAngle = minAngle;
+
+ backCutDeg = m_minAngle;
+ backCutRad = qDegreesToRadians(backCutDeg);
+
+ if (m_minAngle < m_maxAngle)
+ m_lefttoright = true;
+ else
+ m_lefttoright = false;
+
+ updateValue();
+
+ emit minAngleChanged(m_minAngle);
+ update();
+}
+
+void Gauge::setMaxAngle(double maxAngle)
+{
+ if (m_maxAngle == maxAngle)
+ return;
+
+ m_maxAngle = maxAngle;
+
+ if (m_minAngle < m_maxAngle)
+ m_lefttoright = true;
+ else
+ m_lefttoright = false;
+
+ updateValue();
+ emit maxAngleChanged(m_maxAngle);
+ update();
+}
+
+void Gauge::setMinValue(double minValue)
+{
+ if (m_minValue == minValue)
+ return;
+
+ m_minValue = minValue;
+ emit minValueChanged(m_minValue);
+ update();
+}
+
+void Gauge::setMaxValue(double maxValue)
+{
+ if (m_maxValue == maxValue)
+ return;
+
+ m_maxValue = maxValue;
+ emit maxValueChanged(m_maxValue);
+ update();
+}
+
+void Gauge::setDoNotFill(bool doNotFill)
+{
+ if (m_doNotFill == doNotFill)
+ return;
+
+ m_doNotFill = doNotFill;
+ emit doNotFillChanged(m_doNotFill);
+ update();
+}
+
+void Gauge::setColor(QColor color)
+{
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ emit colorChanged(m_color);
+ update();
+}
+
+void Gauge::setUpdateGeometry(bool updateGeometry)
+{
+ if (m_updateGeometry == updateGeometry)
+ return;
+ m_updateGeometry = updateGeometry;
+
+ if (m_updateGeometry)
+ calcArc();
+ else
+ m_cutRad = calcValueAsRad(m_value);
+
+ update();
+}
+
+float Gauge::calcValueAsRad(qreal value)
+{
+ return qDegreesToRadians((m_minAngle + ((m_maxAngle - m_minAngle) / (m_maxValue - m_minValue))
+ * (value - m_minValue)) - 180.);
+}
+
+void Gauge::updateValue()
+{
+ if (m_updateGeometry)
+ calcArc();
+ else
+ m_cutRad = calcValueAsRad(m_value);
+}
+
+void Gauge::calcArc()
+{
+ backCutDeg = m_minAngle;
+ backCutRad = qDegreesToRadians(backCutDeg - 270);
+
+ if (m_updateGeometry) {
+ m_angle = ((m_maxAngle - m_minAngle) / (m_maxValue - m_minValue))
+ * (m_value - m_minValue);
+ } else {
+ m_angle = ((m_maxAngle - m_minAngle) / (m_maxValue - m_minValue))
+ * (m_maxValue - m_minValue);
+ }
+
+ arc_length = qDegreesToRadians(m_angle);
+ arc_dist_per_vertices = arc_length / m_numVertices;
+
+ emit angleChanged(m_angle);
+}
+
+QSGNode *Gauge::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+ GaugeNode *n = static_cast<GaugeNode *>(oldNode);
+
+ if (!n)
+ n = new GaugeNode(m_numVertices, m_color, m_doNotFill);
+
+ n->setLeftToRight(m_lefttoright);
+ n->setColor(m_color);
+ n->setBoundingRect(boundingRect());
+ n->setUpdateGeometry(m_updateGeometry);
+ n->setDoNotFill(m_doNotFill);
+ n->setBackCutRad(backCutRad);
+ n->setRadius(m_radius);
+ n->setArcDistPerVert(arc_dist_per_vertices);
+ n->setNumVertices(m_numVertices);
+ n->setFillWidth(m_fillWidth);
+ if (!m_updateGeometry)
+ n->setCutRad(m_cutRad);
+ n->draw();
+ return n;
+}
+
+void Gauge::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ QQuickItem::geometryChanged(newGeometry, oldGeometry);
+ if (m_radius == 0)
+ setRadius(newGeometry.height() * 0.5);
+
+ calcArc();
+ update();
+}
diff --git a/doc/src/snippets/qtcluster/gauge.h b/doc/src/snippets/qtcluster/gauge.h
new file mode 100644
index 00000000..97485638
--- /dev/null
+++ b/doc/src/snippets/qtcluster/gauge.h
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#ifndef GAUGE_H
+#define GAUGE_H
+
+#include <QQuickItem>
+#include <QColor>
+
+class Gauge : public QQuickItem
+{
+ Q_OBJECT
+
+ Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
+ Q_PROPERTY(qreal angle READ angle NOTIFY angleChanged)
+ Q_PROPERTY(int numVertices READ numVertices WRITE setNumVertices NOTIFY numVerticesChanged)
+
+ Q_PROPERTY(bool updateGeometry READ updateGeometry WRITE setUpdateGeometry NOTIFY updateGeometryChanged)
+ Q_PROPERTY(double fillWidth READ fillWidth WRITE setFillWidth NOTIFY fillWidthChanged)
+ Q_PROPERTY(int radius READ radius WRITE setRadius NOTIFY radiusChanged)
+
+ Q_PROPERTY(double minAngle READ minAngle WRITE setMinAngle NOTIFY minAngleChanged)
+ Q_PROPERTY(double maxAngle READ maxAngle WRITE setMaxAngle NOTIFY maxAngleChanged)
+
+ Q_PROPERTY(double minValue READ minValue WRITE setMinValue NOTIFY minValueChanged)
+ Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue NOTIFY maxValueChanged)
+
+ Q_PROPERTY(bool doNotFill READ doNotFill WRITE setDoNotFill NOTIFY doNotFillChanged)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
+
+public:
+ Gauge(QQuickItem *parent = 0);
+ ~Gauge();
+
+ QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
+ void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+
+ qreal value() const { return m_value; }
+ qreal angle() const { return m_angle; }
+ bool updateGeometry() const { return m_updateGeometry; }
+ int numVertices() const { return m_numVertices; }
+ double fillWidth() const { return m_fillWidth; }
+ int radius() const { return m_radius; }
+ double minAngle() const { return m_minAngle; }
+ double maxAngle() const { return m_maxAngle; }
+ double minValue() const { return m_minValue; }
+ double maxValue() const { return m_maxValue; }
+ bool doNotFill() const { return m_doNotFill; }
+ QColor color() const { return m_color; }
+
+ void setValue(qreal value);
+ void setNumVertices(int numVertices);
+ void setFillWidth(double fillWidth);
+ void setRadius(int radius);
+ void setMinAngle(double minAngle);
+ void setMaxAngle(double maxAngle);
+ void setMinValue(double minValue);
+ void setMaxValue(double maxValue);
+ void setDoNotFill(bool doNotFill);
+ void setColor(QColor color);
+ void setUpdateGeometry(bool updateGeometry);
+
+signals:
+ void valueChanged(qreal value);
+ void angleChanged(qreal angle);
+ void numVerticesChanged(int numVertices);
+ void fillWidthChanged(double fillWidth);
+ void radiusChanged(int radius);
+ void minAngleChanged(double minAngle);
+ void maxAngleChanged(double maxAngle);
+ void minValueChanged(double minValue);
+ void maxValueChanged(double maxValue);
+ void doNotFillChanged(bool doNotFill);
+ void colorChanged(QColor color);
+ void updateGeometryChanged(bool updateGeometry);
+
+public slots:
+
+private:
+ void calcArc();
+ float calcValueAsRad(qreal value);
+ void updateValue();
+
+private:
+ qreal m_value;
+ double m_angle;
+ int m_numVertices;
+ double m_fillWidth;
+ int m_radius;
+ bool m_updateGeometry;
+ bool m_lefttoright;
+
+ double m_minAngle;
+ double m_maxAngle;
+ double m_minValue;
+ double m_maxValue;
+
+ bool m_doNotFill;
+ QColor m_color;
+
+ //Internal
+ double arc_length;
+ double arc_dist_per_vertices;
+
+ double frontCutDeg;
+ double backCutDeg;
+
+ double frontCutRad;
+ double backCutRad;
+
+ float m_cutRad;
+};
+
+#endif // GAUGE_H
diff --git a/doc/src/snippets/qtcluster/gaugenode.cpp b/doc/src/snippets/qtcluster/gaugenode.cpp
new file mode 100644
index 00000000..a4470244
--- /dev/null
+++ b/doc/src/snippets/qtcluster/gaugenode.cpp
@@ -0,0 +1,328 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#include "gaugenode.h"
+
+#include <QtQuick/qsgnode.h>
+#include <QtQuick/qsgflatcolormaterial.h>
+#include <QtMath>
+
+#define EXTRAVERTICES 3
+
+GaugeNode::GaugeNode(const int &numVertices, const QColor &color = QColor(255, 0, 0),
+ const bool &doNotFill = false)
+ : QSGGeometryNode()
+ //Could be optimized more. If only geometry update used we do not need to map textured points.
+ //, m_geometry(QSGGeometry::defaultAttributes_Point2D(), numVertices+EXTRAVERTICES)
+ , m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), numVertices+EXTRAVERTICES)
+ , m_material(nullptr)
+ , m_numVertices(numVertices)
+ , m_doNotFill(doNotFill)
+ , m_color(color)
+ , m_cutRad(0.0)
+ , m_updateGeometry(true)
+ , m_lefttoright(true)
+ , m_dirtyBits(0)
+{
+ initGeometry();
+}
+
+GaugeNode::~GaugeNode()
+{
+ if (m_material)
+ delete m_material;
+}
+
+void GaugeNode::setColor(const QColor &color)
+{
+ if (m_color == color)
+ return;
+ m_color = color;
+ m_dirtyBits |= QSGNode::DirtyMaterial;
+}
+
+void GaugeNode::setCutRad(const float &cutRad)
+{
+ if (m_cutRad == cutRad)
+ return;
+
+ m_cutRad = cutRad;
+ if (!m_updateGeometry)
+ m_dirtyBits |= QSGNode::DirtyMaterial;
+}
+
+void GaugeNode::setDoNotFill(const bool &doNotFill)
+{
+ if (m_doNotFill == doNotFill)
+ return;
+
+ m_doNotFill = doNotFill;
+
+ if (m_doNotFill)
+ m_geometry.setDrawingMode(GL_LINE_STRIP);
+ else
+ m_geometry.setDrawingMode(GL_TRIANGLE_STRIP);
+
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setBackCutRad(const double &backCutRad)
+{
+ if (backCutRad == m_backCutRad)
+ return;
+
+ m_backCutRad = backCutRad;
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setRadius(const double &radius)
+{
+ if (m_radius == radius)
+ return;
+
+ m_radius = radius;
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setArcDistPerVert(const double &dist)
+{
+ if (dist == m_arc_dist_per_vertices)
+ return;
+ m_arc_dist_per_vertices = dist;
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setNumVertices(const int &numVertices)
+{
+ if (numVertices == m_numVertices)
+ return;
+
+ m_numVertices = numVertices;
+ m_geometry.allocate(m_numVertices + 3);
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setFillWidth(const double &fillWidth)
+{
+ if (m_fillWidth == fillWidth)
+ return;
+
+ m_fillWidth = fillWidth;
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setBoundingRect(const QRectF &rect)
+{
+ if (rect.width() == m_width && rect.height() == m_height)
+ return;
+
+ m_height = rect.height();
+ m_width = rect.width();
+ setCenterPoint(rect.center());
+ m_dirtyBits |= QSGNode::DirtyGeometry;
+}
+
+void GaugeNode::setCenterPoint(const QPointF &center)
+{
+ m_center_x = center.x();
+ m_center_y = center.y();
+}
+
+void GaugeNode::setUpdateGeometry(const bool &updateGeometry)
+{
+ if (m_updateGeometry == updateGeometry)
+ return;
+
+ m_updateGeometry = updateGeometry;
+
+ if (m_material)
+ delete m_material;
+
+ if (m_updateGeometry) {
+ QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
+ m_material = static_cast<QSGMaterial *>(material);
+ material->setColor(m_color);
+ setMaterial(m_material);
+ } else {
+ QSGSimpleMaterial<GaugeState> *material = GaugeShader::createMaterial();
+ m_material = static_cast<QSGMaterial *>(material);
+ material->state()->color = m_color;
+ material->state()->cutRad = m_cutRad;
+ material->state()->leftToRight = m_lefttoright;
+ material->setFlag(QSGMaterial::Blending);
+ setMaterial(m_material);
+ }
+ m_dirtyBits |= QSGNode::DirtyMaterial;
+}
+
+void GaugeNode::setLeftToRight(const bool &ltr)
+{
+ if (m_lefttoright == ltr)
+ return;
+
+ m_lefttoright = ltr;
+ m_dirtyBits |= QSGNode::DirtyMaterial;
+}
+
+void GaugeNode::drawGeometryTexturePoint2D()
+{
+ QSGGeometry::TexturedPoint2D *vertices = m_geometry.vertexDataAsTexturedPoint2D();
+
+ double current_angle_rad = 0.0;
+ double currentRadius = m_radius;
+ double d_arc_point_x = m_center_x + (currentRadius - m_fillWidth) * cos(m_backCutRad);
+ double d_arc_point_y = m_center_y + (currentRadius - m_fillWidth) * sin(m_backCutRad);
+
+ vertices[0].set(d_arc_point_x, d_arc_point_y,
+ d_arc_point_x / m_width, d_arc_point_y / m_height);
+ d_arc_point_x = m_center_x + currentRadius * cos(m_backCutRad);
+ d_arc_point_y = m_center_y + currentRadius * sin(m_backCutRad);
+ vertices[1].set(d_arc_point_x, d_arc_point_y,
+ d_arc_point_x / m_width, d_arc_point_y / m_height);
+ d_arc_point_x = 0;
+ d_arc_point_y = 0;
+
+ for (int i = 0; i < m_numVertices; ++i) {
+ current_angle_rad = m_backCutRad + i * m_arc_dist_per_vertices + m_arc_dist_per_vertices;
+
+ if (i % 2 == 0)
+ currentRadius -= m_fillWidth;
+ else
+ currentRadius += m_fillWidth;
+
+ d_arc_point_x = m_center_x + currentRadius * cos(current_angle_rad);
+ d_arc_point_y = m_center_y + currentRadius * sin(current_angle_rad);
+ vertices[i + 2].set(d_arc_point_x, d_arc_point_y,
+ d_arc_point_x / m_width, d_arc_point_y / m_height);
+ }
+ d_arc_point_x = m_center_x + (currentRadius - m_fillWidth) * cos(current_angle_rad);
+ d_arc_point_y = m_center_y + (currentRadius - m_fillWidth) * sin(current_angle_rad);
+
+ vertices[m_numVertices + 2].set(d_arc_point_x, d_arc_point_y,
+ d_arc_point_x / m_width, d_arc_point_y / m_height);
+}
+
+void GaugeNode::drawMaterial()
+{
+ if (m_updateGeometry) {
+ static_cast<QSGFlatColorMaterial *>(m_material)->setColor(m_color);
+ } else {
+ GaugeState *s = static_cast<QSGSimpleMaterial<GaugeState> *>(m_material)->state();
+ s->color = m_color;
+ s->cutRad = m_cutRad;
+ s->leftToRight = m_lefttoright;
+ }
+}
+
+void GaugeNode::draw()
+{
+ if (m_dirtyBits == 0)
+ return;
+
+ if (m_dirtyBits.testFlag(QSGNode::DirtyGeometry))
+ drawGeometryTexturePoint2D();
+ if (m_dirtyBits.testFlag(QSGNode::DirtyMaterial))
+ drawMaterial();
+
+ markDirty(m_dirtyBits);
+ m_dirtyBits = 0;
+}
+
+//Could be used to optimize vertices if only geometry is changed
+void GaugeNode::drawGeometry()
+{
+ QSGGeometry::Point2D *vertices = m_geometry.vertexDataAsPoint2D();
+
+ double d_arc_point_x = 0.0;
+ double d_arc_point_y = 0.0;
+ double current_angle_rad = 0.0;
+ double currentRadius = m_radius;
+
+ vertices[0].set(m_center_x + (currentRadius - m_fillWidth) * cos(m_backCutRad), m_center_y
+ + (currentRadius - m_fillWidth) * sin(m_backCutRad));
+ vertices[1].set(m_center_x + currentRadius * cos(m_backCutRad), m_center_y
+ + currentRadius * sin(m_backCutRad));
+
+ for (int i = 0; i < m_numVertices; ++i) {
+ current_angle_rad = m_backCutRad + i * m_arc_dist_per_vertices + m_arc_dist_per_vertices;
+
+ if (i % 2 == 0)
+ currentRadius -= m_fillWidth;
+ else
+ currentRadius += m_fillWidth;
+
+ d_arc_point_x = m_center_x + currentRadius * cos(current_angle_rad);
+ d_arc_point_y = m_center_y + currentRadius * sin(current_angle_rad);
+ vertices[i + 2].set(d_arc_point_x, d_arc_point_y);
+ }
+
+ vertices[m_numVertices + 2].set(m_center_x + (currentRadius - m_fillWidth)
+ * cos(current_angle_rad), m_center_y
+ + (currentRadius - m_fillWidth) * sin(current_angle_rad));
+
+ markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial);
+}
+
+void GaugeNode::initGeometry()
+{
+ m_geometry.setLineWidth(1);
+ if (m_doNotFill)
+ m_geometry.setDrawingMode(GL_LINE_STRIP);
+ else
+ m_geometry.setDrawingMode(GL_TRIANGLE_STRIP);
+
+ setGeometry(&m_geometry);
+
+ QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
+ material->setColor(m_color);
+
+ m_material = static_cast<QSGMaterial *>(material);
+ setMaterial(m_material);
+}
diff --git a/doc/src/snippets/qtcluster/gaugenode.h b/doc/src/snippets/qtcluster/gaugenode.h
new file mode 100644
index 00000000..057d8f22
--- /dev/null
+++ b/doc/src/snippets/qtcluster/gaugenode.h
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#ifndef GAUGENODE_H
+#define GAUGENODE_H
+
+#include <QSGNode>
+#include <QSGSimpleMaterial>
+#include <QColor>
+
+struct GaugeState
+{
+ QColor color;
+ GLfloat cutRad;
+ bool leftToRight;
+
+ int compare(const GaugeState *other) const
+ {
+ const unsigned int c = color.rgba();
+ const unsigned int co = other->color.rgba();
+ return std::tie(c, cutRad) > std::tie(co, other->cutRad);
+ }
+};
+
+class GaugeShader : public QSGSimpleMaterialShader<GaugeState>
+{
+ QSG_DECLARE_SIMPLE_COMPARABLE_SHADER(GaugeShader, GaugeState)
+
+public:
+ const char *vertexShader() const {
+ return
+ "attribute highp vec4 aVertex; \n"
+ "attribute highp vec2 aTexCoord; \n"
+ "uniform highp mat4 qt_Matrix; \n"
+ "varying highp vec2 texCoord; \n"
+ "void main() { \n"
+ " gl_Position = qt_Matrix * aVertex; \n"
+ " texCoord = aTexCoord; \n"
+ "}";
+ }
+
+ const char *fragmentShader() const {
+ return
+ "uniform lowp float qt_Opacity; \n"
+ "uniform lowp vec4 color; \n"
+ "uniform highp float cutRad; \n"
+ "uniform lowp bool leftToRight; \n"
+ "varying highp vec2 texCoord; \n"
+ "void main() {\n"
+ " highp vec2 uv = vec2(.5 - texCoord.y, .5 - texCoord.x);\n"
+ " if (leftToRight ? (-atan(uv.y,uv.x) < cutRad) : (-atan(uv.y,uv.x) > cutRad)) {\n"
+ " gl_FragColor = color * qt_Opacity;\n"
+ " } else {\n"
+//debug color " gl_FragColor = vec4(0.,1.,0.,1.0);\n"
+ " gl_FragColor = vec4(0.,0.,0.,0.);\n"
+ " } \n"
+ "}\n";
+ }
+
+ QList<QByteArray> attributes() const
+ {
+ return QList<QByteArray>() << "aVertex" << "aTexCoord";
+ }
+
+ void updateState(const GaugeState *state, const GaugeState *)
+ {
+ program()->setUniformValue(id_color, state->color);
+ program()->setUniformValue(id_cutRad, state->cutRad);
+ program()->setUniformValue(id_leftToRight, state->leftToRight);
+ }
+
+ void resolveUniforms()
+ {
+ id_color = program()->uniformLocation("color");
+ id_cutRad = program()->uniformLocation("cutRad");
+ id_leftToRight = program()->uniformLocation("leftToRight");
+ }
+
+private:
+ int id_color;
+ int id_cutRad;
+ int id_leftToRight;
+};
+
+class GaugeNode : public QSGGeometryNode
+{
+public:
+ GaugeNode(const int &numVertices, const QColor &color, const bool &doNotFill);
+ ~GaugeNode();
+
+ void setColor(const QColor &color);
+ void setCutRad(const float &cutRad);
+
+ void setDoNotFill(const bool &doNotFill);
+
+ void setBackCutRad(const double &backCutRad);
+ void setRadius(const double &radius);
+ void setArcDistPerVert(const double &dist);
+ void setNumVertices(const int &numVertices);
+
+ void setFillWidth(const double &fillWidth);
+ void setBoundingRect(const QRectF &rect);
+ void setUpdateGeometry(const bool &updateGeometry);
+
+ void setLeftToRight(const bool &ltr);
+
+ void draw();
+
+private:
+ void initGeometry();
+ void setCenterPoint(const QPointF &center);
+
+ void drawGeometry();
+ void drawGeometryTexturePoint2D();
+ void drawMaterial();
+
+private:
+ QSGGeometry m_geometry;
+ QSGMaterial *m_material;
+ int m_numVertices;
+ bool m_doNotFill;
+ QColor m_color;
+ float m_cutRad;
+ double m_radius;
+ bool m_updateGeometry;
+ bool m_lefttoright;
+
+ qreal m_width;
+ qreal m_height;
+ double m_center_y;
+ double m_center_x;
+ double m_backCutRad;
+ double m_fillWidth;
+ double m_arc_dist_per_vertices;
+
+ DirtyState m_dirtyBits;
+};
+
+#endif // GAUGENODE_H
diff --git a/doc/src/snippets/qtcluster/hybridimages.qrc b/doc/src/snippets/qtcluster/hybridimages.qrc
new file mode 100644
index 00000000..e14c7604
--- /dev/null
+++ b/doc/src/snippets/qtcluster/hybridimages.qrc
@@ -0,0 +1,26 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/Built_with_Qt.png</file>
+ <file>images/BottomPanel.png</file>
+ <file>images/Cluster8Gauges.png</file>
+ <file>images/SpeedometerNeedle.png</file>
+ <file>images/jane.png</file>
+ <file>images/john.png</file>
+ <file>images/calendar.png</file>
+ <file>images/CarInfoIcon.png</file>
+ <file>images/contacts.png</file>
+ <file>images/cover.png</file>
+ <file>images/Icon_TurnLeft_OFF_small.png</file>
+ <file>images/Icon_TurnLeft_ON_small.png</file>
+ <file>images/greenglow.png</file>
+ <file>images/knob.png</file>
+ <file>images/left.png</file>
+ <file>images/leftgauge.png</file>
+ <file>images/redglow.png</file>
+ <file>images/right.png</file>
+ <file>images/rightgauge.png</file>
+ <file>images/temperature.png</file>
+ <file>images/center.png</file>
+ <file>images/SpeedometerNeedleGreen.png</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/hybridqml.qrc b/doc/src/snippets/qtcluster/hybridqml.qrc
new file mode 100644
index 00000000..1e9f7288
--- /dev/null
+++ b/doc/src/snippets/qtcluster/hybridqml.qrc
@@ -0,0 +1,27 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/dash_hybrid/BottomPanel.ui.qml</file>
+ <file>qml/dash_hybrid/CenterView.qml</file>
+ <file>qml/dash_hybrid/Dashboard.qml</file>
+ <file>qml/dash_hybrid/DashboardFrame.qml</file>
+ <file>qml/dash_hybrid/DashboardView.qml</file>
+ <file>qml/dash_hybrid/gauges/BatteryMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/ConsumptionMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/FpsMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/FuelMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/SpeedoMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/TachoMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/TemperatureMeter.qml</file>
+ <file>qml/dash_hybrid/gauges/TurboMeter.qml</file>
+ <file>qml/dash_hybrid/CenterViewCalendar.qml</file>
+ <file>qml/dash_hybrid/CenterViewCarInfo.qml</file>
+ <file>qml/dash_hybrid/CenterViewContacts.qml</file>
+ <file>qml/dash_hybrid/CenterViewMusic.qml</file>
+ <file>qml/dash_hybrid/CarInfoField.qml</file>
+ <file>qml/dash_hybrid/DashboardForm.ui.qml</file>
+ <file>qml/dash_hybrid/SafeRendererPicture.qml</file>
+ <file>qml/dash_hybrid/DashboardBackground.qml</file>
+ <file>qml/dash_hybrid/DashboardBackgroundForm.ui.qml</file>
+ <file>qml/dash_hybrid/Gadget.qml</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/images.qrc b/doc/src/snippets/qtcluster/images.qrc
new file mode 100644
index 00000000..2ec22400
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/Icon_TurnLeft_OFF.png</file>
+ <file>images/Icon_TurnLeft_ON.png</file>
+ <file>images/MapLocation.png</file>
+ <file>images/MusicPlayer_CircleRemaining.png</file>
+ <file>images/MusicPlayer_Cover.png</file>
+ <file>images/RearCameraOverlay.png</file>
+ <file>images/CarForParkSensors.png</file>
+ <file>images/ParkingSensorOff.png</file>
+ <file>images/InfoNoteBackground.png</file>
+ <file>images/RearCameraStill.jpg</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/images/BottomPanel.png b/doc/src/snippets/qtcluster/images/BottomPanel.png
new file mode 100644
index 00000000..8f1d908d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/BottomPanel.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Built_with_Qt.png b/doc/src/snippets/qtcluster/images/Built_with_Qt.png
new file mode 100644
index 00000000..3dc5ed96
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Built_with_Qt.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/CarForParkSensors.png b/doc/src/snippets/qtcluster/images/CarForParkSensors.png
new file mode 100644
index 00000000..048d9dd2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/CarForParkSensors.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/CarInfoIcon.png b/doc/src/snippets/qtcluster/images/CarInfoIcon.png
new file mode 100644
index 00000000..e715bec8
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/CarInfoIcon.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/CentreMask.png b/doc/src/snippets/qtcluster/images/CentreMask.png
new file mode 100644
index 00000000..c6f0930e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/CentreMask.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Cluster8Gauges.png b/doc/src/snippets/qtcluster/images/Cluster8Gauges.png
new file mode 100644
index 00000000..d750a54e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Cluster8Gauges.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png b/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png
new file mode 100644
index 00000000..4a35421d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/DashboardMask.png b/doc/src/snippets/qtcluster/images/DashboardMask.png
new file mode 100644
index 00000000..79ac9f5c
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/DashboardMask.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png
new file mode 100644
index 00000000..660cb910
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png
new file mode 100644
index 00000000..e4d63a90
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png
new file mode 100644
index 00000000..12ea250f
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png
new file mode 100644
index 00000000..8e28f543
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png
new file mode 100644
index 00000000..9f1b225b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png
new file mode 100644
index 00000000..a3049f8d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png
new file mode 100644
index 00000000..0e34c521
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Gauge_RPM.png b/doc/src/snippets/qtcluster/images/Gauge_RPM.png
new file mode 100644
index 00000000..57629f04
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Gauge_RPM.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Gauge_Speed.png b/doc/src/snippets/qtcluster/images/Gauge_Speed.png
new file mode 100644
index 00000000..0ffd9cc3
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Gauge_Speed.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png
new file mode 100644
index 00000000..b7383186
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png
new file mode 100644
index 00000000..b0867cdc
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png
new file mode 100644
index 00000000..1d8bffb7
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png
new file mode 100644
index 00000000..20c0e93b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/InfoNoteBackground.png b/doc/src/snippets/qtcluster/images/InfoNoteBackground.png
new file mode 100644
index 00000000..a7706965
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/InfoNoteBackground.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/MapLocation.png b/doc/src/snippets/qtcluster/images/MapLocation.png
new file mode 100644
index 00000000..48a6bbb2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/MapLocation.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/MapLocationSport.png b/doc/src/snippets/qtcluster/images/MapLocationSport.png
new file mode 100644
index 00000000..839cedb6
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/MapLocationSport.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png b/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png
new file mode 100644
index 00000000..6cadbc17
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png b/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png
new file mode 100644
index 00000000..458746ff
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/ParkingSensorOff.png b/doc/src/snippets/qtcluster/images/ParkingSensorOff.png
new file mode 100644
index 00000000..55b78e62
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/ParkingSensorOff.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/RearCameraOverlay.png b/doc/src/snippets/qtcluster/images/RearCameraOverlay.png
new file mode 100644
index 00000000..b7a45881
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/RearCameraOverlay.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png b/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png
new file mode 100644
index 00000000..a9e0278a
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/RearCameraStill.jpg b/doc/src/snippets/qtcluster/images/RearCameraStill.jpg
new file mode 100644
index 00000000..357091c3
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/RearCameraStill.jpg
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png b/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png
new file mode 100644
index 00000000..d5dcc600
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png b/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png
new file mode 100644
index 00000000..eeb56f5d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png b/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png
new file mode 100644
index 00000000..8a8cb333
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png b/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png
new file mode 100644
index 00000000..5e50bcb5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/calendar.png b/doc/src/snippets/qtcluster/images/calendar.png
new file mode 100644
index 00000000..5608178e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/calendar.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/center.png b/doc/src/snippets/qtcluster/images/center.png
new file mode 100644
index 00000000..aadbdaf9
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/center.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/contacts.png b/doc/src/snippets/qtcluster/images/contacts.png
new file mode 100644
index 00000000..58c7f3a5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/contacts.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/convert_premultiplied_alpha.sh b/doc/src/snippets/qtcluster/images/convert_premultiplied_alpha.sh
new file mode 100644
index 00000000..c459a277
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/convert_premultiplied_alpha.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+while read -r line || [[ -n "$line" ]]; do
+ echo "Text: $line";
+ convert $line -write mpr:temp -background black -alpha Remove mpr:temp -compose Copy_Opacity -composite ../images-premultiplied-alpha/$line
+done < "$1"
diff --git a/doc/src/snippets/qtcluster/images/cover.png b/doc/src/snippets/qtcluster/images/cover.png
new file mode 100644
index 00000000..d42292dd
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/cover.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/greenglow.png b/doc/src/snippets/qtcluster/images/greenglow.png
new file mode 100644
index 00000000..7097220b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/greenglow.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/jane.png b/doc/src/snippets/qtcluster/images/jane.png
new file mode 100644
index 00000000..3fa7d73a
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/jane.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/john.png b/doc/src/snippets/qtcluster/images/john.png
new file mode 100644
index 00000000..cdf0b181
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/john.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/knob.png b/doc/src/snippets/qtcluster/images/knob.png
new file mode 100644
index 00000000..4cd98ae0
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/knob.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/left.png b/doc/src/snippets/qtcluster/images/left.png
new file mode 100644
index 00000000..f423cda5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/left.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/leftgauge.png b/doc/src/snippets/qtcluster/images/leftgauge.png
new file mode 100644
index 00000000..32380484
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/leftgauge.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/redglow.png b/doc/src/snippets/qtcluster/images/redglow.png
new file mode 100644
index 00000000..e1843d9c
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/redglow.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/right.png b/doc/src/snippets/qtcluster/images/right.png
new file mode 100644
index 00000000..279284d9
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/right.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/rightgauge.png b/doc/src/snippets/qtcluster/images/rightgauge.png
new file mode 100644
index 00000000..3f80a1cb
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/rightgauge.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/images/temperature.png b/doc/src/snippets/qtcluster/images/temperature.png
new file mode 100644
index 00000000..83d889f5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/images/temperature.png
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons.qrc b/doc/src/snippets/qtcluster/iso-icons.qrc
new file mode 100644
index 00000000..8479d6af
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons.qrc
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RCC>
+ <qresource prefix="/">
+ <file>iso-icons/iso_grs_7000_4_0083.dat</file>
+ <file>iso-icons/iso_grs_7000_4_1434A.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0246.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0245.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0247.dat</file>
+ <file>iso-icons/iso_grs_7000_4_1555.dat</file>
+ <file>iso-icons/iso_grs_7000_4_1702.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0249.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0238.dat</file>
+ <file>iso-icons/iso_grs_7000_4_0456.dat</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0083.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0083.dat
new file mode 100644
index 00000000..f7a3e280
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0083.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0238.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0238.dat
new file mode 100644
index 00000000..f2c08ff2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0238.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0245.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0245.dat
new file mode 100644
index 00000000..4c990b12
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0245.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0246.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0246.dat
new file mode 100644
index 00000000..d6c24e6f
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0246.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0247.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0247.dat
new file mode 100644
index 00000000..9ef390fb
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0247.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0249.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0249.dat
new file mode 100644
index 00000000..89dc2d42
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0249.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0456.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0456.dat
new file mode 100644
index 00000000..8df8b4fa
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0456.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1434A.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1434A.dat
new file mode 100644
index 00000000..35daffff
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1434A.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1555.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1555.dat
new file mode 100644
index 00000000..0a0326a2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1555.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1702.dat b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1702.dat
new file mode 100644
index 00000000..2fdbd279
--- /dev/null
+++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1702.dat
Binary files differ
diff --git a/doc/src/snippets/qtcluster/main.cpp b/doc/src/snippets/qtcluster/main.cpp
new file mode 100644
index 00000000..cc7645d8
--- /dev/null
+++ b/doc/src/snippets/qtcluster/main.cpp
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifdef QT_3DCORE_LIB
+#include "scenehelper.h"
+#endif
+#include "gauge.h"
+#include "qtiviclusterdata.h"
+#include "circularindicator.h"
+
+#include <QtQml/QQmlApplicationEngine>
+#include <QtGui/QFont>
+#include <QtGui/QFontDatabase>
+#include <QtGui/QGuiApplication>
+#include <QtQuick/QQuickView>
+
+#include "etcprovider.h"
+#ifdef STATIC
+#include <QtPlugin>
+#include <QQmlExtensionPlugin>
+
+Q_IMPORT_PLUGIN(QtQuick2Plugin)
+Q_IMPORT_PLUGIN(QtQuickScene3DPlugin)
+Q_IMPORT_PLUGIN(Qt3DQuick3DCorePlugin)
+Q_IMPORT_PLUGIN(Qt3DQuick3DRenderPlugin)
+#endif
+
+int main(int argc, char **argv)
+{
+ qputenv("QT_QPA_EGLFS_HIDECURSOR", "1");
+ qputenv("QT_QPA_EGLFS_DISABLE_INPUT", "1");
+// qputenv("QT_QPA_EGLFS_INTEGRATION", "eglfs_viv");
+ qputenv("FB_MULTI_BUFFER", "2");
+ qputenv("QT_QPA_EGLFS_WIDTH", "1280");
+ qputenv("QT_QPA_EGLFS_HEIGHT", "480");
+ qputenv("QT_QPA_EGLFS_PHYSICAL_WIDTH", "1280");
+ qputenv("QT_QPA_EGLFS_PHYSICAL_HEIGHT", "480");
+ qputenv("QT_QPA_FONTDIR", ".");
+// iPad Air, iPad Air 2, iPad Pro (9.7 inch), iPad Pro (12.9 inch), iPad Retina
+// qputenv("QT_SCALE_FACTOR", "0.8");
+// iPhone 5, iPhone 5s, iPhone 6, iPhone 6 Plus, iPhone 6s, iPhone 6s Plus, iPhone 7, iPhone 7 Plus, iPhone SE
+// qputenv("QT_SCALE_FACTOR", "0.44");
+
+#ifdef STATIC
+ qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuick2Plugin().instance())->registerTypes("QtQuick");
+ qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickScene3DPlugin().instance())->registerTypes("QtQuick.Scene3D");
+ qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_Qt3DQuick3DCorePlugin().instance())->registerTypes("Qt3D.Core");
+ qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_Qt3DQuick3DRenderPlugin().instance())->registerTypes("Qt3D.Render");
+#endif
+ QGuiApplication app(argc, argv);
+
+#ifdef QT_3DCORE_LIB
+ qmlRegisterType<SceneHelper>("Qt3D.Examples", 2, 0, "SceneHelper");
+#endif
+ qmlRegisterType<QtIVIClusterData>("ClusterDemoData", 1, 0, "ClusterData");
+ qmlRegisterType<Gauge>("ClusterDemo", 1, 0, "GaugeFiller");
+ qmlRegisterType<CircularIndicator>("ClusterDemo", 1, 0, "CircularIndicator");
+ qmlRegisterSingletonType(QUrl("qrc:/qml/ValueSource.qml"), "ClusterDemo", 1, 0, "ValueSource");
+
+ QQuickView view;
+
+ EtcProvider *etcProvider = new EtcProvider();
+ etcProvider->setBaseUrl(QUrl("qrc:///images/"));
+ view.engine()->addImageProvider("etc", etcProvider);
+
+ view.setColor(QColor(Qt::black));
+ view.setWidth(1280);
+ view.setHeight(480);
+ view.engine()->addImportPath("qrc:/imports/");
+
+ bool sportsCar = false;
+ if (app.arguments().count() > 1)
+ sportsCar = app.arguments().at(1) == "sports";
+
+ if (sportsCar)
+ view.setSource(QUrl("qrc:/qml/dash_sports/DashboardFrame.qml"));
+ else
+ view.setSource(QUrl("qrc:/qml/dash_hybrid/DashboardFrame.qml"));
+
+ view.show();
+ return app.exec();
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarModelMain.qml b/doc/src/snippets/qtcluster/qml/CarModelMain.qml
new file mode 100644
index 00000000..bcccab54
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarModelMain.qml
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+import QtQuick.Scene3D 2.0
+import QtQuick.Window 2.1
+
+Window {
+ id: root
+ property bool leftView: true
+ visible: true
+ width: 1280
+ height: 480
+ color: "Black"
+ title: "iCluster"
+ property bool toggleCarView: false
+ property bool carVisible: true
+ property int carModelHighlightType
+ property bool actionInProgress
+ property bool rightStack
+
+ Timer {
+ // Dummy timer, does nothing
+ id: returnView
+ interval: 1.0
+ }
+
+ CarViewSports {
+ id: carView
+ width: root.width
+ height: root.height
+ visible: true
+ hidden: false
+ }
+
+// CarViewElectric {
+// id: carView
+// width: root.width
+// height: root.height
+// visible: true
+// hidden: false
+// }
+
+ Rectangle {
+ id: buttonToggleVisible
+ width: 100
+ height: 50
+ radius: 5
+ border.color: "green"
+ border.width: 2
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ anchors.topMargin: 5
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: "Visible"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ if (carVisible == false) {
+ console.log("Show car")
+ carView.hidden = false
+ carVisible = true
+ buttonToggleVisible.border.color = "green"
+ } else {
+ console.log("Hide car")
+ carView.hidden = true
+ carVisible = false
+ buttonToggleVisible.border.color = "red"
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ id: buttonHighlightTire
+ width: 100
+ height: 50
+ radius: 5
+ border.color: "green"
+ border.width: 2
+ anchors.right: parent.right
+ anchors.top: buttonToggleVisible.bottom
+ anchors.rightMargin: 5
+ anchors.topMargin: 5
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: "Tire"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ carView.highlightTire()
+ }
+ }
+ }
+
+ Rectangle {
+ id: buttonHighlightLamp
+ width: 100
+ height: 50
+ radius: 5
+ border.color: "green"
+ border.width: 2
+ anchors.right: parent.right
+ anchors.top: buttonHighlightTire.bottom
+ anchors.rightMargin: 5
+ anchors.topMargin: 5
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: "Lamp"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ carView.highlightLamp()
+ }
+ }
+ }
+
+ Rectangle {
+ id: buttonHighlightDoor
+ width: 100
+ height: 50
+ radius: 5
+ border.color: "green"
+ border.width: 2
+ anchors.right: parent.right
+ anchors.top: buttonHighlightLamp.bottom
+ anchors.rightMargin: 5
+ anchors.topMargin: 5
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: "Doors"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ carView.highlightDoors(Math.floor(Math.random() * 63) + 1)
+ }
+ }
+ }
+
+// FpsCounter {
+// visible: true
+// z: 3
+// }
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarModelSports.qml b/doc/src/snippets/qtcluster/qml/CarModelSports.qml
new file mode 100644
index 00000000..1977da28
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarModelSports.qml
@@ -0,0 +1,569 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Qt3D.Core 2.0
+import Qt3D.Render 2.0
+import Qt3D.Extras 2.0
+import Qt3D.Examples 2.0
+import QtQuick 2.5 as Quick
+import QtQuick.Scene3D 2.0
+
+Entity
+{
+ id: carModelEntity
+
+ property bool hidden: true
+ property Scene3D scene
+ property real carRotation: 0.0
+ property var previousComponent: undefined
+ property var previousMaterial
+ property vector3d defaultCameraPosition: Qt.vector3d(0.0, 10.0, 30.0)
+ property vector3d defaultLightPosition: Qt.vector3d(0.0, 30.0, 11.0)
+ property vector3d lightPosition: defaultLightPosition
+ property vector3d cameraPos: defaultCameraPosition
+ property vector3d lightPos: defaultLightPosition
+
+ property real lightPosMultiplier: 1.75
+
+ property int door_left: 1
+ property int door_right: 2
+ property int door_trunk: 4
+ property int door_hood: 8
+
+ property bool highlighting: false
+ property bool doorAction: false
+
+ property int highlightType: 0
+ property int defaultHighlight: 99
+
+ // Preset camera positions for highlights
+ // Light positions can use the same vectors, but with a multiplier to move it further or closer
+ // Lamp highlights
+ property vector3d positionFrontLeftHigh: Qt.vector3d(5.0, 4.0, 15.0) // Left headlight
+ property vector3d positionFrontRightHigh: Qt.vector3d(-5.0, 4.0, 15.0) // Right headlight
+ property vector3d positionFrontLeftLow: Qt.vector3d(3.0, 2.0, 15.0) // Left day light
+ property vector3d positionFrontRightLow: Qt.vector3d(-3.0, 2.0, 15.0) // Right day light
+ property vector3d positionRearLeft: Qt.vector3d(5.0, 5.0, -15.0) // Left tail light
+ property vector3d positionRearRight: Qt.vector3d(-5.0, 5.0, -15.0) // Right tail light
+ // Tire highlights
+ property vector3d positionLeftRear: Qt.vector3d(10.0, 2.0, -12.5)
+ property vector3d positionLeftFront: Qt.vector3d(10.0, 2.0, 12.5)
+ property vector3d positionRightRear: Qt.vector3d(-10.0, 2.0, -12.5)
+ property vector3d positionRightFront: Qt.vector3d(-10.0, 2.0, 12.5)
+ // Door highlights
+ property vector3d positionLeft: Qt.vector3d(35.0, 10.0, 0.0) // Doors on the left
+ property vector3d positionRight: Qt.vector3d(-35.0, 10.0, 0.0) // Doors on the right
+ property vector3d positionTop: Qt.vector3d(0.0, 40.0, 1.0) // Doors on both sides
+ property vector3d positionBack: Qt.vector3d(0.0, 20.0, -20.0) // Trunk
+ property vector3d positionFront: Qt.vector3d(0.0, 20.0, 20.0) // Hood
+
+ // Original
+ property color bodyColor: Qt.rgba(0.6270588, 0.04137255, 0.04137255, 1.0)
+ property color interiorColor: Qt.rgba(0.17, 0.17, 0.18, 1.0)
+ property color highlightColor: "orange"
+ // Blue
+// property color bodyColor: "navy"
+// property color interiorColor: "darkslateblue"
+// property color highlightColor: "orange"
+ // Perky
+// property color bodyColor: "chartreuse"
+// property color interiorColor: "orangered"
+// property color highlightColor: "yellow"
+ // Pink
+// property color bodyColor: "deeppink"
+// property color interiorColor: "thistle"
+// property color highlightColor: "orange"
+ // Orange
+// property color bodyColor: "orangered"
+// property color interiorColor: "saddlebrown"
+// property color highlightColor: "yellow"
+ // Yellow
+// property color bodyColor: "gold"
+// property color interiorColor: "dimgray"
+// property color highlightColor: "red"
+
+ Camera {
+ id: camera
+ projectionType: CameraLens.PerspectiveProjection
+ fieldOfView: 45
+ aspectRatio: scene.width / scene.height
+ nearPlane: 0.1
+ farPlane: 100.0
+ position: defaultCameraPosition
+ upVector: Qt.vector3d(0.0, 1.0, 0.0)
+ viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
+ }
+
+ Entity {
+ components: [
+ Transform {
+ translation: lightPosition
+ },
+ PointLight {
+ color: "white"
+ intensity: 1.0
+ }
+ ]
+ }
+
+ RenderSettings {
+ Viewport {
+ RenderSurfaceSelector {
+ ClearBuffers {
+ buffers: ClearBuffers.ColorDepthBuffer
+ NoDraw { } // Just clear
+ }
+ CameraSelector {
+ camera: camera
+ NoDraw {
+ enabled: hidden
+ }
+ }
+ }
+ }
+ }
+
+ // Materials for the parts that need highlighting
+ PhongMaterial {
+ id: bodyMaterial
+ ambient: Qt.rgba(0.05, 0.05, 0.05, 1.0)
+ diffuse: bodyColor
+ specular: Qt.rgba(0.7686275, 0.6196079, 0.3568628, 1.0)
+ shininess: 164
+ }
+
+ PhongMaterial {
+ id: bodyMaterialHighlight
+ ambient: Qt.rgba(0.05, 0.05, 0.05, 1.0)
+ diffuse: highlightColor
+ shininess: 164
+ }
+
+ PhongMaterial {
+ id: tireMaterial
+ ambient: Qt.rgba(0.05, 0.05, 0.05, 1.0)
+ specular: Qt.rgba(0.594, 0.594, 0.594, 1.0)
+ diffuse: "black"
+ shininess: 51
+ }
+
+ PhongMaterial {
+ id: tireMaterialHighlight
+ ambient: Qt.rgba(0.05, 0.05, 0.05, 1.0)
+ specular: Qt.rgba(0.594, 0.594, 0.594, 1.0)
+ diffuse: highlightColor
+ shininess: 51
+ }
+
+ DiffuseMapMaterial {
+ id: lampsMaterial
+ ambient: Qt.rgba(0.75, 0.75, 0.75, 1.0)
+ specular: Qt.rgba(0.279, 0.279, 0.279, 1.0)
+ diffuse: TextureLoader { source: "qrc:/Map11.jpg" }
+ shininess: 31
+ }
+
+ // bodyMaterialHighlight is used for lamp highlight
+
+ // Materials for the parts that do not otherwise work correctly
+// Material {
+// id: transparentGlassMaterial
+
+// parameters: [
+// Parameter { name: "alpha"; value: 0.95 },
+// Parameter { name: "ka"; value: Qt.vector3d(0.2, 0.2, 0.2) },
+// Parameter { name: "kd"; value: Qt.vector3d(0.1608937, 0.16512, 0.154057) },
+// Parameter { name: "ks"; value: Qt.vector3d(1.0, 1.0, 1.0) },
+// Parameter { name: "shininess"; value: 15 }
+// ]
+
+// effect: DefaultAlphaEffect {
+// sourceRgbArg: BlendEquationArguments.SourceColor
+// destinationRgbArg: BlendEquationArguments.OneMinusSourceColor
+// }
+// }
+
+ PhongAlphaMaterial {
+ id: transparentGlassMaterial
+ diffuse: Qt.rgba(0.1608937, 0.16512, 0.154057, 1.0)
+ specular: Qt.rgba(1.0, 1.0, 1.0, 1.0)
+ alpha: 0.75
+ shininess: 33
+ }
+
+ PhongMaterial {
+ id: interiorMaterial
+ ambient: "black"
+ diffuse: interiorColor
+ shininess: 30
+ }
+
+ SceneHelper {
+ id: sceneHelper
+ }
+
+ Entity {
+ id: carModel
+
+ Transform {
+ id: carTransform
+ matrix: {
+ var m = Qt.matrix4x4()
+ m.rotate(carRotation, Qt.vector3d(0, 1, 0))
+ m.rotate(-90, Qt.vector3d(1, 0, 0))
+ m.scale(1.35)
+ return m
+ }
+ }
+
+ SceneLoader {
+ id: modelLoader
+ source: "qrc:/sportscar.qgltf"
+ property var lampParts: [ "headlight_right", "headlight_left", "daylight_right",
+ "daylight_left", "taillight_left", "taillight_right" ]
+ property var bodyParts: [ "body", "door_left", "door_right",
+ "trunk", "hood" ]
+ property var transparentGlassParts: [ "d_glass" ]
+ property var tireParts: [ "tire_front_left", "tire_front_right",
+ "tire_rear_left", "tire_rear_right" ]
+ property var interiorParts: [ "interior" ]
+
+ // Note: If there are problems with transparent materials etc. check that you have
+ // exported the Collada file used to create the qgltf binary files using the following
+ // options in Blender (in Collada options category):
+ // - Triangulate (off)
+ // - Use Object Instances (on)
+ // - Sort by Object name (on)
+ // If just setting those is not enough, try changing the object names so that the
+ // object will be loaded in a different order.
+ // Use the following syntax for qgltf.exe:
+ // qgltf.exe file.dae -b -S
+
+ onStatusChanged: {
+ if (status === SceneLoader.Ready) {
+ sceneHelper.addBasicMaterials(modelLoader, bodyMaterial, bodyParts)
+ sceneHelper.addBasicMaterials(modelLoader, transparentGlassMaterial,
+ transparentGlassParts)
+ sceneHelper.addBasicMaterials(modelLoader, interiorMaterial, interiorParts)
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[0])
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[1])
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[2])
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[3])
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[4])
+ sceneHelper.addTextureMaterial(modelLoader, lampsMaterial, lampParts[5])
+ sceneHelper.addTextureMaterial(modelLoader, tireMaterial, tireParts[0])
+ sceneHelper.addTextureMaterial(modelLoader, tireMaterial, tireParts[1])
+ sceneHelper.addTextureMaterial(modelLoader, tireMaterial, tireParts[2])
+ sceneHelper.addTextureMaterial(modelLoader, tireMaterial, tireParts[3])
+ floorPlane.enabled = true
+ }
+ }
+ }
+
+ components : [carTransform, modelLoader]
+ }
+
+ Entity {
+ id: floorPlane
+ enabled: false
+
+ DiffuseMapMaterial {
+ id: planeMaterial
+ ambient: Qt.rgba(0, 0, 0, 1.0)
+ specular: Qt.rgba(0, 0, 0, 1.0)
+ diffuse: TextureLoader { source: "qrc:/images/SportCarFloorShadow.png" }
+ }
+
+ Transform {
+ id: planeRotation
+ matrix: {
+ var m = Qt.matrix4x4()
+ m.rotate(carRotation, Qt.vector3d(0, 1, 0))
+ m.scale(1.35)
+ return m
+ }
+ }
+
+ PlaneMesh {
+ id: planeMesh
+ width: 70
+ height: 70
+ }
+
+ components : [planeMesh, planeMaterial, planeRotation]
+ }
+
+ function highlightItem(idx) {
+ carRotationAnimation.stop()
+ carResetRotationAnimation.start()
+ highlighting = true
+ var highlightComponent
+ var highlightMaterial
+ var originalMaterial
+
+ switch (idx) {
+ case 1:
+ highlightComponent = "tire_front_left"
+ highlightMaterial = tireMaterialHighlight
+ originalMaterial = tireMaterial
+ lightPos = positionLeftFront.times(lightPosMultiplier)
+ cameraPos = positionLeftFront
+ break
+ case 2:
+ highlightComponent = "tire_front_right"
+ highlightMaterial = tireMaterialHighlight
+ originalMaterial = tireMaterial
+ lightPos = positionRightFront.times(lightPosMultiplier)
+ cameraPos = positionRightFront
+ break
+ case 3:
+ highlightComponent = "tire_rear_right"
+ highlightMaterial = tireMaterialHighlight
+ originalMaterial = tireMaterial
+ lightPos = positionRightRear.times(lightPosMultiplier)
+ cameraPos = positionRightRear
+ break
+ case 4:
+ highlightComponent = "tire_rear_left"
+ highlightMaterial = tireMaterialHighlight
+ originalMaterial = tireMaterial
+ lightPos = positionLeftRear.times(lightPosMultiplier)
+ cameraPos = positionLeftRear
+ break
+ case 5:
+ highlightComponent = "headlight_left"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionFrontLeftHigh.times(lightPosMultiplier)
+ cameraPos = positionFrontLeftHigh
+ break
+ case 6:
+ highlightComponent = "headlight_right"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionFrontRightHigh.times(lightPosMultiplier)
+ cameraPos = positionFrontRightHigh
+ break
+ case 7:
+ highlightComponent = "daylight_right"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionFrontRightLow.times(lightPosMultiplier)
+ cameraPos = positionFrontRightLow
+ break
+ case 8:
+ highlightComponent = "daylight_left"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionFrontLeftLow.times(lightPosMultiplier)
+ cameraPos = positionFrontLeftLow
+ break
+ case 9:
+ highlightComponent = "taillight_left"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionRearLeft.times(lightPosMultiplier)
+ cameraPos = positionRearLeft
+ break
+ case 10:
+ highlightComponent = "taillight_right"
+ highlightMaterial = bodyMaterialHighlight
+ originalMaterial = lampsMaterial
+ lightPos = positionRearRight.times(lightPosMultiplier)
+ cameraPos = positionRearRight
+ break
+ default:
+ lightPos = defaultLightPosition
+ cameraPos = defaultCameraPosition
+ }
+
+ if (previousComponent !== undefined)
+ sceneHelper.replaceMaterial(modelLoader, previousComponent, previousMaterial)
+
+ if (highlightComponent !== undefined)
+ sceneHelper.replaceMaterial(modelLoader, highlightComponent, highlightMaterial)
+
+ previousComponent = highlightComponent
+ previousMaterial = originalMaterial
+ }
+
+ function highlightOpenDoors(openDoors) {
+ carRotationAnimation.stop()
+ carResetRotationAnimation.start()
+ highlighting = true
+ var openLeft = false
+ var openRight = false
+ var openBack = false
+ var openFront = false
+
+ // Check with bitwise operators, as they can be open in any combination
+ if (openDoors & door_left) {
+ sceneHelper.replaceMaterial(modelLoader, "door_left", bodyMaterialHighlight)
+ openLeft = true
+ } else {
+ sceneHelper.replaceMaterial(modelLoader, "door_left", bodyMaterial)
+ }
+
+ if (openDoors & door_right) {
+ sceneHelper.replaceMaterial(modelLoader, "door_right", bodyMaterialHighlight)
+ openRight = true
+ } else {
+ sceneHelper.replaceMaterial(modelLoader, "door_right", bodyMaterial)
+ }
+
+ if (openDoors & door_trunk) {
+ sceneHelper.replaceMaterial(modelLoader, "trunk", bodyMaterialHighlight)
+ openBack = true
+ } else {
+ sceneHelper.replaceMaterial(modelLoader, "trunk", bodyMaterial)
+ }
+
+ if (openDoors & door_hood) {
+ openFront = true
+ sceneHelper.replaceMaterial(modelLoader, "hood", bodyMaterialHighlight)
+ } else {
+ sceneHelper.replaceMaterial(modelLoader, "hood", bodyMaterial)
+ }
+
+ if (openRight && openLeft || openBack && openFront) {
+ lightPos = positionTop.times(0.5)
+ cameraPos = positionTop
+ } else if (openRight) {
+ lightPos = positionRight.times(0.33)
+ lightPos.y += 15.0
+ cameraPos = positionRight
+ } else if (openLeft) {
+ lightPos = positionLeft.times(0.33)
+ lightPos.y += 15.0
+ cameraPos = positionLeft
+ } else if (openBack) {
+ lightPos = positionBack.times(0.75)
+ cameraPos = positionBack
+ } else if (openFront) {
+ lightPos = positionFront.times(1.0)
+ cameraPos = positionFront
+ } else {
+ lightPos = defaultLightPosition
+ cameraPos = defaultCameraPosition
+ }
+ }
+
+ onCameraPosChanged: {
+ if (!highlighting)
+ return
+
+ // Update both camera and light positions
+ cameraAnimation.to = cameraPos
+ lightAnimation.to = lightPos
+ cameraAnimation.restart()
+ lightAnimation.restart()
+ highlighting = false
+ }
+
+ Quick.PropertyAnimation {
+ running: false
+ id: cameraAnimation
+ target: camera
+ property: "position"
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ }
+
+ Quick.PropertyAnimation {
+ running: false
+ id: lightAnimation
+ target: carModelEntity
+ property: "lightPosition"
+ duration: 1000
+ easing.type: Easing.Linear
+ }
+
+ Quick.RotationAnimation on carRotation {
+ id: carRotationAnimation
+ running: false
+ from: 0.0
+ to: 360.0
+ duration: 15000
+ loops: -1
+ }
+
+ Quick.RotationAnimation on carRotation {
+ id: carResetRotationAnimation
+ running: false
+ to: (carRotation > 180.0) ? 360.0 : 0.0 // TODO: Try to make animation "natural". Still works weirdly sometimes.
+ duration: 1000
+ loops: -1
+ easing.type: Easing.InOutQuad
+ }
+
+ function resetHighlight() {
+ if (doorAction)
+ highlightOpenDoors(0)
+ else
+ highlightItem(defaultHighlight)
+ doorAction = false
+ }
+
+ function highlightLamp() {
+ highlightType = Math.floor(Math.random() * 6) + 5
+ highlightItem(highlightType)
+ return highlightType
+ }
+
+ function highlightTire() {
+ highlightType = Math.floor(Math.random() * 4) + 1
+ highlightItem(highlightType)
+ return highlightType
+ }
+
+ function toggleIdleTimer(isVisible) {
+ if (isVisible) {
+ idleTimer.restart()
+ } else {
+ carRotationAnimation.stop()
+ carRotation = 0.0
+ idleTimer.stop()
+ }
+ }
+
+ Quick.Timer {
+ id: idleTimer
+ interval: 10000
+ onTriggered: {
+ carRotationAnimation.restart()
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarParking.qml b/doc/src/snippets/qtcluster/qml/CarParking.qml
new file mode 100644
index 00000000..6994bbd4
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarParking.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ height: root.height
+ width: root.width / 3
+ Image {
+ id: carImage
+ height: root.height / 3
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ fillMode: Image.PreserveAspectFit
+ source:"qrc:/images/CarForParkSensors.png"
+ }
+ Image {
+ anchors.left: carImage.left
+ anchors.leftMargin: 5
+ anchors.bottom: carImage.bottom
+ anchors.bottomMargin: carImage.height * 0.86
+ source:"qrc:/images/ParkingSensorOff.png"
+ z: 1
+ }
+ Image {
+ scale: -1
+ anchors.left: carImage.left
+ anchors.leftMargin: 5
+ anchors.top: carImage.top
+ anchors.topMargin: carImage.height * 0.86
+ source:"qrc:/images/ParkingSensorOff.png"
+ z: 1
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarParkingSports.qml b/doc/src/snippets/qtcluster/qml/CarParkingSports.qml
new file mode 100644
index 00000000..84062f80
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarParkingSports.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+Item {
+ Image {
+ id: carImage
+ height: root.height / 3
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ fillMode: Image.PreserveAspectFit
+ source:"image://etc/SportCarForParkSensors.png"
+ }
+ Image {
+ anchors.horizontalCenter: carImage.horizontalCenter
+ anchors.leftMargin: 5
+ anchors.bottom: carImage.bottom
+ anchors.bottomMargin: carImage.height * 0.9
+ source:"image://etc/ParkingSensorOff.png"
+ z: 1
+ }
+ Image {
+ scale: -1
+ anchors.horizontalCenter: carImage.horizontalCenter
+ anchors.leftMargin: 5
+ anchors.top: carImage.top
+ anchors.topMargin: carImage.height * 0.86
+ source:"image://etc/ParkingSensorOff.png"
+ z: 1
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarViewElectric.qml b/doc/src/snippets/qtcluster/qml/CarViewElectric.qml
new file mode 100644
index 00000000..04833d6a
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarViewElectric.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Scene3D 2.0
+
+Item {
+ id: mainview
+ visible: true
+ width: root.width / 3
+ height: root.height
+ property alias hidden: carModel.hidden
+
+ Scene3D {
+ id: carScene
+ width: mainview.width
+ height: mainview.height
+ multisample: true
+
+ CarModelElectric {
+ id: carModel
+ scene: carScene
+ }
+ }
+
+ // Functions to control highlights from dashboard
+ function highlightLamp() {
+ var type = carModel.highlightLamp()
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ return type
+ }
+
+ function highlightDoors(doors) {
+ doorAction = true
+ carModel.doorAction = true
+ carModel.highlightOpenDoors(doors)
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ }
+
+ function highlightTire() {
+ var type = carModel.highlightTire()
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ return type
+ }
+
+ Timer {
+ id: resetModelTimer
+ interval: 3000
+ running: false
+ onTriggered: {
+ carModel.resetHighlight()
+ carModelHighlightType = 0
+ actionInProgress = false
+ doorAction = false
+ if (!rightStack.visible) // return previous view if we forced the car model
+ returnView.start()
+ if (visible)
+ carModel.toggleIdleTimer(true)
+ }
+ }
+
+ onVisibleChanged: {
+ // Start/stop idle timer, that will trigger camera rotation around the car model after X secs
+ carModel.toggleIdleTimer(visible)
+ }
+
+ // TODO: Don't use if car view is not the first one
+ Component.onCompleted: {
+ // Start/stop idle timer, that will trigger camera rotation around the car model after X secs
+ carModel.toggleIdleTimer(visible)
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/CarViewSports.qml b/doc/src/snippets/qtcluster/qml/CarViewSports.qml
new file mode 100644
index 00000000..7c5bb198
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/CarViewSports.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Scene3D 2.0
+
+Item {
+ id: mainview
+ visible: true
+ width: root.width / 3
+ height: root.height
+ property alias hidden: carModel.hidden
+
+ Scene3D {
+ id: carScene
+ width: mainview.width
+ height: mainview.height
+ multisample: true
+
+ CarModelSports {
+ id: carModel
+ scene: carScene
+ }
+ }
+
+ // Functions to control highlights from dashboard
+ function highlightLamp() {
+ var type = carModel.highlightLamp()
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ return type
+ }
+
+ function highlightDoors(doors) {
+ doorAction = true
+ carModel.doorAction = true
+ carModel.highlightOpenDoors(doors)
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ }
+
+ function highlightTire() {
+ var type = carModel.highlightTire()
+ carModel.toggleIdleTimer(true)
+ resetModelTimer.restart()
+ return type
+ }
+
+ Timer {
+ id: resetModelTimer
+ interval: 3000
+ running: false
+ onTriggered: {
+ carModel.resetHighlight()
+ carModelHighlightType = 0
+ doorAction = false
+ actionInProgress = false
+ if (!centerStack.visible) // return previous view if we forced the car model
+ returnView.start()
+ if (visible)
+ carModel.toggleIdleTimer(true)
+ }
+ }
+
+ onVisibleChanged: {
+ // Start/stop idle timer, that will trigger camera rotation around the car model after X secs
+ carModel.toggleIdleTimer(visible)
+ }
+
+ // TODO: Don't use if car view is not the first one
+ Component.onCompleted: {
+ // Start/stop idle timer, that will trigger camera rotation around the car model after X secs
+ carModel.toggleIdleTimer(visible)
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/Circular_route.txt b/doc/src/snippets/qtcluster/qml/Circular_route.txt
new file mode 100644
index 00000000..a502cfa6
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/Circular_route.txt
@@ -0,0 +1,595 @@
+2015-09-05T12:01:56Z 52.53471566 13.29339621 0
+2015-09-05T12:01:56Z 52.53471566 13.29339621 0
+2015-09-05T12:01:56Z 52.53471566 13.29339621 0
+2015-09-05T12:01:56Z 52.53471566 13.29339621 0
+2015-09-05T12:01:56Z 52.53471566 13.29339621 2
+2015-09-05T12:01:57Z 52.53463307 13.29335113 4.5
+2015-09-05T12:01:58Z 52.53456215 13.29326514 6
+2015-09-05T12:01:59Z 52.53448055 13.2932033 10
+2015-09-05T12:02:00Z 52.53439307 13.29317302 10.25
+2015-09-05T12:02:02Z 52.53420541 13.29324536 11
+2015-09-05T12:02:03Z 52.53415146 13.29334321 10.25
+2015-09-05T12:02:04Z 52.5340858 13.29343789 9.5
+2015-09-05T12:02:06Z 52.5339741 13.29363007 9
+2015-09-05T12:02:08Z 52.53385702 13.29373682 9
+2015-09-05T12:02:09Z 52.53379645 13.2937675 5
+2015-09-05T12:02:10Z 52.53373904 13.29378906 3
+2015-09-05T12:02:10Z 52.53370904 13.29379906 0
+2015-09-05T12:02:11Z 52.53370904 13.29379906 0
+2015-09-05T12:02:12Z 52.53370904 13.29379906 0
+2015-09-05T12:02:13Z 52.53355432 13.29392855 5
+2015-09-05T12:02:15Z 52.53337753 13.2940725 10
+2015-09-05T12:02:16Z 52.53329909 13.29412793 10
+2015-09-05T12:02:17Z 52.53321162 13.29419525 10.25
+2015-09-05T12:02:18Z 52.53311057 13.29426683 11.5
+2015-09-05T12:02:19Z 52.5330342 13.29433714 11.25
+2015-09-05T12:02:21Z 52.5328361 13.2944545 11.5
+2015-09-05T12:02:23Z 52.53268661 13.29457408 12
+2015-09-05T12:02:24Z 52.5325904 13.29461498 12
+2015-09-05T12:02:25Z 52.5324789 13.29467689 12
+2015-09-05T12:02:26Z 52.53237304 13.29473805 12
+2015-09-05T12:02:27Z 52.53226579 13.29481766 12
+2015-09-05T12:02:28Z 52.53215667 13.29489104 12
+2015-09-05T12:02:29Z 52.53205286 13.29495604 12
+2015-09-05T12:02:31Z 52.53184432 13.29509601 12.25
+2015-09-05T12:02:32Z 52.53173615 13.29516896 13
+2015-09-05T12:02:33Z 52.53160734 13.29525339 14.5
+2015-09-05T12:02:34Z 52.53147391 13.29533567 15
+2015-09-05T12:02:35Z 52.53134531 13.29539001 15.25
+2015-09-05T12:02:36Z 52.53120371 13.29544058 14.75
+2015-09-05T12:02:37Z 52.5310736 13.29548352 14.5
+2015-09-05T12:02:39Z 52.53082428 13.2955645 13.75
+2015-09-05T12:02:40Z 52.53070713 13.29559606 14.5
+2015-09-05T12:02:41Z 52.53057732 13.2956255 14.75
+2015-09-05T12:02:43Z 52.53030912 13.29571386 15
+2015-09-05T12:02:44Z 52.53017176 13.2957591 14.75
+2015-09-05T12:02:45Z 52.5300513 13.29580222 14.5
+2015-09-05T12:02:47Z 52.52979737 13.29587053 14.25
+2015-09-05T12:02:48Z 52.52968082 13.29590694 14
+2015-09-05T12:02:49Z 52.52956536 13.29595674 13.75
+2015-09-05T12:02:51Z 52.52934973 13.29612906 13.5
+2015-09-05T12:02:52Z 52.52924513 13.29620493 13.5
+2015-09-05T12:02:53Z 52.52912119 13.29629417 13.5
+2015-09-05T12:02:54Z 52.52901351 13.29639086 13.25
+2015-09-05T12:02:55Z 52.52891751 13.29647808 12.25
+2015-09-05T12:02:56Z 52.52884043 13.29650939 11.25
+2015-09-05T12:02:58Z 52.52864407 13.29657869 12
+2015-09-05T12:02:59Z 52.52852564 13.29660263 12.75
+2015-09-05T12:03:00Z 52.52840086 13.29663652 12.75
+2015-09-05T12:03:02Z 52.52818659 13.2966907 12.75
+2015-09-05T12:03:03Z 52.52807177 13.29673764 12.75
+2015-09-05T12:03:04Z 52.52798047 13.29677037 12.8
+2015-09-05T12:03:05Z 52.52784213 13.29683006 14.5
+2015-09-05T12:03:06Z 52.52769622 13.29689328 15.5
+2015-09-05T12:03:07Z 52.52755741 13.2969383 16.25
+2015-09-05T12:03:08Z 52.52741156 13.29698961 17
+2015-09-05T12:03:10Z 52.52711709 13.2970757 17
+2015-09-05T12:03:11Z 52.52695869 13.29711537 17
+2015-09-05T12:03:12Z 52.52681712 13.29716064 17
+2015-09-05T12:03:13Z 52.52666168 13.29722531 17
+2015-09-05T12:03:14Z 52.52649001 13.29727856 17.75
+2015-09-05T12:03:15Z 52.52633418 13.29734529 17.75
+2015-09-05T12:03:16Z 52.52615007 13.29740601 18.25
+2015-09-05T12:03:17Z 52.52598369 13.29744997 18.5
+2015-09-05T12:03:18Z 52.52581637 13.29747817 18.25
+2015-09-05T12:03:19Z 52.5256589 13.2975318 17.5
+2015-09-05T12:03:20Z 52.52549785 13.2975591 17.5
+2015-09-05T12:03:21Z 52.52533403 13.29757304 17
+2015-09-05T12:03:22Z 52.52518512 13.2976005 16.75
+2015-09-05T12:03:23Z 52.52505195 13.29764489 16.25
+2015-09-05T12:03:24Z 52.52491452 13.29769758 15.25
+2015-09-05T12:03:25Z 52.52478112 13.29775472 15.25
+2015-09-05T12:03:26Z 52.52466234 13.29785345 15.25
+2015-09-05T12:03:27Z 52.52453284 13.29795197 15.75
+2015-09-05T12:03:29Z 52.52428926 13.29821484 16.25
+2015-09-05T12:03:30Z 52.52417461 13.2983671 16.25
+2015-09-05T12:03:31Z 52.52405376 13.29850187 16.25
+2015-09-05T12:03:32Z 52.52393931 13.29865443 16.25
+2015-09-05T12:03:33Z 52.52382556 13.29879402 16.25
+2015-09-05T12:03:34Z 52.52369592 13.29894445 16.35
+2015-09-05T12:03:35Z 52.52356831 13.29910014 16.5
+2015-09-05T12:03:37Z 52.52335459 13.29937581 16
+2015-09-05T12:03:38Z 52.52324243 13.29950933 18
+2015-09-05T12:03:39Z 52.52312211 13.29963199 18
+2015-09-05T12:03:40Z 52.52303124 13.29973969 18
+2015-09-05T12:03:41Z 52.52295028 13.29984474 13
+2015-09-05T12:03:42Z 52.52288635 13.29992611 8
+2015-09-05T12:03:43Z 52.52270078 13.30014976 0
+2015-09-05T12:03:44Z 52.52270078 13.30014976 0
+2015-09-05T12:03:45Z 52.52270078 13.30014976 0
+2015-09-05T12:03:46Z 52.52270078 13.30014976 0
+2015-09-05T12:03:47Z 52.52270078 13.30014976 0
+2015-09-05T12:03:48Z 52.52270078 13.30014976 0
+2015-09-05T12:03:49Z 52.52270078 13.30014976 0
+2015-09-05T12:03:50Z 52.52270078 13.30014976 0
+2015-09-05T12:03:51Z 52.52270078 13.30014976 0
+2015-09-05T12:03:52Z 52.52270078 13.30014976 0
+2015-09-05T12:03:53Z 52.52270078 13.30014976 0
+2015-09-05T12:03:54Z 52.52270078 13.30014976 0
+2015-09-05T12:03:55Z 52.52270078 13.30014976 0
+2015-09-05T12:03:56Z 52.52270078 13.30014976 0
+2015-09-05T12:03:57Z 52.52270078 13.30014976 0
+2015-09-05T12:03:58Z 52.52270078 13.30014976 0
+2015-09-05T12:04:20Z 52.52270078 13.30014976 0
+2015-09-05T12:04:21Z 52.52266043 13.30018077 5.25
+2015-09-05T12:04:22Z 52.52258997 13.30024809 9
+2015-09-05T12:04:23Z 52.5225277 13.30030886 12
+2015-09-05T12:04:24Z 52.52244695 13.30031455 15
+2015-09-05T12:04:25Z 52.52236198 13.30029215 15
+2015-09-05T12:04:26Z 52.52226481 13.30024054 15
+2015-09-05T12:04:27Z 52.52217005 13.30020629 15
+2015-09-05T12:04:28Z 52.52206983 13.3001551 18
+2015-09-05T12:04:30Z 52.52185322 13.30001279 18
+2015-09-05T12:04:31Z 52.52172351 13.29992714 14
+2015-09-05T12:04:32Z 52.52159554 13.2998622 14.75
+2015-09-05T12:04:33Z 52.52146475 13.29978099 15.25
+2015-09-05T12:04:34Z 52.52133872 13.29969814 15.75
+2015-09-05T12:04:35Z 52.52120957 13.29961165 15.5
+2015-09-05T12:04:36Z 52.52107981 13.2995404 15
+2015-09-05T12:04:38Z 52.52086158 13.29941319 13.25
+2015-09-05T12:04:40Z 52.52064769 13.29935942 12.25
+2015-09-05T12:04:41Z 52.52054688 13.29936738 11.5
+2015-09-05T12:04:43Z 52.52036739 13.29939421 10.25
+2015-09-05T12:04:44Z 52.52027373 13.29942033 6
+2015-09-05T12:04:45Z 52.52000411 13.29948771 0
+2015-09-05T12:04:46Z 52.52000411 13.29948771 0
+2015-09-05T12:04:47Z 52.52000411 13.29948771 0
+2015-09-05T12:04:48Z 52.52000411 13.29948771 0
+2015-09-05T12:04:49Z 52.52000411 13.29948771 0
+2015-09-05T12:04:50Z 52.52000411 13.29948771 0
+2015-09-05T12:04:51Z 52.52000411 13.29948771 0
+2015-09-05T12:04:52Z 52.52000411 13.29948771 0
+2015-09-05T12:04:53Z 52.52000411 13.29948771 0
+2015-09-05T12:04:54Z 52.52000411 13.29948771 0
+2015-09-05T12:04:55Z 52.52000411 13.29948771 0
+2015-09-05T12:04:56Z 52.52000411 13.29948771 0
+2015-09-05T12:04:57Z 52.52000411 13.29948771 0
+2015-09-05T12:04:58Z 52.52000411 13.29948771 0
+2015-09-05T12:04:59Z 52.52000411 13.29948771 0
+2015-09-05T12:05:00Z 52.52000411 13.29948771 0
+2015-09-05T12:05:01Z 52.52000411 13.29948771 0
+2015-09-05T12:05:23Z 52.52000411 13.29948771 0
+2015-09-05T12:05:24Z 52.51997058 13.29952102 5
+2015-09-05T12:05:25Z 52.51992366 13.29953263 7
+2015-09-05T12:05:26Z 52.51987437 13.29954327 7
+2015-09-05T12:05:27Z 52.51980357 13.29954852 7.5
+2015-09-05T12:05:28Z 52.51972331 13.29958992 9
+2015-09-05T12:05:29Z 52.51964802 13.29963821 12
+2015-09-05T12:05:30Z 52.51957361 13.29972032 12
+2015-09-05T12:05:31Z 52.51950862 13.29986188 12
+2015-09-05T12:05:32Z 52.51945385 13.30000737 12
+2015-09-05T12:05:33Z 52.51938922 13.30018513 12.75
+2015-09-05T12:05:34Z 52.51933148 13.30035667 13.75
+2015-09-05T12:05:35Z 52.51926274 13.30054898 14.5
+2015-09-05T12:05:36Z 52.51920375 13.3007182 15.5
+2015-09-05T12:05:37Z 52.51913195 13.30090806 16.25
+2015-09-05T12:05:38Z 52.51905919 13.30111873 16.75
+2015-09-05T12:05:39Z 52.51898637 13.30134444 17.25
+2015-09-05T12:05:40Z 52.51890618 13.30158713 17.75
+2015-09-05T12:05:41Z 52.51882863 13.30181532 18.25
+2015-09-05T12:05:42Z 52.51874697 13.30206403 18.75
+2015-09-05T12:05:43Z 52.51866892 13.30232409 18.75
+2015-09-05T12:05:44Z 52.51858636 13.30255307 18.75
+2015-09-05T12:05:45Z 52.51850846 13.30280425 18.75
+2015-09-05T12:05:46Z 52.51843293 13.30305877 18.25
+2015-09-05T12:05:47Z 52.51836511 13.30327293 18
+2015-09-05T12:05:48Z 52.51829479 13.30350592 17.75
+2015-09-05T12:05:49Z 52.51821382 13.30374217 17.25
+2015-09-05T12:05:50Z 52.51815266 13.30395237 16.75
+2015-09-05T12:05:51Z 52.51808531 13.30418719 16.5
+2015-09-05T12:05:52Z 52.51802467 13.30439865 16.5
+2015-09-05T12:05:53Z 52.51796402 13.3046112 16
+2015-09-05T12:05:54Z 52.51790743 13.30481738 16
+2015-09-05T12:05:55Z 52.51784005 13.30502199 16
+2015-09-05T12:05:56Z 52.51777177 13.30524862 16.25
+2015-09-05T12:05:57Z 52.51770337 13.30544136 16.5
+2015-09-05T12:05:58Z 52.51762094 13.30564341 16.75
+2015-09-05T12:05:59Z 52.51752851 13.30586256 17
+2015-09-05T12:06:00Z 52.51748413 13.30609422 17.5
+2015-09-05T12:06:01Z 52.51741946 13.30632815 17.25
+2015-09-05T12:06:02Z 52.51734146 13.30657572 17.5
+2015-09-05T12:06:03Z 52.51728833 13.30679264 17.75
+2015-09-05T12:06:04Z 52.51721395 13.30703329 18
+2015-09-05T12:06:05Z 52.51713213 13.30726669 18.25
+2015-09-05T12:06:06Z 52.51704695 13.30749755 18.25
+2015-09-05T12:06:07Z 52.51695347 13.30776367 18.75
+2015-09-05T12:06:08Z 52.51688035 13.30798499 18.5
+2015-09-05T12:06:09Z 52.51683924 13.30826377 18.75
+2015-09-05T12:06:10Z 52.51676332 13.30852511 18.75
+2015-09-05T12:06:11Z 52.51666019 13.30876472 18.75
+2015-09-05T12:06:12Z 52.51662237 13.30905154 18.5
+2015-09-05T12:06:13Z 52.51656674 13.30928029 18.25
+2015-09-05T12:06:14Z 52.51648419 13.30947686 17.5
+2015-09-05T12:06:15Z 52.5163775 13.309703 17.25
+2015-09-05T12:06:16Z 52.51628199 13.3099192 17.25
+2015-09-05T12:06:17Z 52.51616648 13.31011033 17
+2015-09-05T12:06:19Z 52.51602967 13.31055605 16.75
+2015-09-05T12:06:20Z 52.51597211 13.31074222 16.25
+2015-09-05T12:06:22Z 52.51582736 13.31114177 16.25
+2015-09-05T12:06:23Z 52.51575417 13.31140106 17
+2015-09-05T12:06:24Z 52.5157159 13.31160443 17
+2015-09-05T12:06:25Z 52.5156643 13.31183259 17
+2015-09-05T12:06:27Z 52.5155041 13.31225099 17
+2015-09-05T12:06:28Z 52.51546634 13.31252787 17
+2015-09-05T12:06:29Z 52.51539252 13.31276737 17.25
+2015-09-05T12:06:30Z 52.51532149 13.31299404 17.25
+2015-09-05T12:06:31Z 52.51524136 13.31317206 17
+2015-09-05T12:06:32Z 52.51517672 13.31339142 17
+2015-09-05T12:06:33Z 52.51509301 13.31364148 17
+2015-09-05T12:06:34Z 52.51501412 13.31388762 17
+2015-09-05T12:06:35Z 52.51495314 13.31406691 16
+2015-09-05T12:06:36Z 52.51489388 13.31426441 14.75
+2015-09-05T12:06:37Z 52.51485489 13.31442888 13
+2015-09-05T12:06:38Z 52.51483603 13.31458792 11.5
+2015-09-05T12:06:39Z 52.51474913 13.31465827 9.25
+2015-09-05T12:06:40Z 52.51470297 13.31471572 1.5
+2015-09-05T12:06:41Z 52.51469785 13.31480612 0
+2015-09-05T12:06:42Z 52.51469785 13.31480612 0
+2015-09-05T12:06:43Z 52.51469785 13.31480612 0
+2015-09-05T12:06:44Z 52.51469785 13.31480612 0
+2015-09-05T12:06:45Z 52.51469785 13.31480612 0
+2015-09-05T12:06:46Z 52.51469785 13.31480612 0
+2015-09-05T12:06:47Z 52.51469785 13.31480612 0
+2015-09-05T12:06:48Z 52.51469785 13.31480612 0
+2015-09-05T12:06:49Z 52.51469785 13.31480612 0
+2015-09-05T12:06:50Z 52.51469785 13.31480612 0
+2015-09-05T12:06:51Z 52.51469785 13.31480612 0
+2015-09-05T12:06:52Z 52.51469785 13.31480612 0
+2015-09-05T12:06:53Z 52.51469785 13.31480612 0
+2015-09-05T12:06:54Z 52.51469785 13.31480612 0
+2015-09-05T12:06:55Z 52.51469785 13.31480612 0
+2015-09-05T12:06:56Z 52.51469785 13.31480612 0
+2015-09-05T12:07:09Z 52.51465785 13.31490612 2.75
+2015-09-05T12:07:10Z 52.51464824 13.31491989 9
+2015-09-05T12:07:11Z 52.51460879 13.31503769 12
+2015-09-05T12:07:13Z 52.51453201 13.3153324 13
+2015-09-05T12:07:14Z 52.51448914 13.31549457 16
+2015-09-05T12:07:15Z 52.51445648 13.31568393 18
+2015-09-05T12:07:16Z 52.51439381 13.31588408 20
+2015-09-05T12:07:17Z 52.51435193 13.31607364 16
+2015-09-05T12:07:18Z 52.51429047 13.31627832 15.75
+2015-09-05T12:07:19Z 52.51424136 13.31653842 15.75
+2015-09-05T12:07:20Z 52.51415344 13.31669077 15.5
+2015-09-05T12:07:21Z 52.51407088 13.31686736 15.5
+2015-09-05T12:07:22Z 52.513984 13.31711846 16.25
+2015-09-05T12:07:24Z 52.51384149 13.31750164 16.25
+2015-09-05T12:07:25Z 52.5137931 13.31771783 16.25
+2015-09-05T12:07:26Z 52.51378228 13.31797915 16.5
+2015-09-05T12:07:27Z 52.51375122 13.31822475 16.75
+2015-09-05T12:07:28Z 52.51374125 13.31847759 17
+2015-09-05T12:07:29Z 52.51370054 13.31873135 17
+2015-09-05T12:07:30Z 52.51367538 13.3189733 17
+2015-09-05T12:07:31Z 52.51366241 13.3191887 16.5
+2015-09-05T12:07:33Z 52.51353135 13.31964239 16.5
+2015-09-05T12:07:34Z 52.51347898 13.31984191 15.5
+2015-09-05T12:07:35Z 52.51343441 13.32006123 14.5
+2015-09-05T12:07:36Z 52.51340483 13.32021639 13
+2015-09-05T12:07:37Z 52.51336041 13.32036272 11
+2015-09-05T12:07:38Z 52.51332265 13.32048619 0
+2015-09-05T12:07:39Z 52.51329181 13.32056736 0
+2015-09-05T12:07:40Z 52.51325586 13.32067519 0
+2015-09-05T12:07:41Z 52.51325586 13.32067519 0
+2015-09-05T12:07:42Z 52.51325586 13.32067519 0
+2015-09-05T12:07:43Z 52.51325586 13.32067519 0
+2015-09-05T12:07:44Z 52.51325586 13.32067519 0
+2015-09-05T12:07:45Z 52.51325586 13.32067519 0
+2015-09-05T12:07:46Z 52.51325586 13.32067519 0
+2015-09-05T12:07:47Z 52.51325586 13.32067519 0
+2015-09-05T12:07:50Z 52.5131997 13.32080423 1
+2015-09-05T12:07:51Z 52.51317166 13.32084133 6
+2015-09-05T12:07:52Z 52.51311109 13.32088309 6
+2015-09-05T12:07:53Z 52.51303037 13.32092266 10
+2015-09-05T12:07:54Z 52.51289099 13.32085504 10.5
+2015-09-05T12:07:56Z 52.51274925 13.32076634 10
+2015-09-05T12:07:57Z 52.51263743 13.32075369 10.5
+2015-09-05T12:07:58Z 52.51255666 13.32076405 10.5
+2015-09-05T12:08:00Z 52.51234885 13.32086301 11.25
+2015-09-05T12:08:01Z 52.51225438 13.32093336 11.75
+2015-09-05T12:08:02Z 52.51217009 13.32103141 11.75
+2015-09-05T12:08:03Z 52.51207921 13.32116016 12.25
+2015-09-05T12:08:05Z 52.51214781 13.32270956 12.7
+2015-09-05T12:08:06Z 52.51230816 13.32284169 13.25
+2015-09-05T12:08:08Z 52.51251695 13.32295316 12.75
+2015-09-05T12:08:09Z 52.51262432 13.32292613 12.5
+2015-09-05T12:08:10Z 52.51273709 13.32287272 12.75
+2015-09-05T12:08:11Z 52.51285769 13.32281078 13.25
+2015-09-05T12:08:12Z 52.51295951 13.32269025 13.75
+2015-09-05T12:08:13Z 52.51304233 13.32254193 13.75
+2015-09-05T12:08:14Z 52.5131087 13.32237261 14.25
+2015-09-05T12:08:15Z 52.51311077 13.32217575 14.2
+2015-09-05T12:08:16Z 52.51313152 13.32196235 14.1
+2015-09-05T12:08:17Z 52.51314044 13.32174364 14
+2015-09-05T12:08:18Z 52.51315201 13.3215268 13.5
+2015-09-05T12:08:19Z 52.51318207 13.32133836 13.25
+2015-09-05T12:08:20Z 52.51323447 13.32113891 13.75
+2015-09-05T12:08:21Z 52.51329679 13.32095033 14.5
+2015-09-05T12:08:22Z 52.51335489 13.32074722 15.25
+2015-09-05T12:08:23Z 52.51341395 13.32053648 15.75
+2015-09-05T12:08:24Z 52.51348638 13.32028898 17
+2015-09-05T12:08:25Z 52.51354711 13.32003764 17.5
+2015-09-05T12:08:26Z 52.51360387 13.31979319 18
+2015-09-05T12:08:27Z 52.51363858 13.3195135 18
+2015-09-05T12:08:28Z 52.51369441 13.31926256 17.75
+2015-09-05T12:08:29Z 52.51372804 13.31902817 17.5
+2015-09-05T12:08:30Z 52.51376256 13.31876519 17.25
+2015-09-05T12:08:31Z 52.51381141 13.31855713 16.25
+2015-09-05T12:08:32Z 52.51382721 13.3183204 16.25
+2015-09-05T12:08:33Z 52.51386389 13.31809115 16
+2015-09-05T12:08:34Z 52.51390202 13.31785843 16.25
+2015-09-05T12:08:35Z 52.51394914 13.31761346 16.5
+2015-09-05T12:08:36Z 52.51401622 13.31738128 17
+2015-09-05T12:08:37Z 52.51408384 13.31716736 17
+2015-09-05T12:08:38Z 52.51414812 13.31692614 16.75
+2015-09-05T12:08:39Z 52.51421129 13.31671957 16
+2015-09-05T12:08:40Z 52.51427263 13.31651899 15
+2015-09-05T12:08:41Z 52.51434021 13.31633435 14.25
+2015-09-05T12:08:42Z 52.51438284 13.31616873 12.75
+2015-09-05T12:08:43Z 52.51443779 13.31602125 11.25
+2015-09-05T12:08:44Z 52.51447041 13.31590413 6
+2015-09-05T12:08:45Z 52.51450255 13.3158068 4
+2015-09-05T12:08:46Z 52.51452573 13.31573601 2
+2015-09-05T12:08:47Z 52.51458117 13.31561048 0
+2015-09-05T12:08:48Z 52.51458117 13.31561048 0
+2015-09-05T12:08:49Z 52.51458117 13.31561048 0
+2015-09-05T12:08:50Z 52.51458117 13.31561048 0
+2015-09-05T12:08:51Z 52.51458117 13.31561048 0
+2015-09-05T12:08:52Z 52.51458117 13.31561048 0
+2015-09-05T12:08:53Z 52.51458117 13.31561048 0
+2015-09-05T12:08:54Z 52.51458117 13.31561048 0
+2015-09-05T12:08:55Z 52.51458117 13.31561048 0
+2015-09-05T12:08:56Z 52.51458117 13.31561048 0
+2015-09-05T12:08:57Z 52.51458117 13.31561048 0
+2015-09-05T12:08:58Z 52.51458117 13.31561048 0
+2015-09-05T12:08:59Z 52.51458117 13.31561048 0
+2015-09-05T12:09:00Z 52.51458117 13.31561048 0
+2015-09-05T12:09:01Z 52.51458117 13.31561048 0
+2015-09-05T12:09:25Z 52.51458117 13.31561048 0
+2015-09-05T12:09:26Z 52.51458959 13.31557205 0.5
+2015-09-05T12:09:27Z 52.5146037 13.31555254 2
+2015-09-05T12:09:28Z 52.51462065 13.3154895 6
+2015-09-05T12:09:29Z 52.51463745 13.31540706 8
+2015-09-05T12:09:30Z 52.51468456 13.31529157 12
+2015-09-05T12:09:31Z 52.51472741 13.3151552 13
+2015-09-05T12:09:32Z 52.51477592 13.31501556 15
+2015-09-05T12:09:33Z 52.51482271 13.3148667 15
+2015-09-05T12:09:34Z 52.51488544 13.31471432 15
+2015-09-05T12:09:35Z 52.51494017 13.31456723 15
+2015-09-05T12:09:36Z 52.51498837 13.31438972 15
+2015-09-05T12:09:37Z 52.51503578 13.31422477 15
+2015-09-05T12:09:38Z 52.51508779 13.3140462 13
+2015-09-05T12:09:39Z 52.51514339 13.31387257 13.25
+2015-09-05T12:09:40Z 52.51519184 13.31369578 13.5
+2015-09-05T12:09:42Z 52.51530435 13.3133285 14
+2015-09-05T12:09:43Z 52.51535864 13.31315645 15
+2015-09-05T12:09:45Z 52.5154552 13.31280059 18
+2015-09-05T12:09:46Z 52.51551402 13.31263086 19
+2015-09-05T12:09:48Z 52.51562248 13.31228079 20
+2015-09-05T12:09:49Z 52.51568292 13.31213092 20
+2015-09-05T12:09:51Z 52.51579681 13.31179846 20
+2015-09-05T12:09:53Z 52.51589293 13.31146501 20
+2015-09-05T12:09:55Z 52.51600254 13.31112553 20
+2015-09-05T12:09:56Z 52.51605527 13.31095383 20
+2015-09-05T12:09:57Z 52.51612055 13.31079039 20
+2015-09-05T12:09:58Z 52.51618294 13.31060619 20
+2015-09-05T12:10:00Z 52.51630298 13.31026351 13.5
+2015-09-05T12:10:01Z 52.51635003 13.31008531 13.25
+2015-09-05T12:10:02Z 52.51639668 13.30993061 13.25
+2015-09-05T12:10:03Z 52.51645212 13.30975234 12
+2015-09-05T12:10:04Z 52.51650975 13.30957448 10
+2015-09-05T12:10:05Z 52.51656513 13.30939207 7
+2015-09-05T12:10:06Z 52.51663388 13.30919918 7
+2015-09-05T12:10:07Z 52.51670258 13.30900076 7
+2015-09-05T12:10:08Z 52.51676824 13.30879639 10
+2015-09-05T12:10:09Z 52.51683494 13.30859887 15.75
+2015-09-05T12:10:10Z 52.51690757 13.308374 16
+2015-09-05T12:10:11Z 52.51698065 13.3081616 16
+2015-09-05T12:10:12Z 52.51704719 13.30794978 16
+2015-09-05T12:10:13Z 52.51711191 13.30775863 15.75
+2015-09-05T12:10:14Z 52.51719182 13.30754842 15.5
+2015-09-05T12:10:15Z 52.51725976 13.30734841 15.5
+2015-09-05T12:10:16Z 52.51732474 13.3071543 18
+2015-09-05T12:10:18Z 52.51745021 13.30677966 18
+2015-09-05T12:10:19Z 52.51750779 13.30658969 14.25
+2015-09-05T12:10:20Z 52.51756293 13.30640322 14
+2015-09-05T12:10:21Z 52.51761043 13.30621389 14
+2015-09-05T12:10:22Z 52.51767758 13.30603651 13
+2015-09-05T12:10:23Z 52.51774167 13.30586197 12
+2015-09-05T12:10:24Z 52.51779302 13.30569393 10
+2015-09-05T12:10:25Z 52.51784079 13.30553502 8
+2015-09-05T12:10:26Z 52.51788982 13.30539687 5
+2015-09-05T12:10:27Z 52.51793912 13.30525613 3
+2015-09-05T12:10:28Z 52.51796748 13.30517596 2
+2015-09-05T12:10:29Z 52.51798748 13.30508945 1
+2015-09-05T12:10:30Z 52.51801022 13.30502392 1
+2015-09-05T12:10:31Z 52.51802137 13.30495774 2
+2015-09-05T12:10:32Z 52.51803007 13.30491356 2
+2015-09-05T12:10:33Z 52.51804218 13.30488569 2
+2015-09-05T12:10:35Z 52.51804912 13.30486271 1
+2015-09-05T12:10:36Z 52.51804912 13.30486271 0
+2015-09-05T12:10:37Z 52.51804912 13.30486271 0
+2015-09-05T12:10:38Z 52.51804912 13.30486271 0
+2015-09-05T12:10:39Z 52.51804912 13.30486271 0
+2015-09-05T12:10:40Z 52.51804912 13.30486271 0
+2015-09-05T12:10:41Z 52.51804912 13.30486271 0
+2015-09-05T12:10:42Z 52.51804912 13.30486271 0
+2015-09-05T12:10:43Z 52.51804912 13.30486271 0
+2015-09-05T12:10:44Z 52.51804912 13.30486271 0
+2015-09-05T12:10:48Z 52.51804912 13.30486271 0
+2015-09-05T12:10:49Z 52.51804912 13.30486271 0
+2015-09-05T12:11:01Z 52.51804912 13.30486271 0
+2015-09-05T12:11:02Z 52.51804912 13.30486271 4
+2015-09-05T12:11:03Z 52.51800781 13.30475134 5
+2015-09-05T12:11:04Z 52.51801696 13.30469243 6
+2015-09-05T12:11:06Z 52.5181044 13.30444051 9.25
+2015-09-05T12:11:07Z 52.51815052 13.30429866 10.25
+2015-09-05T12:11:08Z 52.51819516 13.30415184 11.5
+2015-09-05T12:11:09Z 52.51825246 13.30401051 11.75
+2015-09-05T12:11:10Z 52.51829686 13.30384851 11.25
+2015-09-05T12:11:11Z 52.51833352 13.30372125 9.75
+2015-09-05T12:11:13Z 52.51841078 13.30351054 7.75
+2015-09-05T12:11:14Z 52.51843562 13.30340522 7.5
+2015-09-05T12:11:16Z 52.51850442 13.30318839 8.25
+2015-09-05T12:11:18Z 52.51856951 13.30294865 9.75
+2015-09-05T12:11:19Z 52.51861796 13.30279111 11
+2015-09-05T12:11:20Z 52.51866996 13.30262715 12.5
+2015-09-05T12:11:21Z 52.51873058 13.30246211 13.25
+2015-09-05T12:11:22Z 52.51879997 13.30228942 13.5
+2015-09-05T12:11:23Z 52.51886097 13.30211154 13.75
+2015-09-05T12:11:24Z 52.51892107 13.30193237 14
+2015-09-05T12:11:25Z 52.51897777 13.30174976 14.5
+2015-09-05T12:11:26Z 52.51905809 13.30155939 15
+2015-09-05T12:11:27Z 52.51913377 13.301359 15.25
+2015-09-05T12:11:28Z 52.51921977 13.30116434 15.75
+2015-09-05T12:11:29Z 52.51930561 13.30095953 16.25
+2015-09-05T12:11:30Z 52.51937872 13.30075751 16.25
+2015-09-05T12:11:31Z 52.51944759 13.3005527 15.75
+2015-09-05T12:11:32Z 52.51950584 13.30036324 14.5
+2015-09-05T12:11:33Z 52.51955125 13.30018836 13.5
+2015-09-05T12:11:34Z 52.51960489 13.30003223 12.25
+2015-09-05T12:11:35Z 52.51965449 13.29988291 11
+2015-09-05T12:11:37Z 52.51976052 13.2996446 10.5
+2015-09-05T12:11:38Z 52.51987735 13.29962687 11.25
+2015-09-05T12:11:40Z 52.52009518 13.29956333 12
+2015-09-05T12:11:42Z 52.52037327 13.29950752 14.75
+2015-09-05T12:11:43Z 52.52051321 13.29949076 15.25
+2015-09-05T12:11:44Z 52.52066204 13.29951053 15.5
+2015-09-05T12:11:45Z 52.5207916 13.29954042 15.25
+2015-09-05T12:11:46Z 52.52093853 13.29962429 16.25
+2015-09-05T12:11:47Z 52.52109696 13.29972242 17.25
+2015-09-05T12:11:48Z 52.521241 13.29982149 17.25
+2015-09-05T12:11:49Z 52.52137435 13.29989859 16.75
+2015-09-05T12:11:50Z 52.52150827 13.29999164 16
+2015-09-05T12:11:51Z 52.52164926 13.30004386 16
+2015-09-05T12:11:52Z 52.5217681 13.30010016 15.25
+2015-09-05T12:11:54Z 52.52200134 13.3002516 13
+2015-09-05T12:11:55Z 52.52210925 13.30030384 12
+2015-09-05T12:11:57Z 52.52231585 13.30038282 12
+2015-09-05T12:11:58Z 52.52243302 13.30040604 12
+2015-09-05T12:12:00Z 52.52261254 13.3003431 10.5
+2015-09-05T12:12:01Z 52.52271428 13.30021824 12.5
+2015-09-05T12:12:02Z 52.52281451 13.30008364 13.75
+2015-09-05T12:12:03Z 52.52292202 13.29994087 14.75
+2015-09-05T12:12:04Z 52.52303252 13.29978834 15.75
+2015-09-05T12:12:05Z 52.5231482 13.29965158 16.5
+2015-09-05T12:12:06Z 52.52327826 13.29949762 16.75
+2015-09-05T12:12:07Z 52.52340368 13.29935447 16.75
+2015-09-05T12:12:08Z 52.52352101 13.29920172 16.75
+2015-09-05T12:12:09Z 52.52365446 13.29905746 17
+2015-09-05T12:12:10Z 52.52378148 13.29890353 17.25
+2015-09-05T12:12:12Z 52.52402153 13.29860641 16.75
+2015-09-05T12:12:13Z 52.52411081 13.29841702 16.5
+2015-09-05T12:12:14Z 52.52424135 13.29830058 16.5
+2015-09-05T12:12:15Z 52.52436638 13.29816737 16
+2015-09-05T12:12:16Z 52.52446716 13.2980157 16
+2015-09-05T12:12:17Z 52.52462973 13.29798207 17
+2015-09-05T12:12:18Z 52.52480111 13.29794531 17
+2015-09-05T12:12:19Z 52.52494289 13.29786495 17
+2015-09-05T12:12:20Z 52.52509265 13.29780823 16.75
+2015-09-05T12:12:22Z 52.52539702 13.29770767 16.5
+2015-09-05T12:12:23Z 52.52554415 13.29766138 16.25
+2015-09-05T12:12:24Z 52.52566597 13.29762643 15.75
+2015-09-05T12:12:25Z 52.52579703 13.29757963 15
+2015-09-05T12:12:27Z 52.52602969 13.29751156 13.25
+2015-09-05T12:12:28Z 52.52613122 13.29749605 8
+2015-09-05T12:12:30Z 52.52626736 13.29744551 2
+2015-09-05T12:12:31Z 52.52631239 13.29742453 6
+2015-09-05T12:12:32Z 52.52636239 13.29741986 7
+2015-09-05T12:12:33Z 52.52637241 13.2973977 8
+2015-09-05T12:12:34Z 52.52638461 13.29738601 8
+2015-09-05T12:12:36Z 52.52649587 13.29735565 10
+2015-09-05T12:12:37Z 52.52656971 13.29734089 10
+2015-09-05T12:12:39Z 52.52675742 13.29727581 13
+2015-09-05T12:12:40Z 52.52685465 13.29724524 13
+2015-09-05T12:12:41Z 52.52698288 13.29721363 13.75
+2015-09-05T12:12:42Z 52.52712815 13.29718887 15
+2015-09-05T12:12:43Z 52.52727466 13.29714275 15.5
+2015-09-05T12:12:44Z 52.52741721 13.29710303 16
+2015-09-05T12:12:45Z 52.5275556 13.29706051 16.75
+2015-09-05T12:12:46Z 52.52770829 13.2970188 17
+2015-09-05T12:12:47Z 52.5278635 13.29697924 17
+2015-09-05T12:12:48Z 52.52801656 13.29691754 17.25
+2015-09-05T12:12:49Z 52.52816582 13.29688778 17.25
+2015-09-05T12:12:50Z 52.52829543 13.29686867 17
+2015-09-05T12:12:51Z 52.52845507 13.29682107 17
+2015-09-05T12:12:52Z 52.52858996 13.29677423 16
+2015-09-05T12:12:53Z 52.52871555 13.2967109 15.5
+2015-09-05T12:12:54Z 52.52885921 13.29665282 14.5
+2015-09-05T12:12:56Z 52.52895502 13.29660091 12.75
+2015-09-05T12:12:56Z 52.52904896 13.29656869 10.5
+2015-09-05T12:12:57Z 52.52912413 13.2965424 8.25
+2015-09-05T12:12:58Z 52.52918585 13.29653271 7.5
+2015-09-05T12:13:00Z 52.52921653 13.29651073 2
+2015-09-05T12:13:01Z 52.52922238 13.29649367 1.5
+2015-09-05T12:13:02Z 52.52925618 13.29647736 1.5
+2015-09-05T12:13:03Z 52.52930662 13.2964524 7
+2015-09-05T12:13:04Z 52.52937431 13.29641287 9
+2015-09-05T12:13:05Z 52.5294619 13.29639276 10.25
+2015-09-05T12:13:07Z 52.52965845 13.29630116 11.25
+2015-09-05T12:13:09Z 52.52982795 13.29621996 12
+2015-09-05T12:13:10Z 52.52994764 13.29620619 12
+2015-09-05T12:13:12Z 52.53010295 13.29612776 9
+2015-09-05T12:13:13Z 52.53013393 13.2961206 5.75
+2015-09-05T12:13:14Z 52.53016507 13.29610034 1
+2015-09-05T12:13:15Z 52.53019422 13.29608721 1
+2015-09-05T12:13:16Z 52.53020801 13.29606935 0.75
+2015-09-05T12:13:17Z 52.5302122 13.29606274 1.25
+2015-09-05T12:13:18Z 52.53024946 13.29604821 6
+2015-09-05T12:13:19Z 52.53030715 13.29602334 9
+2015-09-05T12:13:20Z 52.53038711 13.29598857 10
+2015-09-05T12:13:21Z 52.53047083 13.29596657 10
+2015-09-05T12:13:22Z 52.53057842 13.29592935 11.25
+2015-09-05T12:13:23Z 52.53068405 13.29588008 12.5
+2015-09-05T12:13:24Z 52.5308031 13.29581818 13
+2015-09-05T12:13:26Z 52.53093986 13.295783 14.25
+2015-09-05T12:13:26Z 52.53106913 13.295731 14.75
+2015-09-05T12:13:27Z 52.53121371 13.29568037 15.75
+2015-09-05T12:13:28Z 52.53136392 13.29559031 16.25
+2015-09-05T12:13:29Z 52.53151062 13.29550828 16.75
+2015-09-05T12:13:30Z 52.5316618 13.29541943 17.5
+2015-09-05T12:13:31Z 52.53181286 13.29533433 18
+2015-09-05T12:13:32Z 52.53196492 13.29525693 18.25
+2015-09-05T12:13:33Z 52.53210498 13.295164 18
+2015-09-05T12:13:34Z 52.53225574 13.29505752 17.5
+2015-09-05T12:13:35Z 52.53239675 13.29495972 16.75
+2015-09-05T12:13:36Z 52.53252495 13.29488186 15.25
+2015-09-05T12:13:37Z 52.53265589 13.29479821 15
+2015-09-05T12:13:38Z 52.53275829 13.29471747 13.25
+2015-09-05T12:13:39Z 52.53287997 13.29464164 13
+2015-09-05T12:13:40Z 52.53295934 13.29460103 10.75
+2015-09-05T12:13:41Z 52.53304084 13.29455206 10
+2015-09-05T12:13:42Z 52.53312045 13.29450915 9
+2015-09-05T12:13:43Z 52.53319693 13.29447321 8.5
+2015-09-05T12:13:44Z 52.5332477 13.29441171 7.5
+2015-09-05T12:13:45Z 52.53328871 13.29437949 6.5
+2015-09-05T12:13:46Z 52.53335948 13.2943418 7.25
+2015-09-05T12:13:47Z 52.53343417 13.29429497 8.5
+2015-09-05T12:13:48Z 52.53350265 13.29424339 8.5
+2015-09-05T12:13:49Z 52.53355621 13.29417582 8.5
+2015-09-05T12:13:50Z 52.53362195 13.29412472 8.5
+2015-09-05T12:13:51Z 52.53370878 13.29404578 9.75
+2015-09-05T12:13:52Z 52.533759 13.29401406 8.75
+2015-09-05T12:13:53Z 52.53380292 13.29398094 7
+2015-09-05T12:13:54Z 52.53384919 13.29396634 5.75
+2015-09-05T12:13:55Z 52.53389085 13.2939574 1
+2015-09-05T12:13:56Z 52.53391694 13.2939574 1
+2015-09-05T12:13:57Z 52.53392919 13.2939574 0.25
+2015-09-05T12:13:58Z 52.53392919 13.2939574 0
+2015-09-05T12:13:59Z 52.53392919 13.2939574 0
+2015-09-05T12:14:00Z 52.53392919 13.2939574 0
+2015-09-05T12:14:01Z 52.53392919 13.2939574 0
+2015-09-05T12:14:02Z 52.53392919 13.2939574 0
+2015-09-05T12:14:03Z 52.53392919 13.2939574 0
+2015-09-05T12:14:04Z 52.53392919 13.2939574 0
+2015-09-05T12:14:05Z 52.53392919 13.2939574 0
+2015-09-05T12:14:06Z 52.53392919 13.2939574 0.5
+2015-09-05T12:14:07Z 52.53402049 13.29395039 4
+2015-09-05T12:14:08Z 52.53402049 13.29395039 8
+2015-09-05T12:14:09Z 52.53409993 13.29398429 8.5
+2015-09-05T12:14:10Z 52.5341833 13.29402841 9.5
+2015-09-05T12:14:11Z 52.53427766 13.29409014 10.75
+2015-09-05T12:14:12Z 52.53436979 13.29414148 10.75
+2015-09-05T12:14:13Z 52.53446361 13.29414203 10
+2015-09-05T12:14:14Z 52.53456694 13.29410642 9
+2015-09-05T12:14:15Z 52.53466426 13.29402845 6
+2015-09-05T12:14:16Z 52.53474216 13.29390552 4
+
diff --git a/doc/src/snippets/qtcluster/qml/ConsumptionView.qml b/doc/src/snippets/qtcluster/qml/ConsumptionView.qml
new file mode 100644
index 00000000..952a6e29
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/ConsumptionView.qml
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Layouts 1.1
+
+import ClusterDemo 1.0
+
+Item{
+ id: consumptionView
+ anchors.fill: parent
+
+ ListView {
+ id: listView
+
+ height: 260
+ width: 260
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: (ValueSource.carId === 0) ? parent.width / 6 : parent.width / 4.5
+
+ header: Item {
+ width: listView.width
+ height: 30
+ Text {
+ anchors.fill: parent
+ text: "Consumption past 100 km"
+ horizontalAlignment: Text.AlignRight
+ color: "white"
+ font.pixelSize: 15
+ }
+ }
+
+ model: 13//contactModel
+ delegate: Row {
+ spacing: 15
+ Text {
+ id: levelText
+ horizontalAlignment: Text.AlignRight
+ y: -levelText.height / 2
+ width: 60
+ text: {
+ if (index === 0)
+ levelText.text = "900"
+ else if (index === 9)
+ levelText.text = "0"
+ else if (index === 12)
+ levelText.text = "-300"
+ else
+ levelText.text=""
+ }
+ color: "#717273"
+ font.pixelSize: 12
+ }
+ Rectangle {
+ id: levelLine
+ visible: index != 6 ? true : false
+ color: index === 8 ? "#717273" : "#26282a";
+ width: index === 8 ? listView.width / 1.5 : listView.width / 1.6;
+ height: 1
+ }
+ Row {
+ visible: index === 6 ? true : false
+ spacing: 4
+ Repeater {
+ model: 22
+ Rectangle {
+ id: avgLine
+ color: "#717273"
+ width: 4
+ height: 1
+ }
+ }
+ }
+ Text {
+ id: avgTExt
+ y: -avgTExt.height / 4
+ text:{
+ if (index === 5)
+ avgTExt.text = " Avg"
+ else if (index === 6)
+ avgTExt.text = "300"
+ else if (index === 8)
+ avgTExt.text = "IDEAL"
+ else
+ avgTExt.text=""
+ }
+ color: "#717273"
+ font.pixelSize: 12
+ }
+ }
+ }
+
+ Repeater {
+ id: repeater
+ property real listHeaderHeight: listView.headerItem.height
+ property real listContentItemHeight: listView.contentItem.height
+ property int listCount: listView.count
+ property real spaceInPixels: listContentItemHeight / listCount
+ model: 33
+ Rectangle {
+ id: valueRect
+ color: {
+ if (ValueSource.consumption[index] >= 100 )
+ "white"
+ else {
+ color = (ValueSource.carId === 0) ? "blue" : "#E31E24"
+ }
+ }
+ width: 2
+ height: {
+ var levelCount = ValueSource.consumption[index] / 100
+ if (ValueSource.consumption[index] >= 100 ) {
+ repeater.height = repeater.spaceInPixels * levelCount
+ - repeater.spaceInPixels - 2 * levelCount //2 is line width
+ }
+ else {
+ repeater.height = Math.abs(repeater.spaceInPixels * levelCount
+ - 2 * levelCount)//2 is line width)
+ }
+ }
+ x: listView.x + 75 + index * 5
+ y:{
+ if (ValueSource.consumption[index] >= 100 ) {
+ repeater.y = (listView.y + repeater.listHeaderHeight
+ + repeater.spaceInPixels * 7) - height
+ }
+ else {
+ repeater.y = listView.y + repeater.listHeaderHeight
+ + repeater.spaceInPixels * 7
+ }
+ }
+ }
+
+ }
+}
+
+
+
diff --git a/doc/src/snippets/qtcluster/qml/FpsCounter.qml b/doc/src/snippets/qtcluster/qml/FpsCounter.qml
new file mode 100644
index 00000000..46ffb726
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/FpsCounter.qml
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Item {
+ id: fpscounter
+ property real fpsNow: 0
+ property bool running: false
+ property alias fpsVisible: fpsLabel.visible
+ property int fpsInterval: 1000
+ property alias color: fpsLabel.color
+
+ Item {
+ id: swapTest
+ property real t
+ NumberAnimation on t {
+ running: fpscounter.running
+ from: 0
+ to: 1
+ duration: fpsInterval
+ loops: Animation.Infinite
+ }
+ onTChanged: {
+ ++fpsTimer.tick
+ }
+ }
+
+ Timer {
+ id: fpsTimer
+ running: fpscounter.running
+ repeat: true
+ interval: fpsInterval
+ property var lastFrameTime: new Date()
+ property int tick
+
+ onTriggered: {
+ var now = new Date()
+ var dt = now.getTime() - lastFrameTime.getTime()
+ lastFrameTime = now
+ var fps = (tick * fpsInterval) / dt
+ fpsNow = Math.round(fps * 10) / 10
+ tick = 0
+
+ if (fpsVisible)
+ fpsLabel.updateYerself()
+ }
+ }
+
+ Text {
+ id: fpsLabel
+ visible: false
+
+ anchors.centerIn: parent
+ font.pixelSize: 10
+ color: "white"
+
+ function updateYerself() {
+ text = Math.round(fpsNow)
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/MapView.qml b/doc/src/snippets/qtcluster/qml/MapView.qml
new file mode 100644
index 00000000..59a009db
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/MapView.qml
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtLocation 5.5
+import QtPositioning 5.5
+import QtGraphicalEffects 1.0
+import ClusterDemo 1.0
+
+Item {
+ width: root.width / 3
+ height: width
+
+ Map {
+ id: map
+ width: parent.width + 300
+ height: parent.height + 300
+ x: -150
+ y: -150
+ property real speed
+
+ plugin: Plugin {
+ id: plugin
+ preferred: ["mapbox"]
+ PluginParameter { name: "mapbox.access_token"; value: "pk.eyJ1IjoicXRjbHVzdGVyIiwiYSI6ImZiYTNiM2I0MDE2NmNlYmY0ZmM5NWMzZDVmYzI4NjFlIn0.uk3t7Oi9lDByIJd2E0vRWg" }
+ PluginParameter { name: "mapbox.map_id"; value: "qtcluster.ndeb6ce6" }
+ }
+
+ center: QtPositioning.coordinate(ValueSource.latitude, ValueSource.longitude)
+
+ zoomLevel: 16
+
+ enabled: false
+
+ rotation: -ValueSource.direction
+
+ Behavior on rotation {
+ RotationAnimation {
+ duration: 2000
+ direction: RotationAnimation.Shortest
+ }
+ }
+
+// uncomment ifndef QTIVIVEHICLEFUNCTIONS
+// PositionSource {
+// id: positionSource
+// nmeaSource: "qrc:/qml/route.txt"
+// onPositionChanged: {
+
+// if (position.speedValid) {
+// // center the map on the current position
+// if (position.direction > 0) {
+// map.rotation = -position.direction
+// map.center = position.coordinate
+// }
+
+// ValueSource.kph = position.speed * 3.6
+// ValueSource.oldSpeed.shift()
+// ValueSource.oldSpeed.push(position.speed * 3.6)
+// ValueSource.speedChanged()
+// //routeStopped.restart()
+// }
+// }
+// }
+// Component.onCompleted:{
+// positionSource.start()
+// //routeStopped.running = true
+// }
+// end comment
+
+ Behavior on center {
+ id: centerBehavior
+ enabled: true
+ CoordinateAnimation { duration: 1500 }
+ }
+ }
+
+ FastBlur {
+ anchors.fill: map
+ source: map
+ radius: 0.01
+ rotation: map.rotation
+ }
+
+ Image {
+ id: positionImage
+ anchors.centerIn: parent
+ source: mapPositionImage
+ }
+
+ Text {
+ color: "white"
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottomMargin: (ValueSource.carId === 0) ? 75 : 0
+ font.pixelSize: 9
+ text:"© Mapbox © OpenStreetMap"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/MediaPlayerView.qml b/doc/src/snippets/qtcluster/qml/MediaPlayerView.qml
new file mode 100644
index 00000000..ea9db405
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/MediaPlayerView.qml
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+import ClusterDemo 1.0
+
+Item {
+ id: playerView
+
+ property real xCenter: remainingTimeImage.width / 2
+ property real yCenter: remainingTimeImage.height / 2
+ property var timeElapsed: ValueSource.musicElapsed
+
+ Image {
+ id: musicCover
+ anchors.top: parent.top
+ anchors.topMargin: (ValueSource.carId === 0) ? 160 : 70
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: "image://etc/MusicPlayer_Cover.png"
+ }
+
+ Image {
+ id: remainingTimeImage
+ anchors.centerIn: musicCover
+ source: "image://etc/MusicPlayer_CircleRemaining.png"
+ }
+
+ Text {
+ id: song
+ anchors.top: remainingTimeImage.bottom
+ anchors.topMargin: 10
+ anchors.horizontalCenter: remainingTimeImage.horizontalCenter
+ text: "Tonight's the Night \n(Gonna Be Alright)"
+ font.pixelSize: 12
+ color: "white"
+ }
+ Text {
+ anchors.top: song.bottom
+ anchors.horizontalCenter: song.horizontalCenter
+ text: "ROD STEWART"
+ font.pixelSize: 10
+ color: "white"
+ }
+
+ function paintBackground(ctx) {
+ ctx.beginPath()
+ ctx.lineWidth = 2
+ ctx.strokeStyle = "white"
+ ctx.arc(xCenter, yCenter, yCenter - ctx.lineWidth / 2, 1.5 * Math.PI,
+ 2 * Math.PI * timeElapsed / 100 + 1.5 * Math.PI)
+ ctx.stroke()
+ }
+
+ Canvas {
+ id: canvas
+ width: remainingTimeImage.width
+ height: width
+ anchors.centerIn: musicCover
+ onPaint: {
+ var ctx = getContext("2d")
+ ctx.reset()
+ paintBackground(ctx)
+ }
+ }
+ onTimeElapsedChanged: {
+ canvas.requestPaint()
+ }
+
+ //Do not play music timer if view not visible
+ Component.onCompleted: ValueSource.musicTimer.running = true
+ onVisibleChanged: {
+ if (!visible)
+ ValueSource.musicTimer.running = false
+ else
+ ValueSource.musicTimer.running = true
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/TurnIndicator.qml b/doc/src/snippets/qtcluster/qml/TurnIndicator.qml
new file mode 100644
index 00000000..a78d92ee
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/TurnIndicator.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ property int direction: Qt.NoArrow
+ property bool active: false
+ property bool flashing: false
+
+ property url iconOn: "image://etc/Icon_TurnLeft_ON.png"
+ property url iconOff: "image://etc/Icon_TurnLeft_OFF.png"
+
+ Timer {
+ interval: 500
+ running: (direction !== Qt.NoArrow)
+ repeat: true
+ onTriggered: flashing = !flashing
+ }
+
+ Image {
+ source: (active && flashing) ? iconOn : iconOff
+ mirror: direction === Qt.RightArrow
+ anchors.centerIn: parent
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/ValueSource.qml b/doc/src/snippets/qtcluster/qml/ValueSource.qml
new file mode 100644
index 00000000..a6344654
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/ValueSource.qml
@@ -0,0 +1,436 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+pragma Singleton
+import QtQuick 2.6
+// comment ifndef QTIVIVEHICLEFUNCTIONS
+//import QtIVIVehicleFunctions 1.0
+import ClusterDemoData 1.0
+
+Item {
+ id: valueSource
+ property real kph: 0
+ property real consumeKW: 0
+ property real maxConsumeKWValue: 90
+ property real maxChargeKWValue: 40
+ property real chargeKW: 0
+ property real maxRange: 600
+ property real range: (batteryLevel / 100) * maxRange
+
+ property bool runningInDesigner: false
+
+ property var consumption: [300, 600, 700, 800, 900, 700, 600, 300, 50, 50, -100, 50, -100, -150,
+ -200, 50, 150, 200, 300, 200, 300, 200, 500, 50, -100, -100, -150, -80, 50, 300, 600, 700, 800,
+ 600, 700, 300, 50, 50]
+
+ property var turnSignal
+ property var currentDate: new Date()
+ //property string date: currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM")
+ //property string time: currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm")
+ property string date: currentDate.toLocaleDateString(Qt.locale("en_GB"))
+ property string time: currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm")
+
+ ClusterData {
+ id: clusterDataSource
+
+ onVehicleSpeedChanged: {
+ kph = vehicleSpeed
+ if (carId === 0 && !fastBootDemo) {
+ oldSpeed.shift()
+ oldSpeed.push(vehicleSpeed)
+ speedChanged()
+ }
+ }
+ property int notLeft: ~Qt.LeftArrow
+ property int notRight: ~Qt.RightArrow
+ onLeftTurnLightChanged: leftTurnLight ? turnSignal |= Qt.LeftArrow
+ : turnSignal &= notLeft
+ onRightTurnLightChanged: rightTurnLight ? turnSignal |= Qt.RightArrow
+ : turnSignal &= notRight
+ }
+
+ // comment ifndef QTIVIVEHICLEFUNCTIONS
+ property real latitude: clusterDataSource.latitude
+ property real longitude: clusterDataSource.longitude
+ property real direction: clusterDataSource.direction
+ property bool lowBeam: clusterDataSource.headLight
+ property int carId: clusterDataSource.carId
+ property bool lightFailure: clusterDataSource.lightFailure
+ property bool flatTire: clusterDataSource.flatTire
+
+ property bool frontLeftOpen: false
+ property bool frontRightOpen: false
+ property bool rearLeftDoorOpen: false
+ property bool rearRighDoorOpen: false
+ property bool hoodOpen: false
+ property bool trunkOpen: false
+
+ property double batteryLevel: clusterDataSource.batteryPotential
+ property double fuelLevel: clusterDataSource.gasLevel
+ property int gear: clusterDataSource.gear
+ property bool parkingBrake: clusterDataSource.brake
+ // TODO: These two are hacks. View change messages might not come through CAN.
+ property bool viewChange: clusterDataSource.oilTemp
+ property bool rightViewChange: clusterDataSource.oilPressure
+
+ //
+ // ENABLE FOR FAST BOOT DEMO (or otherwise with no CanController)
+ //
+ property bool fastBootDemo: true
+
+ // TODO: Park light used for automatic demo mode for now
+ property bool automaticDemoMode: fastBootDemo ? true : clusterDataSource.parkLight
+
+ //
+ // Speed animations for fast boot demo
+ //
+ Timer {
+ running: fastBootDemo
+ interval: 4000
+ onTriggered: animation.start()
+ }
+
+ Timer {
+ running: fastBootDemo
+ property bool turnLeft: true
+ repeat: true
+ interval: 5000
+ onTriggered: {
+ turnLeft = !turnLeft
+ if (turnLeft)
+ turnSignal = Qt.LeftArrow
+ else
+ turnSignal = Qt.RightArrow
+ stopSignaling.start()
+ }
+ }
+
+ Timer {
+ id: stopSignaling
+ running: false
+ interval: 2100
+ onTriggered: turnSignal = Qt.NoArrow
+ }
+
+ Behavior on fuelLevel {
+ enabled: fastBootDemo
+ PropertyAnimation {
+ duration: 18000
+ }
+ }
+
+ Behavior on batteryLevel {
+ enabled: fastBootDemo
+ PropertyAnimation {
+ duration: 18000
+ }
+ }
+
+ onFuelLevelChanged: {
+ if (fastBootDemo && fuelLevel <= 5)
+ fuelLevel = 100
+ }
+
+ onBatteryLevelChanged: {
+ if (fastBootDemo && batteryLevel <= 5)
+ batteryLevel = 100
+ }
+
+ SequentialAnimation {
+ id: animation
+ running: false
+ loops: Animation.Infinite
+
+ ScriptAction {
+ script: {
+ gear = 0
+ parkingBrake = true
+ consumeKW = 0
+ chargeKW = 0
+ }
+ }
+ PauseAnimation { duration: 2000 }
+ ScriptAction {
+ script: {
+ parkingBrake = false
+ gear = 1
+ fuelLevel -= 10.
+ batteryLevel -= 10.
+ }
+ }
+ ParallelAnimation {
+ PropertyAnimation {
+ target: valueSource
+ property: "kph"
+ from: 0
+ to: 150
+ duration: 10000
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "consumeKW"
+ from: 0
+ to: 75
+ duration: 10000
+ }
+ }
+ ParallelAnimation {
+ PropertyAnimation {
+ target: valueSource
+ property: "kph"
+ from: 150
+ to: 120
+ duration: 500
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "consumeKW"
+ from: 75
+ to: 0
+ duration: 100
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "chargeKW"
+ from: 0
+ to: 40
+ duration: 500
+ }
+ }
+ ParallelAnimation {
+ PropertyAnimation {
+ target: valueSource
+ property: "kph"
+ from: 120
+ to: 200
+ duration: 1500
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "consumeKW"
+ from: 0
+ to: 90
+ duration: 1500
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "chargeKW"
+ from: 40
+ to: 0
+ duration: 100
+ }
+ }
+ ParallelAnimation {
+ PropertyAnimation {
+ target: valueSource
+ property: "kph"
+ from: 200
+ to: 0
+ duration: 6000
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "consumeKW"
+ from: 90
+ to: 0
+ duration: 600
+ }
+ PropertyAnimation {
+ target: valueSource
+ property: "chargeKW"
+ from: 0
+ to: 40
+ duration: 3000
+ }
+ }
+ }
+
+ property int simuRpm: fastBootDemo ? kph * 40 : kph * 150
+ property double simuTemperature: fastBootDemo ? kph * .25 + 60. : kph * .5 + 50.
+
+ // In normal Car UI mode only speed is animated based on gps data
+ // In automatic demo mode rpm, turbo, consumption and engine temperature are based on speed
+ property int rpm: automaticDemoMode ? simuRpm : clusterDataSource.rpm
+ property double engineTemperature: automaticDemoMode ? simuTemperature
+ : clusterDataSource.engineTemp
+
+ property int totalDistance: 42300
+ property int kmSinceCharge: 8
+ property int avRangePerCharge: 425
+ property int energyPerKm: 324
+
+ property real totalDistanceSince: 0.
+
+ property string gearString: {
+ var g
+ if (gear === 0 || gear < -1)
+ return "N"
+ else if (gear === -1)
+ return "R"
+ else if (carId === 1) //sports car
+ return gear.toString()
+ else
+ return "D"
+ }
+
+ Timer {
+ id: timeTimer
+ interval: 15000
+ repeat: true
+ running: true
+ onTriggered: {
+ currentDate = new Date()
+ //date = currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM")
+ //time = currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm")
+ date = currentDate.toLocaleDateString(Qt.locale("en_GB"))
+ time = currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm")
+ // Approximate total distance based on current speed
+ totalDistanceSince += kph / 240. // = km / 15 min
+ if (totalDistanceSince > 1.) {
+ var totalInt = Math.floor(totalDistanceSince)
+ totalDistance += totalInt
+ kmSinceCharge += totalInt
+ totalDistanceSince -= totalInt
+ }
+ }
+ }
+
+ Timer {
+ id: backCutTimer
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: {
+ backCut = kph
+ }
+ }
+
+ property real temperature: 0.6
+ property alias musicTimer: musicTimer
+ property real backCut: 0 //For needle tail gradient
+ property real musicElapsed: 0
+
+ Timer {
+ id: musicTimer
+ interval: 2000
+ running: false
+ repeat: true
+ onTriggered: {
+ if (musicElapsed < 100)
+ musicElapsed++
+ else
+ musicElapsed = 0
+ }
+ }
+
+ Behavior on kph {
+ enabled: !fastBootDemo
+ PropertyAnimation { duration: 2000 }
+ }
+
+ //
+ // For electric car KwGauge animation
+ //
+ property var oldSpeed: [0, 0, 0]
+ signal speedChanged
+
+ SequentialAnimation {
+ id: reduceSpeedAnim
+ running: (carId === 0 && !fastBootDemo)
+ property alias chargeTo: charge.to
+ NumberAnimation {
+ target: valueSource
+ property: "consumeKW"
+ duration: 600
+ to: 0
+ }
+ NumberAnimation {
+ id: charge
+ target: valueSource
+ property: "chargeKW"
+ duration: 600
+ }
+ }
+
+ SequentialAnimation {
+ id: addSpeedAnim
+ running: (carId === 0 && !fastBootDemo)
+ property alias consumeTo: consume.to
+ NumberAnimation {
+ target: valueSource
+ property: "chargeKW"
+ duration: 600
+ to: 0
+
+ }
+ NumberAnimation {
+ id: consume
+ target: valueSource
+ property: "consumeKW"
+ duration: 600
+ }
+ }
+
+ onSpeedChanged: {
+ var speedChange = oldSpeed[1] - oldSpeed[0]
+ if (speedChange > 2) {
+ //"adding speed"
+ var newKW = Math.min(maxConsumeKWValue * 0.8, 10 * speedChange)
+ addSpeedAnim.consumeTo = newKW
+ addSpeedAnim.restart()
+ } else if (speedChange < -2) {
+ //"reducing speed"
+ newKW = Math.min(maxChargeKWValue * 0.8, 2 * Math.abs(speedChange))
+ reduceSpeedAnim.chargeTo = newKW
+ reduceSpeedAnim.restart()
+ } else if (Math.abs(speedChange) >= 0 && oldSpeed[1] !== 0) {
+ //Speed just about the same but still moving
+ addSpeedAnim.consumeTo = Math.min(maxConsumeKWValue * (kph / 100),
+ maxConsumeKWValue * 0.5)
+ addSpeedAnim.restart()
+ }
+ if (kph <= 0.1) {
+ addSpeedAnim.consumeTo = 0
+ reduceSpeedAnim.chargeTo = 0
+ addSpeedAnim.restart()
+ reduceSpeedAnim.restart()
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/VehicleInfoNote.qml b/doc/src/snippets/qtcluster/qml/VehicleInfoNote.qml
new file mode 100644
index 00000000..d0ad6cee
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/VehicleInfoNote.qml
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+
+Item {
+ id: infoNote
+ height: 70
+ width: noteImage.width
+ anchors.bottom: car.bottom
+ visible: noteVisible && highlightType && !car.hidden
+ property int fixedPositionX: 0
+ property color textColor: "white"
+ property bool noteVisible: false
+ property int highlightType: main.carModelHighlightType
+
+ Image {
+ id: noteImage
+ source: "image://etc/InfoNoteBackground.png"
+ opacity: 0.75
+ }
+
+ Timer {
+ id: waitForCamera
+ interval: 800
+ running: false
+ onTriggered: {
+ noteVisible = true
+ if (fixedPositionX === 0)
+ infoNote.x = car.item.x + (car.item.width - noteImage.width) / 2
+ else
+ x = fixedPositionX - (noteImage.width / 2)
+ }
+ }
+
+ onHighlightTypeChanged: {
+ if (highlightType)
+ waitForCamera.restart()
+ else
+ noteVisible = false
+ }
+
+ Text {
+ id: pressureText
+ anchors.centerIn: parent
+ visible: infoNote.visible && (highlightType >= 0 && highlightType <= 4)
+ color: textColor
+ font.pixelSize: 16
+ font.weight: Font.DemiBold
+ }
+
+ Text {
+ id: bulbText
+ anchors.centerIn: parent
+ visible: highlightType >= 5
+ text: "Lightbulb"
+ color: textColor
+ font.pixelSize: 16
+ font.weight: Font.DemiBold
+ }
+
+ Text {
+ id: doorText
+ anchors.centerIn: parent
+ visible: highlightType === -1
+ text: "Check doors"
+ color: textColor
+ font.pixelSize: 16
+ font.weight: Font.DemiBold
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ infoNote.anchors.horizontalCenterOffset = 0
+ if (highlightType === -1) {
+ //infoNote.width = doorText.contentWidth + 40
+ //infoNote.height = 40
+ } else {
+ if (highlightType <= 4) {
+ var pressure = Math.random() + 1
+ //var temperature = Math.random() * 12 + 20
+ pressureText.text = pressure.toFixed(1) + " bar"
+ //temperatureText.text = temperature.toFixed(1) + " \u00B0C"
+
+ //infoNote.width = pressureText.contentWidth + 40
+ //infoNote.height = 40
+ } else {
+ switch (highlightType) {
+ case 5:
+ bulbText.text = "Check left headlight"
+ break
+
+ case 6:
+ bulbText.text = "Check right headlight"
+ break
+
+ case 7:
+ bulbText.text = "Check right daylight"
+ break
+
+ case 8:
+ bulbText.text = "Check left daylight"
+ break
+
+ case 9:
+ infoNote.anchors.verticalCenterOffset = 60
+ bulbText.text = "Check left taillight"
+ break
+
+ case 10:
+ infoNote.anchors.verticalCenterOffset = 60
+ bulbText.text = "Check right taillight"
+ break
+
+ default:
+ // Coding fault if we get here, undefined code
+ bulbText.text = "Check lights"
+ }
+
+ //infoNote.width = bulbText.contentWidth + 40
+ //infoNote.height = 40
+ }
+ }
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/VideoView.qml b/doc/src/snippets/qtcluster/qml/VideoView.qml
new file mode 100644
index 00000000..5a731717
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/VideoView.qml
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.5
+import QtMultimedia 5.5
+import ClusterDemo 1.0
+
+Item {
+ property alias imageSource: overlay.source
+
+ visible: true
+
+ /* TODO replace with image */
+ MediaPlayer {
+ id: video
+ autoPlay: false
+ muted: true
+ //source: "file:///data/user/qt/qtcluster/video/reversing_video.3gp"
+ // Switch to still image after reversing video is finished, or an error occurs
+ onError: {
+ stillView.visible = true
+ console.log("Error playing video: " + error + ": " + errorString)
+ }
+ onStatusChanged: {
+ if (status === MediaPlayer.EndOfMedia)
+ stillView.visible = true
+ }
+ }
+
+ VideoOutput {
+ id: videoOutput
+
+ source: video //camera
+ anchors.centerIn: parent
+ height: 480 - 180
+ width: 1280 / 2.1
+ fillMode: Image.Stretch
+
+ Image {
+ id: stillView
+ visible: false
+ anchors.centerIn: parent
+ source: "image://etc/RearCameraStill.jpg"
+ height: videoOutput.height
+ width: videoOutput.width
+ }
+
+ Image {
+ id: overlay
+ visible: ValueSource.gear === -1
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ stillView.visible = false
+ video.play()
+
+ } else {
+ video.stop()
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/BottomPanel.ui.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/BottomPanel.ui.qml
new file mode 100644
index 00000000..abc04c5d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/BottomPanel.ui.qml
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.6
+import ClusterDemo 1.0
+import ".."
+import QtQuick.Extras 1.4
+
+Item {
+ id: bottomPanel
+ property int iconMargin: 7
+ property color iconRed: "#e41e25"
+ property color iconGreen: "#5caa15"
+ property color iconYellow: "#face20"
+ property color iconDark: "#000000"
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: bottomPanelImage.width
+ height: bottomPanelImage.height
+
+ Image {
+ id: bottomPanelImage
+ source: "image://etc/BottomPanel.png"
+ }
+
+ TurnIndicator {
+ iconOn: "image://etc/Icon_TurnLeft_ON_small.png"
+ iconOff: "image://etc/Icon_TurnLeft_OFF_small.png"
+ direction: Qt.LeftArrow
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 180
+ active: ValueSource.turnSignal & Qt.LeftArrow
+ }
+
+ Picture {
+ id: iconCoolant
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.right: iconBattery.left
+
+ color: ValueSource.engineTemperature >= 100.0 ? bottomPanel.iconRed : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0246.dat"
+ }
+
+ SafeRendererPicture {
+ id: iconBattery
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.right: iconFuel.left
+
+ color: ValueSource.batteryLevel <= 25.0 ? bottomPanel.iconRed : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0247.dat"
+ }
+
+ SafeRendererPicture {
+ id: iconFuel
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.right: iconParkingBrake.left
+
+ color: ValueSource.fuelLevel <= 20.0 ? bottomPanel.iconRed : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0245.dat"
+ }
+
+ SafeRendererPicture {
+ id: iconParkingBrake
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.right: textTime.left
+ anchors.rightMargin: 3
+
+ color: ValueSource.parkingBrake ? bottomPanel.iconRed : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0238.dat"
+ }
+
+ Text {
+ id: textTime
+ text: ValueSource.time
+ font.pixelSize: 18
+ color: "white"
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: 35
+ }
+
+ Picture {
+ id: iconLowbeam
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.left: textTime.right
+ anchors.leftMargin: bottomPanel.iconMargin
+
+ color: ValueSource.lowBeam ? bottomPanel.iconGreen : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0456.dat"
+ }
+
+ Picture {
+ id: iconTyre
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.left: iconLowbeam.right
+ anchors.leftMargin: 2
+
+ color: ValueSource.flatTire ? bottomPanel.iconYellow : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_1434A.dat"
+ }
+
+ SafeRendererPicture {
+ id: iconLamp
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.left: iconTyre.right
+
+ color: ValueSource.lightFailure ? bottomPanel.iconYellow : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_1555.dat"
+ }
+
+ SafeRendererPicture {
+ id: iconSeatbelt
+
+ width: 30
+ height: 30
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.left: iconLamp.right
+
+ color: ValueSource.seatBelt ? bottomPanel.iconRed : bottomPanel.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0249.dat"
+ }
+
+ TurnIndicator {
+ direction: Qt.RightArrow
+ iconOn: "image://etc/Icon_TurnLeft_ON_small.png"
+ iconOff: "image://etc/Icon_TurnLeft_OFF_small.png"
+ anchors.verticalCenter: textTime.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 180
+ active: ValueSource.turnSignal & Qt.RightArrow
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CarInfoField.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CarInfoField.qml
new file mode 100644
index 00000000..5be947d2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CarInfoField.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+Column {
+ spacing: 20 / 1.5
+
+ property string value: ""
+ property string title: ""
+ property string unit: "KM"
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Text {
+ text: value
+ font.pixelSize: 24
+ color: "lightGray"
+ }
+ Text {
+ text: unit
+ font.pixelSize: 16
+ color: "lightGray"
+ }
+ }
+
+ Text {
+ text: title
+ font.pixelSize: 16
+ horizontalAlignment: Text.AlignHCenter
+ color: "lightGray"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterView.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterView.qml
new file mode 100644
index 00000000..d7b302c4
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterView.qml
@@ -0,0 +1,151 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ anchors.fill: parent
+ property real defaultScale: 1.0
+ property var previousView: calendarView
+ property bool view: ValueSource.viewChange
+
+ property int viewNumber: -1
+
+
+ CenterViewMusic {
+ id: musicView
+ anchors.horizontalCenter: parent.horizontalCenter
+ yTarget: 230
+ width: 124
+ height: 124
+ visible: false
+ y: defaultYPos
+ }
+
+ CenterViewContacts {
+ id: contactView
+ anchors.horizontalCenter: parent.horizontalCenter
+ yTarget: 240
+ width: 100
+ height: 100
+ visible: false
+ y: defaultYPos
+ }
+
+ CenterViewCarInfo {
+ id: carinfoView
+ xTarget: (parent.width - width) / 2
+ anchors.top: parent.top
+ anchors.topMargin: 230
+ width: 146
+ height: 80
+ x: defaultXPos
+ visible: false
+ }
+
+ CenterViewCalendar {
+ id: calendarView
+ xTarget: (parent.width - width) / 2
+ anchors.top: parent.top
+ anchors.topMargin: 230
+ width: 100
+ height: 91
+ x: defaultXPos
+ visible: false
+ }
+
+ PropertyAnimation {
+ id: shrinkCenter
+ property: "scale"
+ to: 0.0
+ running: false
+ duration: 500
+ onStopped: {
+ if (target != null)
+ target.visible = false
+ }
+ }
+
+ function handleViewChange(number) {
+ var currentView
+ if (number === 0)
+ currentView = musicView
+ else if (number === 1)
+ currentView = contactView
+ else if (number === 2)
+ currentView = carinfoView
+ else if (number === 3)
+ currentView = calendarView
+ if (previousView !== currentView) {
+ currentView.scale = defaultScale
+ currentView.visible = true
+ shrinkCenter.target = previousView
+ previousView = currentView
+ shrinkCenter.start()
+ }
+ }
+
+ onViewChanged: {
+ if (view) {
+ if (++viewNumber > 3)
+ viewNumber = 0
+ handleViewChange(viewNumber)
+ }
+ }
+
+ // Used on automatic demo mode
+ Timer {
+ id: centerTimer
+ property int viewNumber: -1
+ running: ValueSource.automaticDemoMode
+ repeat: true
+ interval: 6000
+ onTriggered: {
+ if (++viewNumber > 3)
+ viewNumber = 0
+ handleViewChange(viewNumber)
+ }
+ }
+
+ function stopAll() {
+ centerTimer.stop()
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCalendar.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCalendar.qml
new file mode 100644
index 00000000..39a84d3b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCalendar.qml
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Item {
+ id: calendarContainer
+
+ property string appointment: "No appointments"
+ property var currentDate
+ property string date
+ property string time
+ opacity: 0.5
+ property alias xTarget: startupAnimation.to
+ property int defaultXPos: 200
+
+ Image {
+ id: image
+ source: "image://etc/calendar.png"
+ }
+
+ Text {
+ id: dateText
+ anchors.top: image.bottom
+ anchors.topMargin: 10
+ anchors.horizontalCenter: image.horizontalCenter
+ text: date
+ color: "gray"
+ font.pixelSize: 16
+ }
+
+ Text {
+ id: timeText
+ anchors.top: dateText.bottom
+ anchors.horizontalCenter: image.horizontalCenter
+ text: time
+ color: "gray"
+ font.pixelSize: 20
+ }
+
+ Text {
+ anchors.top: timeText.bottom
+ anchors.horizontalCenter: image.horizontalCenter
+ text: appointment
+ color: "lightGray"
+ font.pixelSize: 14
+ }
+
+ Timer {
+ id: fadeOutTimer
+ interval: 5000
+ running: false
+ repeat: false
+ onTriggered: {
+ calendarContainer.opacity = 0.5
+ }
+ }
+
+ Behavior on opacity { PropertyAnimation { duration: 500 } }
+
+ PropertyAnimation on x {
+ id: startupAnimation
+ duration: 500
+ easing.type: Easing.InCubic
+ onStopped: {
+ calendarContainer.opacity = 1.0
+ fadeOutTimer.start()
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ currentDate = new Date()
+ date = currentDate.toLocaleDateString(Qt.locale("en_GB"))
+ time = currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm")
+ x = defaultXPos
+ startupAnimation.start()
+ }
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCarInfo.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCarInfo.qml
new file mode 100644
index 00000000..590ef1be
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewCarInfo.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ id: carinfoContainer
+
+ property int total: ValueSource.totalDistance
+ property int sinceLast: ValueSource.kmSinceCharge
+ opacity: 0.5
+ property alias xTarget: startupAnimation.to
+ property int defaultXPos: 900
+
+ Image {
+ id: image
+ source: "image://etc/CarInfoIcon.png"
+ }
+
+ Row {
+ scale: 0.75
+ spacing: 7
+ anchors.top: image.bottom
+ anchors.horizontalCenter: image.horizontalCenter
+
+ CarInfoField {
+ title: "Total distance"
+ value: carinfoContainer.total.toString()
+ unit: "km"
+ }
+
+ CarInfoField {
+ title: "Since last\ncharge"
+ value: carinfoContainer.sinceLast.toString()
+ unit: "km"
+ }
+ }
+
+ Timer {
+ id: fadeOutTimer
+ interval: 5000
+ running: false
+ repeat: false
+ onTriggered: {
+ carinfoContainer.opacity = 0.5
+ }
+ }
+
+ Behavior on opacity { PropertyAnimation { duration: 500 } }
+
+ PropertyAnimation on x {
+ id: startupAnimation
+ duration: 500
+ easing.type: Easing.InCubic
+ onStopped: {
+ carinfoContainer.opacity = 1.0
+ fadeOutTimer.start()
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ x = defaultXPos
+ startupAnimation.start()
+ }
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewContacts.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewContacts.qml
new file mode 100644
index 00000000..9789b73e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewContacts.qml
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Item {
+ id: contactContainer
+ opacity: 0.5
+ property int defaultYPos: 50
+ property alias icon: contactImage.source
+ property alias name: contactName.text
+ property alias yTarget: startupAnimation.to
+
+ Image {
+ id: contactImage
+ source: "image://etc/contacts.png"
+ }
+
+ Text {
+ id: title
+ anchors.top: contactImage.bottom
+ anchors.topMargin: 10
+ anchors.horizontalCenter: contactImage.horizontalCenter
+ text: contactContainer.name === "" ? "Browsing\ncontacts" : "Calling"
+ color: "gray"
+ font.pixelSize: 20
+ }
+
+ Text {
+ id: contactName
+ anchors.top: title.bottom
+ anchors.horizontalCenter: contactImage.horizontalCenter
+ color: "lightGray"
+ font.pixelSize: 24
+ }
+
+ Timer {
+ id: fadeOutTimer
+ interval: 5000
+ running: false
+ repeat: false
+ onTriggered: {
+ fadeOut.start()
+ }
+ }
+
+ PropertyAnimation on opacity {
+ id: fadeIn
+ to: 1.0
+ duration: 500
+ onStopped: {
+ call.start()
+ }
+ }
+
+ PropertyAnimation on opacity {
+ id: fadeOut
+ to: 0.5
+ duration: 500
+ }
+
+ PropertyAnimation on y {
+ id: startupAnimation
+ duration: 500
+ easing.type: Easing.InCubic
+ onStopped: {
+ fadeIn.start()
+ fadeOutTimer.start()
+ }
+ }
+
+ Timer {
+ id: call
+ interval: 2000
+ running: false
+ onTriggered: {
+ name = "Jane"
+ icon = "image://etc/jane.png"
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ name = ""
+ icon = "image://etc/contacts.png"
+ y = defaultYPos
+ startupAnimation.start()
+ }
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewMusic.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewMusic.qml
new file mode 100644
index 00000000..41df2185
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/CenterViewMusic.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Item {
+ id: musicContainer
+
+ property url currentCover: "image://etc/cover.png"
+ property string currentSong: "Doesn't Mean Anything"
+ property string currentArtist: "Alicia Keys"
+ opacity: 0.5
+ property alias yTarget: startupAnimation.to
+ property int defaultYPos: 400
+
+ Rectangle {
+ id: image
+ width: 124
+ height: 124
+ border.color: "#EF2973"
+ border.width: 2
+ color: "black"
+
+ Image {
+ anchors.margins: 2
+ fillMode: Image.PreserveAspectCrop
+ anchors.fill: parent
+ asynchronous: true
+ source: musicContainer.currentCover
+ }
+ }
+
+ Text {
+ id: title
+ anchors.top: image.bottom
+ anchors.topMargin: 10
+ anchors.horizontalCenter: image.horizontalCenter
+ text: musicContainer.currentSong
+ color: "gray"
+ font.pixelSize: 16
+ }
+
+ Text {
+ anchors.top: title.bottom
+ anchors.horizontalCenter: image.horizontalCenter
+ text: musicContainer.currentArtist
+ color: "lightGray"
+ font.pixelSize: 16
+ }
+
+ Timer {
+ id: fadeOutTimer
+ interval: 3000
+ running: false
+ repeat: false
+ onTriggered: {
+ musicContainer.opacity = 0.5
+ }
+ }
+
+ Behavior on opacity { PropertyAnimation { duration: 500 } }
+
+ PropertyAnimation on y {
+ id: startupAnimation
+ duration: 500
+ easing.type: Easing.InCubic
+ onStopped: {
+ musicContainer.opacity = 1.0
+ fadeOutTimer.start()
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ y = defaultYPos
+ startupAnimation.start()
+ }
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/Dashboard.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/Dashboard.qml
new file mode 100644
index 00000000..fe580123
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/Dashboard.qml
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import "gauges"
+
+DashboardForm
+{
+ id: dashboardEntity
+
+ state: "start"
+
+ meterOpacity: 0.0
+
+ anchors.fill: parent
+
+ property real timeScaleMultiplier: 1.5
+ property bool startupAnimationsFinished: false
+
+ onNeedleRotationChanged: speedometer.speedometerNeedleRotation = needleRotation / 40.
+
+ //
+ // Startup animations
+ //
+ SequentialAnimation {
+ id: speedometerStartupAnimations
+ running: true
+
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: bottompanel.visible = true }
+
+ SmoothedAnimation {
+ target: dashboardEntity
+ property: "bottomPanelY"
+ from: 480
+ to: 402
+ duration: 1000 * timeScaleMultiplier
+ easing.type: Easing.InCirc
+ }
+
+ PauseAnimation {
+ duration: 1000
+ }
+
+ NumberAnimation {
+ target: dashboardEntity
+ property: "meterOpacity"
+ from: 0
+ to: 1
+ duration: 2000
+ }
+
+ SmoothedAnimation {
+ target: dashboardEntity
+ property: "needleRotation"
+ from: 0.0
+ to: -8000.0
+ duration: 1000 * timeScaleMultiplier
+ easing.type: Easing.InCubic
+ }
+
+ SmoothedAnimation {
+ target: dashboardEntity
+ property: "needleRotation"
+ from: -8000.0
+ to: 0.0
+ duration: 1000 * timeScaleMultiplier
+ easing.type: Easing.OutCubic
+ }
+
+ ScriptAction { script: startupAnimationsFinished = true }
+ }
+
+ function stopAll() {
+ speedometerStartupAnimations.stop()
+ }
+
+ bottompanel.visible: false
+ bottompanel.y: 480
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackground.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackground.qml
new file mode 100644
index 00000000..2c46b7fe
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackground.qml
@@ -0,0 +1,151 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.4
+
+DashboardBackgroundForm {
+ id: dashboard
+
+ state: "normal"
+
+ Timer {
+ running: true
+ interval: 100
+ onTriggered: dashboard.state = "normal"
+ repeat: false
+ }
+
+
+
+ transitions: [
+ Transition {
+ from: "*"
+ to: "*"
+
+ SequentialAnimation {
+
+ ParallelAnimation {
+ PropertyAnimation {
+ target: dashboard.image
+ properties: "opacity"
+ duration: 1500
+ }
+
+
+ PropertyAnimation {
+ target: dashboard.leftGauge
+ properties: "scale, opacity"
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+
+ PropertyAnimation {
+ target: dashboard.rightGauge
+ properties: "scale, opacity"
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+
+ SequentialAnimation {
+
+ PauseAnimation {
+ duration: 200
+ }
+ PropertyAnimation {
+ properties: "x,y"
+ duration: 800
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+
+ SequentialAnimation {
+ PauseAnimation {
+ duration: 1000
+ }
+
+ PropertyAnimation {
+ target: dashboard
+ property: "scale"
+ easing.type: Easing.InOutQuad
+ duration: 300
+ }
+
+ ParallelAnimation {
+ PropertyAnimation {
+ target: dashboard.gadget
+ properties: "opacity, scale"
+ duration: 1000
+ }
+ PropertyAnimation {
+ target: dashboard.gadget2
+ properties: "opacity, scale"
+ duration: 1000
+ }
+ }
+ ParallelAnimation {
+ PropertyAnimation {
+ target: dashboard.leftGadget
+ properties: "opacity, scale"
+ duration: 400
+ }
+ PropertyAnimation {
+ target: dashboard.rightGadget
+ properties: "opacity, scale"
+ duration: 400
+ }
+ PropertyAnimation {
+ target: dashboard.center
+ properties: "opacity, scale"
+ duration: 400
+ }
+ PropertyAnimation {
+ target: dashboard.bar
+ properties: "opacity, scale"
+ duration: 800
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackgroundForm.ui.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackgroundForm.ui.qml
new file mode 100644
index 00000000..8b9b5f34
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardBackgroundForm.ui.qml
@@ -0,0 +1,205 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.4
+import ClusterDemo 1.0
+
+Item {
+ id: root
+ width: 1280
+ height: 480
+ property alias gadget2: gadget2
+
+ property alias center: center
+ property alias rightGadget: rightGadget
+ property alias bar: bar
+ property alias leftGadget: leftGadget
+ property alias image: image
+ property alias rightGauge: rightGauge
+ property alias leftGauge: leftGauge
+ property alias gadget: gadget
+
+ property real gaugeOpacity: 1
+
+ Image {
+ id: image
+ source: "image://etc/Cluster8Gauges.png"
+
+ Image {
+ id: center
+ x: 574
+ y: 30
+ source: "image://etc/center.png"
+ }
+
+ Image {
+ id: rightGadget
+ x: 732
+ y: 34
+ source: "image://etc/right.png"
+ }
+
+ Image {
+ id: leftGadget
+ x: 419
+ y: 32
+ source: "image://etc/left.png"
+ }
+
+ Image {
+ id: bar
+ x: 534
+ y: 143
+ source: "image://etc/temperature.png"
+ }
+ }
+
+ Image {
+ id: leftGauge
+ x: 318
+ y: 393
+ source: "image://etc/leftgauge.png"
+
+ Gadget {
+ id: gadget
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Image {
+ id: rightGauge
+ x: 652
+ y: 394
+ source: "image://etc/rightgauge.png"
+
+ Gadget {
+ id: gadget2
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+ states: [
+ State {
+ name: "start"
+
+ PropertyChanges {
+ target: leftGauge
+ x: 13
+ y: 169
+ width: 339
+ height: 340
+ opacity: 0
+ scale: 0.7
+ }
+
+ PropertyChanges {
+ target: rightGauge
+ x: 930
+ y: 169
+ width: 330
+ height: 340
+ opacity: 0
+ scale: 0.7
+ }
+
+ PropertyChanges {
+ target: root
+ scale: 0.8
+ gaugeOpacity: 0
+ }
+
+ PropertyChanges {
+ target: image
+ opacity: 0.2
+ }
+
+ PropertyChanges {
+ target: gadget
+ scale: 0.8
+ opacity: 0
+ }
+
+ PropertyChanges {
+ target: leftGadget
+ scale: 0.8
+ opacity: 0
+ }
+
+ PropertyChanges {
+ target: center
+ opacity: 0
+ scale: 0.8
+ }
+
+ PropertyChanges {
+ target: rightGadget
+ scale: 0.8
+ opacity: 0
+ }
+
+ PropertyChanges {
+ target: bar
+ scale: 0.8
+ opacity: 0
+ }
+
+ PropertyChanges {
+ target: gadget2
+ opacity: 0
+ }
+ },
+ State {
+ name: "normal"
+
+ PropertyChanges {
+ target: leftGauge
+ x: 102
+ y: 75
+ }
+
+ PropertyChanges {
+ target: rightGauge
+ x: 841
+ y: 74
+ }
+ }
+ ]
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardForm.ui.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardForm.ui.qml
new file mode 100644
index 00000000..d806dc56
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardForm.ui.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.6
+import ClusterDemo 1.0
+import "gauges"
+
+DashboardBackground {
+ id: dashboardEntity
+ property alias bottompanel: bottompanel
+ property alias speedometer: speedometer
+ property alias tachometer: tachometer
+
+ property alias bottomPanelY: bottompanel.y
+ property alias needleRotation: tachometer.tachometerNeedleRotation
+
+ property real meterOpacity: 1
+
+ gadget2.green: tachometer.actualRPM < 4000
+ gadget.green: speedometer.actualSpeed < 100
+
+ anchors.fill: parent
+
+ // Speedometer
+ SpeedoMeter {
+ opacity: dashboardEntity.meterOpacity
+ id: speedometer
+ }
+ // Tachometer
+ TachoMeter {
+ id: tachometer
+ opacity: dashboardEntity.meterOpacity
+ anchors.fill: parent
+ }
+ // Fuelmeter
+ FuelMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Batterymeter
+ BatteryMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Consumptionmeter
+ ConsumptionMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Temperaturemeter
+ TemperatureMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Turbometer
+ TurboMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Fpsmeter
+ FpsMeter {
+ opacity: dashboardEntity.meterOpacity
+ }
+ // Bottom Panel
+ BottomPanel {
+ id: bottompanel
+ y: 402
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardFrame.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardFrame.qml
new file mode 100644
index 00000000..d0ed5513
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardFrame.qml
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Rectangle
+{
+ width: 1280
+ height: 480
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#ffffff" }
+ GradientStop { position: 0.4; color: "#1e2127" }
+ GradientStop { position: 1.0; color: "#0c0f17" }
+ }
+
+ Image {
+ id: logo
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: 270
+ source: "image://etc/Built_with_Qt.png"
+ }
+
+ Loader {
+ id: dashLoader
+ anchors.fill: parent
+ source: "DashboardView.qml"
+ active: logo.status === Image.Ready
+ transform: Rotation {
+ id: rot
+ origin.x: 1280 / 2
+ origin.y: 0
+ axis { x: 1; y: 0; z: 0 }
+ angle: ValueSource.runningInDesigner ? 0 : 90 // the default angle
+
+ }
+ onLoaded: flipin.start()
+ }
+
+ SequentialAnimation {
+ id: flipin
+ PauseAnimation { duration: 500 }
+ SmoothedAnimation { target: rot; property: "angle"; from: 90; to: 0; duration: 500 }
+ PauseAnimation { duration: 2500 }
+ OpacityAnimator { target: logo; from: 1.0; to: 0; duration: 500 }
+ }
+
+ function stopAll() {
+ dashLoader.item.stopAll()
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardView.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardView.qml
new file mode 100644
index 00000000..dd2ec8e3
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/DashboardView.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Loader {
+ id: centerview
+ asynchronous: true
+ anchors.fill: parent
+ source: "CenterView.qml"
+
+ Loader {
+ id: dash
+ asynchronous: true
+ anchors.fill: parent
+ source: "Dashboard.qml"
+ z: 2
+ }
+
+ function stopAll() {
+ centerview.item.stopAll()
+ dash.item.stopAll()
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/Gadget.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/Gadget.qml
new file mode 100644
index 00000000..62b535e8
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/Gadget.qml
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.4
+
+Item {
+ id: gadget
+
+ width: 240
+ height: 240
+
+ property bool green: true
+
+ SequentialAnimation {
+ running: true
+ loops: -1
+ PropertyAnimation {
+
+ target: glow
+ from: 0.96
+ to: 0.94
+ property: "scale"
+ duration: 600
+ }
+ PropertyAnimation {
+ target: glow
+ from: 0.94
+ to: 0.96
+ property: "scale"
+ duration: 600
+ }
+ }
+
+ Item {
+ id: glow
+
+ x: 53
+ y: 52
+ width: 145
+ height: 145
+
+ Image {
+ id: green
+ x: 0
+ y: -1
+
+ source: "image://etc/greenglow.png"
+ }
+
+ Image {
+ id: red
+ x: -1
+ y: 0
+
+ source: "image://etc/redglow.png"
+ }
+ }
+
+ Image {
+ id: knob
+ x: 68
+ y: 65
+ source: "image://etc/knob.png"
+ }
+ states: [
+ State {
+ name: "red"
+ when: !gadget.green
+ },
+ State {
+ name: "green"
+ when: gadget.green
+
+ PropertyChanges {
+ target: red
+ opacity: 0
+ }
+ }
+ ]
+}
diff --git a/doc/src/snippets/gs/notepad2.cpp b/doc/src/snippets/qtcluster/qml/dash_hybrid/SafeRendererPicture.qml
index 349bd0ac..b57ac6ae 100644
--- a/doc/src/snippets/gs/notepad2.cpp
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/SafeRendererPicture.qml
@@ -48,9 +48,9 @@
**
****************************************************************************/
-//! [all]
-void Notepad::on_quitButton_clicked()
-{
+import QtQuick 2.6
+import QtQuick.Extras 1.4
+
+Picture {
}
-//! [all]
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/BatteryMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/BatteryMeter.qml
new file mode 100644
index 00000000..1a70ce6c
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/BatteryMeter.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ property real batterymeterNeedleRotation: -batteryValue * batteryDegreesPerValue
+ property real batteryValue: ValueSource.batteryLevel
+ property real maxValueAngle: 317
+ property real minValueAngle: 225
+ property real maximumValue: 100
+ property real batteryDegreesPerValue: Math.abs((maxValueAngle - minValueAngle) / maximumValue)
+
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.rightMargin: 436
+ anchors.topMargin: 93
+ width: 108
+ height: 7
+ rotation: batterymeterNeedleRotation - 135
+
+ Image {
+ width: 36
+ height: 3
+ //opacity: 0.75
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: "image://etc/SpeedometerNeedle.png"
+ }
+ Behavior on batteryValue {
+ enabled: !ValueSource.runningInDesigner && !ValueSource.automaticDemoMode && startupAnimationsFinished
+ PropertyAnimation { duration: 250 }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/ConsumptionMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/ConsumptionMeter.qml
new file mode 100644
index 00000000..23a25a6e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/ConsumptionMeter.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ id: consumtionMeter
+ property real consumptionValue: 2.0 + ValueSource.rpm / 444.45
+
+ property real minValueAngle: 378
+ property real maxValueAngle: 291
+ property real minimumValue: 0
+ property real maximumValue: 20
+
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.topMargin: 243
+ anchors.rightMargin: 276
+
+ GaugeFiller {
+ id: consumptionFiller
+ value: consumtionMeter.consumptionValue
+ anchors.fill: parent
+ numVertices: 32
+ radius: 155
+ fillWidth: 20
+ color: ValueSource.rpm < 4000 ? "green" : "#EF2973"
+ opacity: 0.3
+ minAngle: consumtionMeter.minValueAngle
+ maxAngle: consumtionMeter.maxValueAngle
+ minValue: consumtionMeter.minimumValue
+ maxValue: consumtionMeter.maximumValue
+ Behavior on value {
+ enabled: !ValueSource.runningInDesigner && !ValueSource.automaticDemoMode && startupAnimationsFinished
+ PropertyAnimation { duration: 250 }
+ }
+ }
+
+ Item {
+ width: 322
+ height: 7
+ rotation: consumptionFiller.angle - 72
+ anchors.centerIn: parent
+
+ Image {
+ width: 95
+ height: 3
+ //opacity: 0.75
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: ValueSource.rpm < 4000 ? "image://etc/SpeedometerNeedleGreen.png" : "image://etc/SpeedometerNeedle.png"
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FpsMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FpsMeter.qml
new file mode 100644
index 00000000..51e27fc8
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FpsMeter.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import "../.."
+
+Item {
+ id: fpsmeterNeedle
+
+ property real fpsmeterNeedleRotation: fpsValue * fpsDegreesPerValue
+ property real fpsValue: Math.min(fpscounter.fpsNow, 60) // Limit to 60, as that's where the gauge ends
+ property real maxValueAngle: 314
+ property real minValueAngle: 45
+ property real maximumValue: 60
+ property real fpsDegreesPerValue: Math.abs((maxValueAngle - minValueAngle) / maximumValue)
+
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.rightMargin: 591
+ anchors.topMargin: 83
+ width: 107
+ height: 7
+ rotation: fpsmeterNeedleRotation - 45
+
+ Image {
+ width: 37
+ height: 3
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: "image://etc/SpeedometerNeedle.png"
+ }
+
+ FpsCounter {
+ id: fpscounter
+ rotation: fpsVisible ? -fpsmeterNeedle.rotation : 0
+ anchors.top: parent.top
+ anchors.topMargin: 33
+ anchors.horizontalCenter: parent.horizontalCenter
+ fpsVisible: false // Setting this to true prints fps on screen
+ running: startupAnimationsFinished
+ }
+ Behavior on fpsValue {
+ enabled: startupAnimationsFinished
+ PropertyAnimation { duration: fpscounter.fpsInterval }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FuelMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FuelMeter.qml
new file mode 100644
index 00000000..b6569c6d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/FuelMeter.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ property real fuelmeterNeedleRotation: fuelValue * fuelDegreesPerValue
+ property real fuelValue: ValueSource.fuelLevel
+
+ property real maxValueAngle: 170
+ property real minValueAngle: 10
+ property real maximumValue: 100
+ property real fuelDegreesPerValue: Math.abs((maxValueAngle - minValueAngle) / maximumValue)
+
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.rightMargin: 436
+ anchors.topMargin: 93
+ width: 105
+ height: 7
+ rotation: fuelmeterNeedleRotation - 80
+
+ Image {
+ width: 37
+ height: 3
+ //opacity: 0.75
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: "image://etc/SpeedometerNeedle.png"
+ }
+ Behavior on fuelValue {
+ enabled: !ValueSource.automaticDemoMode && startupAnimationsFinished
+ PropertyAnimation { duration: 250 }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/SpeedoMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/SpeedoMeter.qml
new file mode 100644
index 00000000..23f11c43
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/SpeedoMeter.qml
@@ -0,0 +1,157 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+
+ id: speedometer
+
+ property real speedometerNeedleRotation: 0.0
+ property string speed: actualSpeed.toFixed().toString()
+
+ property bool animationStopped: ValueSource.runningInDesigner ? true : startupAnimationsFinished
+
+ property real actualSpeed: animationStopped
+ ? ValueSource.kph : -speedometerNeedleRotation
+
+ property real minValueAngle: 55
+ property real maxValueAngle: 305
+ property real minimumSpeed: 0
+ property real maximumSpeed: 200
+
+ Item {
+ anchors.left: parent.left
+ anchors.leftMargin: 20
+ width: 480
+ height: 480
+
+ GaugeFiller {
+ id: speedFiller
+ value: speedometer.actualSpeed
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.topMargin: 244
+ anchors.leftMargin: 255
+ numVertices: 64
+ radius: 155
+ fillWidth: 5
+ color: speedometer.actualSpeed < 100 ? "green" : "#EF2973"
+ opacity: 0.6
+ minAngle: speedometer.minValueAngle
+ maxAngle: speedometer.maxValueAngle
+ minValue: speedometer.minimumSpeed
+ maxValue: speedometer.maximumSpeed
+ }
+ }
+
+ Item {
+ id: speedometerNeedle
+ width: 309
+ height: 7
+ rotation: speedFiller.angle - 35
+
+ x: 121
+ y: 243
+
+ Image {
+ opacity: 0.75
+ width: 97
+ height: 7
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: speedometer.actualSpeed < 100 ? "image://etc/SpeedometerNeedleGreen.png" : "image://etc/SpeedometerNeedle.png"
+ }
+ }
+
+ Row {
+ anchors.top: speedometerNeedle.bottom
+ anchors.topMargin: 80
+ anchors.horizontalCenter: speedometerNeedle.horizontalCenter
+ spacing: 7
+
+ Text {
+ font.pixelSize: 18
+ color:(ValueSource.gear === 0 && ValueSource.parkingBrake) ? "white" : "gray"
+ text: "P"
+ }
+
+ Text {
+ font.pixelSize: 18
+ //font.bold: ValueSource.gear === -1
+ color: ValueSource.gear === -1 ? "white" : "gray"
+ text: "R"
+ }
+
+ Text {
+ font.pixelSize: 18
+ //font.bold: ValueSource.gear === 0
+ color: (ValueSource.gear === 0 && !ValueSource.parkingBrake) ? "white" : "gray"
+ text: "N"
+ }
+
+ Text {
+ font.pixelSize: 18
+ //font.bold: ValueSource.gear === 1
+ color: ValueSource.gear === 1 ? "white" : "gray"
+ text: "D"
+ }
+ }
+
+ Text {
+ id: speedText
+ anchors.top: speedometerNeedle.top
+ anchors.topMargin: -27
+ anchors.horizontalCenter: speedometerNeedle.horizontalCenter
+ font.pixelSize: 40
+ color: "lightGray"
+ text: speedometer.speed
+ }
+
+ Text {
+ id: speedUnitText
+ anchors.top: speedText.bottom
+ anchors.horizontalCenter: speedometerNeedle.horizontalCenter
+ font.pixelSize: 18
+ color: "lightGray"
+ text: "KM/H"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TachoMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TachoMeter.qml
new file mode 100644
index 00000000..c6dc1bf5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TachoMeter.qml
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ id: tachometer
+
+ property real tachometerNeedleRotation: 0.0
+ property string rpm: actualRPM.toFixed().toString()
+
+ property bool animationStoped: ValueSource.runningInDesigner ? true : startupAnimationsFinished
+
+ property real actualRPM: animationStoped
+ ? ValueSource.rpm : -tachometerNeedleRotation
+
+ property real minValueAngle: 55
+ property real maxValueAngle: 255
+ property real minimumRPM: 0
+ property real maximumRPM: 8000
+
+ Item {
+ anchors.right: parent.right
+ anchors.rightMargin: 20
+ width: 480
+ height: 480
+
+ GaugeFiller {
+ id: rpmFiller
+ value: tachometer.actualRPM
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.topMargin: 246
+ anchors.rightMargin: 253
+ numVertices: 64
+ radius: 155
+ fillWidth: 5
+ color: tachometer.actualRPM < 4000 ? "green" : "#EF2973"
+ opacity: 0.6
+ minAngle: tachometer.minValueAngle
+ maxAngle: tachometer.maxValueAngle
+ minValue: tachometer.minimumRPM
+ maxValue: tachometer.maximumRPM
+ }
+ }
+
+ Item {
+ id: tachometerNeedle
+ width: 312
+ height: 7
+ rotation: rpmFiller.angle - 35
+ x: 854
+ y: 242
+
+ Image {
+ opacity: 0.75
+ width: 98
+ height: 7
+ anchors.left: parent.left
+ anchors.leftMargin: 2
+ anchors.verticalCenter: parent.verticalCenter
+ source: tachometer.actualRPM < 4000 ? "image://etc/SpeedometerNeedleGreen.png" : "image://etc/SpeedometerNeedle.png"
+ }
+ }
+
+ Text {
+ id: textEco
+ anchors.top: tachometerNeedle.top
+ anchors.topMargin: -7
+ anchors.horizontalCenter: tachometerNeedle.horizontalCenter
+ text: tachometer.actualRPM > 4000 ? "POWER" : "ECO"
+ font.pixelSize: 18
+ color: tachometer.actualRPM <= 4000 ? "white" : "red"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TemperatureMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TemperatureMeter.qml
new file mode 100644
index 00000000..c0001667
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TemperatureMeter.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ property real temperatureValue: ValueSource.engineTemperature
+ property real minValueAngle: 42.5
+ property real maxValueAngle: -42.5
+ property real minimumValue: 40
+ property real maximumValue: 120
+
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.rightMargin: 643
+ anchors.topMargin: 60
+
+ GaugeFiller {
+ id: temperatureFiller
+ value: temperatureValue
+ anchors.fill: parent
+ numVertices: 32
+ radius: 140
+ fillWidth: 25
+ color: "#EF2973"
+ opacity: 0.3
+ minAngle: minValueAngle
+ maxAngle: maxValueAngle
+ minValue: minimumValue
+ maxValue: maximumValue
+ Behavior on value {
+ enabled: !ValueSource.automaticDemoMode && startupAnimationsFinished
+ PropertyAnimation { duration: 250 }
+ }
+ }
+
+ Item {
+ width: 280
+ height: 7
+ rotation: temperatureFiller.angle - 47.5
+ anchors.centerIn: parent
+
+ Image {
+ width: 25
+ height: 3
+ //opacity: 0.75
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: "image://etc/SpeedometerNeedle.png"
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TurboMeter.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TurboMeter.qml
new file mode 100644
index 00000000..7da8e8f9
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/TurboMeter.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ClusterDemo 1.0
+
+Item {
+ property real turbometerNeedleRotation: turboValue * turboDegreesPerValue
+ property real turboValue: ValueSource.rpm / 2000.
+ property real maxValueAngle: 270
+ property real minValueAngle: 0
+ property real maximumValue: 4.0
+ property real turboDegreesPerValue: Math.abs((maxValueAngle - minValueAngle) / maximumValue)
+
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: 426
+ anchors.topMargin: 93
+ width: 109
+ height: 7
+ rotation: turbometerNeedleRotation - 90
+
+ Image {
+ width: 38
+ height: 3
+ //opacity: 0.75
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ source: "image://etc/SpeedometerNeedle.png"
+ }
+ Behavior on turboValue {
+ enabled: !ValueSource.automaticDemoMode && startupAnimationsFinished
+ PropertyAnimation { duration: 250 }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/BatteryMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/BatteryMeterSpecifics.qml
new file mode 100644
index 00000000..07ea27e4
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/BatteryMeterSpecifics.qml
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("BatteryMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Battery Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.batteryValue
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: batterySlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.batteryValue.value
+ onValueChanged: {
+ backendValues.batteryValue.value = batterySlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Battery")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumFuelSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maximumValue.value
+ onValueChanged: {
+ backendValues.maximumValue.value = maximumFuelSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/ConsumptionMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/ConsumptionMeterSpecifics.qml
new file mode 100644
index 00000000..81180177
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/ConsumptionMeterSpecifics.qml
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("ConsumptionMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Consumption Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.consumptionValue
+ minimumValue: backendValues.minimumValue.value
+ maximumValue: backendValues.maximumValue.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: consumptionSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: backendValues.minimumValue.value
+ maximumValue: backendValues.maximumValue.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.consumptionValue.value
+ onValueChanged: {
+ backendValues.consumptionValue.value = consumptionSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Consumption")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumFuelSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maximumValue.value
+ onValueChanged: {
+ backendValues.maximumValue.value = maximumFuelSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+ Label {
+ text: qsTr("Minimum Consumption")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minimumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minimumSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minimumValue.value
+ onValueChanged: {
+ backendValues.minimumValue.value = minimumSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/FuelMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/FuelMeterSpecifics.qml
new file mode 100644
index 00000000..06b5d194
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/FuelMeterSpecifics.qml
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("FuelMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Fuel Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.fuelValue
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: fuelSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.fuelValue.value
+ onValueChanged: {
+ backendValues.fuelValue.value = fuelSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Fuel")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumFuelSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maximumValue.value
+ onValueChanged: {
+ backendValues.maximumValue.value = maximumFuelSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/SpeedoMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/SpeedoMeterSpecifics.qml
new file mode 100644
index 00000000..0ac8988e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/SpeedoMeterSpecifics.qml
@@ -0,0 +1,209 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("SpeedoMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Actual Speed")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.actualSpeed
+ minimumValue: backendValues.minimumSpeed.value
+ maximumValue: backendValues.maximumSpeed.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: speedSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: backendValues.minimumSpeed.value
+ maximumValue: backendValues.maximumSpeed.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.actualSpeed.value
+ onValueChanged: {
+ backendValues.actualSpeed.value = speedSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Speed")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumSpeed
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumSpeedSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maximumSpeed.value
+ onValueChanged: {
+ backendValues.maximumSpeed.value = maximumSpeedSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Speed")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minimumSpeed
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minimumSpeedSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.minimumSpeed.value
+ onValueChanged: {
+ backendValues.minimumSpeed.value = minimumSpeedSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TachoMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TachoMeterSpecifics.qml
new file mode 100644
index 00000000..d3d9da8b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TachoMeterSpecifics.qml
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("TachoMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Actual RPM")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.actualRPM
+ minimumValue: backendValues.minimumRPM.value
+ maximumValue: backendValues.maximumRPM.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: rpmSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: backendValues.minimumRPM.value
+ maximumValue: backendValues.maximumRPM.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.actualRPM.value
+ onValueChanged: {
+ backendValues.actualRPM.value = rpmSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum RPM")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumRPM
+ minimumValue: 0
+ maximumValue: 10000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumRPMSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 10000
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maximumRPM.value
+ onValueChanged: {
+ backendValues.maximumRPM.value = maximumRPMSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum RPM")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minimumRPM
+ minimumValue: 0
+ maximumValue: 10000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minimumRPMSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 10000
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.minimumRPM.value
+ onValueChanged: {
+ backendValues.minimumRPM.value = minimumRPMSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TemperatureMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TemperatureMeterSpecifics.qml
new file mode 100644
index 00000000..e4ae0cd5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TemperatureMeterSpecifics.qml
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("TemperaturenMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Temperature Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.temperatureValue
+ minimumValue: backendValues.minimumValue.value
+ maximumValue: backendValues.maximumValue.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: temperatureSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: backendValues.minimumValue.value
+ maximumValue: backendValues.maximumValue.value
+ updateValueWhileDragging: true
+ stepSize: 1
+ value: backendValues.temperatureValue.value
+ onValueChanged: {
+ backendValues.temperatureValue.value = temperatureSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Temperature")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maximumValue.value
+ onValueChanged: {
+ backendValues.maximumValue.value = maximumSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+ Label {
+ text: qsTr("Minimum Temperature")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minimumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minimumSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minimumValue.value
+ onValueChanged: {
+ backendValues.minimumValue.value = minimumSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TurboMeterSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TurboMeterSpecifics.qml
new file mode 100644
index 00000000..fe5ad937
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_hybrid/gauges/designer/TurboMeterSpecifics.qml
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("TurboMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Turbo Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.turboValue
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: turboSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: backendValues.maximumValue.value
+ updateValueWhileDragging: true
+ stepSize: 0.1
+ value: backendValues.turboValue.value
+ onValueChanged: {
+ backendValues.turboValue.value = turboSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+
+ Label {
+ text: qsTr("Maximum Turbo")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maximumValue
+ minimumValue: 0
+ maximumValue: 1000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maximumFuelSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 1000
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maximumValue.value
+ onValueChanged: {
+ backendValues.maximumValue.value = maximumFuelSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Maximum Value Angle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: maxValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.maxValueAngle.value
+ onValueChanged: {
+ backendValues.maxValueAngle.value = maxValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ Label {
+ text: qsTr("Minimum Value Angle")
+ }
+
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minValueAngle
+ minimumValue: 0
+ maximumValue: 360
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: minValueAngleSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 360
+ updateValueWhileDragging: true
+ stepSize: 10
+ value: backendValues.minValueAngle.value
+ onValueChanged: {
+ backendValues.minValueAngle.value = minValueAngleSlider.value
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/CameraLoader.qml b/doc/src/snippets/qtcluster/qml/dash_sports/CameraLoader.qml
new file mode 100644
index 00000000..25101609
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/CameraLoader.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ".."
+import ClusterDemo 1.0
+
+Loader {
+ id: camera
+
+ opacity: 0.0
+ visible: false
+ asynchronous: true
+ source: "../VideoView.qml"
+ onLoaded: item.imageSource = "image://etc/RearCameraOverlaySport.png"
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/CarLoader.qml b/doc/src/snippets/qtcluster/qml/dash_sports/CarLoader.qml
new file mode 100644
index 00000000..c9022909
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/CarLoader.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+
+Loader {
+ opacity: 0.0
+
+ asynchronous: true
+ active: false
+ source: "../CarViewSports.qml"
+
+ onLoaded: {
+ // Start with car view, there is some kind of a problem when starting with any
+ // other (It seems NoDraw doesn't work if this is not the first view)
+ loadCenterView(true) // We get the first change from signal
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/CenterStack.qml b/doc/src/snippets/qtcluster/qml/dash_sports/CenterStack.qml
new file mode 100644
index 00000000..8eaadd5a
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/CenterStack.qml
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.6
+import ".."
+import ClusterDemo 1.0
+
+Item {
+ id: centerStack
+ property int viewIndex: 4
+ height: root.height - 173
+ width: root.width / 2
+ clip: true
+
+ property alias fadeOutCenter: fadeOutCenter
+ property alias fadeInCenter: fadeInCenter
+ property alias loader: loader
+
+
+ Loader {
+ id: loader
+ onStatusChanged: {
+ if (status == Loader.Ready)
+ fadeInCenter.start()
+ }
+ anchors.fill: parent
+ }
+
+ Component.onCompleted: {
+ loader.source = "../MediaPlayerView.qml"
+ // Start with car view, there is some kind of a problem when starting with any
+ // other (It seems NoDraw doesn't work if this is not the first view)
+ //loadCenterView(true) // We get the first change from signal
+ }
+
+ PropertyAnimation {
+ id: fadeInCenter
+ target: loader
+ property: "opacity"
+ from: 0.0
+ to: 1.0
+ duration: 400
+ easing.type: Easing.Linear
+ }
+
+ PropertyAnimation {
+ id: fadeOutCenter
+ property: "opacity"
+ from: 1.0
+ to: 0.0
+ duration: 250
+ easing.type: Easing.Linear
+ onStopped: {
+ if (target === car) {
+ car.visible = false
+ car.item.hidden = true
+ } else if (target === camera) {
+ camera.visible = false
+ }
+ if (centerStack.viewIndex === carviewindex) {
+ car.visible = true
+ fadeInCenter.target = car
+ car.item.hidden = false
+ fadeInCenter.start()
+ } else if (centerStack.viewIndex === videoviewindex) {
+ camera.x = centerStack.x
+ camera.y = centerStack.y
+ camera.visible = true
+ fadeInCenter.target = camera
+ fadeInCenter.start()
+ } else {
+ fadeInCenter.target = loader
+ }
+ loader.source = component[centerStack.viewIndex]
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/Dashboard.qml b/doc/src/snippets/qtcluster/qml/dash_sports/Dashboard.qml
new file mode 100644
index 00000000..619d92c1
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/Dashboard.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+import ClusterDemo 1.0
+import ".."
+
+Item {
+ id: main
+
+ width: 1280
+ height: 480
+
+ anchors.fill: parent
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/DashboardForm.ui.qml b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardForm.ui.qml
new file mode 100644
index 00000000..98c6a2a8
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardForm.ui.qml
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.6
+import ".."
+import "."
+import ClusterDemo 1.0
+import QtQuick.Extras 1.4
+
+Item {
+
+ id: root
+
+ width: 1280
+ height: 480
+
+ property alias camera: camera
+ property alias car: car
+ property alias speedoMeter: speedoMeter
+ property alias flipable: flipable
+
+ property bool startupAnimationStopped: false
+
+ property int gaugeDemoTime: 1000
+ property alias centerStack: centerStack // duration (/2) of the gauge needle animation at startup
+
+ property color iconRed: "#e41e25"
+ property color iconGreen: "#5caa15"
+ property color iconYellow: "#face20"
+ property color iconDark: "#444444"
+
+ // TODO: Needed, as background clearing gets messed up after hybrid 3D
+ Rectangle {
+ anchors.fill: parent
+ color: "black"
+ z: -1
+ }
+
+ Image {
+ id: frame
+ source: "image://etc/DashboardFrameSport-mask.png"
+ z: 2
+ }
+
+ //where?
+ CameraLoader {
+ id: camera
+
+ width: parent.width / 2.5
+ height: parent.height - 180
+
+ anchors.centerIn: parent
+ }
+
+ // comment ifndef QT_3DCORE_LIB
+ CarLoader {
+ id: car
+
+ width: parent.width / 2.5
+ height: parent.height - 180
+
+ anchors.centerIn: parent
+ }
+ // end comment
+ Item {
+ id: container
+
+ width: root.width
+ height: root.height
+ anchors.verticalCenterOffset: 0
+ anchors.horizontalCenterOffset: 0
+ anchors.centerIn: parent
+
+ SpeedoMeterLoader {
+ id: speedoMeter
+ anchors.left: parent.left
+ anchors.leftMargin: 48
+ anchors.top: parent.top
+ anchors.topMargin: 67
+ height: width
+ value: 33
+ width: 380
+ z: 4
+ }
+
+ CenterStack {
+ id: centerStack
+ viewIndex: 3
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: 83
+ }
+
+ RPMFlipable {
+ id: flipable
+ anchors.right: parent.right
+ anchors.rightMargin: 50
+ anchors.top: parent.top
+ anchors.topMargin: 69
+ width: 380
+ rpmValue: 2212
+ flipped: false
+ z: 4
+ }
+ }
+
+ Item {
+ width: speedoMeter.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: pilotLights.top
+
+ TurnIndicator {
+ anchors.left: parent.left
+ direction: Qt.LeftArrow
+ active: ValueSource.turnSignal & Qt.LeftArrow
+ width: 48
+ height: 48
+ }
+
+ TurnIndicator {
+ anchors.right: parent.right
+ direction: Qt.RightArrow
+ active: ValueSource.turnSignal & Qt.RightArrow
+ width: 48
+ height: 48
+ }
+
+ z: 3
+ }
+
+ Item {
+ id: bottomRow
+ height: 68
+ width: 320
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+ z: 3
+ property int pixelSize: 17
+ Text {
+ text: ValueSource.date
+ color: "white"
+ font.pixelSize: bottomRow.pixelSize
+ anchors.right: temperature.left
+ anchors.rightMargin: 15
+ }
+ Text {
+ id: temperature
+ text: "+18°C"
+ color: "white"
+ font.pixelSize: bottomRow.pixelSize
+ anchors.right: time.left
+ anchors.rightMargin: 15
+ }
+ Text {
+ id: time
+ text: ValueSource.time
+ color: "white"
+ font.pixelSize: bottomRow.pixelSize
+ anchors.right: parent.right
+ }
+ }
+
+ Row {
+ id: pilotLights
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: 23
+ spacing: 2
+ z: 3
+
+ Picture {
+ width: 48
+ height: 48
+
+ color: ValueSource.lowBeam ? root.iconGreen : root.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0456.dat"
+ }
+
+ Picture {
+ width: 48
+ height: 48
+
+ color: ValueSource.seatBelt ? root.iconRed : root.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0249.dat"
+ }
+
+
+ Picture {
+ width: 48
+ height: 48
+
+ color: ValueSource.lowBeam ? root.iconRed : root.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0083.dat"
+ }
+
+ Picture {
+ width: 48
+ height: 48
+
+ color: ValueSource.lightFailure ? root.iconYellow : root.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_1555.dat"
+ }
+ }
+
+ VehicleInfoNote {
+ anchors.bottom: car.bottom
+ visible: noteVisible && highlightType && !car.hidden
+ id: alertNote
+ textColor: "orange" //"#3a98c4"
+ fixedPositionX: centerStack.x + (centerStack.width / 2)
+ }
+
+ // end comment
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/DashboardFrame.qml b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardFrame.qml
new file mode 100644
index 00000000..0028581d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardFrame.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ".."
+import ClusterDemo 1.0
+
+Loader {
+ width: 1280
+ height: 480
+
+ id: loader
+ asynchronous: true
+ active: frame.status === Image.Ready
+ source: "DashboardView.qml"
+
+ Image {
+ id: frame
+
+ visible: loader.status !== Loader.Ready //only show until the real dashboard is loaded
+ source: "image://etc/DashboardFrameSport-mask.png"
+ z: 2
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/DashboardView.qml b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardView.qml
new file mode 100644
index 00000000..0e9ba25e
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/DashboardView.qml
@@ -0,0 +1,320 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.4
+import ClusterDemo 1.0
+
+DashboardForm {
+ id: main //the id is used in e.g. VehicleInfoNote
+
+ width: 1280
+ height: 480
+
+ //Start animating gauges after both are loaded
+ function showGauges() {
+ if (speedoMeter.status === Loader.Ready
+ && flipable.rpm.status === Loader.Ready) {
+ startupAnimation.start()
+ }
+ }
+
+ property var component: [
+ "../MapView.qml",
+ "../MediaPlayerView.qml",
+ "../ConsumptionView.qml",
+ "", // VideoView.qml
+ "../CarParking.qml",
+ "" // CarView.qml
+ ]
+
+ property string mapPositionImage: "image://etc/MapLocationSport.png"
+
+ property int videoviewindex: 3
+ property int parkingviewindex: 4
+ property int carviewindex: 5
+
+ property int preReversingCenterView: -1
+ property int preReversingRightView
+
+ // CarModel animations
+ property int carModelHighlightType: 0
+
+ property bool doorAction: false
+ property bool actionInProgress: false
+ property bool loadingInProgress: false
+ property bool isReversing: false
+
+ property int doorsOpen: ValueSource.frontLeftOpen + ValueSource.frontRightOpen
+ + ValueSource.hoodOpen + ValueSource.trunkOpen
+ property bool flatTire: ValueSource.flatTire
+ property bool lightFailure: ValueSource.lightFailure
+ property int gear: ValueSource ? ValueSource.gear : "4"
+
+ property var cameraView: camera
+ property bool viewChanged: ValueSource.viewChange
+
+ function forceCarView() {
+ actionInProgress = true
+ // Make CarView visible before activating the animations
+ if (car.item && car.item.hidden) {
+ if (camera.visible)
+ camera.visible = false
+ car.opacity = 1.0
+ centerStack.visible = false
+ car.visible = true
+ car.item.hidden = false
+ }
+ }
+
+ function loadCenterView(nextView, allowParking) {
+ loadingInProgress = true
+ var previousViewIndex = centerStack.viewIndex
+
+ if (preReversingCenterView != -1 && !allowParking) {
+ if (centerStack.viewIndex !== preReversingCenterView) {
+ centerStack.viewIndex = preReversingCenterView
+ if (centerStack.viewIndex < 0)
+ centerStack.viewIndex = 5
+ }
+ }
+ else {
+ centerStack.viewIndex = getViewIndex(centerStack.viewIndex, nextView, allowParking)
+ }
+ loadingInProgress = false
+
+ if (previousViewIndex === carviewindex)
+ centerStack.fadeOutCenter.target = car
+ else if (previousViewIndex === videoviewindex)
+ centerStack.fadeOutCenter.target = camera
+ else
+ centerStack.fadeOutCenter.target = centerStack.loader
+ centerStack.fadeOutCenter.start()
+ }
+
+ function getViewIndex(viewindex, nextView, allowParking) {
+ if (allowParking) {
+ return videoviewindex
+ }
+
+ if (nextView) {
+ viewindex++
+ if (viewindex === parkingviewindex) {
+ viewindex++
+ }
+ if (viewindex > 5)
+ viewindex = 0
+ } else {
+ viewindex--
+ if (viewindex === parkingviewindex) {
+ viewindex--
+ }
+ if (viewindex < 0)
+ viewindex = 5
+ }
+ return viewindex
+ }
+
+ onDoorsOpenChanged: {
+ if (actionInProgress && !doorAction)
+ return
+
+ // Check all doors & parse a correct value from them
+ var doors = 0
+ if (ValueSource.frontLeftOpen)
+ doors ^= 1
+ if (ValueSource.frontRightOpen)
+ doors ^= 2
+ if (ValueSource.trunkOpen)
+ doors ^= 4
+ if (ValueSource.hoodOpen)
+ doors ^= 8
+
+ if (doors != 0) {
+ forceCarView()
+ if (car.item)
+ car.item.highlightDoors(doors)
+ carModelHighlightType = -1
+ }
+ }
+
+ onFlatTireChanged: {
+ if (!actionInProgress && flatTire) {
+ forceCarView()
+ carModelHighlightType = car.item.highlightTire()
+ }
+ }
+
+ onLightFailureChanged: {
+ if (!actionInProgress && lightFailure) {
+ forceCarView()
+ carModelHighlightType = car.item.highlightLamp()
+ }
+ }
+
+ onGearChanged: {
+ if (gear === -1)
+ reversing()
+ else if (gear >= 0)
+ returnFromReversing()
+ }
+
+ onViewChangedChanged: changeView(viewChanged)
+
+ function reversing() {
+ isReversing = true
+ // Car backing up, trigger rear camera view and proximity sensor view
+ preReversingCenterView = centerStack.viewIndex
+ loadCenterView(0, true)
+ flipable.flipped = !flipable.flipped
+ }
+
+ function returnFromReversing() {
+ if (!isReversing)
+ return
+ loadCenterView(true, false)
+ preReversingCenterView = -1
+ flipable.flipped = !flipable.flipped
+ isReversing = false
+ }
+
+ function changeView(nextView) {
+ if (isReversing)
+ return
+ if (actionInProgress || loadingInProgress)
+ return
+ if (nextView)
+ loadCenterView(nextView)
+ }
+
+ function stopAll() {
+ returnView.stop()
+ startupAnimation.stop()
+ centerStack.fadeOutCenter.stop()
+ centerStack.fadeInCenter.stop()
+ doorAction = false
+ actionInProgress = false
+ loadingInProgress = false
+ isReversing = false
+ }
+
+ Timer {
+ id: returnView
+ interval: 1000
+ running: false
+ onTriggered: {
+ if (camera.x === centerStack.x)
+ camera.visible = true
+ car.item.hidden = true
+ car.visible = false
+ car.opacity = 0.0
+ centerStack.visible = true
+ }
+ }
+
+ SequentialAnimation {
+ id: startupAnimation
+ ParallelAnimation {
+ SmoothedAnimation {
+ target: speedoMeter.rotation
+ property: "angle"
+ from: 90
+ to: 0
+ duration: 300
+ }
+ SmoothedAnimation {
+ target: flipable.flipRotation
+ property: "angle"
+ from: 90
+ to: 0
+ duration: 300
+ }
+ }
+
+ ParallelAnimation {
+ SequentialAnimation {
+ id: rpmAnimation
+ SmoothedAnimation {
+ target: flipable.rpm.item
+ property: "rpmValue"
+ to: flipable.rpm.item.maxValue
+ duration: gaugeDemoTime
+ easing.type: Easing.InQuint
+ }
+ SmoothedAnimation {
+ target: flipable.rpm.item
+ property: "rpmValue"
+ to: ValueSource.rpm
+ duration: gaugeDemoTime
+ easing.type: Easing.OutQuint
+ }
+ ScriptAction {
+ script: flipable.rpm.item.rpmValue = ValueSource.rpm
+ }
+ }
+
+ SequentialAnimation {
+ id: speedAnimation
+ SmoothedAnimation {
+ target: speedoMeter.item
+ property: "speedValue"
+ to: speedoMeter.item.maxValue
+ duration: gaugeDemoTime
+ easing.type: Easing.InQuint
+ }
+ SmoothedAnimation {
+ target: speedoMeter.item
+ property: "speedValue"
+ to: ValueSource.kph // TODO: Not entirely accurate this way, fix
+ duration: gaugeDemoTime
+ easing.type: Easing.OutQuint
+ }
+ ScriptAction {
+ script: startupAnimationStopped = true
+ }
+ }
+ }
+ ScriptAction {
+ script: car.active = true
+ } //Start the 3d model loading
+ }
+
+ speedoMeter.onLoaded: showGauges()
+ flipable.onLoaded: showGauges()
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/Gauge.qml b/doc/src/snippets/qtcluster/qml/dash_sports/Gauge.qml
new file mode 100644
index 00000000..e6d55ace
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/Gauge.qml
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 The Qt Company and/or its subsidiary(-ies).
+** Contact: http://www.qt.io
+**
+** This file is part of the The Qt Company automotive framework.
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+import "functions.js" as Functions
+
+Item {
+ id: gauge
+ property alias topText: topTxt
+ property alias bgSource: bgImage.source
+ property real outerRadius: Math.min(width, height) * 0.5
+ property int animationDuration: 500
+
+ property int value: 0
+ property int minValue: 0
+ property int maxValue: 10000
+ property int minAngle: -138
+ property int maxAngle: 162
+ property real valueInDegrees: ((maxAngle - minAngle) / (maxValue - minValue)) * (value - minValue)
+ property string shaderColor: "#E31E24"
+
+ //This is for drawing the shader needle. RpmGauge values background is a bit bigger than
+ //speedometer (or in different location).
+ // As we draw all gauge needles here we need the correction for rpm gauge
+ property alias pixelCorrection: effect.pixelCorrection
+
+ Image {
+ id: bgImage
+ anchors.centerIn: parent
+ }
+
+ Text {
+ id: topTxt
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ font.pixelSize: Functions.toPixels(0.3, outerRadius)
+ color: "white"
+ }
+
+ ShaderEffect {
+ id: effect
+ anchors.centerIn: parent
+
+ width: gauge.width
+ height: gauge.height
+ property double frontCut: gauge.minAngle + gauge.valueInDegrees// new speed
+ property double backCut: gauge.minAngle //starting point
+
+ // INTERNAL BELOW
+ property double _accelerating: (backCut < frontCut) ? 1. : 0.
+ property double pixelCorrection: 0.0
+
+ property variant source: ShaderEffectSource {
+ sourceItem: Rectangle {
+ width: effect.width
+ height: effect.width
+ radius: width
+ color: shaderColor
+ }
+ }
+
+ Behavior on frontCut {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: animationDuration }
+ }
+
+ fragmentShader: "
+ varying highp vec2 qt_TexCoord0;
+ uniform lowp sampler2D source;
+ uniform lowp float qt_Opacity;
+
+ uniform lowp float frontCut;
+ uniform lowp float backCut;
+ uniform lowp float _accelerating;
+ uniform lowp float pixelCorrection;
+
+ highp float FCRad = radians(frontCut - 180.);
+ highp float BCRad = radians(backCut - 180.);
+
+ void main() {
+ highp vec2 uv = vec2(.5 - qt_TexCoord0.y, .5 - qt_TexCoord0.x);
+
+ lowp float L = length(uv);
+ lowp float f = 0.;
+
+ f = smoothstep(L - .01, L, .4615 + pixelCorrection);
+ f -= smoothstep(L,L + 0.01, .444 + pixelCorrection);
+ //f = step(L, 0.48);
+ //f -= step(L,0.45);
+
+ lowp float angle = -atan(uv.y,uv.x);
+
+ // Without gradient
+ f *= mix((1. - step(BCRad, angle)) * step(FCRad, angle),
+ (1. - step(FCRad, angle)) * step(BCRad, angle),
+ _accelerating);
+
+ gl_FragColor = texture2D(source, qt_TexCoord0) * f * 1.;
+ }
+ "
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/RPMFlipable.qml b/doc/src/snippets/qtcluster/qml/dash_sports/RPMFlipable.qml
new file mode 100644
index 00000000..a3ebda29
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/RPMFlipable.qml
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ".."
+import ClusterDemo 1.0
+
+Flipable {
+ id: flipable
+ height: width
+ property bool flipped: false
+ signal loaded
+ property alias flipRotation: flipRotation
+ property alias rpm: rpm
+
+ property int rpmValue: 4000
+
+ front: Loader {
+ id: rpm
+ width: parent.width
+ height: width
+ asynchronous: true
+ source: "RPMGauge_painter.qml"
+ onLoaded: flipable.loaded()
+ }
+
+ back: Loader {
+ width: parent.width
+ height: width
+ asynchronous: true
+ source: "../CarParkingSports.qml"
+ }
+
+ transform: Rotation {
+ id: flipRotation
+ origin.x: flipable.width / 2
+ origin.y: flipable.height / 2
+ axis.x: 0; axis.y: 1; axis.z: 0 // set axis.y to 1 to rotate around y-axis
+ angle: 90 // the default angle
+ }
+
+ states: [
+ State {
+ name: "back"
+ PropertyChanges {
+ target: flipRotation
+ angle: 180
+ }
+ PropertyChanges {
+ target: flipable.front
+ visible: false
+ }
+
+ PropertyChanges {
+ target: flipable.back
+ visible: true
+ }
+
+ when: flipable.flipped
+ },
+ State {
+ name: "front"
+ PropertyChanges {
+ target: flipRotation
+ angle: 0
+ }
+ PropertyChanges {
+ target: flipable.front
+ visible: true
+ }
+
+ PropertyChanges {
+ target: flipable.back
+ visible: false
+ }
+ when: !flipable.flipped
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { target: flipRotation; property: "angle"; duration: 300 }
+ }
+
+ //Fill background while flipping. TODO think better way to do it
+ Rectangle {
+ anchors.centerIn: parent
+ radius: flipable.width+4 /2
+ width: flipable.width+4
+ height: flipable.width+4
+ color: "black"
+ z: -1
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge.qml b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge.qml
new file mode 100644
index 00000000..c0bd7aec
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge.qml
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+import "../functions.js" as Functions
+import ClusterDemo 1.0
+
+Item {
+ property alias rpmValue: rpmGauge.rpmValue
+ property alias maxValue: rpmGauge.maxValue
+
+ Image {
+ id: rpmBg
+ source: "image://etc/Gauge_RPM.png"
+ }
+
+ ShaderEffect {
+ id: rpmGauge
+ anchors.fill: rpmBg
+
+ property real outerRadius: Math.min(width, height) * 0.5
+ property int animationDurationRpm: 50
+
+ property real rpmValue: 0
+ property int value: startupAnimationStopped ? ValueSource.rpm : rpmValue
+ property int minValue: 0
+ property int maxValue: 8000
+ property int minAngle: 90
+ property int maxAngle: 270
+ property real valueInDegrees: ((maxAngle - minAngle)
+ / (maxValue - minValue)) * (value - minValue)
+
+ property double fCRadRpm: Functions.degToRad(frontCutRpm - 180.)
+ property double bCRadRpm: Functions.degToRad(backCutRpm - 180.)
+
+ //Battery gauge
+ property real valueBatt: ValueSource.batteryLevel
+ property int minAngleBatt: 324
+ property int maxAngleBatt: 288
+ property int maxValueBatt: 100
+ property int animationDurationBatt: 100
+ property color shaderColorBatt: "#464749"
+ property real valueInDegreesBatt: ((maxAngleBatt - minAngleBatt)
+ / (maxValueBatt - minValue)) * (valueBatt - minValue)
+ property double _acceleratingBatt: (backCutBatt < frontCutBatt) ? 1. : 0.
+ property double frontCutBatt: minAngleBatt + valueInDegreesBatt
+ property double backCutBatt: minAngleBatt
+
+ property double fCRadBatt: Functions.degToRad(frontCutBatt - 180.)
+ property double bCRadBatt: Functions.degToRad(backCutBatt - 180.)
+
+ //Engine temp
+ property real valueTemp: ValueSource.engineTemperature > minValueTemp
+ ? ValueSource.engineTemperature : minValueTemp
+ property int minAngleTemp: 35
+ property int maxAngleTemp: 72
+ property int minValueTemp: 40
+ property int maxValueTemp: 120
+ property int animationDurationTemp: 100
+ property color shaderColorTemp: "#464749"
+ property real valueInDegreesTemp: ((maxAngleTemp - minAngleTemp)
+ / (maxValueTemp - minValueTemp))
+ * (valueTemp - minValueTemp)
+ property double _acceleratingTemp: (backCutTemp < frontCutTemp) ? 1. : 0.
+ property double frontCutTemp: minAngleTemp + valueInDegreesTemp
+ property double backCutTemp: minAngleTemp
+
+ property double fCRadTemp: Functions.degToRad(frontCutTemp - 180.)
+ property double bCRadTemp: Functions.degToRad(backCutTemp - 180.)
+
+ //Shader properties
+ property double frontCutRpm: minAngle + valueInDegrees
+ property double backCutRpm: minAngle
+
+ // INTERNAL BELOW
+ property double _acceleratingRpm: (backCutRpm < frontCutRpm) ? 1. : 0.
+ property variant source: rpmBg
+ property color shaderColorRpm: "#E31E24"
+
+ Behavior on frontCutRpm {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: rpmGauge.animationDurationRpm }
+ }
+
+ Behavior on frontCutBatt {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: rpmGauge.animationDurationBatt }
+ }
+
+ Behavior on frontCutTemp {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: rpmGauge.animationDurationTemp }
+ }
+
+ fragmentShader: "
+ varying highp vec2 qt_TexCoord0;
+ uniform lowp sampler2D source;
+ uniform lowp float qt_Opacity;
+ lowp vec4 c = vec4(0.,0.,0.,0.);
+
+ //Rpm
+ uniform lowp vec4 shaderColorRpm;
+ uniform lowp float _acceleratingRpm;
+ uniform highp float fCRadRpm;
+ uniform highp float bCRadRpm;
+
+ //Batt
+ uniform lowp vec4 shaderColorBatt;
+ uniform lowp float _acceleratingBatt;
+
+ uniform highp float fCRadBatt;
+ uniform highp float bCRadBatt;
+
+ //Temp
+ uniform lowp vec4 shaderColorTemp;
+ uniform lowp float _acceleratingTemp;
+
+ uniform highp float fCRadTemp;
+ uniform highp float bCRadTemp;
+
+ void main() {
+ highp vec2 uv = vec2(.5 - qt_TexCoord0.y, .5 - qt_TexCoord0.x);
+
+ lowp float L = length(uv);
+ lowp float f = 0.;
+
+ f = smoothstep(L - .01, L, .4615);
+ f -= smoothstep(L,L + 0.01, .444);
+
+ lowp float angle = -atan(uv.y,uv.x);
+
+ lowp float frpm = f * mix((1. - step(bCRadRpm, angle)) * step(fCRadRpm, angle),
+ (1. - step(fCRadRpm, angle)) * step(bCRadRpm, angle),
+ _acceleratingRpm);
+
+ if (frpm > .0) {
+ gl_FragColor = mix(c,shaderColorRpm,frpm);
+ return;
+ }
+
+ lowp float fBatt = f * mix((1. - step(bCRadBatt, angle)) * step(fCRadBatt, angle),
+ (1. - step(fCRadBatt, angle)) * step(bCRadBatt, angle),
+ _acceleratingBatt);
+
+ if ( fBatt > .0) {
+ gl_FragColor = mix(c,shaderColorBatt,fBatt);
+ return;
+ }
+
+ lowp float fTemp= f * mix((1. - step(bCRadTemp, angle)) * step(fCRadTemp, angle),
+ (1. - step(fCRadTemp, angle)) * step(bCRadTemp, angle),
+ _acceleratingTemp);
+
+ if ( fTemp > .0) {
+ gl_FragColor = mix(c, shaderColorTemp, fTemp);
+ return;
+ }
+
+ gl_FragColor = c;
+ }
+ "
+ }
+
+ Text {
+ id: topText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ font.pixelSize: Functions.toPixels(0.3, rpmGauge.outerRadius)
+ color: "white"
+ text: ValueSource.gearString
+ }
+
+ Image {
+ id: engineLight
+ anchors.top: topText.bottom
+ anchors.topMargin: 10
+ anchors.left: parent.horizontalCenter
+ source: ValueSource.batteryLevel > 15 ? "image://etc/Icon_Battery_OFF.png"
+ : "image://etc/Icon_Battery_ON.png"
+ z: 3
+ }
+
+ Image {
+ id: batteryLight
+ anchors.top: topText.bottom
+ anchors.topMargin: 10
+ anchors.right: parent.horizontalCenter
+ source: ValueSource.engineTemperature > 100 ? "image://etc/Icon_Coolant_ON.png"
+ : "image://etc/Icon_Coolant_OFF.png"
+ z: 3
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_painter.qml b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_painter.qml
new file mode 100644
index 00000000..192aa495
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_painter.qml
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+import QtQuick.Extras 1.4
+import ClusterDemo 1.0
+import "../functions.js" as Functions
+
+Item {
+ id: rpmItem
+ property real rpmValue: flipable.rpmValue
+ property alias maxValue: rpmGauge.maxValue
+
+ property color iconRed: "#e41e25"
+ property color iconGreen: "#5caa15"
+ property color iconYellow: "#face20"
+ property color iconDark: "#444444"
+
+ Item {
+ id: rpmGauge
+
+ anchors.fill: parent
+ width: height
+ property bool animated: ValueSource.runningInDesigner ? false : startupAnimationStopped
+
+ property real value: animated ? ValueSource.rpm : rpmValue
+
+ property real maxValue: 8000
+
+ property real maxValueAngle: 90
+ property real minValueAngle: -90
+
+ property real outerRadius: Math.min(width, height) * 0.5
+ property real needleEndInDegrees: 180 / rpmGauge.maximumValue
+
+ Image {
+ source: "image://etc/Gauge_RPM.png"
+ anchors.fill: parent
+ }
+
+ Text {
+ id: gearText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ anchors.topMargin: Functions.toPixels(0.12, parent.outerRadius)
+ font.pixelSize: Functions.toPixels(0.3, parent.outerRadius)
+ color: "white"
+ text: ValueSource.gearString
+ }
+
+ Picture {
+ id: engineLight
+
+ width: 48
+ height: 48
+
+ anchors.top: gearText.bottom
+ anchors.topMargin: 10
+ anchors.left: parent.horizontalCenter
+
+ source: "qrc:/iso-icons/iso_grs_7000_4_0247.dat"
+ color: ValueSource.batteryLevel > 15 ? rpmItem.iconDark : rpmItem.iconRed
+ z: 3
+ }
+
+ Picture {
+ id: batteryLight
+
+ width: 48
+ height: 48
+
+ anchors.top: gearText.bottom
+ anchors.topMargin: 10
+ anchors.right: parent.horizontalCenter
+ source: "qrc:/iso-icons/iso_grs_7000_4_0246.dat"
+ color: ValueSource.engineTemperature > 100 ? rpmItem.iconYellow : rpmItem.iconDark
+ z: 3
+ }
+
+ CircularIndicator {
+ anchors.fill: parent
+
+ startAngle: rpmGauge.minValueAngle
+ endAngle: rpmGauge.maxValueAngle
+ minimumValue: 0
+ maximumValue: rpmGauge.maxValue
+ value: rpmGauge.value
+ padding: 13
+ backgroundColor: "transparent"
+ progressColor: "#E31E24"
+ }
+ }
+
+ CircularIndicator {
+ id: batteryGauge
+ anchors.fill: parent
+
+ startAngle: 144
+ endAngle: 108
+ minimumValue: 0
+ maximumValue: 100
+ value: ValueSource.batteryLevel
+ padding: 12
+ backgroundColor: "transparent"
+ progressColor: "#464749"
+ }
+
+ CircularIndicator {
+ id: engineTempGauge
+ anchors.fill: parent
+
+ endAngle: -108
+ startAngle: -145
+ minimumValue: 40
+ maximumValue: 120
+ value: ValueSource.engineTemperature
+ padding: 12
+ backgroundColor: "transparent"
+ progressColor: "#464749"
+ }
+}
+
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_vertex.qml b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_vertex.qml
new file mode 100644
index 00000000..ac211f3a
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/RPMGauge_vertex.qml
@@ -0,0 +1,170 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+import "../functions.js" as Functions
+import ClusterDemo 1.0
+
+Item {
+ id: root
+
+ property bool updateGeometry: false
+ property bool showWire: false
+
+ property alias rpmValue: rpmGauge.rpmValue
+ property alias maxValue: rpmGauge.maxValue
+
+
+ Image {
+ id: bg
+ source: "image://etc/Gauge_RPM.png"
+
+ GaugeFiller {
+ id: rpmGauge
+ property real outerRadius: Math.min(width, height) * 0.5
+
+ anchors.fill: parent
+ radius: 177
+ fillWidth: 10
+
+ property real rpmValue: 0
+ value: startupAnimationStopped ? ValueSource.rpm : rpmValue
+
+ minAngle: 90
+ maxAngle: 270
+ maxValue: 8000
+
+ updateGeometry: root.updateGeometry
+ doNotFill: root.showWire
+
+// Behavior on value {
+// enabled: startupAnimationStopped
+// PropertyAnimation { duration: 50 }
+// }
+ }
+
+ GaugeFiller {
+ // Battery
+ anchors.fill: parent
+ radius: 177
+ fillWidth: 10
+
+ numVertices: 16
+ minAngle: 324
+ maxAngle: 288
+ maxValue: 100
+ value: ValueSource.batteryLevel
+ color: "#464749"
+ updateGeometry: root.updateGeometry
+ doNotFill: root.showWire
+
+ Behavior on value {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: 100 }
+ }
+ }
+
+ GaugeFiller {
+ // Engine temp
+ anchors.fill: parent
+ radius: 177
+ fillWidth: 10
+
+ numVertices: 16
+
+ minAngle: 35
+ maxAngle: 72
+ minValue: 40
+ maxValue: 120
+
+ value: ValueSource.engineTemperature > 0 ? ValueSource.engineTemperature : minValue
+
+ color: "#464749"
+
+ updateGeometry: root.updateGeometry
+ doNotFill: root.showWire
+
+ Behavior on value {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: 100 }
+ }
+ }
+ }
+
+ Text {
+ id: topText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ font.pixelSize: Functions.toPixels(0.3, rpmGauge.outerRadius)
+ color: "white"
+ text: ValueSource.gearString
+ }
+
+ Image {
+ id: engineLight
+ anchors.top: topText.bottom
+ anchors.topMargin: 10
+ anchors.left: parent.horizontalCenter
+ source: ValueSource.batteryLevel > 15 ? "image://etc/Icon_Battery_OFF.png"
+ : "image://etc/Icon_Battery_ON.png"
+ z: 3
+ }
+
+ Image {
+ id: batteryLight
+ anchors.top: topText.bottom
+ anchors.topMargin: 10
+ anchors.right: parent.horizontalCenter
+ source: ValueSource.engineTemperature > 100 ? "image://etc/Icon_Coolant_ON.png"
+ : "image://etc/Icon_Coolant_OFF.png"
+ z: 3
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter.qml b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter.qml
new file mode 100644
index 00000000..991bbc67
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter.qml
@@ -0,0 +1,224 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+import "../functions.js" as Functions
+import ClusterDemo 1.0
+
+Item {
+ property alias speedValue: speedgauge.speedValue
+ property alias maxValue: speedgauge.maxValue
+ property real outerRadius: Math.min(width, height) * 0.5
+
+ Image {
+ id: speedBg
+ anchors.centerIn: parent
+ source: "image://etc/Gauge_Speed.png"
+ }
+
+ ShaderEffect {
+ id: speedgauge
+ anchors.fill: speedBg
+
+ property real outerRadius: Math.min(width, height) * 0.5
+ property int animationDurationSpeed: 500
+
+ property real speedValue: 0
+ property int value: startupAnimationStopped ? ValueSource.kph : speedValue
+ property int minValue: 0
+ property int maxValue: 240
+ property int minAngle: 0
+ property int maxAngle: 270
+ property real valueInDegrees: ((maxAngle - minAngle)
+ / (maxValue - minValue)) * (value - minValue)
+
+ property double fCRadSpeed: Functions.degToRad(frontCutSpeed - 180.)
+ property double bCRadSpeed: Functions.degToRad(backCutSpeed - 180.)
+
+ //Fuel gauge
+ property real valueFuel: ValueSource.fuelLevel
+ property int minAngleFuel: 324
+ property int maxAngleFuel: 288
+ property int maxValueFuel: 100
+ property int animationDurationFuel: 100
+ property color shaderColorFuel: "#464749"
+ property real valueInDegreesFuel: ((maxAngleFuel - minAngleFuel)
+ / (maxValueFuel - minValue)) * (valueFuel - minValue)
+ property double _acceleratingFuel: (backCutFuel < frontCutFuel) ? 1. : 0.
+ property double frontCutFuel: minAngleFuel + valueInDegreesFuel
+ property double backCutFuel: minAngleFuel
+
+ property double fCRadFuel: Functions.degToRad(frontCutFuel - 180.)
+ property double bCRadFuel: Functions.degToRad(backCutFuel - 180.)
+
+ //Shader properties
+ property double frontCutSpeed: minAngle + valueInDegrees// new speed
+ property double backCutSpeed: minAngle //starting point
+
+ // INTERNAL BELOW
+ property double _acceleratingSpeed: (backCutSpeed < frontCutSpeed) ? 1. : 0.
+ property variant source: speedBg
+ property color shaderColorSpeed: "#E31E24"
+
+ Behavior on frontCutSpeed {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: speedgauge.animationDurationSpeed }
+ }
+
+ Behavior on frontCutFuel {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: speedgauge.animationDurationFuel }
+ }
+
+ fragmentShader: "
+ varying highp vec2 qt_TexCoord0;
+ uniform lowp sampler2D source;
+ uniform lowp float qt_Opacity;
+ lowp vec4 c = vec4(0.,0.,0.,0.);
+
+ //Speed
+ uniform lowp vec4 shaderColorSpeed;
+ uniform lowp float frontCutSpeed;
+ uniform lowp float backCutSpeed;
+ uniform lowp float _acceleratingSpeed;
+
+ uniform highp float fCRadSpeed;
+ uniform highp float bCRadSpeed;
+
+ //Fuel
+ uniform lowp vec4 shaderColorFuel;
+ uniform lowp float frontCutFuel;
+ uniform lowp float backCutFuel;
+ uniform lowp float _acceleratingFuel;
+
+ uniform highp float fCRadFuel;
+ uniform highp float bCRadFuel;
+
+ void main() {
+ highp vec2 uv = vec2(.5 - qt_TexCoord0.y, .5 - qt_TexCoord0.x);
+
+ lowp float L = length(uv);
+ lowp float f = 1.;
+
+ f = smoothstep(L - .01, L, .4615);
+ f -= smoothstep(L,L + 0.01, .444);
+
+ lowp float angle = -atan(uv.y,uv.x);
+
+ lowp float fspeed = f * mix((1. - step(bCRadSpeed, angle)) * step(fCRadSpeed, angle),
+ (1. - step(fCRadSpeed, angle)) * step(bCRadSpeed, angle),
+ _acceleratingSpeed);
+
+ if (fspeed > .0) {
+ gl_FragColor = mix(c,shaderColorSpeed,fspeed);
+ return;
+ }
+
+ lowp float ffuel = f * mix((1. - step(bCRadFuel, angle)) * step(fCRadFuel, angle),
+ (1. - step(fCRadFuel, angle)) * step(bCRadFuel, angle),
+ _acceleratingFuel);
+
+ if (ffuel > .0) {
+ gl_FragColor = mix(c, shaderColorFuel, ffuel);
+ return;
+ }
+
+ gl_FragColor = c;
+ }
+ "
+ }
+
+ Text {
+ id: topText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ font.pixelSize: Functions.toPixels(0.3, speedgauge.outerRadius)
+ color: "white"
+ text: speedgauge.value.toFixed()
+ }
+
+ Text {
+ id: kmText
+ text: "km/h"
+ color: "white"
+ font.pixelSize: Functions.toPixels(0.09, speedgauge.outerRadius)
+ anchors.top: topText.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Image {
+ id: tyreLight
+ anchors.right: parkingLight.left
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+ source: ValueSource.flatTire ? "image://etc/Icon_TyreMalfunction_ON.png"
+ : "image://etc/Icon_TyreMalfunction_OFF.png"
+ }
+
+ Image {
+ id: parkingLight
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: kmText.bottom
+ anchors.topMargin: 20
+
+ source: ValueSource.parkingBrake ? "image://etc/Icon_ParkingBrake_ON.png"
+ : "image://etc/Icon_ParkingBrake_OFF.png"
+ }
+
+ Image {
+ id: fuelLight
+ anchors.left: parkingLight.right
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+ source: (ValueSource.fuelLevel <= 15) ? "image://etc/Icon_Fuel_ON.png"
+ : "image://etc/Icon_Fuel_OFF.png"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeterLoader.qml b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeterLoader.qml
new file mode 100644
index 00000000..bdc4e9cc
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeterLoader.qml
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import ".."
+import ClusterDemo 1.0
+
+Loader {
+ id: speedoMeter
+ asynchronous: true
+ source: "SpeedoMeter_painter.qml"
+ //source: "SpeedoMeter_vertex.qml"
+ //source: "SpeedoMeter.qml"
+
+ property int value: 150
+
+ property alias rotation: speed_rot
+
+ transform: Rotation {
+ id: speed_rot
+ origin.x: speedoMeter.width / 2
+ origin.y: speedoMeter.height / 2
+ axis { x: 0; y: 1; z: 0 }
+ angle: ValueSource.runningInDesigner ? 0 : 90 // the default angle
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_painter.qml b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_painter.qml
new file mode 100644
index 00000000..e8a2ad28
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_painter.qml
@@ -0,0 +1,181 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+import ClusterDemo 1.0
+import QtQuick.Extras 1.4
+import "../functions.js" as Functions
+
+Item {
+ id: speedoItem
+ property real speedValue: speedoMeter.value
+ property alias maxValue: speedometer.maxValue
+ anchors.fill: parent
+
+ property color iconRed: "#e41e25"
+ property color iconGreen: "#5caa15"
+ property color iconYellow: "#face20"
+ property color iconDark: "#444444"
+
+ Item {
+ id: speedometer
+
+ property bool animated: ValueSource.runningInDesigner ? false : startupAnimationStopped
+ property real value: animated ? ValueSource.kph : speedValue
+
+
+
+ anchors.fill: parent
+
+ property real maxValue: 240
+ width: height
+
+ property real outerRadius: Math.min(width, height) * 0.5
+
+ property real maxValueAngle: 90
+ property real minValueAngle: -179
+
+ property real degreesPerValue: Math.abs((minValueAngle - maxValueAngle)
+ / speedometer.maximumValue)
+
+ Image {
+ source: "image://etc/Gauge_Speed.png"
+ anchors.fill: parent
+ }
+
+ Text {
+ id: speedText
+ font.pixelSize: Functions.toPixels(0.4, parent.outerRadius)
+ text: speedometer.value.toFixed()
+ color: "white"
+ horizontalAlignment: Text.AlignRight
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: 115
+ }
+
+ Text {
+ id: kmText
+ text: "km/h"
+ color: "white"
+ font.pixelSize: Functions.toPixels(0.09, parent.outerRadius)
+ anchors.top: speedText.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Picture {
+ id: tyreLight
+
+ width: 48
+ height: 48
+ anchors.right: parkingLight.left
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+
+ color: ValueSource.flatTire ? speedoItem.iconYellow : speedoItem.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_1434A.dat"
+ }
+
+ Picture {
+ id: parkingLight
+
+ width: 48
+ height: 48
+ anchors.horizontalCenterOffset: 0
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: kmText.bottom
+ anchors.topMargin: 11
+
+ color: ValueSource.parkingBrake ? speedoItem.iconRed : speedoItem.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0238.dat"
+ }
+
+ Picture {
+ id: fuelLight
+
+ width: 48
+ height: 48
+ anchors.left: parkingLight.right
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+
+ color: ValueSource.fuelLevel <= 20.0 ? speedoItem.iconRed : speedoItem.iconDark
+ source: "qrc:/iso-icons/iso_grs_7000_4_0245.dat"
+ }
+
+ CircularIndicator {
+ anchors.fill: parent
+
+ startAngle: speedometer.minValueAngle
+ endAngle: speedometer.maxValueAngle
+ minimumValue: 0
+ maximumValue: speedometer.maxValue
+ value: speedometer.value
+ padding: 13
+ backgroundColor: "transparent"
+ progressColor: "#E31E24"
+ }
+ }
+
+ CircularIndicator {
+ id: fuelGauge
+
+ anchors.fill: parent
+
+ value: ValueSource.fuelLevel
+ minimumValue: 0
+ maximumValue: 100
+ startAngle: 144
+ endAngle: 108
+ padding: 13
+ backgroundColor: "transparent"
+ progressColor: "#464749"
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_vertex.qml b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_vertex.qml
new file mode 100644
index 00000000..2ed0a0ec
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/SpeedoMeter_vertex.qml
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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.0
+
+import "../functions.js" as Functions
+import ClusterDemo 1.0
+
+Item {
+ id: root
+ property alias speedValue: speedgauge.speedValue
+ property alias maxValue: speedgauge.maxValue
+
+ property bool updateGeometry: false
+ property bool showWire: false
+
+ Image {
+ id: bg
+ anchors.centerIn: parent
+ source: "image://etc/Gauge_Speed.png"
+
+ GaugeFiller {
+ id: speedgauge
+
+ property real outerRadius: Math.min(width, height) * 0.5
+
+ property real speedValue: 0
+ value: startupAnimationStopped ? ValueSource.kph : speedValue
+
+ anchors.fill: parent
+ radius: 177
+ fillWidth: 10
+ updateGeometry: root.updateGeometry
+ doNotFill: root.showWire
+
+ Behavior on value {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: 500 }
+ }
+ }
+
+ GaugeFiller {
+ id: fuel
+ anchors.fill: parent
+ radius: 177
+ fillWidth: 10
+
+ value: ValueSource.fuelLevel
+ numVertices: 16
+ minAngle: 323.7
+ maxAngle: 287.7
+ maxValue: 100
+
+ color: "#464749"
+
+ updateGeometry: root.updateGeometry
+ doNotFill: root.showWire
+
+ Behavior on value {
+ enabled: startupAnimationStopped
+ PropertyAnimation { duration: 100 }
+ }
+ }
+ }
+
+ Text {
+ id: topText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ font.pixelSize: Functions.toPixels(0.3, speedgauge.outerRadius)
+ color: "white"
+ text: speedgauge.value.toFixed()
+ }
+
+ Text {
+ id: kmText
+ text: "km/h"
+ color: "white"
+ font.pixelSize: Functions.toPixels(0.09, speedgauge.outerRadius)
+ anchors.top: topText.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Image {
+ id: tyreLight
+ anchors.right: parkingLight.left
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+ source: ValueSource.flatTire ? "image://etc/Icon_TyreMalfunction_ON.png"
+ : "image://etc/Icon_TyreMalfunction_OFF.png"
+ }
+
+ Image {
+ id: parkingLight
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: kmText.bottom
+ anchors.topMargin: 20
+
+ source: ValueSource.parkingBrake ? "image://etc/Icon_ParkingBrake_ON.png"
+ : "image://etc/Icon_ParkingBrake_OFF.png"
+ }
+
+ Image {
+ id: fuelLight
+ anchors.left: parkingLight.right
+ anchors.bottom: parkingLight.bottom
+ anchors.bottomMargin: 18
+ source: (ValueSource.fuelLevel <= 15) ? "image://etc/Icon_Fuel_ON.png"
+ : "image://etc/Icon_Fuel_OFF.png"
+ }
+
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/designer/RPMFlipableSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_sports/designer/RPMFlipableSpecifics.qml
new file mode 100644
index 00000000..915073f3
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/designer/RPMFlipableSpecifics.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("TurboMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("RPM Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.rpmValue
+ minimumValue: 0
+ maximumValue: 8000
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: turboSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 8000
+ updateValueWhileDragging: true
+ stepSize: 0.1
+ value: backendValues.rpmValue.value
+ onValueChanged: {
+ backendValues.rpmValue.value = turboSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/dash_sports/designer/SpeedoMeterLoaderSpecifics.qml b/doc/src/snippets/qtcluster/qml/dash_sports/designer/SpeedoMeterLoaderSpecifics.qml
new file mode 100644
index 00000000..9fb15d94
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/dash_sports/designer/SpeedoMeterLoaderSpecifics.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0 as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("TurboMeter")
+ SectionLayout {
+
+ Label {
+ text: qsTr("Value")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.value
+ minimumValue: 0
+ maximumValue: 240
+ decimals: 0
+ }
+
+ Controls.Slider {
+ id: turboSlider
+ Layout.preferredWidth: 100
+
+ minimumValue: 0
+ maximumValue: 240
+ updateValueWhileDragging: true
+ stepSize: 0.1
+ value: backendValues.value.value
+ onValueChanged: {
+ backendValues.value.value = turboSlider.value
+
+ }
+
+ }
+
+ ExpandingSpacer {
+ width: 30
+ }
+ }
+
+
+ }
+ }
+}
diff --git a/doc/src/snippets/qtcluster/qml/functions.js b/doc/src/snippets/qtcluster/qml/functions.js
new file mode 100644
index 00000000..48c841fa
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/functions.js
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+.pragma library
+
+function toPixels(percentage, outerRadius) {
+ return percentage * outerRadius;
+}
+
+var convertToRad = Math.PI / 180;
+function degToRad(degrees) {
+ return degrees * convertToRad;
+}
+
+var convertToDeg = 180 / Math.PI;
+function radToDeg(radians) {
+ return radians * convertToDeg;
+}
diff --git a/doc/src/snippets/qtcluster/qml/models/Map11.jpg b/doc/src/snippets/qtcluster/qml/models/Map11.jpg
new file mode 100644
index 00000000..680dbea1
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/models/Map11.jpg
Binary files differ
diff --git a/doc/src/snippets/qtcluster/qml/models/Map3.jpg b/doc/src/snippets/qtcluster/qml/models/Map3.jpg
new file mode 100644
index 00000000..8c3468e2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/models/Map3.jpg
Binary files differ
diff --git a/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf b/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf
new file mode 100644
index 00000000..5b4bd3d2
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf
Binary files differ
diff --git a/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin b/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin
new file mode 100644
index 00000000..aad1081f
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin
Binary files differ
diff --git a/doc/src/snippets/qtcluster/qml/route.txt b/doc/src/snippets/qtcluster/qml/route.txt
new file mode 100644
index 00000000..22627635
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qml/route.txt
@@ -0,0 +1,1188 @@
+$GPGGA,120156,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120156,A,5232.08,N,1317.6,E,0,200.0,030308,11.2,W,A*22
+$GPGGA,120157,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120157,A,5232.08,N,1317.6,E,0,200.0,030308,11.2,W,A*23
+$GPGGA,120158,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120158,A,5232.08,N,1317.6,E,0,200.0,030308,11.2,W,A*2c
+$GPGGA,120159,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120159,A,5232.08,N,1317.6,E,0,200.0,030308,11.2,W,A*2d
+$GPGGA,120200,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120200,A,5232.08,N,1317.6,E,3.9,200.0,030308,11.2,W,A*36
+$GPGGA,120201,5232.08,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120201,A,5232.08,N,1317.6,E,8.7,197.0,030308,11.2,W,A*3f
+$GPGGA,120202,5232.07,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120202,A,5232.07,N,1317.6,E,11.7,215.0,030308,11.2,W,A*02
+$GPGGA,120203,5232.07,N,1317.59,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120203,A,5232.07,N,1317.59,E,19.4,205.0,030308,11.2,W,A*33
+$GPGGA,120204,5232.06,N,1317.59,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120204,A,5232.06,N,1317.59,E,19.9,191.0,030308,11.2,W,A*36
+$GPGGA,120205,5232.05,N,1317.59,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120205,A,5232.05,N,1317.59,E,21.4,166.0,030308,11.2,W,A*3a
+$GPGGA,120206,5232.05,N,1317.6,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120206,A,5232.05,N,1317.6,E,19.9,131.0,030308,11.2,W,A*07
+$GPGGA,120207,5232.04,N,1317.61,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120207,A,5232.04,N,1317.61,E,18.5,140.0,030308,11.2,W,A*3d
+$GPGGA,120208,5232.04,N,1317.62,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120208,A,5232.04,N,1317.62,E,17.5,133.0,030308,11.2,W,A*3a
+$GPGGA,120209,5232.03,N,1317.62,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120209,A,5232.03,N,1317.62,E,17.5,151.0,030308,11.2,W,A*38
+$GPGGA,120210,5232.03,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120210,A,5232.03,N,1317.63,E,9.7,161.0,030308,11.2,W,A*0f
+$GPGGA,120211,5232.02,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120211,A,5232.02,N,1317.63,E,5.8,168.0,030308,11.2,W,A*05
+$GPGGA,120212,5232.02,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120212,A,5232.02,N,1317.63,E,0,166.0,030308,11.2,W,A*1b
+$GPGGA,120213,5232.02,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120213,A,5232.02,N,1317.63,E,0,166.0,030308,11.2,W,A*1a
+$GPGGA,120214,5232.02,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120214,A,5232.02,N,1317.63,E,0,166.0,030308,11.2,W,A*1d
+$GPGGA,120215,5232.01,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120215,A,5232.01,N,1317.64,E,9.7,153.0,030308,11.2,W,A*0e
+$GPGGA,120216,5232,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*64
+$GPRMC,120216,A,5232,N,1317.64,E,19.4,153.0,030308,11.2,W,A*10
+$GPGGA,120217,5232,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*64
+$GPRMC,120217,A,5232,N,1317.65,E,19.4,157.0,030308,11.2,W,A*14
+$GPGGA,120218,5231.99,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120218,A,5231.99,N,1317.65,E,19.9,154.0,030308,11.2,W,A*38
+$GPGGA,120219,5231.99,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120219,A,5231.99,N,1317.66,E,22.4,156.0,030308,11.2,W,A*3d
+$GPGGA,120220,5231.98,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120220,A,5231.98,N,1317.66,E,21.9,150.0,030308,11.2,W,A*3e
+$GPGGA,120221,5231.97,N,1317.67,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120221,A,5231.97,N,1317.67,E,22.4,160.0,030308,11.2,W,A*3c
+$GPGGA,120222,5231.96,N,1317.67,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120222,A,5231.96,N,1317.67,E,23.3,154.0,030308,11.2,W,A*3f
+$GPGGA,120223,5231.96,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120223,A,5231.96,N,1317.68,E,23.3,165.0,030308,11.2,W,A*33
+$GPGGA,120224,5231.95,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120224,A,5231.95,N,1317.68,E,23.3,161.0,030308,11.2,W,A*33
+$GPGGA,120225,5231.94,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120225,A,5231.94,N,1317.68,E,23.3,160.0,030308,11.2,W,A*32
+$GPGGA,120226,5231.94,N,1317.69,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120226,A,5231.94,N,1317.69,E,23.3,155.0,030308,11.2,W,A*36
+$GPGGA,120227,5231.93,N,1317.69,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120227,A,5231.93,N,1317.69,E,23.3,157.0,030308,11.2,W,A*32
+$GPGGA,120228,5231.92,N,1317.7,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120228,A,5231.92,N,1317.7,E,23.3,159.0,030308,11.2,W,A*0a
+$GPGGA,120229,5231.91,N,1317.71,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120229,A,5231.91,N,1317.71,E,23.8,157.0,030308,11.2,W,A*3c
+$GPGGA,120230,5231.9,N,1317.71,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120230,A,5231.9,N,1317.71,E,25.3,158.0,030308,11.2,W,A*07
+$GPGGA,120231,5231.9,N,1317.72,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120231,A,5231.9,N,1317.72,E,28.2,157.0,030308,11.2,W,A*06
+$GPGGA,120232,5231.89,N,1317.72,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120232,A,5231.89,N,1317.72,E,29.2,159.0,030308,11.2,W,A*32
+$GPGGA,120233,5231.88,N,1317.72,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120233,A,5231.88,N,1317.72,E,29.6,165.0,030308,11.2,W,A*39
+$GPGGA,120234,5231.87,N,1317.73,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120234,A,5231.87,N,1317.73,E,28.7,167.0,030308,11.2,W,A*32
+$GPGGA,120235,5231.86,N,1317.73,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120235,A,5231.86,N,1317.73,E,28.2,168.0,030308,11.2,W,A*38
+$GPGGA,120236,5231.85,N,1317.73,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120236,A,5231.85,N,1317.73,E,26.7,168.0,030308,11.2,W,A*33
+$GPGGA,120237,5231.84,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120237,A,5231.84,N,1317.74,E,28.2,170.0,030308,11.2,W,A*36
+$GPGGA,120238,5231.83,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120238,A,5231.83,N,1317.74,E,28.7,172.0,030308,11.2,W,A*39
+$GPGGA,120239,5231.82,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120239,A,5231.82,N,1317.74,E,29.2,168.0,030308,11.2,W,A*36
+$GPGGA,120240,5231.81,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120240,A,5231.81,N,1317.75,E,28.7,168.0,030308,11.2,W,A*3e
+$GPGGA,120241,5231.8,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120241,A,5231.8,N,1317.75,E,28.2,167.0,030308,11.2,W,A*04
+$GPGGA,120242,5231.79,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120242,A,5231.79,N,1317.75,E,27.7,170.0,030308,11.2,W,A*3d
+$GPGGA,120243,5231.78,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120243,A,5231.78,N,1317.75,E,27.2,169.0,030308,11.2,W,A*30
+$GPGGA,120244,5231.77,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120244,A,5231.77,N,1317.76,E,26.7,165.0,030308,11.2,W,A*33
+$GPGGA,120245,5231.76,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120245,A,5231.76,N,1317.77,E,26.2,153.0,030308,11.2,W,A*32
+$GPGGA,120246,5231.75,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120246,A,5231.75,N,1317.77,E,26.2,156.0,030308,11.2,W,A*37
+$GPGGA,120247,5231.75,N,1317.78,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120247,A,5231.75,N,1317.78,E,26.2,155.0,030308,11.2,W,A*3a
+$GPGGA,120248,5231.74,N,1317.78,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120248,A,5231.74,N,1317.78,E,25.8,151.0,030308,11.2,W,A*39
+$GPGGA,120249,5231.74,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120249,A,5231.74,N,1317.79,E,23.8,150.0,030308,11.2,W,A*3e
+$GPGGA,120250,5231.73,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120250,A,5231.73,N,1317.79,E,21.9,166.0,030308,11.2,W,A*37
+$GPGGA,120251,5231.72,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120251,A,5231.72,N,1317.79,E,23.3,167.0,030308,11.2,W,A*3e
+$GPGGA,120252,5231.71,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120252,A,5231.71,N,1317.8,E,24.8,173.0,030308,11.2,W,A*01
+$GPGGA,120253,5231.7,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120253,A,5231.7,N,1317.8,E,24.8,170.0,030308,11.2,W,A*32
+$GPGGA,120254,5231.69,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120254,A,5231.69,N,1317.8,E,24.8,171.0,030308,11.2,W,A*0c
+$GPGGA,120255,5231.68,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120255,A,5231.68,N,1317.8,E,24.8,166.0,030308,11.2,W,A*0a
+$GPGGA,120256,5231.68,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120256,A,5231.68,N,1317.81,E,24.9,167.0,030308,11.2,W,A*38
+$GPGGA,120257,5231.67,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120257,A,5231.67,N,1317.81,E,28.2,165.0,030308,11.2,W,A*33
+$GPGGA,120258,5231.66,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120258,A,5231.66,N,1317.81,E,30.1,165.0,030308,11.2,W,A*37
+$GPGGA,120259,5231.65,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120259,A,5231.65,N,1317.82,E,31.6,168.0,030308,11.2,W,A*3d
+$GPGGA,120300,5231.64,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120300,A,5231.64,N,1317.82,E,33.0,167.0,030308,11.2,W,A*3a
+$GPGGA,120301,5231.63,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120301,A,5231.63,N,1317.82,E,33.0,169.0,030308,11.2,W,A*32
+$GPGGA,120302,5231.62,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120302,A,5231.62,N,1317.83,E,33.0,171.0,030308,11.2,W,A*38
+$GPGGA,120303,5231.61,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120303,A,5231.61,N,1317.83,E,33.0,168.0,030308,11.2,W,A*32
+$GPGGA,120304,5231.6,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,120304,A,5231.6,N,1317.83,E,33.0,166.0,030308,11.2,W,A*0a
+$GPGGA,120305,5231.59,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120305,A,5231.59,N,1317.84,E,34.5,169.0,030308,11.2,W,A*3b
+$GPGGA,120306,5231.58,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120306,A,5231.58,N,1317.84,E,34.5,165.0,030308,11.2,W,A*35
+$GPGGA,120307,5231.57,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120307,A,5231.57,N,1317.84,E,35.5,168.0,030308,11.2,W,A*37
+$GPGGA,120308,5231.56,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120308,A,5231.56,N,1317.85,E,36.0,170.0,030308,11.2,W,A*37
+$GPGGA,120309,5231.55,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120309,A,5231.55,N,1317.85,E,35.5,174.0,030308,11.2,W,A*37
+$GPGGA,120310,5231.54,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120310,A,5231.54,N,1317.85,E,34.0,168.0,030308,11.2,W,A*37
+$GPGGA,120311,5231.53,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120311,A,5231.53,N,1317.85,E,34.0,174.0,030308,11.2,W,A*3c
+$GPGGA,120312,5231.52,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120312,A,5231.52,N,1317.85,E,33.0,176.0,030308,11.2,W,A*3b
+$GPGGA,120313,5231.51,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120313,A,5231.51,N,1317.86,E,32.6,173.0,030308,11.2,W,A*38
+$GPGGA,120314,5231.5,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120314,A,5231.5,N,1317.86,E,31.6,168.0,030308,11.2,W,A*07
+$GPGGA,120315,5231.49,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120315,A,5231.49,N,1317.86,E,29.6,166.0,030308,11.2,W,A*39
+$GPGGA,120316,5231.49,N,1317.87,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120316,A,5231.49,N,1317.87,E,29.6,165.0,030308,11.2,W,A*38
+$GPGGA,120317,5231.48,N,1317.87,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120317,A,5231.48,N,1317.87,E,29.6,152.0,030308,11.2,W,A*3c
+$GPGGA,120318,5231.47,N,1317.88,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120318,A,5231.47,N,1317.88,E,30.6,155.0,030308,11.2,W,A*3c
+$GPGGA,120319,5231.46,N,1317.89,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120319,A,5231.46,N,1317.89,E,31.6,146.0,030308,11.2,W,A*3e
+$GPGGA,120320,5231.45,N,1317.9,E,1,07,1.3,50.6,M,39.2,M,,*77
+$GPRMC,120320,A,5231.45,N,1317.9,E,31.6,140.0,030308,11.2,W,A*09
+$GPGGA,120321,5231.44,N,1317.91,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120321,A,5231.44,N,1317.91,E,31.6,145.0,030308,11.2,W,A*3d
+$GPGGA,120322,5231.44,N,1317.92,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120322,A,5231.44,N,1317.92,E,31.6,140.0,030308,11.2,W,A*38
+$GPGGA,120323,5231.43,N,1317.93,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120323,A,5231.43,N,1317.93,E,31.6,143.0,030308,11.2,W,A*3c
+$GPGGA,120324,5231.42,N,1317.94,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120324,A,5231.42,N,1317.94,E,31.8,144.0,030308,11.2,W,A*34
+$GPGGA,120325,5231.41,N,1317.95,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120325,A,5231.41,N,1317.95,E,32.1,143.0,030308,11.2,W,A*3a
+$GPGGA,120326,5231.4,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120326,A,5231.4,N,1317.96,E,31.1,141.0,030308,11.2,W,A*0a
+$GPGGA,120327,5231.39,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120327,A,5231.39,N,1317.97,E,35.0,143.0,030308,11.2,W,A*33
+$GPGGA,120328,5231.39,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120328,A,5231.39,N,1317.98,E,35.0,148.0,030308,11.2,W,A*38
+$GPGGA,120329,5231.38,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120329,A,5231.38,N,1317.98,E,35.0,143.0,030308,11.2,W,A*33
+$GPGGA,120330,5231.38,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120330,A,5231.38,N,1317.99,E,25.3,142.0,030308,11.2,W,A*39
+$GPGGA,120331,5231.37,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*6a
+$GPRMC,120331,A,5231.37,N,1318,E,15.6,141.0,030308,11.2,W,A*13
+$GPGGA,120332,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120332,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*10
+$GPGGA,120333,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120333,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*11
+$GPGGA,120334,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120334,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*16
+$GPGGA,120335,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120335,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*17
+$GPGGA,120336,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120336,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*14
+$GPGGA,120337,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120337,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*15
+$GPGGA,120338,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120338,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*1a
+$GPGGA,120339,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120339,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*1b
+$GPGGA,120340,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120340,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*15
+$GPGGA,120341,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120341,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*14
+$GPGGA,120342,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120342,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*17
+$GPGGA,120343,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120343,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*16
+$GPGGA,120344,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120344,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*11
+$GPGGA,120345,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120345,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*10
+$GPGGA,120346,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120346,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*13
+$GPGGA,120347,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120347,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*12
+$GPGGA,120348,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120348,A,5231.36,N,1318.01,E,0,143.0,030308,11.2,W,A*1d
+$GPGGA,120349,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120349,A,5231.36,N,1318.01,E,10.2,156.0,030308,11.2,W,A*35
+$GPGGA,120350,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120350,A,5231.36,N,1318.01,E,17.5,149.0,030308,11.2,W,A*33
+$GPGGA,120351,5231.35,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120351,A,5231.35,N,1318.02,E,23.3,148.0,030308,11.2,W,A*32
+$GPGGA,120352,5231.35,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120352,A,5231.35,N,1318.02,E,29.2,177.0,030308,11.2,W,A*36
+$GPGGA,120353,5231.34,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120353,A,5231.34,N,1318.02,E,29.2,189.0,030308,11.2,W,A*37
+$GPGGA,120354,5231.34,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120354,A,5231.34,N,1318.01,E,29.2,198.0,030308,11.2,W,A*33
+$GPGGA,120355,5231.33,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120355,A,5231.33,N,1318.01,E,29.2,192.0,030308,11.2,W,A*3f
+$GPGGA,120356,5231.32,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120356,A,5231.32,N,1318.01,E,35.0,196.0,030308,11.2,W,A*36
+$GPGGA,120357,5231.31,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*6c
+$GPRMC,120357,A,5231.31,N,1318,E,35.0,202.0,030308,11.2,W,A*15
+$GPGGA,120358,5231.3,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*52
+$GPRMC,120358,A,5231.3,N,1318,E,27.2,201.0,030308,11.2,W,A*29
+$GPGGA,120359,5231.3,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120359,A,5231.3,N,1317.99,E,28.7,196.0,030308,11.2,W,A*0e
+$GPGGA,120400,5231.29,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120400,A,5231.29,N,1317.99,E,29.6,200.0,030308,11.2,W,A*31
+$GPGGA,120401,5231.28,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120401,A,5231.28,N,1317.98,E,30.6,201.0,030308,11.2,W,A*39
+$GPGGA,120402,5231.27,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120402,A,5231.27,N,1317.98,E,30.1,201.0,030308,11.2,W,A*32
+$GPGGA,120403,5231.26,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120403,A,5231.26,N,1317.97,E,29.2,198.0,030308,11.2,W,A*35
+$GPGGA,120404,5231.25,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120404,A,5231.25,N,1317.96,E,25.8,199.0,030308,11.2,W,A*37
+$GPGGA,120405,5231.24,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120405,A,5231.24,N,1317.96,E,23.8,188.0,030308,11.2,W,A*31
+$GPGGA,120406,5231.23,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120406,A,5231.23,N,1317.96,E,22.4,177.0,030308,11.2,W,A*38
+$GPGGA,120407,5231.22,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120407,A,5231.22,N,1317.96,E,19.9,174.0,030308,11.2,W,A*3e
+$GPGGA,120408,5231.22,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120408,A,5231.22,N,1317.97,E,11.7,170.0,030308,11.2,W,A*32
+$GPGGA,120409,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120409,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*29
+$GPGGA,120410,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*77
+$GPRMC,120410,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*21
+$GPGGA,120411,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*76
+$GPRMC,120411,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*20
+$GPGGA,120412,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120412,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*23
+$GPGGA,120413,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,120413,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*22
+$GPGGA,120414,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120414,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*25
+$GPGGA,120415,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120415,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*24
+$GPGGA,120416,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120416,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*27
+$GPGGA,120417,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120417,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*26
+$GPGGA,120418,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120418,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*29
+$GPGGA,120419,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120419,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*28
+$GPGGA,120420,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,120420,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*22
+$GPGGA,120421,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120421,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*23
+$GPGGA,120422,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*76
+$GPRMC,120422,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*20
+$GPGGA,120423,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*77
+$GPRMC,120423,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*21
+$GPGGA,120424,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120424,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*26
+$GPGGA,120425,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120425,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*27
+$GPGGA,120426,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120426,A,5231.2,N,1317.97,E,0,171.0,030308,11.2,W,A*24
+$GPGGA,120427,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120427,A,5231.2,N,1317.97,E,9.7,149.0,030308,11.2,W,A*3e
+$GPGGA,120428,5231.2,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120428,A,5231.2,N,1317.97,E,13.6,171.0,030308,11.2,W,A*00
+$GPGGA,120429,5231.19,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120429,A,5231.19,N,1317.97,E,13.6,172.0,030308,11.2,W,A*38
+$GPGGA,120430,5231.19,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120430,A,5231.19,N,1317.97,E,14.6,177.0,030308,11.2,W,A*32
+$GPGGA,120431,5231.18,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120431,A,5231.18,N,1317.98,E,17.5,162.0,030308,11.2,W,A*39
+$GPGGA,120432,5231.18,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120432,A,5231.18,N,1317.98,E,23.3,158.0,030308,11.2,W,A*32
+$GPGGA,120433,5231.17,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120433,A,5231.17,N,1317.98,E,23.3,146.0,030308,11.2,W,A*33
+$GPGGA,120434,5231.17,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120434,A,5231.17,N,1317.99,E,23.3,127.0,030308,11.2,W,A*32
+$GPGGA,120435,5231.17,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*6b
+$GPRMC,120435,A,5231.17,N,1318,E,23.3,121.0,030308,11.2,W,A*14
+$GPGGA,120436,5231.16,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120436,A,5231.16,N,1318.01,E,24.8,120.0,030308,11.2,W,A*34
+$GPGGA,120437,5231.16,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120437,A,5231.16,N,1318.02,E,26.7,118.0,030308,11.2,W,A*30
+$GPGGA,120438,5231.16,N,1318.03,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120438,A,5231.16,N,1318.03,E,28.2,120.0,030308,11.2,W,A*3e
+$GPGGA,120439,5231.15,N,1318.04,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120439,A,5231.15,N,1318.04,E,30.1,120.0,030308,11.2,W,A*31
+$GPGGA,120440,5231.15,N,1318.05,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120440,A,5231.15,N,1318.05,E,31.6,122.0,030308,11.2,W,A*3a
+$GPGGA,120441,5231.14,N,1318.07,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120441,A,5231.14,N,1318.07,E,32.6,119.0,030308,11.2,W,A*33
+$GPGGA,120442,5231.14,N,1318.08,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120442,A,5231.14,N,1318.08,E,33.5,117.0,030308,11.2,W,A*33
+$GPGGA,120443,5231.13,N,1318.1,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120443,A,5231.13,N,1318.1,E,34.5,118.0,030308,11.2,W,A*04
+$GPGGA,120444,5231.13,N,1318.11,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120444,A,5231.13,N,1318.11,E,35.5,118.0,030308,11.2,W,A*33
+$GPGGA,120445,5231.12,N,1318.12,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120445,A,5231.12,N,1318.12,E,36.4,118.0,030308,11.2,W,A*32
+$GPGGA,120446,5231.12,N,1318.14,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120446,A,5231.12,N,1318.14,E,36.4,115.0,030308,11.2,W,A*3a
+$GPGGA,120447,5231.12,N,1318.15,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120447,A,5231.12,N,1318.15,E,36.4,121.0,030308,11.2,W,A*3d
+$GPGGA,120448,5231.11,N,1318.17,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120448,A,5231.11,N,1318.17,E,36.4,116.0,030308,11.2,W,A*37
+$GPGGA,120449,5231.11,N,1318.18,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120449,A,5231.11,N,1318.18,E,35.5,116.0,030308,11.2,W,A*3b
+$GPGGA,120450,5231.1,N,1318.2,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120450,A,5231.1,N,1318.2,E,35.0,117.0,030308,11.2,W,A*3d
+$GPGGA,120451,5231.1,N,1318.21,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120451,A,5231.1,N,1318.21,E,34.5,115.0,030308,11.2,W,A*0b
+$GPGGA,120452,5231.09,N,1318.22,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120452,A,5231.09,N,1318.22,E,33.5,119.0,030308,11.2,W,A*38
+$GPGGA,120453,5231.09,N,1318.24,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120453,A,5231.09,N,1318.24,E,32.6,115.0,030308,11.2,W,A*31
+$GPGGA,120454,5231.08,N,1318.25,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120454,A,5231.08,N,1318.25,E,32.1,115.0,030308,11.2,W,A*31
+$GPGGA,120455,5231.08,N,1318.26,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120455,A,5231.08,N,1318.26,E,32.1,115.0,030308,11.2,W,A*33
+$GPGGA,120456,5231.08,N,1318.28,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120456,A,5231.08,N,1318.28,E,31.1,115.0,030308,11.2,W,A*3d
+$GPGGA,120457,5231.07,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120457,A,5231.07,N,1318.29,E,31.1,114.0,030308,11.2,W,A*33
+$GPGGA,120458,5231.07,N,1318.3,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120458,A,5231.07,N,1318.3,E,31.1,117.0,030308,11.2,W,A*07
+$GPGGA,120459,5231.07,N,1318.31,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120459,A,5231.07,N,1318.31,E,31.6,116.0,030308,11.2,W,A*31
+$GPGGA,120500,5231.06,N,1318.33,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120500,A,5231.06,N,1318.33,E,32.1,120.0,030308,11.2,W,A*3e
+$GPGGA,120501,5231.06,N,1318.34,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120501,A,5231.06,N,1318.34,E,32.6,124.0,030308,11.2,W,A*3b
+$GPGGA,120502,5231.05,N,1318.35,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120502,A,5231.05,N,1318.35,E,33.0,124.0,030308,11.2,W,A*3d
+$GPGGA,120503,5231.05,N,1318.37,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120503,A,5231.05,N,1318.37,E,34.0,107.0,030308,11.2,W,A*38
+$GPGGA,120504,5231.04,N,1318.38,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120504,A,5231.04,N,1318.38,E,33.5,114.0,030308,11.2,W,A*31
+$GPGGA,120505,5231.04,N,1318.39,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120505,A,5231.04,N,1318.39,E,34.0,116.0,030308,11.2,W,A*31
+$GPGGA,120506,5231.04,N,1318.41,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120506,A,5231.04,N,1318.41,E,34.5,112.0,030308,11.2,W,A*3c
+$GPGGA,120507,5231.03,N,1318.42,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120507,A,5231.03,N,1318.42,E,35.0,116.0,030308,11.2,W,A*39
+$GPGGA,120508,5231.03,N,1318.44,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120508,A,5231.03,N,1318.44,E,35.5,120.0,030308,11.2,W,A*30
+$GPGGA,120509,5231.02,N,1318.45,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120509,A,5231.02,N,1318.45,E,35.5,120.0,030308,11.2,W,A*31
+$GPGGA,120510,5231.02,N,1318.47,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120510,A,5231.02,N,1318.47,E,36.4,120.0,030308,11.2,W,A*39
+$GPGGA,120511,5231.01,N,1318.48,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120511,A,5231.01,N,1318.48,E,36.0,118.0,030308,11.2,W,A*3b
+$GPGGA,120512,5231.01,N,1318.5,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120512,A,5231.01,N,1318.5,E,36.4,103.0,030308,11.2,W,A*0f
+$GPGGA,120513,5231.01,N,1318.51,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120513,A,5231.01,N,1318.51,E,36.4,115.0,030308,11.2,W,A*38
+$GPGGA,120514,5231,N,1318.53,E,1,07,1.3,50.6,M,39.2,M,,*69
+$GPRMC,120514,A,5231,N,1318.53,E,36.4,125.0,030308,11.2,W,A*11
+$GPGGA,120515,5231,N,1318.54,E,1,07,1.3,50.6,M,39.2,M,,*6f
+$GPRMC,120515,A,5231,N,1318.54,E,36.0,102.0,030308,11.2,W,A*16
+$GPGGA,120516,5230.99,N,1318.56,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120516,A,5230.99,N,1318.56,E,35.5,110.0,030308,11.2,W,A*3d
+$GPGGA,120517,5230.99,N,1318.57,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120517,A,5230.99,N,1318.57,E,34.0,125.0,030308,11.2,W,A*3f
+$GPGGA,120518,5230.98,N,1318.58,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120518,A,5230.98,N,1318.58,E,33.5,127.0,030308,11.2,W,A*3e
+$GPGGA,120519,5230.98,N,1318.6,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120519,A,5230.98,N,1318.6,E,33.5,125.0,030308,11.2,W,A*06
+$GPGGA,120520,5230.97,N,1318.61,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120520,A,5230.97,N,1318.61,E,33.0,134.0,030308,11.2,W,A*37
+$GPGGA,120521,5230.96,N,1318.63,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120521,A,5230.96,N,1318.63,E,32.6,116.0,030308,11.2,W,A*32
+$GPGGA,120522,5230.96,N,1318.64,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120522,A,5230.96,N,1318.64,E,31.6,116.0,030308,11.2,W,A*35
+$GPGGA,120523,5230.95,N,1318.67,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120523,A,5230.95,N,1318.67,E,31.6,120.0,030308,11.2,W,A*31
+$GPGGA,120524,5230.95,N,1318.68,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120524,A,5230.95,N,1318.68,E,33.0,114.0,030308,11.2,W,A*3a
+$GPGGA,120525,5230.94,N,1318.7,E,1,07,1.3,50.6,M,39.2,M,,*78
+$GPRMC,120525,A,5230.94,N,1318.7,E,33.0,107.0,030308,11.2,W,A*01
+$GPGGA,120526,5230.94,N,1318.71,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120526,A,5230.94,N,1318.71,E,33.0,111.0,030308,11.2,W,A*34
+$GPGGA,120527,5230.93,N,1318.74,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120527,A,5230.93,N,1318.74,E,33.0,122.0,030308,11.2,W,A*37
+$GPGGA,120528,5230.93,N,1318.75,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120528,A,5230.93,N,1318.75,E,33.0,102.0,030308,11.2,W,A*3b
+$GPGGA,120529,5230.92,N,1318.77,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120529,A,5230.92,N,1318.77,E,33.5,116.0,030308,11.2,W,A*39
+$GPGGA,120530,5230.92,N,1318.78,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120530,A,5230.92,N,1318.78,E,33.5,117.0,030308,11.2,W,A*3f
+$GPGGA,120531,5230.91,N,1318.79,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120531,A,5230.91,N,1318.79,E,33.0,126.0,030308,11.2,W,A*3b
+$GPGGA,120532,5230.91,N,1318.8,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,120532,A,5230.91,N,1318.8,E,33.0,115.0,030308,11.2,W,A*0e
+$GPGGA,120533,5230.91,N,1318.82,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120533,A,5230.91,N,1318.82,E,33.0,117.0,030308,11.2,W,A*3f
+$GPGGA,120534,5230.9,N,1318.83,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120534,A,5230.9,N,1318.83,E,33.0,118.0,030308,11.2,W,A*07
+$GPGGA,120535,5230.9,N,1318.84,E,1,07,1.3,50.6,M,39.2,M,,*76
+$GPRMC,120535,A,5230.9,N,1318.84,E,31.1,119.0,030308,11.2,W,A*03
+$GPGGA,120536,5230.89,N,1318.86,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120536,A,5230.89,N,1318.86,E,28.7,116.0,030308,11.2,W,A*3b
+$GPGGA,120537,5230.89,N,1318.87,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120537,A,5230.89,N,1318.87,E,25.3,110.0,030308,11.2,W,A*34
+$GPGGA,120538,5230.89,N,1318.88,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120538,A,5230.89,N,1318.88,E,22.4,101.0,030308,11.2,W,A*34
+$GPGGA,120539,5230.88,N,1318.88,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120539,A,5230.88,N,1318.88,E,18.0,153.0,030308,11.2,W,A*3e
+$GPGGA,120540,5230.88,N,1318.88,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120540,A,5230.88,N,1318.88,E,2.9,142.0,030308,11.2,W,A*02
+$GPGGA,120541,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120541,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2a
+$GPGGA,120542,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120542,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*29
+$GPGGA,120543,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120543,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*28
+$GPGGA,120544,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120544,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2f
+$GPGGA,120545,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120545,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2e
+$GPGGA,120546,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120546,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2d
+$GPGGA,120547,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120547,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2c
+$GPGGA,120548,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120548,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*23
+$GPGGA,120549,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120549,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*22
+$GPGGA,120550,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120550,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2a
+$GPGGA,120551,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120551,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2b
+$GPGGA,120552,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120552,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*28
+$GPGGA,120553,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120553,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*29
+$GPGGA,120554,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120554,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2e
+$GPGGA,120555,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120555,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2f
+$GPGGA,120556,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120556,A,5230.88,N,1318.89,E,0,93.0,030308,11.2,W,A*2c
+$GPGGA,120557,5230.88,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120557,A,5230.88,N,1318.89,E,5.3,124.0,030308,11.2,W,A*08
+$GPGGA,120558,5230.88,N,1318.9,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,120558,A,5230.88,N,1318.9,E,17.5,133.0,030308,11.2,W,A*0c
+$GPGGA,120559,5230.88,N,1318.9,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120559,A,5230.88,N,1318.9,E,23.3,117.0,030308,11.2,W,A*0a
+$GPGGA,120600,5230.87,N,1318.92,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120600,A,5230.87,N,1318.92,E,25.3,114.0,030308,11.2,W,A*3d
+$GPGGA,120601,5230.87,N,1318.93,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120601,A,5230.87,N,1318.93,E,31.1,113.0,030308,11.2,W,A*3d
+$GPGGA,120602,5230.87,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120602,A,5230.87,N,1318.94,E,35.0,104.0,030308,11.2,W,A*3a
+$GPGGA,120603,5230.86,N,1318.95,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120603,A,5230.86,N,1318.95,E,38.9,118.0,030308,11.2,W,A*32
+$GPGGA,120604,5230.86,N,1318.96,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120604,A,5230.86,N,1318.96,E,31.1,109.0,030308,11.2,W,A*37
+$GPGGA,120605,5230.86,N,1318.98,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120605,A,5230.86,N,1318.98,E,30.6,116.0,030308,11.2,W,A*30
+$GPGGA,120606,5230.85,N,1318.99,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120606,A,5230.85,N,1318.99,E,30.6,107.0,030308,11.2,W,A*31
+$GPGGA,120607,5230.85,N,1319,E,1,07,1.3,50.6,M,39.2,M,,*63
+$GPRMC,120607,A,5230.85,N,1319,E,30.1,133.0,030308,11.2,W,A*1f
+$GPGGA,120608,5230.84,N,1319.01,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120608,A,5230.84,N,1319.01,E,30.1,126.0,030308,11.2,W,A*3a
+$GPGGA,120609,5230.84,N,1319.03,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120609,A,5230.84,N,1319.03,E,31.6,119.0,030308,11.2,W,A*33
+$GPGGA,120610,5230.83,N,1319.05,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120610,A,5230.83,N,1319.05,E,31.6,121.0,030308,11.2,W,A*31
+$GPGGA,120611,5230.83,N,1319.06,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120611,A,5230.83,N,1319.06,E,31.6,109.0,030308,11.2,W,A*39
+$GPGGA,120612,5230.83,N,1319.08,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120612,A,5230.83,N,1319.08,E,32.1,94.0,030308,11.2,W,A*05
+$GPGGA,120613,5230.83,N,1319.09,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120613,A,5230.83,N,1319.09,E,32.6,101.0,030308,11.2,W,A*3f
+$GPGGA,120614,5230.82,N,1319.11,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120614,A,5230.82,N,1319.11,E,33.0,94.0,030308,11.2,W,A*0a
+$GPGGA,120615,5230.82,N,1319.12,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120615,A,5230.82,N,1319.12,E,33.0,103.0,030308,11.2,W,A*37
+$GPGGA,120616,5230.82,N,1319.14,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120616,A,5230.82,N,1319.14,E,33.0,100.0,030308,11.2,W,A*31
+$GPGGA,120617,5230.82,N,1319.15,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120617,A,5230.82,N,1319.15,E,32.1,94.0,030308,11.2,W,A*0d
+$GPGGA,120618,5230.81,N,1319.18,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120618,A,5230.81,N,1319.18,E,32.1,115.0,030308,11.2,W,A*34
+$GPGGA,120619,5230.81,N,1319.19,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120619,A,5230.81,N,1319.19,E,30.1,113.0,030308,11.2,W,A*30
+$GPGGA,120620,5230.81,N,1319.2,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120620,A,5230.81,N,1319.2,E,28.2,107.0,030308,11.2,W,A*0f
+$GPGGA,120621,5230.8,N,1319.21,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120621,A,5230.8,N,1319.21,E,25.3,107.0,030308,11.2,W,A*02
+$GPGGA,120622,5230.8,N,1319.22,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120622,A,5230.8,N,1319.22,E,21.4,117.0,030308,11.2,W,A*00
+$GPGGA,120623,5230.8,N,1319.23,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120623,A,5230.8,N,1319.23,E,0,116.0,030308,11.2,W,A*28
+$GPGGA,120624,5230.8,N,1319.23,E,1,07,1.3,50.6,M,39.2,M,,*78
+$GPRMC,120624,A,5230.8,N,1319.23,E,0,121.0,030308,11.2,W,A*2b
+$GPGGA,120625,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120625,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*28
+$GPGGA,120626,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*7d
+$GPRMC,120626,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*2b
+$GPGGA,120627,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120627,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*2a
+$GPGGA,120628,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120628,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*25
+$GPGGA,120629,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPRMC,120629,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*24
+$GPGGA,120630,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120630,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*2c
+$GPGGA,120631,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*7b
+$GPRMC,120631,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*2d
+$GPGGA,120632,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*78
+$GPRMC,120632,A,5230.8,N,1319.24,E,0,117.0,030308,11.2,W,A*2e
+$GPGGA,120633,5230.79,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120633,A,5230.79,N,1319.25,E,1.9,125.0,030308,11.2,W,A*0f
+$GPGGA,120634,5230.79,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120634,A,5230.79,N,1319.25,E,11.7,139.0,030308,11.2,W,A*3a
+$GPGGA,120635,5230.79,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120635,A,5230.79,N,1319.25,E,11.7,157.0,030308,11.2,W,A*33
+$GPGGA,120636,5230.78,N,1319.26,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120636,A,5230.78,N,1319.26,E,19.4,163.0,030308,11.2,W,A*3e
+$GPGGA,120637,5230.77,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120637,A,5230.77,N,1319.25,E,20.4,196.0,030308,11.2,W,A*33
+$GPGGA,120638,5230.77,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120638,A,5230.77,N,1319.25,E,19.4,200.0,030308,11.2,W,A*3a
+$GPGGA,120639,5230.76,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120639,A,5230.76,N,1319.25,E,20.4,183.0,030308,11.2,W,A*38
+$GPGGA,120640,5230.75,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120640,A,5230.75,N,1319.25,E,20.4,175.0,030308,11.2,W,A*3c
+$GPGGA,120641,5230.74,N,1319.25,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120641,A,5230.74,N,1319.25,E,21.9,163.0,030308,11.2,W,A*37
+$GPGGA,120642,5230.74,N,1319.26,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120642,A,5230.74,N,1319.26,E,22.8,155.0,030308,11.2,W,A*30
+$GPGGA,120643,5230.73,N,1319.26,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120643,A,5230.73,N,1319.26,E,22.8,144.0,030308,11.2,W,A*36
+$GPGGA,120644,5230.72,N,1319.27,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120644,A,5230.72,N,1319.27,E,23.8,139.0,030308,11.2,W,A*3a
+$GPGGA,120645,5230.73,N,1319.36,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120645,A,5230.73,N,1319.36,E,24.7,85.0,030308,11.2,W,A*04
+$GPGGA,120646,5230.74,N,1319.37,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120646,A,5230.74,N,1319.37,E,25.8,26.0,030308,11.2,W,A*06
+$GPGGA,120647,5230.75,N,1319.38,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120647,A,5230.75,N,1319.38,E,24.8,18.0,030308,11.2,W,A*05
+$GPGGA,120648,5230.76,N,1319.38,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120648,A,5230.76,N,1319.38,E,24.3,351.0,030308,11.2,W,A*3c
+$GPGGA,120649,5230.76,N,1319.37,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120649,A,5230.76,N,1319.37,E,24.8,344.0,030308,11.2,W,A*3d
+$GPGGA,120650,5230.77,N,1319.37,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120650,A,5230.77,N,1319.37,E,25.8,342.0,030308,11.2,W,A*33
+$GPGGA,120651,5230.78,N,1319.36,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120651,A,5230.78,N,1319.36,E,26.7,323.0,030308,11.2,W,A*37
+$GPGGA,120652,5230.78,N,1319.35,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120652,A,5230.78,N,1319.35,E,26.7,313.0,030308,11.2,W,A*34
+$GPGGA,120653,5230.79,N,1319.34,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120653,A,5230.79,N,1319.34,E,27.7,302.0,030308,11.2,W,A*34
+$GPGGA,120654,5230.79,N,1319.33,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120654,A,5230.79,N,1319.33,E,27.6,271.0,030308,11.2,W,A*30
+$GPGGA,120655,5230.79,N,1319.32,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120655,A,5230.79,N,1319.32,E,27.4,278.0,030308,11.2,W,A*3b
+$GPGGA,120656,5230.79,N,1319.3,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120656,A,5230.79,N,1319.3,E,27.2,274.0,030308,11.2,W,A*00
+$GPGGA,120657,5230.79,N,1319.29,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120657,A,5230.79,N,1319.29,E,26.2,274.0,030308,11.2,W,A*38
+$GPGGA,120658,5230.79,N,1319.28,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120658,A,5230.79,N,1319.28,E,25.8,284.0,030308,11.2,W,A*30
+$GPGGA,120659,5230.79,N,1319.27,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120659,A,5230.79,N,1319.27,E,26.7,292.0,030308,11.2,W,A*35
+$GPGGA,120700,5230.8,N,1319.26,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120700,A,5230.8,N,1319.26,E,28.2,299.0,030308,11.2,W,A*0f
+$GPGGA,120701,5230.8,N,1319.24,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120701,A,5230.8,N,1319.24,E,29.6,294.0,030308,11.2,W,A*04
+$GPGGA,120702,5230.8,N,1319.23,E,1,07,1.3,50.6,M,39.2,M,,*7d
+$GPRMC,120702,A,5230.8,N,1319.23,E,30.6,294.0,030308,11.2,W,A*08
+$GPGGA,120703,5230.81,N,1319.22,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120703,A,5230.81,N,1319.22,E,33.0,295.0,030308,11.2,W,A*3d
+$GPGGA,120704,5230.81,N,1319.2,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120704,A,5230.81,N,1319.2,E,34.0,291.0,030308,11.2,W,A*0b
+$GPGGA,120705,5230.82,N,1319.19,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120705,A,5230.82,N,1319.19,E,35.0,290.0,030308,11.2,W,A*33
+$GPGGA,120706,5230.82,N,1319.17,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120706,A,5230.82,N,1319.17,E,35.0,281.0,030308,11.2,W,A*3e
+$GPGGA,120707,5230.82,N,1319.16,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120707,A,5230.82,N,1319.16,E,34.5,290.0,030308,11.2,W,A*3a
+$GPGGA,120708,5230.82,N,1319.14,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120708,A,5230.82,N,1319.14,E,34.0,283.0,030308,11.2,W,A*30
+$GPGGA,120709,5230.83,N,1319.13,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120709,A,5230.83,N,1319.13,E,33.5,282.0,030308,11.2,W,A*34
+$GPGGA,120710,5230.83,N,1319.11,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120710,A,5230.83,N,1319.11,E,31.6,291.0,030308,11.2,W,A*3d
+$GPGGA,120711,5230.83,N,1319.1,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120711,A,5230.83,N,1319.1,E,31.6,276.0,030308,11.2,W,A*04
+$GPGGA,120712,5230.83,N,1319.09,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120712,A,5230.83,N,1319.09,E,31.1,283.0,030308,11.2,W,A*32
+$GPGGA,120713,5230.83,N,1319.07,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120713,A,5230.83,N,1319.07,E,31.6,285.0,030308,11.2,W,A*3c
+$GPGGA,120714,5230.84,N,1319.06,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120714,A,5230.84,N,1319.06,E,32.1,288.0,030308,11.2,W,A*34
+$GPGGA,120715,5230.84,N,1319.04,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120715,A,5230.84,N,1319.04,E,33.0,294.0,030308,11.2,W,A*3a
+$GPGGA,120716,5230.85,N,1319.03,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120716,A,5230.85,N,1319.03,E,33.0,297.0,030308,11.2,W,A*3c
+$GPGGA,120717,5230.85,N,1319.02,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120717,A,5230.85,N,1319.02,E,32.6,293.0,030308,11.2,W,A*3f
+$GPGGA,120718,5230.85,N,1319,E,1,07,1.3,50.6,M,39.2,M,,*6c
+$GPRMC,120718,A,5230.85,N,1319,E,31.1,295.0,030308,11.2,W,A*1e
+$GPGGA,120719,5230.86,N,1318.99,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120719,A,5230.86,N,1318.99,E,29.2,296.0,030308,11.2,W,A*3a
+$GPGGA,120720,5230.86,N,1318.98,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120720,A,5230.86,N,1318.98,E,27.7,301.0,030308,11.2,W,A*35
+$GPGGA,120721,5230.86,N,1318.97,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120721,A,5230.86,N,1318.97,E,24.8,292.0,030308,11.2,W,A*3c
+$GPGGA,120722,5230.87,N,1318.96,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120722,A,5230.87,N,1318.96,E,21.9,302.0,030308,11.2,W,A*33
+$GPGGA,120723,5230.87,N,1318.95,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120723,A,5230.87,N,1318.95,E,11.7,293.0,030308,11.2,W,A*35
+$GPGGA,120724,5230.87,N,1318.95,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120724,A,5230.87,N,1318.95,E,7.8,300.0,030308,11.2,W,A*01
+$GPGGA,120725,5230.87,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120725,A,5230.87,N,1318.94,E,3.9,298.0,030308,11.2,W,A*04
+$GPGGA,120726,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120726,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*19
+$GPGGA,120727,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120727,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*18
+$GPGGA,120728,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120728,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*17
+$GPGGA,120729,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120729,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*16
+$GPGGA,120730,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120730,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1e
+$GPGGA,120731,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120731,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1f
+$GPGGA,120732,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120732,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1c
+$GPGGA,120733,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120733,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1d
+$GPGGA,120734,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120734,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1a
+$GPGGA,120735,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120735,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*1b
+$GPGGA,120736,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120736,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*18
+$GPGGA,120737,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120737,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*19
+$GPGGA,120738,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120738,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*16
+$GPGGA,120739,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120739,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*17
+$GPGGA,120740,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120740,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*19
+$GPGGA,120741,5230.88,N,1318.94,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120741,A,5230.88,N,1318.94,E,0,305.0,030308,11.2,W,A*18
+$GPGGA,120742,5230.88,N,1318.93,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120742,A,5230.88,N,1318.93,E,1.0,295.0,030308,11.2,W,A*0b
+$GPGGA,120743,5230.88,N,1318.93,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120743,A,5230.88,N,1318.93,E,3.9,314.0,030308,11.2,W,A*09
+$GPGGA,120744,5230.88,N,1318.93,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120744,A,5230.88,N,1318.93,E,11.7,296.0,030308,11.2,W,A*38
+$GPGGA,120745,5230.88,N,1318.92,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120745,A,5230.88,N,1318.92,E,15.6,286.0,030308,11.2,W,A*3c
+$GPGGA,120746,5230.88,N,1318.92,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120746,A,5230.88,N,1318.92,E,23.3,303.0,030308,11.2,W,A*33
+$GPGGA,120747,5230.88,N,1318.91,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120747,A,5230.88,N,1318.91,E,25.3,298.0,030308,11.2,W,A*34
+$GPGGA,120748,5230.89,N,1318.9,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,120748,A,5230.89,N,1318.9,E,29.2,298.0,030308,11.2,W,A*06
+$GPGGA,120749,5230.89,N,1318.89,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120749,A,5230.89,N,1318.89,E,29.2,298.0,030308,11.2,W,A*3f
+$GPGGA,120750,5230.89,N,1318.88,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120750,A,5230.89,N,1318.88,E,29.2,303.0,030308,11.2,W,A*35
+$GPGGA,120751,5230.9,N,1318.87,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120751,A,5230.9,N,1318.87,E,29.2,300.0,030308,11.2,W,A*00
+$GPGGA,120752,5230.9,N,1318.86,E,1,07,1.3,50.6,M,39.2,M,,*77
+$GPRMC,120752,A,5230.9,N,1318.86,E,29.2,294.0,030308,11.2,W,A*0e
+$GPGGA,120753,5230.9,N,1318.85,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120753,A,5230.9,N,1318.85,E,29.2,296.0,030308,11.2,W,A*0e
+$GPGGA,120754,5230.91,N,1318.84,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120754,A,5230.91,N,1318.84,E,25.3,294.0,030308,11.2,W,A*36
+$GPGGA,120755,5230.91,N,1318.83,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120755,A,5230.91,N,1318.83,E,25.8,298.0,030308,11.2,W,A*37
+$GPGGA,120756,5230.91,N,1318.82,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120756,A,5230.91,N,1318.82,E,26.2,293.0,030308,11.2,W,A*37
+$GPGGA,120757,5230.92,N,1318.8,E,1,07,1.3,50.6,M,39.2,M,,*76
+$GPRMC,120757,A,5230.92,N,1318.8,E,27.2,297.0,030308,11.2,W,A*02
+$GPGGA,120758,5230.92,N,1318.79,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120758,A,5230.92,N,1318.79,E,29.2,296.0,030308,11.2,W,A*34
+$GPGGA,120759,5230.93,N,1318.77,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120759,A,5230.93,N,1318.77,E,35.0,293.0,030308,11.2,W,A*30
+$GPGGA,120800,5230.93,N,1318.76,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120800,A,5230.93,N,1318.76,E,36.9,300.0,030308,11.2,W,A*33
+$GPGGA,120801,5230.94,N,1318.74,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120801,A,5230.94,N,1318.74,E,38.9,296.0,030308,11.2,W,A*37
+$GPGGA,120802,5230.94,N,1318.73,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120802,A,5230.94,N,1318.73,E,38.9,303.0,030308,11.2,W,A*3e
+$GPGGA,120803,5230.95,N,1318.71,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120803,A,5230.95,N,1318.71,E,38.9,299.0,030308,11.2,W,A*3e
+$GPGGA,120804,5230.95,N,1318.69,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120804,A,5230.95,N,1318.69,E,38.9,295.0,030308,11.2,W,A*3c
+$GPGGA,120805,5230.96,N,1318.67,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120805,A,5230.96,N,1318.67,E,38.9,298.0,030308,11.2,W,A*3d
+$GPGGA,120806,5230.96,N,1318.66,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120806,A,5230.96,N,1318.66,E,38.9,297.0,030308,11.2,W,A*30
+$GPGGA,120807,5230.97,N,1318.65,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120807,A,5230.97,N,1318.65,E,38.9,303.0,030308,11.2,W,A*3f
+$GPGGA,120808,5230.97,N,1318.64,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120808,A,5230.97,N,1318.64,E,38.9,298.0,030308,11.2,W,A*32
+$GPGGA,120809,5230.98,N,1318.62,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120809,A,5230.98,N,1318.62,E,26.2,300.0,030308,11.2,W,A*3e
+$GPGGA,120810,5230.98,N,1318.61,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120810,A,5230.98,N,1318.61,E,25.8,292.0,030308,11.2,W,A*36
+$GPGGA,120811,5230.98,N,1318.6,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120811,A,5230.98,N,1318.6,E,25.8,295.0,030308,11.2,W,A*01
+$GPGGA,120812,5230.99,N,1318.59,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120812,A,5230.99,N,1318.59,E,23.3,297.0,030308,11.2,W,A*36
+$GPGGA,120813,5230.99,N,1318.57,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120813,A,5230.99,N,1318.57,E,19.4,297.0,030308,11.2,W,A*37
+$GPGGA,120814,5230.99,N,1318.56,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120814,A,5230.99,N,1318.56,E,13.6,295.0,030308,11.2,W,A*3b
+$GPGGA,120815,5231,N,1318.55,E,1,07,1.3,50.6,M,39.2,M,,*63
+$GPRMC,120815,A,5231,N,1318.55,E,13.6,300.0,030308,11.2,W,A*1b
+$GPGGA,120816,5231,N,1318.54,E,1,07,1.3,50.6,M,39.2,M,,*61
+$GPRMC,120816,A,5231,N,1318.54,E,13.6,299.0,030308,11.2,W,A*18
+$GPGGA,120817,5231.01,N,1318.53,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120817,A,5231.01,N,1318.53,E,19.4,298.0,030308,11.2,W,A*38
+$GPGGA,120818,5231.01,N,1318.52,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120818,A,5231.01,N,1318.52,E,30.6,298.0,030308,11.2,W,A*3f
+$GPGGA,120819,5231.01,N,1318.5,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,120819,A,5231.01,N,1318.5,E,31.1,297.0,030308,11.2,W,A*05
+$GPGGA,120820,5231.02,N,1318.49,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120820,A,5231.02,N,1318.49,E,31.1,299.0,030308,11.2,W,A*3a
+$GPGGA,120821,5231.02,N,1318.48,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,120821,A,5231.02,N,1318.48,E,31.1,298.0,030308,11.2,W,A*3b
+$GPGGA,120822,5231.03,N,1318.47,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120822,A,5231.03,N,1318.47,E,30.6,299.0,030308,11.2,W,A*31
+$GPGGA,120823,5231.03,N,1318.45,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120823,A,5231.03,N,1318.45,E,30.1,302.0,030308,11.2,W,A*36
+$GPGGA,120824,5231.04,N,1318.44,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120824,A,5231.04,N,1318.44,E,30.1,299.0,030308,11.2,W,A*34
+$GPGGA,120825,5231.04,N,1318.43,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120825,A,5231.04,N,1318.43,E,35.0,298.0,030308,11.2,W,A*37
+$GPGGA,120826,5231.05,N,1318.41,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120826,A,5231.05,N,1318.41,E,35.0,298.0,030308,11.2,W,A*37
+$GPGGA,120827,5231.05,N,1318.4,E,1,07,1.3,50.6,M,39.2,M,,*7d
+$GPRMC,120827,A,5231.05,N,1318.4,E,27.7,297.0,030308,11.2,W,A*0c
+$GPGGA,120828,5231.05,N,1318.38,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120828,A,5231.05,N,1318.38,E,27.2,295.0,030308,11.2,W,A*3b
+$GPGGA,120829,5231.06,N,1318.37,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120829,A,5231.06,N,1318.37,E,27.2,291.0,030308,11.2,W,A*32
+$GPGGA,120830,5231.06,N,1318.36,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120830,A,5231.06,N,1318.36,E,25.3,302.0,030308,11.2,W,A*33
+$GPGGA,120831,5231.06,N,1318.35,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120831,A,5231.06,N,1318.35,E,23.3,301.0,030308,11.2,W,A*34
+$GPGGA,120832,5231.07,N,1318.34,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120832,A,5231.07,N,1318.34,E,19.4,295.0,030308,11.2,W,A*35
+$GPGGA,120833,5231.07,N,1318.33,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120833,A,5231.07,N,1318.33,E,15.6,297.0,030308,11.2,W,A*3f
+$GPGGA,120834,5231.07,N,1318.32,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120834,A,5231.07,N,1318.32,E,9.7,300.0,030308,11.2,W,A*0a
+$GPGGA,120835,5231.08,N,1318.32,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120835,A,5231.08,N,1318.32,E,5.8,300.0,030308,11.2,W,A*07
+$GPGGA,120836,5231.08,N,1318.31,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120836,A,5231.08,N,1318.31,E,3.9,298.0,030308,11.2,W,A*00
+$GPGGA,120837,5231.08,N,1318.31,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120837,A,5231.08,N,1318.31,E,1.9,289.0,030308,11.2,W,A*03
+$GPGGA,120838,5231.08,N,1318.3,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120838,A,5231.08,N,1318.3,E,1.9,300.0,030308,11.2,W,A*3d
+$GPGGA,120839,5231.08,N,1318.3,E,1,07,1.3,50.6,M,39.2,M,,*78
+$GPRMC,120839,A,5231.08,N,1318.3,E,3.9,285.0,030308,11.2,W,A*32
+$GPGGA,120840,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120840,A,5231.08,N,1318.29,E,3.9,285.0,030308,11.2,W,A*04
+$GPGGA,120841,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120841,A,5231.08,N,1318.29,E,3.9,312.0,030308,11.2,W,A*0a
+$GPGGA,120842,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120842,A,5231.08,N,1318.29,E,1.9,285.0,030308,11.2,W,A*04
+$GPGGA,120843,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120843,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*13
+$GPGGA,120844,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120844,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*14
+$GPGGA,120845,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120845,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*15
+$GPGGA,120846,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120846,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*16
+$GPGGA,120847,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120847,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*17
+$GPGGA,120848,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120848,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*18
+$GPGGA,120849,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120849,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*19
+$GPGGA,120850,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120850,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*11
+$GPGGA,120851,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120851,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*10
+$GPGGA,120852,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120852,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*13
+$GPGGA,120853,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120853,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*12
+$GPGGA,120854,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120854,A,5231.08,N,1318.29,E,0,285.0,030308,11.2,W,A*15
+$GPGGA,120855,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120855,A,5231.08,N,1318.29,E,7.8,285.0,030308,11.2,W,A*05
+$GPGGA,120856,5231.08,N,1318.29,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120856,A,5231.08,N,1318.29,E,9.7,240.0,030308,11.2,W,A*0e
+$GPGGA,120857,5231.08,N,1318.28,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120857,A,5231.08,N,1318.28,E,11.7,281.0,030308,11.2,W,A*3a
+$GPGGA,120858,5231.09,N,1318.27,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120858,A,5231.09,N,1318.27,E,18.0,299.0,030308,11.2,W,A*3c
+$GPGGA,120859,5231.09,N,1318.26,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120859,A,5231.09,N,1318.26,E,19.9,297.0,030308,11.2,W,A*3a
+$GPGGA,120900,5231.09,N,1318.25,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120900,A,5231.09,N,1318.25,E,22.4,297.0,030308,11.2,W,A*31
+$GPGGA,120901,5231.1,N,1318.24,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120901,A,5231.1,N,1318.24,E,22.8,303.0,030308,11.2,W,A*09
+$GPGGA,120902,5231.1,N,1318.23,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120902,A,5231.1,N,1318.23,E,21.9,293.0,030308,11.2,W,A*07
+$GPGGA,120903,5231.1,N,1318.22,E,1,07,1.3,50.6,M,39.2,M,,*7a
+$GPRMC,120903,A,5231.1,N,1318.22,E,19.0,296.0,030308,11.2,W,A*00
+$GPGGA,120904,5231.1,N,1318.21,E,1,07,1.3,50.6,M,39.2,M,,*7e
+$GPRMC,120904,A,5231.1,N,1318.21,E,15.1,300.0,030308,11.2,W,A*07
+$GPGGA,120905,5231.11,N,1318.2,E,1,07,1.3,50.6,M,39.2,M,,*7f
+$GPRMC,120905,A,5231.11,N,1318.2,E,14.6,292.0,030308,11.2,W,A*0a
+$GPGGA,120906,5231.11,N,1318.19,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120906,A,5231.11,N,1318.19,E,16.0,297.0,030308,11.2,W,A*32
+$GPGGA,120907,5231.11,N,1318.18,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120907,A,5231.11,N,1318.18,E,19.0,293.0,030308,11.2,W,A*39
+$GPGGA,120908,5231.12,N,1318.17,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120908,A,5231.12,N,1318.17,E,21.4,297.0,030308,11.2,W,A*31
+$GPGGA,120909,5231.12,N,1318.16,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120909,A,5231.12,N,1318.16,E,24.3,296.0,030308,11.2,W,A*32
+$GPGGA,120910,5231.12,N,1318.15,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120910,A,5231.12,N,1318.15,E,25.8,301.0,030308,11.2,W,A*3c
+$GPGGA,120911,5231.13,N,1318.14,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120911,A,5231.13,N,1318.14,E,26.2,303.0,030308,11.2,W,A*36
+$GPGGA,120912,5231.13,N,1318.13,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120912,A,5231.13,N,1318.13,E,26.7,299.0,030308,11.2,W,A*35
+$GPGGA,120913,5231.14,N,1318.12,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120913,A,5231.14,N,1318.12,E,27.2,299.0,030308,11.2,W,A*36
+$GPGGA,120914,5231.14,N,1318.1,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120914,A,5231.14,N,1318.1,E,28.2,297.0,030308,11.2,W,A*02
+$GPGGA,120915,5231.14,N,1318.09,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120915,A,5231.14,N,1318.09,E,29.2,304.0,030308,11.2,W,A*31
+$GPGGA,120916,5231.15,N,1318.08,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120916,A,5231.15,N,1318.08,E,29.6,302.0,030308,11.2,W,A*30
+$GPGGA,120917,5231.15,N,1318.07,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120917,A,5231.15,N,1318.07,E,30.6,305.0,030308,11.2,W,A*31
+$GPGGA,120918,5231.16,N,1318.06,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120918,A,5231.16,N,1318.06,E,31.6,305.0,030308,11.2,W,A*3d
+$GPGGA,120919,5231.16,N,1318.05,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,120919,A,5231.16,N,1318.05,E,31.6,300.0,030308,11.2,W,A*3a
+$GPGGA,120920,5231.17,N,1318.03,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120920,A,5231.17,N,1318.03,E,30.6,298.0,030308,11.2,W,A*36
+$GPGGA,120921,5231.17,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120921,A,5231.17,N,1318.02,E,28.2,296.0,030308,11.2,W,A*35
+$GPGGA,120922,5231.17,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120922,A,5231.17,N,1318.01,E,26.2,293.0,030308,11.2,W,A*3e
+$GPGGA,120923,5231.18,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*6e
+$GPRMC,120923,A,5231.18,N,1318,E,23.8,299.0,030308,11.2,W,A*1a
+$GPGGA,120924,5231.18,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120924,A,5231.18,N,1317.99,E,21.4,298.0,030308,11.2,W,A*33
+$GPGGA,120925,5231.19,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120925,A,5231.19,N,1317.98,E,20.4,306.0,030308,11.2,W,A*35
+$GPGGA,120926,5231.19,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120926,A,5231.19,N,1317.98,E,21.9,354.0,030308,11.2,W,A*3d
+$GPGGA,120927,5231.21,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120927,A,5231.21,N,1317.97,E,23.3,349.0,030308,11.2,W,A*3c
+$GPGGA,120928,5231.22,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120928,A,5231.22,N,1317.97,E,28.7,352.0,030308,11.2,W,A*35
+$GPGGA,120929,5231.23,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120929,A,5231.23,N,1317.97,E,29.6,355.0,030308,11.2,W,A*32
+$GPGGA,120930,5231.24,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120930,A,5231.24,N,1317.97,E,30.1,4.0,030308,11.2,W,A*35
+$GPGGA,120931,5231.25,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120931,A,5231.25,N,1317.97,E,29.6,7.0,030308,11.2,W,A*39
+$GPGGA,120932,5231.26,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120932,A,5231.26,N,1317.98,E,31.6,18.0,030308,11.2,W,A*01
+$GPGGA,120933,5231.27,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,120933,A,5231.27,N,1317.98,E,33.5,20.0,030308,11.2,W,A*0b
+$GPGGA,120934,5231.27,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,120934,A,5231.27,N,1317.99,E,33.5,22.0,030308,11.2,W,A*0f
+$GPGGA,120935,5231.28,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120935,A,5231.28,N,1317.99,E,32.6,19.0,030308,11.2,W,A*0b
+$GPGGA,120936,5231.29,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*68
+$GPRMC,120936,A,5231.29,N,1318,E,31.1,23.0,030308,11.2,W,A*25
+$GPGGA,120937,5231.3,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*51
+$GPRMC,120937,A,5231.3,N,1318,E,31.1,12.0,030308,11.2,W,A*1e
+$GPGGA,120938,5231.31,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120938,A,5231.31,N,1318.01,E,29.6,16.0,030308,11.2,W,A*05
+$GPGGA,120939,5231.32,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,120939,A,5231.32,N,1318.02,E,25.3,21.0,030308,11.2,W,A*09
+$GPGGA,120940,5231.33,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120940,A,5231.33,N,1318.02,E,23.3,16.0,030308,11.2,W,A*04
+$GPGGA,120941,5231.34,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120941,A,5231.34,N,1318.02,E,23.3,13.0,030308,11.2,W,A*07
+$GPGGA,120942,5231.35,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120942,A,5231.35,N,1318.02,E,23.3,6.0,030308,11.2,W,A*31
+$GPGGA,120943,5231.36,N,1318.02,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,120943,A,5231.36,N,1318.02,E,20.4,347.0,030308,11.2,W,A*31
+$GPGGA,120944,5231.36,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120944,A,5231.36,N,1318.01,E,24.3,322.0,030308,11.2,W,A*35
+$GPGGA,120945,5231.37,N,1318.01,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120945,A,5231.37,N,1318.01,E,26.7,321.0,030308,11.2,W,A*30
+$GPGGA,120946,5231.38,N,1318,E,1,07,1.3,50.6,M,39.2,M,,*6f
+$GPRMC,120946,A,5231.38,N,1318,E,28.7,320.0,030308,11.2,W,A*1c
+$GPGGA,120947,5231.38,N,1317.99,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,120947,A,5231.38,N,1317.99,E,30.6,319.0,030308,11.2,W,A*3e
+$GPGGA,120948,5231.39,N,1317.98,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,120948,A,5231.39,N,1317.98,E,32.1,323.0,030308,11.2,W,A*3d
+$GPGGA,120949,5231.4,N,1317.97,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,120949,A,5231.4,N,1317.97,E,32.6,324.0,030308,11.2,W,A*0d
+$GPGGA,120950,5231.4,N,1317.96,E,1,07,1.3,50.6,M,39.2,M,,*79
+$GPRMC,120950,A,5231.4,N,1317.96,E,32.6,325.0,030308,11.2,W,A*05
+$GPGGA,120951,5231.41,N,1317.95,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,120951,A,5231.41,N,1317.95,E,32.6,321.0,030308,11.2,W,A*32
+$GPGGA,120952,5231.42,N,1317.94,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,120952,A,5231.42,N,1317.94,E,33.0,326.0,030308,11.2,W,A*33
+$GPGGA,120953,5231.43,N,1317.93,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,120953,A,5231.43,N,1317.93,E,33.5,323.0,030308,11.2,W,A*34
+$GPGGA,120954,5231.44,N,1317.92,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,120954,A,5231.44,N,1317.92,E,32.6,323.0,030308,11.2,W,A*37
+$GPGGA,120955,5231.45,N,1317.91,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,120955,A,5231.45,N,1317.91,E,32.1,308.0,030308,11.2,W,A*3a
+$GPGGA,120956,5231.45,N,1317.9,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,120956,A,5231.45,N,1317.9,E,32.1,331.0,030308,11.2,W,A*02
+$GPGGA,120957,5231.46,N,1317.89,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,120957,A,5231.46,N,1317.89,E,31.1,327.0,030308,11.2,W,A*3c
+$GPGGA,120958,5231.47,N,1317.88,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,120958,A,5231.47,N,1317.88,E,31.1,317.0,030308,11.2,W,A*30
+$GPGGA,120959,5231.48,N,1317.88,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,120959,A,5231.48,N,1317.88,E,33.0,352.0,030308,11.2,W,A*3c
+$GPGGA,121000,5231.49,N,1317.88,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121000,A,5231.49,N,1317.88,E,33.0,352.0,030308,11.2,W,A*39
+$GPGGA,121001,5231.5,N,1317.87,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,121001,A,5231.5,N,1317.87,E,33.0,341.0,030308,11.2,W,A*0d
+$GPGGA,121002,5231.51,N,1317.87,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121002,A,5231.51,N,1317.87,E,32.6,347.0,030308,11.2,W,A*3e
+$GPGGA,121003,5231.52,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121003,A,5231.52,N,1317.86,E,32.1,348.0,030308,11.2,W,A*35
+$GPGGA,121004,5231.53,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,121004,A,5231.53,N,1317.86,E,31.6,349.0,030308,11.2,W,A*36
+$GPGGA,121005,5231.54,N,1317.86,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121005,A,5231.54,N,1317.86,E,30.6,350.0,030308,11.2,W,A*39
+$GPGGA,121006,5231.55,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121006,A,5231.55,N,1317.85,E,29.2,347.0,030308,11.2,W,A*32
+$GPGGA,121007,5231.56,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121007,A,5231.56,N,1317.85,E,25.8,349.0,030308,11.2,W,A*38
+$GPGGA,121008,5231.57,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121008,A,5231.57,N,1317.85,E,15.6,354.0,030308,11.2,W,A*37
+$GPGGA,121009,5231.58,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121009,A,5231.58,N,1317.85,E,3.9,347.0,030308,11.2,W,A*03
+$GPGGA,121010,5231.58,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121010,A,5231.58,N,1317.85,E,11.7,344.0,030308,11.2,W,A*35
+$GPGGA,121011,5231.58,N,1317.85,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,121011,A,5231.58,N,1317.85,E,13.6,356.0,030308,11.2,W,A*34
+$GPGGA,121012,5231.58,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121012,A,5231.58,N,1317.84,E,15.6,299.0,030308,11.2,W,A*32
+$GPGGA,121013,5231.58,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121013,A,5231.58,N,1317.84,E,15.6,335.0,030308,11.2,W,A*34
+$GPGGA,121014,5231.59,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121014,A,5231.59,N,1317.84,E,19.4,350.0,030308,11.2,W,A*3f
+$GPGGA,121015,5231.59,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121015,A,5231.59,N,1317.84,E,19.4,353.0,030308,11.2,W,A*3d
+$GPGGA,121016,5231.61,N,1317.84,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,121016,A,5231.61,N,1317.84,E,25.3,347.0,030308,11.2,W,A*38
+$GPGGA,121017,5231.61,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121017,A,5231.61,N,1317.83,E,25.3,349.0,030308,11.2,W,A*30
+$GPGGA,121018,5231.62,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121018,A,5231.62,N,1317.83,E,26.7,351.0,030308,11.2,W,A*32
+$GPGGA,121019,5231.63,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121019,A,5231.63,N,1317.83,E,29.2,354.0,030308,11.2,W,A*3d
+$GPGGA,121020,5231.64,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121020,A,5231.64,N,1317.83,E,30.1,349.0,030308,11.2,W,A*37
+$GPGGA,121021,5231.65,N,1317.83,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121021,A,5231.65,N,1317.83,E,31.1,350.0,030308,11.2,W,A*3e
+$GPGGA,121022,5231.65,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121022,A,5231.65,N,1317.82,E,32.6,349.0,030308,11.2,W,A*30
+$GPGGA,121023,5231.66,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121023,A,5231.66,N,1317.82,E,33.0,350.0,030308,11.2,W,A*3d
+$GPGGA,121024,5231.67,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121024,A,5231.67,N,1317.82,E,33.0,350.0,030308,11.2,W,A*3b
+$GPGGA,121025,5231.68,N,1317.82,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121025,A,5231.68,N,1317.82,E,33.5,346.0,030308,11.2,W,A*37
+$GPGGA,121026,5231.69,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121026,A,5231.69,N,1317.81,E,33.5,353.0,030308,11.2,W,A*32
+$GPGGA,121027,5231.7,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*74
+$GPRMC,121027,A,5231.7,N,1317.81,E,33.0,354.0,030308,11.2,W,A*09
+$GPGGA,121028,5231.71,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121028,A,5231.71,N,1317.81,E,33.0,349.0,030308,11.2,W,A*3b
+$GPGGA,121029,5231.72,N,1317.81,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121029,A,5231.72,N,1317.81,E,31.1,348.0,030308,11.2,W,A*3b
+$GPGGA,121030,5231.72,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,121030,A,5231.72,N,1317.8,E,30.1,343.0,030308,11.2,W,A*08
+$GPGGA,121031,5231.73,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*71
+$GPRMC,121031,A,5231.73,N,1317.8,E,28.2,345.0,030308,11.2,W,A*04
+$GPGGA,121032,5231.74,N,1317.8,E,1,07,1.3,50.6,M,39.2,M,,*75
+$GPRMC,121032,A,5231.74,N,1317.8,E,24.8,341.0,030308,11.2,W,A*02
+$GPGGA,121033,5231.74,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121033,A,5231.74,N,1317.79,E,20.4,348.0,030308,11.2,W,A*34
+$GPGGA,121034,5231.75,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121034,A,5231.75,N,1317.79,E,16.0,347.0,030308,11.2,W,A*3c
+$GPGGA,121035,5231.75,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121035,A,5231.75,N,1317.79,E,14.6,354.0,030308,11.2,W,A*3b
+$GPGGA,121036,5231.75,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121036,A,5231.75,N,1317.79,E,3.9,336.0,030308,11.2,W,A*05
+$GPGGA,121037,5231.75,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,121037,A,5231.75,N,1317.79,E,2.9,290.0,030308,11.2,W,A*08
+$GPGGA,121038,5231.76,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121038,A,5231.76,N,1317.79,E,2.9,343.0,030308,11.2,W,A*0b
+$GPGGA,121039,5231.76,N,1317.79,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121039,A,5231.76,N,1317.79,E,13.6,344.0,030308,11.2,W,A*32
+$GPGGA,121040,5231.76,N,1317.78,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121040,A,5231.76,N,1317.78,E,17.5,339.0,030308,11.2,W,A*30
+$GPGGA,121041,5231.77,N,1317.78,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121041,A,5231.77,N,1317.78,E,19.9,352.0,030308,11.2,W,A*3f
+$GPGGA,121042,5231.78,N,1317.78,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121042,A,5231.78,N,1317.78,E,21.9,344.0,030308,11.2,W,A*3f
+$GPGGA,121043,5231.79,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121043,A,5231.79,N,1317.77,E,23.3,343.0,030308,11.2,W,A*3f
+$GPGGA,121044,5231.8,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*77
+$GPRMC,121044,A,5231.8,N,1317.77,E,23.3,356.0,030308,11.2,W,A*0a
+$GPGGA,121045,5231.81,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,121045,A,5231.81,N,1317.77,E,17.5,342.0,030308,11.2,W,A*3e
+$GPGGA,121046,5231.81,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121046,A,5231.81,N,1317.77,E,11.2,352.0,030308,11.2,W,A*3d
+$GPGGA,121047,5231.81,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121047,A,5231.81,N,1317.77,E,1.9,340.0,030308,11.2,W,A*05
+$GPGGA,121048,5231.81,N,1317.77,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121048,A,5231.81,N,1317.77,E,1.9,343.0,030308,11.2,W,A*09
+$GPGGA,121049,5231.81,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121049,A,5231.81,N,1317.76,E,1.5,324.0,030308,11.2,W,A*04
+$GPGGA,121050,5231.81,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121050,A,5231.81,N,1317.76,E,2.4,313.0,030308,11.2,W,A*0a
+$GPGGA,121051,5231.81,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,121051,A,5231.81,N,1317.76,E,11.7,347.0,030308,11.2,W,A*3b
+$GPGGA,121052,5231.82,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,121052,A,5231.82,N,1317.76,E,17.5,345.0,030308,11.2,W,A*3d
+$GPGGA,121053,5231.82,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121053,A,5231.82,N,1317.76,E,19.4,345.0,030308,11.2,W,A*33
+$GPGGA,121054,5231.83,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121054,A,5231.83,N,1317.76,E,19.4,350.0,030308,11.2,W,A*31
+$GPGGA,121055,5231.83,N,1317.76,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121055,A,5231.83,N,1317.76,E,21.9,348.0,030308,11.2,W,A*3f
+$GPGGA,121056,5231.84,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121056,A,5231.84,N,1317.75,E,24.3,344.0,030308,11.2,W,A*3b
+$GPGGA,121057,5231.85,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121057,A,5231.85,N,1317.75,E,25.3,342.0,030308,11.2,W,A*3c
+$GPGGA,121058,5231.86,N,1317.75,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121058,A,5231.86,N,1317.75,E,27.7,351.0,030308,11.2,W,A*34
+$GPGGA,121059,5231.86,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121059,A,5231.86,N,1317.74,E,28.7,346.0,030308,11.2,W,A*3d
+$GPGGA,121100,5231.87,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*42
+$GPRMC,121100,A,5231.87,N,1317.74,E,30.6,347.0,030308,11.2,W,A*38
+$GPGGA,121101,5231.88,N,1317.74,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121101,A,5231.88,N,1317.74,E,31.6,340.0,030308,11.2,W,A*30
+$GPGGA,121102,5231.89,N,1317.73,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121102,A,5231.89,N,1317.73,E,32.6,341.0,030308,11.2,W,A*37
+$GPGGA,121103,5231.9,N,1317.73,E,1,07,1.3,50.6,M,39.2,M,,*70
+$GPRMC,121103,A,5231.9,N,1317.73,E,34.0,340.0,030308,11.2,W,A*0f
+$GPGGA,121104,5231.91,N,1317.72,E,1,07,1.3,50.6,M,39.2,M,,*47
+$GPRMC,121104,A,5231.91,N,1317.72,E,35.0,341.0,030308,11.2,W,A*38
+$GPGGA,121105,5231.92,N,1317.72,E,1,07,1.3,50.6,M,39.2,M,,*45
+$GPRMC,121105,A,5231.92,N,1317.72,E,35.5,342.0,030308,11.2,W,A*3c
+$GPGGA,121106,5231.93,N,1317.71,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121106,A,5231.93,N,1317.71,E,35.0,338.0,030308,11.2,W,A*35
+$GPGGA,121107,5231.94,N,1317.7,E,1,07,1.3,50.6,M,39.2,M,,*73
+$GPRMC,121107,A,5231.94,N,1317.7,E,34.0,336.0,030308,11.2,W,A*0d
+$GPGGA,121108,5231.94,N,1317.7,E,1,07,1.3,50.6,M,39.2,M,,*7c
+$GPRMC,121108,A,5231.94,N,1317.7,E,32.6,337.0,030308,11.2,W,A*03
+$GPGGA,121109,5231.95,N,1317.69,E,1,07,1.3,50.6,M,39.2,M,,*44
+$GPRMC,121109,A,5231.95,N,1317.69,E,29.6,339.0,030308,11.2,W,A*3f
+$GPGGA,121110,5231.96,N,1317.69,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,121110,A,5231.96,N,1317.69,E,29.2,339.0,030308,11.2,W,A*30
+$GPGGA,121111,5231.97,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121111,A,5231.97,N,1317.68,E,25.8,333.0,030308,11.2,W,A*3d
+$GPGGA,121112,5231.97,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121112,A,5231.97,N,1317.68,E,25.3,339.0,030308,11.2,W,A*3f
+$GPGGA,121113,5231.98,N,1317.68,E,1,07,1.3,50.6,M,39.2,M,,*43
+$GPRMC,121113,A,5231.98,N,1317.68,E,20.9,343.0,030308,11.2,W,A*33
+$GPGGA,121114,5231.98,N,1317.67,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121114,A,5231.98,N,1317.67,E,19.4,339.0,030308,11.2,W,A*31
+$GPGGA,121115,5231.99,N,1317.67,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121115,A,5231.99,N,1317.67,E,17.5,341.0,030308,11.2,W,A*31
+$GPGGA,121116,5231.99,N,1317.67,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121116,A,5231.99,N,1317.67,E,16.5,344.0,030308,11.2,W,A*36
+$GPGGA,121117,5232,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*65
+$GPRMC,121117,A,5232,N,1317.66,E,14.6,324.0,030308,11.2,W,A*1c
+$GPGGA,121118,5232,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*6a
+$GPRMC,121118,A,5232,N,1317.66,E,12.6,332.0,030308,11.2,W,A*12
+$GPGGA,121119,5232,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*6b
+$GPRMC,121119,A,5232,N,1317.66,E,14.1,342.0,030308,11.2,W,A*15
+$GPGGA,121120,5232.01,N,1317.66,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121120,A,5232.01,N,1317.66,E,16.5,339.0,030308,11.2,W,A*3a
+$GPGGA,121121,5232.01,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121121,A,5232.01,N,1317.65,E,16.5,335.0,030308,11.2,W,A*34
+$GPGGA,121122,5232.01,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,121122,A,5232.01,N,1317.65,E,16.5,322.0,030308,11.2,W,A*31
+$GPGGA,121123,5232.02,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121123,A,5232.02,N,1317.65,E,16.5,334.0,030308,11.2,W,A*34
+$GPGGA,121124,5232.02,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121124,A,5232.02,N,1317.64,E,19.0,331.0,030308,11.2,W,A*3d
+$GPGGA,121125,5232.03,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121125,A,5232.03,N,1317.64,E,17.0,338.0,030308,11.2,W,A*3a
+$GPGGA,121126,5232.03,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121126,A,5232.03,N,1317.64,E,13.6,334.0,030308,11.2,W,A*37
+$GPGGA,121127,5232.03,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121127,A,5232.03,N,1317.64,E,11.2,349.0,030308,11.2,W,A*3a
+$GPGGA,121128,5232.03,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*46
+$GPRMC,121128,A,5232.03,N,1317.64,E,1.9,352.0,030308,11.2,W,A*05
+$GPGGA,121129,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,121129,A,5232.04,N,1317.64,E,1.9,352.0,030308,11.2,W,A*03
+$GPGGA,121130,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121130,A,5232.04,N,1317.64,E,0.5,352.0,030308,11.2,W,A*06
+$GPGGA,121131,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121131,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*1c
+$GPGGA,121132,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121132,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*1f
+$GPGGA,121133,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121133,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*1e
+$GPGGA,121134,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121134,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*19
+$GPGGA,121135,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121135,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*18
+$GPGGA,121136,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121136,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*1b
+$GPGGA,121137,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,121137,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*1a
+$GPGGA,121138,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*40
+$GPRMC,121138,A,5232.04,N,1317.64,E,0,352.0,030308,11.2,W,A*15
+$GPGGA,121139,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*41
+$GPRMC,121139,A,5232.04,N,1317.64,E,1.0,352.0,030308,11.2,W,A*0b
+$GPGGA,121140,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4f
+$GPRMC,121140,A,5232.04,N,1317.64,E,7.8,357.0,030308,11.2,W,A*0e
+$GPGGA,121141,5232.04,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4e
+$GPRMC,121141,A,5232.04,N,1317.64,E,15.6,357.0,030308,11.2,W,A*32
+$GPGGA,121142,5232.05,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4c
+$GPRMC,121142,A,5232.05,N,1317.64,E,16.5,14.0,030308,11.2,W,A*04
+$GPGGA,121143,5232.05,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121143,A,5232.05,N,1317.64,E,18.5,17.0,030308,11.2,W,A*08
+$GPGGA,121144,5232.06,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*48
+$GPRMC,121144,A,5232.06,N,1317.65,E,20.9,21.0,030308,11.2,W,A*0f
+$GPGGA,121145,5232.06,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*49
+$GPRMC,121145,A,5232.06,N,1317.65,E,20.9,18.0,030308,11.2,W,A*04
+$GPGGA,121146,5232.07,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121146,A,5232.07,N,1317.65,E,19.4,18.0,030308,11.2,W,A*01
+$GPGGA,121147,5232.07,N,1317.65,E,1,07,1.3,50.6,M,39.2,M,,*4a
+$GPRMC,121147,A,5232.07,N,1317.65,E,17.5,348.0,030308,11.2,W,A*39
+$GPGGA,121148,5232.08,N,1317.64,E,1,07,1.3,50.6,M,39.2,M,,*4b
+$GPRMC,121148,A,5232.08,N,1317.64,E,11.7,333.0,030308,11.2,W,A*30
+$GPGGA,121149,5232.08,N,1317.63,E,1,07,1.3,50.6,M,39.2,M,,*4d
+$GPRMC,121149,A,5232.08,N,1317.63,E,7.8,315.0,030308,11.2,W,A*0a
diff --git a/doc/src/snippets/qtcluster/qtcluster-base.pro b/doc/src/snippets/qtcluster/qtcluster-base.pro
new file mode 100644
index 00000000..69f914e5
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qtcluster-base.pro
@@ -0,0 +1,109 @@
+TEMPLATE = app
+TARGET = qtcluster
+INCLUDEPATH += .
+QT += quick
+
+# Enable for static version
+#CONFIG += static
+#DEFINES += STATIC
+
+CONFIG += SPORTS_CAR
+CONFIG += HYBRID_CAR
+
+#Enable compile flags based on config flags
+SPORTS_CAR: DEFINES += SPORTS_CAR
+HYBRID_CAR: DEFINES += HYBRID_CAR
+
+qtHaveModule(3drender) {
+QT += 3dcore 3drender 3dquick 3dquick-private
+HEADERS += \
+ scenehelper.h
+SOURCES += \
+ scenehelper.cpp
+}
+
+CONFIG += resources_big
+
+SOURCES += \
+ main.cpp \
+ gauge.cpp \
+ gaugenode.cpp \
+ qtiviclusterdata.cpp \
+ etcprovider.cpp \
+ circularindicator.cpp
+
+DEFINES += NO_NETWORK
+
+RESOURCES += \
+ qtcluster.qrc \
+
+RESOURCES += images.qrc
+
+SPORTS_CAR: {
+ RESOURCES += sportsqml.qrc
+
+ RESOURCES += sportscar_15k.qrc
+ RESOURCES += sportsimages.qrc
+}
+
+HYBRID_CAR: {
+ RESOURCES += \
+ hybridqml.qrc
+
+RESOURCES += hybridimages.qrc
+}
+
+RESOURCES += iso-icons.qrc
+
+ISO_ICONS = \
+ iso_grs_7000_4_0083 \
+ iso_grs_7000_4_1434A \
+ iso_grs_7000_4_0246 \
+ iso_grs_7000_4_0245 \
+ iso_grs_7000_4_0247 \
+ iso_grs_7000_4_1555 \
+ iso_grs_7000_4_1702 \
+ iso_grs_7000_4_0249 \
+ iso_grs_7000_4_0238 \
+ iso_grs_7000_4_0456
+
+
+OTHER_FILES += \
+ qml/* \
+ qml/dash_sports/* \
+ qml/dash_hybrid/* \
+ qml/dash_hybrid/gauges/* \
+ qml/dash_safety/* \
+
+#win32 | win64: {
+# deploy.path = $$OUT_PWD
+#} else {
+ deploy.path = /data/user/qt
+#}
+
+#message($$deploy.path)
+
+#qml_data.files += qml/*
+#qml_data.path = $$deploy.path/$$TARGET/qml
+#font_data.files += fonts/*
+#font_data.path = $$deploy.path/$$TARGET/fonts
+#image_data.files += images/*
+#image_data.path = $$deploy.path/$$TARGET/images
+target.path = $$deploy.path/$$TARGET
+INSTALLS += \
+ target \
+# video_data \
+# qml_data \
+# font_data \
+# image_data
+
+HEADERS += \
+ gauge.h \
+ gaugenode.h \
+ qtiviclusterdata.h \
+ etcprovider.h \
+ circularindicator.h
+
+macos: QMAKE_INFO_PLIST = Info-macos.plist
+ios|tvos: QMAKE_INFO_PLIST = Info-ios.plist
+
diff --git a/doc/src/snippets/qtcluster/qtcluster.pro b/doc/src/snippets/qtcluster/qtcluster.pro
new file mode 100644
index 00000000..ffaa7caf
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qtcluster.pro
@@ -0,0 +1,8 @@
+TEMPLATE = subdirs
+
+SUBDIRS = \
+ qtcluster-base.pro \
+ designerImports\ClusterDemo\plugin.pro
+
+QML_IMPORT_PATH = $$PWD/imports
+QML_DESIGNER_IMPORT_PATH = $$PWD/designerImports
diff --git a/doc/src/snippets/qtcluster/qtcluster.qrc b/doc/src/snippets/qtcluster/qtcluster.qrc
new file mode 100644
index 00000000..c0029b12
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qtcluster.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/TurnIndicator.qml</file>
+ <file>qml/ValueSource.qml</file>
+ <file>qml/MapView.qml</file>
+ <file>qml/VideoView.qml</file>
+ <file>qml/functions.js</file>
+ <file>qml/ConsumptionView.qml</file>
+ <file>qml/MediaPlayerView.qml</file>
+ <file>qml/route.txt</file>
+ <file>qml/VehicleInfoNote.qml</file>
+ <file>qml/FpsCounter.qml</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/qtiviclusterdata.cpp b/doc/src/snippets/qtcluster/qtiviclusterdata.cpp
new file mode 100644
index 00000000..8c78326d
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qtiviclusterdata.cpp
@@ -0,0 +1,344 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.qt.io/ or http://www.pelagicore.com/
+**
+** This file is part of the QtIVI module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3-PELAGICORE$
+** Commercial License Usage
+** Licensees holding valid commercial Qt IVI 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 Pelagicore. For licensing terms
+** and conditions, contact us at http://www.pelagicore.com.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: LGPL-3.0
+**
+****************************************************************************/
+
+#include "qtiviclusterdata.h"
+
+QtIVIClusterData::QtIVIClusterData(QObject* parent)
+ : QObject(parent),
+ m_vehicleSpeed(0),
+ m_latitude(0),
+ m_longitude(0),
+ m_direction(0),
+ m_flatTire(false),
+ m_doorOpen(false),
+ m_lightFailure(false),
+ m_reverse(false),
+ m_leftTurnLight(false),
+ m_rightTurnLight(false),
+ m_headLight(false),
+ m_parkLight(false),
+ m_carId(1),
+ m_brake(false),
+ m_engineTemp(60),
+ m_oilTemp(0.0),
+ m_oilPressure(0),
+ m_batteryPotential(80.0),
+ m_gasLevel(67.0),
+ m_rpm(4000),
+ m_gear(1)
+{
+ connectToServiceObject();
+}
+
+void QtIVIClusterData::connectToServiceObject()
+{
+ initializeZones();
+}
+
+ZonedProperties *QtIVIClusterData::zoneAt(const QString &zone) const
+{
+ foreach (ZonedProperties *f, m_zoneFeatures)
+ if (f->zone() == zone)
+ return f;
+ return 0;
+}
+
+void QtIVIClusterData::initializeZones()
+{
+
+}
+
+QVariantMap QtIVIClusterData::zoneFeatureMap() const
+{
+ return m_zoneFeatureMap;
+
+}
+
+double QtIVIClusterData::vehicleSpeed() const
+{
+ return m_vehicleSpeed;
+}
+
+double QtIVIClusterData::latitude() const
+{
+ return m_latitude;
+}
+
+double QtIVIClusterData::longitude() const
+{
+ return m_longitude;
+}
+
+double QtIVIClusterData::direction() const
+{
+ return m_direction;
+}
+
+bool QtIVIClusterData::flatTire() const
+{
+ return m_flatTire;
+}
+
+bool QtIVIClusterData::doorOpen() const
+{
+ return m_doorOpen;
+}
+
+bool QtIVIClusterData::lightFailure() const
+{
+ return m_lightFailure;
+}
+
+bool QtIVIClusterData::reverse() const
+{
+ return m_reverse;
+}
+
+bool QtIVIClusterData::leftTurnLight() const
+{
+ return m_leftTurnLight;
+}
+
+bool QtIVIClusterData::rightTurnLight() const
+{
+ return m_rightTurnLight;
+}
+
+bool QtIVIClusterData::headLight() const
+{
+ return m_headLight;
+}
+
+bool QtIVIClusterData::parkLight() const
+{
+ return m_parkLight;
+}
+
+int QtIVIClusterData::carId() const
+{
+ return m_carId;
+}
+
+bool QtIVIClusterData::brake() const
+{
+ return m_brake;
+}
+
+int QtIVIClusterData::engineTemp() const
+{
+ return m_engineTemp;
+}
+
+double QtIVIClusterData::oilTemp() const
+{
+ return m_oilTemp;
+}
+
+int QtIVIClusterData::oilPressure() const
+{
+ return m_oilPressure;
+}
+
+double QtIVIClusterData::batteryPotential() const
+{
+ return m_batteryPotential;
+}
+
+double QtIVIClusterData::gasLevel() const
+{
+ return m_gasLevel;
+}
+
+int QtIVIClusterData::rpm() const
+{
+ return m_rpm;
+}
+
+int QtIVIClusterData::gear() const
+{
+ return m_gear;
+}
+
+void QtIVIClusterData::classBegin()
+{
+
+}
+
+void QtIVIClusterData::componentComplete()
+{
+
+}
+
+void QtIVIClusterData::onVehicleSpeedChanged(double vehicleSpeed, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_vehicleSpeed = vehicleSpeed;
+ emit vehicleSpeedChanged(vehicleSpeed);
+}
+
+void QtIVIClusterData::onLatitudeChanged(double latitude, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_latitude = latitude;
+ emit latitudeChanged(latitude);
+}
+
+void QtIVIClusterData::onLongitudeChanged(double longitude, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_longitude = longitude;
+ emit longitudeChanged(longitude);
+}
+
+void QtIVIClusterData::onDirectionChanged(double direction, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_direction = direction;
+ emit directionChanged(direction);
+}
+
+void QtIVIClusterData::onFlatTireChanged(bool flatTire, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_flatTire = flatTire;
+ emit flatTireChanged(flatTire);
+}
+
+void QtIVIClusterData::onDoorOpenChanged(bool doorOpen, const QString &zone)
+{
+ ZonedProperties *z = zoneAt(zone);
+ if (z) {
+ z->setDoorOpen(doorOpen);
+ }
+}
+
+void QtIVIClusterData::onLightFailureChanged(bool lightFailure, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_lightFailure = lightFailure;
+ emit lightFailureChanged(lightFailure);
+}
+
+void QtIVIClusterData::onReverseChanged(bool reverse, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_reverse = reverse;
+ emit reverseChanged(reverse);
+}
+
+void QtIVIClusterData::onLeftTurnLightChanged(bool leftTurnLight, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_leftTurnLight = leftTurnLight;
+ emit leftTurnLightChanged(leftTurnLight);
+}
+
+void QtIVIClusterData::onRightTurnLightChanged(bool rightTurnLight, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_rightTurnLight = rightTurnLight;
+ emit rightTurnLightChanged(rightTurnLight);
+}
+
+void QtIVIClusterData::onHeadLightChanged(bool headLight, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_headLight = headLight;
+ emit headLightChanged(headLight);
+}
+
+void QtIVIClusterData::onParkLightChanged(bool parkLight, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_parkLight = parkLight;
+ emit parkLightChanged(parkLight);
+}
+
+void QtIVIClusterData::onCarIdChanged(int carId, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_carId = carId;
+ emit carIdChanged(carId);
+}
+
+void QtIVIClusterData::onBrakeChanged(bool brakeOn, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_brake = brakeOn;
+ emit brakeChanged(brakeOn);
+}
+
+void QtIVIClusterData::onEngineTempChanged(int engineTemp, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_engineTemp = engineTemp;
+ emit engineTempChanged(engineTemp);
+}
+
+void QtIVIClusterData::onOilTempChanged(double oilTemp, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_oilTemp = oilTemp;
+ emit oilTempChanged(oilTemp);
+}
+
+void QtIVIClusterData::onOilPressureChanged(int oilPressure, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_oilPressure = oilPressure;
+ emit oilPressureChanged(oilPressure);
+}
+
+void QtIVIClusterData::onBatteryPotentialChanged(double batteryPotential, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_batteryPotential = batteryPotential;
+ emit batteryPotentialChanged(batteryPotential);
+}
+
+void QtIVIClusterData::onGasLevelChanged(double gasLevel, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_gasLevel = gasLevel;
+ emit gasLevelChanged(gasLevel);
+}
+
+void QtIVIClusterData::onRpmChanged(int rpm, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_rpm = rpm;
+ emit rpmChanged(rpm);
+}
+
+void QtIVIClusterData::onGearChanged(int gear, const QString &zone)
+{
+ Q_UNUSED(zone);
+ m_gear = gear;
+ emit gearChanged(gear);
+}
diff --git a/doc/src/snippets/qtcluster/qtiviclusterdata.h b/doc/src/snippets/qtcluster/qtiviclusterdata.h
new file mode 100644
index 00000000..7ba02a14
--- /dev/null
+++ b/doc/src/snippets/qtcluster/qtiviclusterdata.h
@@ -0,0 +1,223 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.qt.io/ or http://www.pelagicore.com/
+**
+** This file is part of the QtIVI module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3-PELAGICORE$
+** Commercial License Usage
+** Licensees holding valid commercial Qt IVI 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 Pelagicore. For licensing terms
+** and conditions, contact us at http://www.pelagicore.com.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: LGPL-3.0
+**
+****************************************************************************/
+
+#ifndef CLUSTERDATA_H
+#define CLUSTERDATA_H
+
+#include <QObject>
+#include <QQmlParserStatus>
+#include <QQmlProperty>
+
+#ifndef NO_NETWORK
+#include "clusterdatabackend.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+#ifndef NO_NETWORK
+class ClusterDataBackend;
+#endif
+
+class ZonedProperties : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool doorOpen READ doorOpen NOTIFY doorOpenChanged)
+
+public:
+ ZonedProperties(QObject *parent=0) : QObject(parent), m_zone(""), m_doorOpen(false) {}
+
+ void setZone(const QString &zone) { m_zone = zone; }
+ QString zone() { return m_zone; }
+
+ bool doorOpen() { return m_doorOpen; }
+ void setDoorOpen(const bool &d) { m_doorOpen = d; emit doorOpenChanged(); }
+signals:
+ void zoneChanged(const QString &zone);
+ void doorOpenChanged();
+
+private:
+ QString m_zone;
+ bool m_doorOpen;
+};
+
+class QtIVIClusterData : public QObject, public QQmlParserStatus
+{
+ Q_OBJECT
+ Q_INTERFACES(QQmlParserStatus)
+
+ Q_PROPERTY(double vehicleSpeed READ vehicleSpeed NOTIFY vehicleSpeedChanged)
+ Q_PROPERTY(double latitude READ latitude NOTIFY latitudeChanged)
+ Q_PROPERTY(double longitude READ longitude NOTIFY longitudeChanged)
+ Q_PROPERTY(double direction READ direction NOTIFY directionChanged)
+ Q_PROPERTY(bool flatTire READ flatTire NOTIFY flatTireChanged)
+ Q_PROPERTY(bool lightFailure READ lightFailure NOTIFY lightFailureChanged)
+ Q_PROPERTY(bool reverse READ reverse NOTIFY reverseChanged)
+ Q_PROPERTY(bool leftTurnLight READ leftTurnLight NOTIFY leftTurnLightChanged)
+ Q_PROPERTY(bool rightTurnLight READ rightTurnLight NOTIFY rightTurnLightChanged)
+ Q_PROPERTY(bool headLight READ headLight NOTIFY headLightChanged)
+ Q_PROPERTY(bool parkLight READ parkLight NOTIFY parkLightChanged)
+ Q_PROPERTY(int carId READ carId NOTIFY carIdChanged)
+ Q_PROPERTY(bool brake READ brake NOTIFY brakeChanged)
+ Q_PROPERTY(int engineTemp READ engineTemp NOTIFY engineTempChanged)
+ Q_PROPERTY(double oilTemp READ oilTemp NOTIFY oilTempChanged)
+ Q_PROPERTY(int oilPressure READ oilPressure NOTIFY oilPressureChanged)
+ Q_PROPERTY(double batteryPotential READ batteryPotential NOTIFY batteryPotentialChanged)
+ Q_PROPERTY(double gasLevel READ gasLevel NOTIFY gasLevelChanged)
+ Q_PROPERTY(int rpm READ rpm NOTIFY rpmChanged)
+ Q_PROPERTY(int gear READ gear NOTIFY gearChanged)
+
+ Q_PROPERTY(QVariantMap zoneAt READ zoneFeatureMap NOTIFY zonesChanged)
+
+public:
+
+ QtIVIClusterData(QObject *parent=0);
+
+ double vehicleSpeed() const;
+ double latitude() const;
+ double longitude() const;
+ double direction() const;
+ bool flatTire() const;
+ bool doorOpen() const;
+ bool lightFailure() const;
+ bool reverse() const;
+ bool leftTurnLight() const;
+ bool rightTurnLight() const;
+ bool headLight() const;
+ bool parkLight() const;
+ int carId() const;
+ bool brake() const;
+ int engineTemp() const;
+ double oilTemp() const;
+ int oilPressure() const;
+ double batteryPotential() const;
+ double gasLevel() const;
+ int rpm() const;
+ int gear() const;
+
+Q_SIGNALS:
+ void vehicleSpeedChanged(double vehicleSpeed);
+ void latitudeChanged(double latitude);
+ void longitudeChanged(double longitude);
+ void directionChanged(double direction);
+ void flatTireChanged(bool flatTire);
+ void doorOpenChanged(bool doorOpen);
+ void lightFailureChanged(bool lightFailure);
+ void reverseChanged(bool Reverse);
+ void leftTurnLightChanged(bool leftTurnLight);
+ void rightTurnLightChanged(bool rightTurnLight);
+ void headLightChanged(bool headLight);
+ void parkLightChanged(bool parkLight);
+ void carIdChanged(int carId);
+ void brakeChanged(bool brakeOn );
+ void engineTempChanged(int engineTemp);
+ void oilTempChanged(double oilTemp);
+ void oilPressureChanged(int oilPressure);
+ void batteryPotentialChanged(double batteryPotential);
+ void gasLevelChanged(double gasLevel);
+ void rpmChanged(int rpm);
+ void gearChanged(int gear);
+ void zonesChanged();
+
+protected:
+ //TODO This doesn't work for the C++ usecases we should use the constructor there instead
+ // Also this means a qml dependency in the core, do we want that ?
+ virtual void classBegin();
+ virtual void componentComplete();
+
+private Q_SLOTS:
+ void onVehicleSpeedChanged(double vehicleSpeed, const QString &zone);
+ void onLatitudeChanged(double latitude, const QString &zone);
+ void onLongitudeChanged(double longitude, const QString &zone);
+ void onDirectionChanged(double direction, const QString &zone);
+ void onFlatTireChanged(bool flatTire, const QString &zone);
+ void onDoorOpenChanged(bool doorOpen, const QString &zone);
+ void onLightFailureChanged(bool lightFailure, const QString &zone);
+ void onReverseChanged(bool reverse, const QString &zone);
+ void onLeftTurnLightChanged(bool leftTurnLight, const QString &zone);
+ void onRightTurnLightChanged(bool rightTurnLight, const QString &zone);
+ void onHeadLightChanged(bool headLight, const QString &zone);
+ void onParkLightChanged(bool parkLight, const QString &zone);
+ void onCarIdChanged(int carId, const QString &zone);
+ void onBrakeChanged(bool brakeOn, const QString &zone );
+ void onEngineTempChanged(int engineTemp, const QString &zone);
+ void onOilTempChanged(double oilTemp, const QString &zone);
+ void onOilPressureChanged(int oilPressure, const QString &zone);
+ void onBatteryPotentialChanged(double batteryPotential, const QString &zone);
+ void onGasLevelChanged(double gasLevel, const QString &zone);
+ void onRpmChanged(int rpm, const QString &zone);
+ void onGearChanged(int gear, const QString &zone);
+
+protected:
+ // virtual QtIVIAbstractZonedFeature* createZoneFeature(const QString &zone) Q_DECL_OVERRIDE;
+ // QtIVIClusterData* zonedFeature(const QString &zone);
+
+
+private:
+ void connectToServiceObject();
+ QVariantMap zoneFeatureMap() const;
+ void initializeZones();
+ ZonedProperties *zoneAt(const QString &zone) const;
+
+private:
+ //QtIVIClusterDataBackendInterface* clusterDataBackend();
+#ifndef NO_NETWORK
+ ClusterDataBackend *backend;
+#endif
+
+ double m_vehicleSpeed;
+ double m_latitude;
+ double m_longitude;
+ double m_direction;
+ bool m_flatTire;
+ bool m_doorOpen;
+ bool m_lightFailure;
+ bool m_reverse;
+ bool m_leftTurnLight;
+ bool m_rightTurnLight;
+ bool m_headLight;
+ bool m_parkLight;
+ int m_carId;
+ bool m_brake;
+ qint8 m_engineTemp;
+ double m_oilTemp;
+ int m_oilPressure;
+ double m_batteryPotential;
+ double m_gasLevel;
+ int m_rpm;
+ int m_gear;
+
+ QVariantMap m_zoneFeatureMap;
+ QList<ZonedProperties*> m_zoneFeatures;
+ QVariantList m_zoneFeatureList;
+
+};
+
+QT_END_NAMESPACE
+
+#endif // CLUSTERDATA_H
diff --git a/doc/src/snippets/qtcluster/scenehelper.cpp b/doc/src/snippets/qtcluster/scenehelper.cpp
new file mode 100644
index 00000000..0d0fd2c9
--- /dev/null
+++ b/doc/src/snippets/qtcluster/scenehelper.cpp
@@ -0,0 +1,219 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#include "scenehelper.h"
+
+QObject *SceneHelper::findEntity(Qt3DRender::QSceneLoader *loader, const QString &name)
+{
+ // The QSceneLoader instance is a component of an entity. The loaded scene
+ // tree is added under this entity.
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return 0;
+
+ // Technically there could be multiple entities referencing the scene loader
+ // but sharing is discouraged, and in our case there will be one anyhow.
+ Qt3DCore::QEntity *root = entities[0];
+
+ // The scene structure and names always depend on the asset.
+ return root->findChild<Qt3DCore::QEntity *>(name);
+}
+
+void SceneHelper::removeFromScene(Qt3DRender::QSceneLoader *loader, const QStringList &names)
+{
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return;
+
+ Qt3DCore::QEntity *root = entities[0];
+
+ foreach (QString name, names) {
+ QObject *entity = root->findChild<Qt3DCore::QEntity *>(name);
+ entity->setParent(Q_NULLPTR);
+ }
+}
+
+void SceneHelper::addBasicMaterials(Qt3DRender::QSceneLoader *loader,
+ Qt3DRender::QMaterial *material, QStringList names)
+{
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return;
+
+ Qt3DCore::QEntity *root = entities[0];
+
+ addComponents(names, root, material);
+}
+
+void SceneHelper::addTextureMaterial(Qt3DRender::QSceneLoader *loader,
+ Qt3DRender::QMaterial *material, QString name)
+{
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return;
+
+ Qt3DCore::QEntity *root = entities[0];
+
+ addComponent(name, root, material);
+}
+
+void SceneHelper::replaceMaterial(Qt3DRender::QSceneLoader *loader, const QString &name,
+ Qt3DRender::QMaterial *material)
+{
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return;
+
+ Qt3DCore::QEntity *root = entities[0];
+ Qt3DCore::QEntity *entity = root->findChild<Qt3DCore::QEntity *>(name);
+ if (entity) {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ QVector<Qt3DCore::QComponent *> components = entity->components();
+#else
+ Qt3DCore::QComponentList components = entity->components();
+#endif
+ foreach (Qt3DCore::QComponent *comp, components) {
+ if (qobject_cast<Qt3DRender::QMaterial *>(comp)) {
+ entity->removeComponent(comp);
+ break;
+ }
+ }
+ entity->addComponent(material);
+ }
+}
+
+void SceneHelper::addComponents(QStringList &names, Qt3DCore::QEntity *root,
+ Qt3DRender::QMaterial *material)
+{
+ foreach (QString name, names) {
+ Qt3DCore::QEntity *entity = root->findChild<Qt3DCore::QEntity *>(name);
+ if (entity) {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ QVector<Qt3DCore::QComponent *> components = entity->components();
+#else
+ Qt3DCore::QComponentList components = entity->components();
+#endif
+ foreach (Qt3DCore::QComponent *comp, components) {
+ if (qobject_cast<Qt3DRender::QMaterial *>(comp)) {
+ //qDebug() << " removing " << comp;
+ entity->removeComponent(comp);
+ break;
+ }
+ }
+ entity->addComponent(material);
+ }
+ }
+}
+
+void SceneHelper::searchCamera(Qt3DRender::QSceneLoader *loader, const QString &name)
+{
+ QVector<Qt3DCore::QEntity *> entities = loader->entities();
+
+ if (entities.isEmpty())
+ return;
+
+ Qt3DCore::QEntity *root = entities[0];
+ Qt3DCore::QEntity *entity = root->findChild<Qt3DCore::QEntity *>(name);
+ //qDebug() << "Found entity " << entity;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ QVector<Qt3DCore::QComponent *> components = entity->components();
+#else
+ Qt3DCore::QComponentList components = entity->components();
+#endif
+ foreach (Qt3DCore::QComponent *comp, components) {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ if (qobject_cast<Qt3DRender::QCameraLens *>(comp)) {
+ Qt3DRender::QCameraLens *lens = qobject_cast<Qt3DRender::QCameraLens *>(comp);
+ Q_UNUSED(lens)
+ }
+#else
+ if (qobject_cast<Qt3DCore::QCameraLens *>(comp)) {
+ Qt3DCore::QCameraLens *lens = qobject_cast<Qt3DCore::QCameraLens *>(comp);
+ }
+#endif
+
+ }
+}
+
+void SceneHelper::addComponent(QString &name, Qt3DCore::QEntity *root,
+ Qt3DRender::QMaterial *material)
+{
+
+ Qt3DCore::QEntity *entity = root->findChild<Qt3DCore::QEntity *>(name);
+
+ if (entity) {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ QVector<Qt3DCore::QComponent *> components = entity->components();
+#else
+ Qt3DCore::QComponentList components = entity->components();
+#endif
+ foreach (Qt3DCore::QComponent *comp, components) {
+ if (qobject_cast<Qt3DRender::QMaterial *>(comp)) {
+ entity->removeComponent(comp);
+ break;
+ }
+ }
+
+ entity->addComponent(material);
+ } else {
+
+ }
+}
+
+void SceneHelper::addListEntry(const QVariant &list, QObject *entry)
+{
+ QQmlListReference ref = list.value<QQmlListReference>();
+ ref.append(entry);
+}
diff --git a/doc/src/snippets/qtcluster/scenehelper.h b/doc/src/snippets/qtcluster/scenehelper.h
new file mode 100644
index 00000000..6e4dc3a7
--- /dev/null
+++ b/doc/src/snippets/qtcluster/scenehelper.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+#ifndef SCENEHELPER_H
+#define SCENEHELPER_H
+
+#include <QtGlobal>
+#include <QResource>
+
+#include <Qt3DRender/QRenderAspect>
+#include <Qt3DRender/QSceneLoader>
+#include <Qt3DCore/QEntity>
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+#include <Qt3DRender/QCameraLens>
+#else
+#include <Qt3DCore/QCameraLens>
+#endif
+#include <Qt3DRender/QMaterial>
+#include <Qt3DQuick/QQmlAspectEngine>
+#include <Qt3DCore/QComponent>
+#include <QtQml>
+
+class SceneHelper : public QObject
+{
+ Q_OBJECT
+
+public:
+ Q_INVOKABLE QObject *findEntity(Qt3DRender::QSceneLoader *loader, const QString &name);
+ Q_INVOKABLE void addListEntry(const QVariant &list, QObject *entry);
+ Q_INVOKABLE void removeFromScene(Qt3DRender::QSceneLoader *loader, const QStringList &names);
+ Q_INVOKABLE void addBasicMaterials(Qt3DRender::QSceneLoader *loader,
+ Qt3DRender::QMaterial *material, QStringList names);
+ Q_INVOKABLE void addTextureMaterial(Qt3DRender::QSceneLoader *loader,
+ Qt3DRender::QMaterial *material, QString name);
+ Q_INVOKABLE void replaceMaterial(Qt3DRender::QSceneLoader *loader, const QString &name,
+ Qt3DRender::QMaterial *material);
+ Q_INVOKABLE void searchCamera(Qt3DRender::QSceneLoader *loader, const QString &name);
+
+private:
+ void addComponents(QStringList &names, Qt3DCore::QEntity *root,
+ Qt3DRender::QMaterial *material);
+ void addComponent(QString &name, Qt3DCore::QEntity *root, Qt3DRender::QMaterial *material);
+};
+
+#endif // SCENEHELPER_H
diff --git a/doc/src/snippets/qtcluster/sportscar_15k.qrc b/doc/src/snippets/qtcluster/sportscar_15k.qrc
new file mode 100644
index 00000000..c0a1df90
--- /dev/null
+++ b/doc/src/snippets/qtcluster/sportscar_15k.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file alias="Map11.jpg">qml/models/Map11.jpg</file>
+ <file alias="sportscar.qgltf">qml/models/sportscar_15k.qgltf</file>
+ <file alias="sportscar_15k_1.bin">qml/models/sportscar_15k_1.bin</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/sportsimages.qrc b/doc/src/snippets/qtcluster/sportsimages.qrc
new file mode 100644
index 00000000..c4c9a91b
--- /dev/null
+++ b/doc/src/snippets/qtcluster/sportsimages.qrc
@@ -0,0 +1,11 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/SportCarForParkSensors.png</file>
+ <file>images/Gauge_RPM.png</file>
+ <file>images/Gauge_Speed.png</file>
+ <file>images/MapLocationSport.png</file>
+ <file>images/RearCameraOverlaySport.png</file>
+ <file>images/SportCarFloorShadow.png</file>
+ <file>images/DashboardFrameSport-mask.png</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/snippets/qtcluster/sportsqml.qrc b/doc/src/snippets/qtcluster/sportsqml.qrc
new file mode 100644
index 00000000..88534c19
--- /dev/null
+++ b/doc/src/snippets/qtcluster/sportsqml.qrc
@@ -0,0 +1,23 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/dash_sports/Dashboard.qml</file>
+ <file>qml/dash_sports/DashboardFrame.qml</file>
+ <file>qml/dash_sports/SpeedoMeter.qml</file>
+ <file>qml/dash_sports/RPMGauge.qml</file>
+ <file>qml/dash_sports/Gauge.qml</file>
+ <file>qml/dash_sports/SpeedoMeter_vertex.qml</file>
+ <file>qml/dash_sports/RPMGauge_vertex.qml</file>
+ <file>qml/dash_sports/SpeedoMeter_painter.qml</file>
+ <file>qml/dash_sports/RPMGauge_painter.qml</file>
+ <file>qml/dash_sports/RPMFlipable.qml</file>
+ <file>qml/dash_sports/CenterStack.qml</file>
+ <file>qml/dash_sports/SpeedoMeterLoader.qml</file>
+ <file>qml/dash_sports/DashboardForm.ui.qml</file>
+ <file>qml/dash_sports/DashboardView.qml</file>
+ <file>qml/dash_sports/CarLoader.qml</file>
+ <file>qml/dash_sports/CameraLoader.qml</file>
+ <file>qml/CarParkingSports.qml</file>
+ <file>qml/CarViewSports.qml</file>
+ <file>qml/CarModelSports.qml</file>
+ </qresource>
+</RCC>
diff --git a/doc/src/whatsnew/whatsnew510.qdoc b/doc/src/whatsnew/whatsnew510.qdoc
new file mode 100644
index 00000000..74ce9d00
--- /dev/null
+++ b/doc/src/whatsnew/whatsnew510.qdoc
@@ -0,0 +1,274 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** 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 Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page whatsnew510.html
+ \title What's New in Qt 5.10
+ \brief Lists the new features in Qt 5.10.
+
+ \section1 New Features in Qt 5.10
+
+ \section2 Qt Connectivity Module
+ \list
+ \li The UWP Bluetooth and Bluetooth LE backends can now be used on
+ Windows 10.
+ \endlist
+
+ \section2 Qt Graphical Effects Module
+ \list
+ \li Added support for effects in core profile OpenGL contexts.
+ \endlist
+
+ \section2 Qt GUI Module
+ \list
+ \li Added the cross-platform Vulkan enablers, QVulkanInstance, QWindow
+ with type VulkanSurface, and QVulkanWindow. These enablers are for
+ Windows, Linux (xcb), and Android (level 23+).
+ \li Added new flags and functions to QSurfaceFormat and QOpenGLWidget,
+ to request sRGB-capable default/backing framebuffers.
+ \li Added the cross-platform enablers for OpenGL ES 3.2 API, which are
+ now accessible through QOpenGLExtraFunctions.
+ \li Added support for more than 2 Gigabyte of pixel data in QImage.
+ \li Added QFont::PreferNoShaping style strategy.
+ \endlist
+
+ \section2 Qt Network Module
+ \list
+ \li Upgraded OpenSSL back-end to use library v1.1.
+ \li Persistent store of HSTS policies in QNAM (QSettings-based).
+ \endlist
+
+ \section2 Qt Quick Module
+ \list
+ \li Added a shapes plugin, providing a Shape type under
+ QtQuick.Shapes 1.0, which enables adding stroked and filled paths
+ into Qt Quick scenes. Such shapes are rendered either by generating
+ geometry or by using the GL_NV_path_rendering extension.
+ \li Added the Qt.labs.handlers plugin (tech. preview), providing
+ TapHandler, PinchHandler, and DragHandler. These are lightweight
+ objects for handling events from the mouse or the touchscreen in a
+ device-agnostic way.
+ \note The plugin is available as a technology preview so it could
+ could change in future releases.
+ \li Added support for multi-sample framebuffers to QQuickItem layers
+ using the layer.samples property.
+ \li Added \l[QML]{Text::}{font.kerning} and
+ \l[QML]{Text::}{font.preferShaping} properties for
+ advanced control over the font shaping subsystem.
+ \li Added \l[QML]{Text::}{advance} property to Text to retrieve the
+ typographical advance width.
+ \li Added Image element to enable direct loading of ETC1 and ETC2
+ compressed textures from \c .pkm files on platforms where ETC1/2
+ are supported.
+ \endlist
+
+ \section2 Qt Quick Controls 2 Module
+ \list
+ \li Added support for effects in core profile OpenGL contexts.
+ \li Added new QML types: \l Action, ActionGroup, and MenuBar.
+ \li Added these new styles:
+ \list
+ \li The Fusion style offers a platform agnostic desktop-oriented
+ look'n'feel.
+ \li The Imagine style is based on image assets that can be provided
+ using a predefined naming convention.
+ \endlist
+ \li Added actions support for it in:
+ \list
+ \li buttons, delegates, menus,
+ \li exclusive button groups,
+ \li nested menus, and cascading sub-menus.
+ \endlist
+ \li Added support for:
+ \list
+ \li wrapping SpinBox,
+ \li propagating palettes (only Fusion & Imagine styles for now),
+ \li specifying the default font and palette in qtquickcontrols2.conf,
+ \li and preliminary support for mnemonics in MenuItem (only shortcut
+ functionality).
+ \endlist
+ \li Added the following new members:
+ \list
+ \li TabBar::index, \l{TabBar::}{tabBar}, and \l{TabBar::}{position}
+ attached properties.
+ \li Dialog::applied(), \l{Dialog::}{reset}(),
+ \l{Dialog::}{discarded}(), and \l{Dialog::}{helpRequested}()
+ signals.
+ \li Dialog::standardButton() method.
+ \li StackView::empty property.
+ \li Menu::popup() and \l{Menu::}{dismiss}() methods.
+ \li Menu::actionAt(), \l{Menu::}{addAction}(),
+ \l{Menu::}{insertAction}(), \l{Menu::}{removeAction}(),
+ and \l{Menu::}{takeAction}() methods.
+ \li Menu::menuAt(), \l{Menu::}{addMenu}(), \l{Menu::}{insertMenu}(),
+ \l{Menu::}{removeMenu}(), and \l{Menu::}{takeMenu}() methods.
+ \li Menu::count and \l{Menu::}{currentIndex} properties.
+ \li MenuItem::menu property.
+ \li Container::removeItem(Item) and takeItem(int) methods
+ (TabBar and SwipeView).
+ \li Popup::enabled, \l{Popup::}{mirrored}, and \l{Popup::}{opened}
+ properties.
+ \li \c horizontal and \c vertical properties to all controls
+ that have the \c orientation property: RangeSlider, \l Slider,
+ ScrollBar, ScrollIndicator, and SwipeView.
+ \endlist
+ \li Other improvements:
+ \list
+ \li Added support for specifying a transition for StackView::clear().
+ \li Enabled support for ApplicationWindow::activeFocusControl attached
+ property for a plain \l Window.
+ \li Enabled background dimming for popups without ApplicationWindow.
+ \li Updated Material style for DialogButtonBox to use the Android
+ button layout.
+ \li Updated default style \l Slider and RangeSlider to visually indicate
+ the progress/range.
+ \endlist
+ \endlist
+
+ \section2 Qt SerialBus Module
+ \list
+ \li Added local echo flag to QCanBusFrame to mark frames that are sent
+ from the local system to the CAN bus.
+ \endlist
+
+ \section2 Qt Virtual Keyboard Module
+ \list
+ \li Added the keyboard layouts for Hebrew, Serbian, Hungarian, Czech,
+ Croatian, Bulgarian, Greek, Estonian, and Dutch.
+ \li Added handwriting support for Farsi, Arabic, and
+ CJK (Chinese/Japanese/Korean).
+ \li Added new component (InputModeKey) for input mode switch.
+ \endlist
+
+ \section2 Qt WebEngine Module
+ \list
+ \li Updated to be based on Chromium 60.
+ \li Added pause/resume functionality to download items.
+ \li Added settings for blocking JavaScript focus and hiding scrollbars.
+ \li Updated QWebEnginePage with more WebActions, which were supported
+ by QWebPage earlier.
+ \li Added QWebEnginePage::download for triggering downloads.
+ \endlist
+
+ \section2 Qt Widgets Module
+ \list
+ \li Added support for embedding a window into a QWidget on Android
+ using \l{QWidget::createWindowContainer}().
+ \li Added support for rendering and reading back (grabbing) offscreen
+ content using QOpenGLWidget.
+ \li Added \c AA_DisableWindowContextHelpButton attribute that prevents
+ the automatic "What's this" button on dialogs on Windows.
+ \li Added \c tabStopDistance property in QTextOption, QTextEdit,
+ and QPlainTextEdit.
+ \li Added \c selectionEnd(), \c selectionLength() to QLineEdit,
+ complementing \c selectionStart().
+ \li Added QInputDialog::setDoubleStep to enable changing of the step
+ amount for \c getDouble().
+ \li Added \c isPersistentEditorOpen() to QAbstractItemView, QTreeWidget,
+ QTableWidget, and QListWidget.
+ \li Added new \l{QStyle::StyleHint}, \c SH_TitleBar_ShowToolTipsOnButtons.
+ \li Added support for specifying custom internal texture formats in
+ QOpenGLWidget.
+ \endlist
+
+ \section1 New Modules
+ \list
+ \li \l {Qt Network Authentication} - Provides support for OAuth1 and OAuth2.
+ \li \l {Qt Speech} - Enables text-to-speech in Qt Applications.
+ \endlist
+
+ These modules were previously released as technology preview and are
+ now fully supported Qt add-on modules.
+
+ \section1 Technology Preview Modules
+ \list
+ \li \l {Qt Remote Objects} (TP2) - Sharing QObject interfaces (signals, slots,
+ and properties) between processes or devices.
+ \li \l {Qt WebGL Streaming Plugin} - Enables streaming Qt application
+ to a web browser over the network.
+ \endlist
+
+ \section1 Deprecated Functionality
+ \list
+ \li Qt Script
+ \endlist
+
+ Deprecated modules are still included in Qt 5.10, but are considered for
+ removal in future releases.
+
+ \section1 List of API Changes
+
+ The pages below contain a list of API changes in Qt 5.10:
+ \list
+ \li \l{New Classes and Functions in Qt 5.10}
+ \li \l{Obsolete Classes}
+ \endlist
+
+ \section1 Additions to Other Qt 5 Releases
+
+ \list
+ \li \l{What's New in Qt 5.9}
+ \li \l{What's New in Qt 5.8}
+ \li \l{What's New in Qt 5.7}
+ \li \l{What's New in Qt 5.6}
+ \li \l{What's New in Qt 5.5}
+ \li \l{What's New in Qt 5.4}
+ \li \l{What's New in Qt 5.3}
+ \li \l{What's New in Qt 5.2}
+ \li \l{What's New in Qt 5.1}
+ \li \l{What's New in Qt 5.0}
+ \endlist
+
+*/
+
+/*!
+ \page newclasses510.html
+ \title New Classes and Functions in Qt 5.10
+ \brief A list of new APIs in Qt 5.10.
+
+ This page contains a comprehensive list of all new classes and functions
+ introduced in Qt 5.10. Links to new APIs in previous Qt 5 releases are found
+ at the bottom of this page.
+
+ \sincelist 5.10
+
+ \section1 Additions to Other Qt 5 Releases
+
+ \list
+ \li \l{What's New in Qt 5.9}
+ \li \l{What's New in Qt 5.8}
+ \li \l{What's New in Qt 5.7}
+ \li \l{What's New in Qt 5.6}
+ \li \l{What's New in Qt 5.5}
+ \li \l{What's New in Qt 5.4}
+ \li \l{What's New in Qt 5.3}
+ \li \l{What's New in Qt 5.2}
+ \li \l{What's New in Qt 5.1}
+ \li \l{What's New in Qt 5.0}
+ \endlist
+*/
+