diff options
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 Binary files differnew file mode 100644 index 00000000..d13d91f5 --- /dev/null +++ b/doc/src/images/coffee_machine_emptycup.png diff --git a/doc/src/images/coffee_machine_modify.png b/doc/src/images/coffee_machine_modify.png Binary files differnew file mode 100644 index 00000000..16ad7e85 --- /dev/null +++ b/doc/src/images/coffee_machine_modify.png diff --git a/doc/src/images/coffee_machine_overview.png b/doc/src/images/coffee_machine_overview.png Binary files differnew file mode 100644 index 00000000..3ac002d3 --- /dev/null +++ b/doc/src/images/coffee_machine_overview.png diff --git a/doc/src/images/coffee_machine_selection.png b/doc/src/images/coffee_machine_selection.png Binary files differnew file mode 100644 index 00000000..ae1d5111 --- /dev/null +++ b/doc/src/images/coffee_machine_selection.png 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 Binary files differnew file mode 100644 index 00000000..e69889af --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/coffee_cup_large.png 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 Binary files differnew file mode 100644 index 00000000..941e0c14 --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/coffee_cup_outline.png 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 Binary files differnew file mode 100644 index 00000000..045732ca --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_back.png 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 Binary files differnew file mode 100644 index 00000000..48041c53 --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_coverplate.png 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 Binary files differnew file mode 100644 index 00000000..e2c2a774 --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/cup elements/coffee_cup_front.png 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 Binary files differnew file mode 100644 index 00000000..0fff3e39 --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_coffee.png 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 Binary files differnew file mode 100644 index 00000000..d07496ce --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_foam.png 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 Binary files differnew file mode 100644 index 00000000..3235b4d6 --- /dev/null +++ b/doc/src/snippets/coffee/images/cup structure/liquids/liquid_milk.png diff --git a/doc/src/snippets/coffee/images/icons/coffees/Americano.png b/doc/src/snippets/coffee/images/icons/coffees/Americano.png Binary files differnew file mode 100644 index 00000000..b1c0c384 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/coffees/Americano.png diff --git a/doc/src/snippets/coffee/images/icons/coffees/Espresso.png b/doc/src/snippets/coffee/images/icons/coffees/Espresso.png Binary files differnew file mode 100644 index 00000000..faac7593 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/coffees/Espresso.png diff --git a/doc/src/snippets/coffee/images/icons/coffees/Latte.png b/doc/src/snippets/coffee/images/icons/coffees/Latte.png Binary files differnew file mode 100644 index 00000000..d9e4e616 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/coffees/Latte.png diff --git a/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png b/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png Binary files differnew file mode 100644 index 00000000..fb7c1c91 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/coffees/Macchiato.png diff --git a/doc/src/snippets/coffee/images/icons/coffees/cappucino.png b/doc/src/snippets/coffee/images/icons/coffees/cappucino.png Binary files differnew file mode 100644 index 00000000..d5557e8d --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/coffees/cappucino.png diff --git a/doc/src/snippets/coffee/images/icons/contents/coffee.png b/doc/src/snippets/coffee/images/icons/contents/coffee.png Binary files differnew file mode 100644 index 00000000..c4b35be1 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/contents/coffee.png diff --git a/doc/src/snippets/coffee/images/icons/contents/milk.png b/doc/src/snippets/coffee/images/icons/contents/milk.png Binary files differnew file mode 100644 index 00000000..19709cfe --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/contents/milk.png diff --git a/doc/src/snippets/coffee/images/icons/contents/sugar.png b/doc/src/snippets/coffee/images/icons/contents/sugar.png Binary files differnew file mode 100644 index 00000000..ac83a7f3 --- /dev/null +++ b/doc/src/snippets/coffee/images/icons/contents/sugar.png 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 Binary files differnew file mode 100644 index 00000000..633f0f30 --- /dev/null +++ b/doc/src/snippets/coffee/images/ui controls/buttons/back/white.png 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 Binary files differnew file mode 100644 index 00000000..0172138d --- /dev/null +++ b/doc/src/snippets/coffee/images/ui controls/buttons/go/white.png diff --git a/doc/src/snippets/coffee/images/ui controls/line.png b/doc/src/snippets/coffee/images/ui controls/line.png Binary files differnew file mode 100644 index 00000000..bd4484ef --- /dev/null +++ b/doc/src/snippets/coffee/images/ui controls/line.png 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 Binary files differnew file mode 100644 index 00000000..6da82193 --- /dev/null +++ b/doc/src/snippets/coffee/imports/Coffee/TitilliumWeb-Regular.ttf 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 ¢er) +{ + 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 <r) +{ + 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 <r); + + void draw(); + +private: + void initGeometry(); + void setCenterPoint(const QPointF ¢er); + + 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 Binary files differnew file mode 100644 index 00000000..8f1d908d --- /dev/null +++ b/doc/src/snippets/qtcluster/images/BottomPanel.png diff --git a/doc/src/snippets/qtcluster/images/Built_with_Qt.png b/doc/src/snippets/qtcluster/images/Built_with_Qt.png Binary files differnew file mode 100644 index 00000000..3dc5ed96 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Built_with_Qt.png diff --git a/doc/src/snippets/qtcluster/images/CarForParkSensors.png b/doc/src/snippets/qtcluster/images/CarForParkSensors.png Binary files differnew file mode 100644 index 00000000..048d9dd2 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/CarForParkSensors.png diff --git a/doc/src/snippets/qtcluster/images/CarInfoIcon.png b/doc/src/snippets/qtcluster/images/CarInfoIcon.png Binary files differnew file mode 100644 index 00000000..e715bec8 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/CarInfoIcon.png diff --git a/doc/src/snippets/qtcluster/images/CentreMask.png b/doc/src/snippets/qtcluster/images/CentreMask.png Binary files differnew file mode 100644 index 00000000..c6f0930e --- /dev/null +++ b/doc/src/snippets/qtcluster/images/CentreMask.png diff --git a/doc/src/snippets/qtcluster/images/Cluster8Gauges.png b/doc/src/snippets/qtcluster/images/Cluster8Gauges.png Binary files differnew file mode 100644 index 00000000..d750a54e --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Cluster8Gauges.png diff --git a/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png b/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png Binary files differnew file mode 100644 index 00000000..4a35421d --- /dev/null +++ b/doc/src/snippets/qtcluster/images/DashboardFrameSport-mask.png diff --git a/doc/src/snippets/qtcluster/images/DashboardMask.png b/doc/src/snippets/qtcluster/images/DashboardMask.png Binary files differnew file mode 100644 index 00000000..79ac9f5c --- /dev/null +++ b/doc/src/snippets/qtcluster/images/DashboardMask.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png Binary files differnew file mode 100644 index 00000000..660cb910 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingA.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png Binary files differnew file mode 100644 index 00000000..e4d63a90 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_CentreRingB.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png Binary files differnew file mode 100644 index 00000000..12ea250f --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingA.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png Binary files differnew file mode 100644 index 00000000..8e28f543 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_OuterRingB.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png Binary files differnew file mode 100644 index 00000000..9f1b225b --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks1.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png Binary files differnew file mode 100644 index 00000000..a3049f8d --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_Ticks2.png diff --git a/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png Binary files differnew file mode 100644 index 00000000..0e34c521 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/GaugeSpeedometer_TrailMask.png diff --git a/doc/src/snippets/qtcluster/images/Gauge_RPM.png b/doc/src/snippets/qtcluster/images/Gauge_RPM.png Binary files differnew file mode 100644 index 00000000..57629f04 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Gauge_RPM.png diff --git a/doc/src/snippets/qtcluster/images/Gauge_Speed.png b/doc/src/snippets/qtcluster/images/Gauge_Speed.png Binary files differnew file mode 100644 index 00000000..0ffd9cc3 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Gauge_Speed.png diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png Binary files differnew file mode 100644 index 00000000..b7383186 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF.png diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png Binary files differnew file mode 100644 index 00000000..b0867cdc --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_OFF_small.png diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png Binary files differnew file mode 100644 index 00000000..1d8bffb7 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON.png diff --git a/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png Binary files differnew file mode 100644 index 00000000..20c0e93b --- /dev/null +++ b/doc/src/snippets/qtcluster/images/Icon_TurnLeft_ON_small.png diff --git a/doc/src/snippets/qtcluster/images/InfoNoteBackground.png b/doc/src/snippets/qtcluster/images/InfoNoteBackground.png Binary files differnew file mode 100644 index 00000000..a7706965 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/InfoNoteBackground.png diff --git a/doc/src/snippets/qtcluster/images/MapLocation.png b/doc/src/snippets/qtcluster/images/MapLocation.png Binary files differnew file mode 100644 index 00000000..48a6bbb2 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/MapLocation.png diff --git a/doc/src/snippets/qtcluster/images/MapLocationSport.png b/doc/src/snippets/qtcluster/images/MapLocationSport.png Binary files differnew file mode 100644 index 00000000..839cedb6 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/MapLocationSport.png diff --git a/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png b/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png Binary files differnew file mode 100644 index 00000000..6cadbc17 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/MusicPlayer_CircleRemaining.png diff --git a/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png b/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png Binary files differnew file mode 100644 index 00000000..458746ff --- /dev/null +++ b/doc/src/snippets/qtcluster/images/MusicPlayer_Cover.png diff --git a/doc/src/snippets/qtcluster/images/ParkingSensorOff.png b/doc/src/snippets/qtcluster/images/ParkingSensorOff.png Binary files differnew file mode 100644 index 00000000..55b78e62 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/ParkingSensorOff.png diff --git a/doc/src/snippets/qtcluster/images/RearCameraOverlay.png b/doc/src/snippets/qtcluster/images/RearCameraOverlay.png Binary files differnew file mode 100644 index 00000000..b7a45881 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/RearCameraOverlay.png diff --git a/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png b/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png Binary files differnew file mode 100644 index 00000000..a9e0278a --- /dev/null +++ b/doc/src/snippets/qtcluster/images/RearCameraOverlaySport.png diff --git a/doc/src/snippets/qtcluster/images/RearCameraStill.jpg b/doc/src/snippets/qtcluster/images/RearCameraStill.jpg Binary files differnew file mode 100644 index 00000000..357091c3 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/RearCameraStill.jpg diff --git a/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png b/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png Binary files differnew file mode 100644 index 00000000..d5dcc600 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/SpeedometerNeedle.png diff --git a/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png b/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png Binary files differnew file mode 100644 index 00000000..eeb56f5d --- /dev/null +++ b/doc/src/snippets/qtcluster/images/SpeedometerNeedleGreen.png diff --git a/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png b/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png Binary files differnew file mode 100644 index 00000000..8a8cb333 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/SportCarFloorShadow.png diff --git a/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png b/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png Binary files differnew file mode 100644 index 00000000..5e50bcb5 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/SportCarForParkSensors.png diff --git a/doc/src/snippets/qtcluster/images/calendar.png b/doc/src/snippets/qtcluster/images/calendar.png Binary files differnew file mode 100644 index 00000000..5608178e --- /dev/null +++ b/doc/src/snippets/qtcluster/images/calendar.png diff --git a/doc/src/snippets/qtcluster/images/center.png b/doc/src/snippets/qtcluster/images/center.png Binary files differnew file mode 100644 index 00000000..aadbdaf9 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/center.png diff --git a/doc/src/snippets/qtcluster/images/contacts.png b/doc/src/snippets/qtcluster/images/contacts.png Binary files differnew file mode 100644 index 00000000..58c7f3a5 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/contacts.png 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 Binary files differnew file mode 100644 index 00000000..d42292dd --- /dev/null +++ b/doc/src/snippets/qtcluster/images/cover.png diff --git a/doc/src/snippets/qtcluster/images/greenglow.png b/doc/src/snippets/qtcluster/images/greenglow.png Binary files differnew file mode 100644 index 00000000..7097220b --- /dev/null +++ b/doc/src/snippets/qtcluster/images/greenglow.png diff --git a/doc/src/snippets/qtcluster/images/jane.png b/doc/src/snippets/qtcluster/images/jane.png Binary files differnew file mode 100644 index 00000000..3fa7d73a --- /dev/null +++ b/doc/src/snippets/qtcluster/images/jane.png diff --git a/doc/src/snippets/qtcluster/images/john.png b/doc/src/snippets/qtcluster/images/john.png Binary files differnew file mode 100644 index 00000000..cdf0b181 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/john.png diff --git a/doc/src/snippets/qtcluster/images/knob.png b/doc/src/snippets/qtcluster/images/knob.png Binary files differnew file mode 100644 index 00000000..4cd98ae0 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/knob.png diff --git a/doc/src/snippets/qtcluster/images/left.png b/doc/src/snippets/qtcluster/images/left.png Binary files differnew file mode 100644 index 00000000..f423cda5 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/left.png diff --git a/doc/src/snippets/qtcluster/images/leftgauge.png b/doc/src/snippets/qtcluster/images/leftgauge.png Binary files differnew file mode 100644 index 00000000..32380484 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/leftgauge.png diff --git a/doc/src/snippets/qtcluster/images/redglow.png b/doc/src/snippets/qtcluster/images/redglow.png Binary files differnew file mode 100644 index 00000000..e1843d9c --- /dev/null +++ b/doc/src/snippets/qtcluster/images/redglow.png diff --git a/doc/src/snippets/qtcluster/images/right.png b/doc/src/snippets/qtcluster/images/right.png Binary files differnew file mode 100644 index 00000000..279284d9 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/right.png diff --git a/doc/src/snippets/qtcluster/images/rightgauge.png b/doc/src/snippets/qtcluster/images/rightgauge.png Binary files differnew file mode 100644 index 00000000..3f80a1cb --- /dev/null +++ b/doc/src/snippets/qtcluster/images/rightgauge.png diff --git a/doc/src/snippets/qtcluster/images/temperature.png b/doc/src/snippets/qtcluster/images/temperature.png Binary files differnew file mode 100644 index 00000000..83d889f5 --- /dev/null +++ b/doc/src/snippets/qtcluster/images/temperature.png 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 Binary files differnew file mode 100644 index 00000000..f7a3e280 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0083.dat 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 Binary files differnew file mode 100644 index 00000000..f2c08ff2 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0238.dat 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 Binary files differnew file mode 100644 index 00000000..4c990b12 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0245.dat 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 Binary files differnew file mode 100644 index 00000000..d6c24e6f --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0246.dat 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 Binary files differnew file mode 100644 index 00000000..9ef390fb --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0247.dat 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 Binary files differnew file mode 100644 index 00000000..89dc2d42 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0249.dat 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 Binary files differnew file mode 100644 index 00000000..8df8b4fa --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_0456.dat 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 Binary files differnew file mode 100644 index 00000000..35daffff --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1434A.dat 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 Binary files differnew file mode 100644 index 00000000..0a0326a2 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1555.dat 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 Binary files differnew file mode 100644 index 00000000..2fdbd279 --- /dev/null +++ b/doc/src/snippets/qtcluster/iso-icons/iso_grs_7000_4_1702.dat 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 Binary files differnew file mode 100644 index 00000000..680dbea1 --- /dev/null +++ b/doc/src/snippets/qtcluster/qml/models/Map11.jpg diff --git a/doc/src/snippets/qtcluster/qml/models/Map3.jpg b/doc/src/snippets/qtcluster/qml/models/Map3.jpg Binary files differnew file mode 100644 index 00000000..8c3468e2 --- /dev/null +++ b/doc/src/snippets/qtcluster/qml/models/Map3.jpg diff --git a/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf b/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf Binary files differnew file mode 100644 index 00000000..5b4bd3d2 --- /dev/null +++ b/doc/src/snippets/qtcluster/qml/models/sportscar_15k.qgltf diff --git a/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin b/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin Binary files differnew file mode 100644 index 00000000..aad1081f --- /dev/null +++ b/doc/src/snippets/qtcluster/qml/models/sportscar_15k_1.bin 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 +*/ + |