From 39f157c2f7d6540f2bc19fa9d232a14e3496e7ab Mon Sep 17 00:00:00 2001
From: Artem Sidyakin <artem.sidyakin@qt.io>
Date: Mon, 24 Sep 2018 18:53:42 +0200
Subject: [PATCH] Bunch of stuff

- [new demo] iOS sensors
- joined cpp-backend-qml demos in one folder
- updated imports in di demo
- feng-shui
---
 README.md                                     |  16 +++-
 .../backend/backend.cpp                       |   0
 .../backend/backend.h                         |   0
 .../backend/backend.pro                       |   0
 .../backend/backend_global.h                  |   0
 .../cpp-backend-qml-library}/backend.h        |   0
 .../cpp-backend-qml-library}/backend_global.h |   0
 .../cpp-backend-qml-library.pro}              |   0
 .../cpp-backend-qml-library}/main.cpp         |   0
 .../cpp-backend-qml-library}/main.qml         |   0
 .../cpp-backend-qml-library}/qml.qrc          |   0
 .../cpp-backend-qml-ui/Page1Form.ui.qml       |  27 ++++++
 .../cpp-backend-qml-ui/Page2Form.ui.qml       |  20 ++++
 .../cpp-backend-qml-ui/ckhdbinterface.cpp     |  11 +++
 .../cpp-backend-qml-ui/ckhdbinterface.h       |  19 ++++
 .../cpp-backend-qml-ui/cpp-backend-qml-ui.pro |  33 +++++++
 .../cpp-backend-qml-ui/main.cpp               |  17 ++++
 .../cpp-backend-qml-ui/main.qml               |  42 ++++++++
 .../cpp-backend-qml-ui/qml.qrc                |   8 ++
 .../cpp-backend-qml-ui/qtquickcontrols2.conf  |   6 ++
 demos/di/di/TitilliumButton.qml               |   5 +-
 demos/di/di/TitilliumEdit.qml                 |   3 +-
 demos/di/di/TitilliumText.qml                 |   3 +-
 demos/di/di/main.qml                          |   9 +-
 demos/di/di/pages/pageNet.qml                 |   7 +-
 demos/di/di/pages/pageOS.qml                  |   7 +-
 demos/di/di/pages/pageScreen.qml              |   7 +-
 demos/di/di/pages/pageStartup.qml             |   5 +-
 demos/di/di/pages/pageSys.qml                 |   5 +-
 demos/di/di/pages/pageTest.qml                |   5 +-
 demos/di/di/styles.qml                        |   4 +-
 demos/ios-sensors/ios-sensors/ios-sensors.pro |  29 ++++++
 demos/ios-sensors/ios-sensors/main.cpp        |  15 +++
 demos/ios-sensors/ios-sensors/main.qml        |  90 ++++++++++++++++++
 demos/ios-sensors/ios-sensors/qml.qrc         |   5 +
 .../webengine-recipes/main.cpp                |  50 ----------
 .../resources/pages/burger.html               |  76 ---------------
 img/ios-sensors.png                           | Bin 0 -> 62013 bytes
 38 files changed, 362 insertions(+), 162 deletions(-)
 rename demos/{cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library}/backend/backend.cpp (100%)
 rename demos/{cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library}/backend/backend.h (100%)
 rename demos/{cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library}/backend/backend.pro (100%)
 rename demos/{cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library}/backend/backend_global.h (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library}/backend.h (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library}/backend_global.h (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml/cpp-library-backend-qml.pro => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/cpp-backend-qml-library.pro} (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library}/main.cpp (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library}/main.qml (100%)
 rename demos/{cpp-library-backend-qml/cpp-library-backend-qml => cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library}/qml.qrc (100%)
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page1Form.ui.qml
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page2Form.ui.qml
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.cpp
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.h
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/cpp-backend-qml-ui.pro
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.cpp
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.qml
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qml.qrc
 create mode 100644 demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qtquickcontrols2.conf
 create mode 100644 demos/ios-sensors/ios-sensors/ios-sensors.pro
 create mode 100644 demos/ios-sensors/ios-sensors/main.cpp
 create mode 100644 demos/ios-sensors/ios-sensors/main.qml
 create mode 100644 demos/ios-sensors/ios-sensors/qml.qrc
 delete mode 100644 demos/webengine-recipes/webengine-recipes/resources/pages/burger.html
 create mode 100755 img/ios-sensors.png

diff --git a/README.md b/README.md
index 4a3337a..fdb4249 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,8 @@ A set of rather simple projects that demonstrate various Qt features.
 - [GUI approaches](#gui-approaches)
 - [Profiling](#profiling)
 - [Webengine Recipes](#webengine-recipes)
-- [C++ library as a backend for QML](#c-library-as-a-backend-for-qml)
+- [C++ as a backend for QML](#c-as-a-backend-for-qml)
+- [iOS sensors](#ios-sensors)
 
 ## Open Source API
 
@@ -44,9 +45,12 @@ A bit modified standard WebEngine example.
 
 <img src="/img/webengine-recipes.png" width="800">
 
-## C++ library as a backend for QML
+## C++ as a backend for QML
 
-How to add an external C++/Qt library into the project and use it as a backend for QML-based frontend.
+How to add an external C++/Qt library into the project and use it as a backend for QML-based frontend:
+
+* variation with C++ library;
+* variation with QML UI form.
 
 <img src="/img/cpp-library-as-a-backend-for-qml.png" width="800">
 
@@ -55,3 +59,9 @@ How to add an external C++/Qt library into the project and use it as a backend f
 Anchoring and reparenting demo.
 
 <img src="/img/anchoring.png" width="800">
+
+## iOS sensors
+
+Qt Sensors API on iOS with orientation sensor as an example.
+
+<img src="/img/ios-sensors.png" width="800">
diff --git a/demos/cpp-library-backend-qml/backend/backend.cpp b/demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.cpp
similarity index 100%
rename from demos/cpp-library-backend-qml/backend/backend.cpp
rename to demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.cpp
diff --git a/demos/cpp-library-backend-qml/backend/backend.h b/demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.h
similarity index 100%
rename from demos/cpp-library-backend-qml/backend/backend.h
rename to demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.h
diff --git a/demos/cpp-library-backend-qml/backend/backend.pro b/demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.pro
similarity index 100%
rename from demos/cpp-library-backend-qml/backend/backend.pro
rename to demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend.pro
diff --git a/demos/cpp-library-backend-qml/backend/backend_global.h b/demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend_global.h
similarity index 100%
rename from demos/cpp-library-backend-qml/backend/backend_global.h
rename to demos/cpp-backend-qml/cpp-backend-qml-library/backend/backend_global.h
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/backend.h b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/backend.h
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/backend.h
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/backend.h
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/backend_global.h b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/backend_global.h
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/backend_global.h
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/backend_global.h
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/cpp-library-backend-qml.pro b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/cpp-backend-qml-library.pro
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/cpp-library-backend-qml.pro
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/cpp-backend-qml-library.pro
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/main.cpp b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/main.cpp
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/main.cpp
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/main.cpp
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/main.qml b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/main.qml
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/main.qml
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/main.qml
diff --git a/demos/cpp-library-backend-qml/cpp-library-backend-qml/qml.qrc b/demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/qml.qrc
similarity index 100%
rename from demos/cpp-library-backend-qml/cpp-library-backend-qml/qml.qrc
rename to demos/cpp-backend-qml/cpp-backend-qml-library/cpp-backend-qml-library/qml.qrc
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page1Form.ui.qml b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page1Form.ui.qml
new file mode 100644
index 0000000..7b06fc3
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page1Form.ui.qml
@@ -0,0 +1,27 @@
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+
+Page {
+    width: 600
+    height: 400
+    property alias btn_callBackend: btn_callBackend
+
+    header: Label {
+        text: qsTr("Page 1")
+        font.pixelSize: Qt.application.font.pixelSize * 2
+        padding: 10
+    }
+
+    Label {
+        id: lbl
+        text: qsTr("You are on Page 1.")
+        anchors.centerIn: parent
+    }
+    Button {
+        id: btn_callBackend
+        anchors.top: lbl.bottom
+        anchors.topMargin: 15
+        anchors.horizontalCenter: parent.horizontalCenter
+        text: "Call backend"
+    }
+}
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page2Form.ui.qml b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page2Form.ui.qml
new file mode 100644
index 0000000..5c6f594
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/Page2Form.ui.qml
@@ -0,0 +1,20 @@
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+
+Page {
+    width: 600
+    height: 400
+
+    header: Label {
+        text: qsTr("Page 2")
+        font.pixelSize: Qt.application.font.pixelSize * 2
+        padding: 10
+    }
+
+    Label {
+        text: qsTr("You are on Page 2.<br/>Nothing happens here")
+        verticalAlignment: Text.AlignVCenter
+        horizontalAlignment: Text.AlignHCenter
+        anchors.centerIn: parent
+    }
+}
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.cpp b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.cpp
new file mode 100644
index 0000000..01a926a
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.cpp
@@ -0,0 +1,11 @@
+#include "ckhdbinterface.h"
+
+CKHDBInterface::CKHDBInterface(QObject *parent) : QObject(parent)
+{
+
+}
+
+QString CKHDBInterface::setDBValue()
+{
+    return "something from backend";
+}
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.h b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.h
new file mode 100644
index 0000000..4528eb5
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/ckhdbinterface.h
@@ -0,0 +1,19 @@
+#ifndef CKHDBINTERFACE_H
+#define CKHDBINTERFACE_H
+
+#include <QObject>
+
+class CKHDBInterface : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit CKHDBInterface(QObject *parent = nullptr);
+
+public slots:
+    QString setDBValue();
+
+public slots:
+};
+
+#endif // CKHDBINTERFACE_H
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/cpp-backend-qml-ui.pro b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/cpp-backend-qml-ui.pro
new file mode 100644
index 0000000..0c1cf88
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/cpp-backend-qml-ui.pro
@@ -0,0 +1,33 @@
+QT += quick
+CONFIG += c++11
+
+# 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
+
+SOURCES += \
+        main.cpp \
+    ckhdbinterface.cpp
+
+RESOURCES += qml.qrc
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH =
+
+# Additional import path used to resolve QML modules just for Qt Quick Designer
+QML_DESIGNER_IMPORT_PATH =
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+HEADERS += \
+    ckhdbinterface.h
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.cpp b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.cpp
new file mode 100644
index 0000000..b0c3a8d
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.cpp
@@ -0,0 +1,17 @@
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include "ckhdbinterface.h"
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+    QGuiApplication app(argc, argv);
+
+    QQmlApplicationEngine engine;
+    qmlRegisterType<CKHDBInterface>("kh.CKHDBInterface", 1, 0, "CKHDBInterface");
+    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+    if (engine.rootObjects().isEmpty()) { return -1; }
+
+    return app.exec();
+}
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.qml b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.qml
new file mode 100644
index 0000000..f7027e0
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/main.qml
@@ -0,0 +1,42 @@
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import kh.CKHDBInterface 1.0
+
+ApplicationWindow {
+    visible: true
+    width: 900
+    height: 600
+    title: qsTr("C++ backend for QML UI")
+
+    CKHDBInterface {
+        id: dbIF
+    }
+
+    SwipeView {
+        id: swipeView
+        anchors.fill: parent
+        currentIndex: tabBar.currentIndex
+
+        Page1Form {
+            btn_callBackend {
+                onClicked: {
+                    console.log(dbIF.setDBValue());
+                }
+            }
+        }
+
+        Page2Form { }
+    }
+
+    footer: TabBar {
+        id: tabBar
+        currentIndex: swipeView.currentIndex
+
+        TabButton {
+            text: qsTr("Page 1")
+        }
+        TabButton {
+            text: qsTr("Page 2")
+        }
+    }
+}
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qml.qrc b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qml.qrc
new file mode 100644
index 0000000..d4df9e8
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qml.qrc
@@ -0,0 +1,8 @@
+<RCC>
+    <qresource prefix="/">
+        <file>main.qml</file>
+        <file>Page1Form.ui.qml</file>
+        <file>Page2Form.ui.qml</file>
+        <file>qtquickcontrols2.conf</file>
+    </qresource>
+</RCC>
diff --git a/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qtquickcontrols2.conf b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qtquickcontrols2.conf
new file mode 100644
index 0000000..75b2cb8
--- /dev/null
+++ b/demos/cpp-backend-qml/cpp-backend-qml-ui/cpp-backend-qml-ui/qtquickcontrols2.conf
@@ -0,0 +1,6 @@
+; This file can be edited to change the style of the application
+; Read "Qt Quick Controls 2 Configuration File" for details:
+; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
+
+[Controls]
+Style=Default
diff --git a/demos/di/di/TitilliumButton.qml b/demos/di/di/TitilliumButton.qml
index 114381e..310ac99 100755
--- a/demos/di/di/TitilliumButton.qml
+++ b/demos/di/di/TitilliumButton.qml
@@ -1,6 +1,5 @@
-import QtQuick 2.6
-import QtQuick.Controls 2.0
-import QtQuick.Window 2.0
+import QtQuick 2.11
+import QtQuick.Controls 2.4
 import "." // you have to have that for singleton
 
 Button {
diff --git a/demos/di/di/TitilliumEdit.qml b/demos/di/di/TitilliumEdit.qml
index 358e5ee..7631042 100755
--- a/demos/di/di/TitilliumEdit.qml
+++ b/demos/di/di/TitilliumEdit.qml
@@ -1,5 +1,4 @@
-import QtQuick 2.0
-import QtQuick.Window 2.0
+import QtQuick 2.11
 import "." // you have to have that for singleton
 
 Rectangle {
diff --git a/demos/di/di/TitilliumText.qml b/demos/di/di/TitilliumText.qml
index 430ad93..5aebc75 100755
--- a/demos/di/di/TitilliumText.qml
+++ b/demos/di/di/TitilliumText.qml
@@ -1,5 +1,4 @@
-import QtQuick 2.0
-import QtQuick.Window 2.0
+import QtQuick 2.11
 import "." // you have to have that for singleton
 
 Text {
diff --git a/demos/di/di/main.qml b/demos/di/di/main.qml
index 6e25e5d..de4d6c3 100755
--- a/demos/di/di/main.qml
+++ b/demos/di/di/main.qml
@@ -1,10 +1,5 @@
-import QtQuick 2.7
-import QtQuick.Controls 1.4
-import QtQuick.Controls 2.0
-import QtQuick.Controls.Styles 1.4
-import QtQuick.Layouts 1.1
-import QtQuick.Window 2.0
-//import B2Qt.Wifi 1.0
+import QtQuick 2.11
+import QtQuick.Controls 2.4
 import io.qt.Backend 1.0
 import "." // you have to have that for singleton
 
diff --git a/demos/di/di/pages/pageNet.qml b/demos/di/di/pages/pageNet.qml
index 126585b..a6383a0 100755
--- a/demos/di/di/pages/pageNet.qml
+++ b/demos/di/di/pages/pageNet.qml
@@ -1,7 +1,6 @@
-import QtQuick 2.7
-import QtQuick.Controls 1.4
-import QtQuick.Layouts 1.2
-import QtQuick.Window 2.0
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
 import "../" // jeez
 
 Flickable {
diff --git a/demos/di/di/pages/pageOS.qml b/demos/di/di/pages/pageOS.qml
index 18d2a5b..df083f2 100755
--- a/demos/di/di/pages/pageOS.qml
+++ b/demos/di/di/pages/pageOS.qml
@@ -1,7 +1,6 @@
-import QtQuick 2.7
-import QtQuick.Controls 1.4
-import QtQuick.Layouts 1.2
-import QtQuick.Window 2.0
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
 import "../" // jeez
 
 GridLayout {
diff --git a/demos/di/di/pages/pageScreen.qml b/demos/di/di/pages/pageScreen.qml
index dc34ad3..bfb2ffe 100755
--- a/demos/di/di/pages/pageScreen.qml
+++ b/demos/di/di/pages/pageScreen.qml
@@ -1,6 +1,7 @@
-import QtQuick 2.7
-import QtQuick.Layouts 1.2
-import QtQuick.Window 2.0
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
+import QtQuick.Window 2.11
 import "../" // jeez
 
 GridLayout {
diff --git a/demos/di/di/pages/pageStartup.qml b/demos/di/di/pages/pageStartup.qml
index 9fc48eb..342700a 100755
--- a/demos/di/di/pages/pageStartup.qml
+++ b/demos/di/di/pages/pageStartup.qml
@@ -1,5 +1,6 @@
-import QtQuick 2.7
-import QtQuick.Layouts 1.2
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
 import "../" // jeez
 
 GridLayout {
diff --git a/demos/di/di/pages/pageSys.qml b/demos/di/di/pages/pageSys.qml
index f91e291..55096ae 100755
--- a/demos/di/di/pages/pageSys.qml
+++ b/demos/di/di/pages/pageSys.qml
@@ -1,5 +1,6 @@
-import QtQuick 2.7
-import QtQuick.Layouts 1.2
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
 import "../" // jeez
 
 ColumnLayout {
diff --git a/demos/di/di/pages/pageTest.qml b/demos/di/di/pages/pageTest.qml
index cd5fc11..1421362 100755
--- a/demos/di/di/pages/pageTest.qml
+++ b/demos/di/di/pages/pageTest.qml
@@ -1,5 +1,6 @@
-import QtQuick 2.7
-import QtQuick.Layouts 1.3
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.11
 import "../" // jeez
 
 Flickable {
diff --git a/demos/di/di/styles.qml b/demos/di/di/styles.qml
index 021352f..d8ea9f3 100755
--- a/demos/di/di/styles.qml
+++ b/demos/di/di/styles.qml
@@ -1,6 +1,6 @@
 pragma Singleton
-import QtQuick 2.7
-import QtQuick.Window 2.0
+import QtQuick 2.11
+import QtQuick.Window 2.11
 
 Item {
     // primary font size for texts and tabs
diff --git a/demos/ios-sensors/ios-sensors/ios-sensors.pro b/demos/ios-sensors/ios-sensors/ios-sensors.pro
new file mode 100644
index 0000000..f3be22f
--- /dev/null
+++ b/demos/ios-sensors/ios-sensors/ios-sensors.pro
@@ -0,0 +1,29 @@
+QT += quick sensors
+CONFIG += c++11
+
+# 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
+
+SOURCES += \
+        main.cpp
+
+RESOURCES += qml.qrc
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH =
+
+# Additional import path used to resolve QML modules just for Qt Quick Designer
+QML_DESIGNER_IMPORT_PATH =
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff --git a/demos/ios-sensors/ios-sensors/main.cpp b/demos/ios-sensors/ios-sensors/main.cpp
new file mode 100644
index 0000000..eab2f83
--- /dev/null
+++ b/demos/ios-sensors/ios-sensors/main.cpp
@@ -0,0 +1,15 @@
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+    QGuiApplication app(argc, argv);
+
+    QQmlApplicationEngine engine;
+    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+    if (engine.rootObjects().isEmpty()) { return -1; }
+
+    return app.exec();
+}
diff --git a/demos/ios-sensors/ios-sensors/main.qml b/demos/ios-sensors/ios-sensors/main.qml
new file mode 100644
index 0000000..7b00552
--- /dev/null
+++ b/demos/ios-sensors/ios-sensors/main.qml
@@ -0,0 +1,90 @@
+import QtQuick 2.11
+import QtQuick.Window 2.11
+import QtQuick.Controls 2.4
+import QtSensors 5.11
+
+Window {
+    id: root
+    visible: true
+    width: 900
+    height: 500
+    title: qsTr("Sensors on iOS")
+
+    property int currentOrientationVal: 0
+
+    Rectangle {
+        id: bckgrnd
+        anchors.fill: parent
+        color: "DimGray"
+
+        Text {
+            anchors.centerIn: parent
+            text: currentOrientationVal
+            color: "white"
+            font.pixelSize: parent.width > parent.height ? parent.width / 5 : parent.height / 5
+            font.bold: true
+        }
+
+        MouseArea {
+            anchors.fill: parent
+            onClicked: {
+                /* // testing AmbientLightSensor, not related to this example
+                console.log("trying to start - ", sensor_light.start());
+                console.log("is busy:", sensor_light.busy);
+                console.log("error:", sensor_light.error);
+                console.log("is connected:", sensor_light.connectedToBackend);
+                console.log("light: ", sensor_light.reading);
+                console.log("light: ", sensor_light.reading.lightLevel);
+                */
+
+                console.log("orientation: ", sensor_orientation.reading.orientation);
+            }
+        }
+    }
+
+//    AmbientLightSensor {
+//        id: sensor_light
+//        active: true
+//        onReadingChanged: {
+//            console.log("light: " + reading.lightLevel);
+//        }
+//    }
+
+//    Gyroscope {
+//        id: sensor_gyroscope
+//        //active: true
+//        onReadingChanged: {
+//            console.log("gyroscope" + reading.x);
+//        }
+//    }
+
+    OrientationSensor {
+        id: sensor_orientation
+        active: true
+        onReadingChanged: {
+            currentOrientationVal = reading.orientation;
+            bckgrnd.color = getNewColorForBackground(currentOrientationVal);
+        }
+    }
+
+    function getNewColorForBackground(orientation)
+    {
+        switch (orientation)
+        {
+        case 1:
+            return "BlueViolet";
+        case 2:
+            return "Crimson";
+        case 3:
+            return "green";
+        case 4:
+            return "Sienna";
+        case 5:
+            return "#438D80";
+        case 6:
+            return "Navy";
+        default:
+            return "DimGray";
+        }
+    }
+}
diff --git a/demos/ios-sensors/ios-sensors/qml.qrc b/demos/ios-sensors/ios-sensors/qml.qrc
new file mode 100644
index 0000000..5f6483a
--- /dev/null
+++ b/demos/ios-sensors/ios-sensors/qml.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>main.qml</file>
+    </qresource>
+</RCC>
diff --git a/demos/webengine-recipes/webengine-recipes/main.cpp b/demos/webengine-recipes/webengine-recipes/main.cpp
index e0315a7..e914ed1 100644
--- a/demos/webengine-recipes/webengine-recipes/main.cpp
+++ b/demos/webengine-recipes/webengine-recipes/main.cpp
@@ -1,53 +1,3 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**   * Redistributions of source code must retain the above copyright
-**     notice, this list of conditions and the following disclaimer.
-**   * Redistributions in binary form must reproduce the above copyright
-**     notice, this list of conditions and the following disclaimer in
-**     the documentation and/or other materials provided with the
-**     distribution.
-**   * Neither the name of The Qt Company Ltd nor the names of its
-**     contributors may be used to endorse or promote products derived
-**     from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
 #include <QGuiApplication>
 #include <QQmlApplicationEngine>
 #include <QQmlContext>
diff --git a/demos/webengine-recipes/webengine-recipes/resources/pages/burger.html b/demos/webengine-recipes/webengine-recipes/resources/pages/burger.html
deleted file mode 100644
index 0e5e4da..0000000
--- a/demos/webengine-recipes/webengine-recipes/resources/pages/burger.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-  <meta charset="utf-8">
-  <title>Insanity Burger</title>
-  <link rel="stylesheet" type="text/css" href="assets/3rdparty/markdown.css">
-  <link rel="stylesheet" type="text/css" href="assets/custom.css">
-</head>
-<body>
-  <div id="placeholder"></div>
-  <div id="content">
-
-<img src="images/burger.jpg" alt="Insanity Burger" title="Insanity Burger" />
-Insanity burger
-===============
-
-### Ingredients
-
-* 800 g minced chuck steak
-* olive oil
-* 1 large red onion
-* 1 splash of white wine vinegar
-* 2 large gherkins
-* 4 sesame-topped brioche burger buns
-* 4-8 rashers of smoked streaky bacon
-* 4 teaspoons American mustard
-* Tabasco Chipotle sauce
-* 4 thin slices of Red Leicester cheese
-* 4 teaspoons tomato ketchup
-
-#### For the burger sauce
-* ¼ of an iceberg lettuce
-* 2 heaped tablespoons mayonnaise
-* 1 heaped tablespoon tomato ketchup
-* 1 teaspoon Tabasco Chipotle sauce
-* 1 teaspoon Worcestershire sauce
-* 1 teaspoon brandy, or bourbon (optional)
-
-### Instructions
-For the best burger, go to your butcher’s and ask them to mince 800g of chuck steak for you.
-This cut has a really good balance of fat and flavoursome meat. Divide it into 4 and, with wet
-hands, roll each piece into a ball, then press into flat patties roughly 12cm wide and about 2cm
-wider than your buns. Place on an oiled plate and chill in the fridge. Next, finely slice the red
-onion, then dress in a bowl with the vinegar and a pinch of sea salt. Slice the gherkins and halve
-the buns. Finely chop the lettuce and mix with the rest of the burger sauce ingredients in a bowl,
-then season to taste.
-
-I like to only cook 2 burgers at a time to achieve perfection, so get two pans on the go – a large
-non-stick pan on a high heat for your burgers and another on a medium heat for the bacon. Pat your
-burgers with oil and season them with salt and pepper. Put 2 burgers into the first pan, pressing
-down on them with a fish slice, then put half the bacon into the other pan. After 1 minute, flip
-the burgers and brush each cooked side with ½ a teaspoon of mustard and a dash of Tabasco. After
-another minute, flip onto the mustard side and brush again with another ½ teaspoon of mustard and
-a second dash of Tabasco on the other side. Cook for one more minute, by which point you can place
-some crispy bacon on top of each burger with a slice of cheese. Add a tiny splash of water to the
-pan and place a heatproof bowl over the burgers to melt the cheese – 30 seconds should do it. At the
-same time, toast 2 split buns in the bacon fat in the other pan until lightly golden. Repeat with
-the remaining two burgers.
-
-To build each burger, add a quarter of the burger sauce to the bun base, then top with a cheesy
-bacon burger, a quarter of the onions and gherkins. Rub the bun top with a teaspoon of ketchup,
-then gently press together. As the burger rests, juices will soak into the bun, so serve right
-away, which is great, or for an extra filthy experience, wrap each one in greaseproof paper, then
-give it a minute to go gorgeous and sloppy.
-
-**Enjoy!**
-
-  </div><!--End of content-->
-
-  <script src="assets/3rdparty/marked.min.js"></script>
-  <script src="assets/custom.js"></script>
-</body>
-</html>
-
-
-
diff --git a/img/ios-sensors.png b/img/ios-sensors.png
new file mode 100755
index 0000000000000000000000000000000000000000..844aa7f687a539322257420b6499a0e073d9fc85
GIT binary patch
literal 62013
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

literal 0
HcmV?d00001

-- 
GitLab