aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Herrmann <adrian.herrmann@qt.io>2022-07-29 16:59:50 +0200
committerAdrian Herrmann <adrian.herrmann@qt.io>2022-09-05 12:45:35 +0000
commit9b8864f67412ecfad745111934f403318e6aab99 (patch)
tree44b502b5e794648d67e8dc09ec2ec3c1631f802a
parent6c6a2f419f89c0894dc39d0223df7a0d6be9d44b (diff)
Add QML window example + shared QML module
Port the Qt Quick example "Window and Screen" to PySide. This includes a "shared" QML module located in a sibling directory of the example. Task-number: PYSIDE-841 Change-Id: I7c8376701390b10d8b28bbf0ad04dce7a3089b20 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit ef8d3daa8f4d19c48e44874dd6e38a3ed4d02425) Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io>
-rw-r--r--examples/declarative/shared/Button.qml87
-rw-r--r--examples/declarative/shared/CheckBox.qml96
-rw-r--r--examples/declarative/shared/FlickrRssModel.qml82
-rw-r--r--examples/declarative/shared/Images.qml51
-rw-r--r--examples/declarative/shared/Label.qml46
-rw-r--r--examples/declarative/shared/LauncherList.qml242
-rw-r--r--examples/declarative/shared/README11
-rw-r--r--examples/declarative/shared/SimpleLauncherDelegate.qml133
-rw-r--r--examples/declarative/shared/Slider.qml119
-rw-r--r--examples/declarative/shared/TabSet.qml106
-rw-r--r--examples/declarative/shared/TextField.qml80
-rw-r--r--examples/declarative/shared/images/back.pngbin0 -> 1590 bytes
-rw-r--r--examples/declarative/shared/images/checkmark.pngbin0 -> 809 bytes
-rw-r--r--examples/declarative/shared/images/next.pngbin0 -> 1371 bytes
-rw-r--r--examples/declarative/shared/images/qt-logo.pngbin0 -> 6208 bytes
-rw-r--r--examples/declarative/shared/images/slider_handle.pngbin0 -> 887 bytes
-rw-r--r--examples/declarative/shared/images/tab.pngbin0 -> 309 bytes
-rw-r--r--examples/declarative/shared/qmldir11
-rw-r--r--examples/declarative/shared/quick_shared.qrc15
-rw-r--r--examples/declarative/shared/shared.qrc21
-rw-r--r--examples/declarative/shared/shared_rc.py1884
-rw-r--r--examples/declarative/window/AllScreens.qml79
-rw-r--r--examples/declarative/window/CurrentScreen.qml120
-rw-r--r--examples/declarative/window/Splash.qml79
-rw-r--r--examples/declarative/window/doc/window.pngbin0 -> 9863 bytes
-rw-r--r--examples/declarative/window/doc/window.rst35
-rw-r--r--examples/declarative/window/main.py74
-rw-r--r--examples/declarative/window/resources/icon.icnsbin0 -> 59662 bytes
-rw-r--r--examples/declarative/window/resources/icon.icobin0 -> 11825 bytes
-rw-r--r--examples/declarative/window/resources/icon.svg208
-rw-r--r--examples/declarative/window/resources/icon64.pngbin0 -> 3004 bytes
-rw-r--r--examples/declarative/window/window.pyproject3
-rw-r--r--examples/declarative/window/window.qml188
-rw-r--r--examples/declarative/window/window.qrc8
-rw-r--r--examples/declarative/window/window_rc.py328
35 files changed, 4106 insertions, 0 deletions
diff --git a/examples/declarative/shared/Button.qml b/examples/declarative/shared/Button.qml
new file mode 100644
index 000000000..d5ba7e459
--- /dev/null
+++ b/examples/declarative/shared/Button.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+import QtQuick.Window 2.1
+
+Item {
+ id: container
+
+ property alias text: buttonLabel.text
+ property alias label: buttonLabel
+ signal clicked
+ property alias containsMouse: hoverHandler.hovered
+ property alias pressed: tapHandler.pressed
+ implicitHeight: Math.max(Screen.pixelDensity * 7, buttonLabel.implicitHeight * 1.2)
+ implicitWidth: Math.max(Screen.pixelDensity * 11, buttonLabel.implicitWidth * 1.3)
+ height: implicitHeight
+ width: implicitWidth
+
+ SystemPalette { id: palette }
+
+ Rectangle {
+ id: frame
+ anchors.fill: parent
+ color: palette.button
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: tapHandler.pressed ? Qt.darker(palette.button, 1.3) : palette.button }
+ GradientStop { position: 1.0; color: Qt.darker(palette.button, 1.3) }
+ }
+ antialiasing: true
+ radius: height / 6
+ border.color: Qt.darker(palette.button, 1.5)
+ border.width: 1
+ }
+
+ TapHandler {
+ id: tapHandler
+ onTapped: container.clicked();
+ }
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ Text {
+ id: buttonLabel
+ text: container.text
+ color: palette.buttonText
+ anchors.centerIn: parent
+ }
+}
diff --git a/examples/declarative/shared/CheckBox.qml b/examples/declarative/shared/CheckBox.qml
new file mode 100644
index 000000000..0e53737ea
--- /dev/null
+++ b/examples/declarative/shared/CheckBox.qml
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+
+Item {
+ id: root
+ implicitHeight: frame.height
+ implicitWidth: row.implicitWidth
+ width: implicitWidth
+ height: implicitHeight
+ property alias text: label.text
+ property bool checked
+ property alias pressed: tapHandler.pressed
+ property alias row: row
+ signal clicked
+
+ SystemPalette { id: palette }
+
+ Row {
+ id: row
+ anchors.verticalCenter: parent.verticalCenter
+ spacing: 6
+ Rectangle {
+ id: frame
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: tapHandler.pressed ? Qt.darker(palette.button, 1.3) : palette.button }
+ GradientStop { position: 1.0; color: Qt.darker(palette.button, 1.3) }
+ }
+ height: label.implicitHeight * 1.5
+ width: height
+ anchors.margins: 1
+ radius: 3
+ antialiasing: true
+ border.color: Qt.darker(palette.button, 1.5)
+ Image {
+ id: theX
+ source: "images/checkmark.png"
+ anchors.fill: frame
+ anchors.margins: frame.width / 5
+ fillMode: Image.PreserveAspectFit
+ smooth: true
+ visible: root.checked
+ }
+ }
+ Text {
+ id: label
+ color: palette.text
+ anchors.verticalCenter: frame.verticalCenter
+ }
+ }
+ TapHandler {
+ id: tapHandler
+ onTapped: {
+ parent.checked = !parent.checked
+ parent.clicked()
+ }
+ }
+}
diff --git a/examples/declarative/shared/FlickrRssModel.qml b/examples/declarative/shared/FlickrRssModel.qml
new file mode 100644
index 000000000..d2b8b48bc
--- /dev/null
+++ b/examples/declarative/shared/FlickrRssModel.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+
+ListModel {
+ id: flickrImages
+ property string tags : ""
+ readonly property string queryUrl : "http://api.flickr.com/services/feeds/photos_public.gne?"
+
+ function encodeParams(x) {
+ return encodeURIComponent(x.replace(" ",","));
+ }
+ function fetchImages(format) {
+ var requestURL = queryUrl + (tags ? "tags="+encodeParams(tags)+"&" : "") + "format=" + format + "&nojsoncallback=1";
+ var xhr = new XMLHttpRequest;
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState === XMLHttpRequest.DONE) {
+
+ if (xhr.status !== 200) {
+ console.log("Failed to get images from flickr. status code: " + xhr.status);
+ return;
+ }
+
+ var jsonText = xhr.responseText;
+ var objArray = JSON.parse(jsonText.replace(/\'/g,"'"))
+ if (objArray.errors !== undefined)
+ console.log("Error fetching tweets: " + objArray.errors[0].message)
+ else {
+ for (var key in objArray.items) {
+ var rssItem = objArray.items[key];
+ var jsonObject = "{ \"title\": \"" + rssItem.title +"\",\"media\": \"" + rssItem.media.m + "\", \"thumbnail\": \"" + rssItem.media.m.replace(/\_m\.jpg/,"_s.jpg") +"\"}"
+ flickrImages.append(JSON.parse(jsonObject));
+ }
+ }
+ }
+ }
+ xhr.open("GET", requestURL, true);
+ xhr.send();
+ }
+ Component.onCompleted: {
+ fetchImages("json");
+ }
+}
+
diff --git a/examples/declarative/shared/Images.qml b/examples/declarative/shared/Images.qml
new file mode 100644
index 000000000..893b54aa8
--- /dev/null
+++ b/examples/declarative/shared/Images.qml
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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 QtQml
+
+QtObject {
+ readonly property url back: Qt.resolvedUrl("images/back.png")
+ readonly property url checkmark: Qt.resolvedUrl("images/checkmark.png")
+ readonly property url next: Qt.resolvedUrl("images/next.png")
+ readonly property url qtLogo: Qt.resolvedUrl("images/qt-logo.png")
+ readonly property url sliderHandle: Qt.resolvedUrl("images/slider_handle.png")
+ readonly property url tab: Qt.resolvedUrl("images/tab.png")
+}
diff --git a/examples/declarative/shared/Label.qml b/examples/declarative/shared/Label.qml
new file mode 100644
index 000000000..58739f194
--- /dev/null
+++ b/examples/declarative/shared/Label.qml
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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
+
+Text {
+ SystemPalette { id: palette }
+ color: palette.text
+}
diff --git a/examples/declarative/shared/LauncherList.qml b/examples/declarative/shared/LauncherList.qml
new file mode 100644
index 000000000..5de2fcb06
--- /dev/null
+++ b/examples/declarative/shared/LauncherList.qml
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Crimson AS <info@crimson.no>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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 QtQml 2.12
+import QtQml.Models 2.12
+import QtQuick 2.12
+
+Rectangle {
+ id: root
+ property int activePageCount: 0
+
+ //model is a list of {"name":"somename", "url":"file:///some/url/mainfile.qml"}
+ //function used to add to model A) to enforce scheme B) to allow Qt.resolveUrl in url assignments
+
+ color: "#eee"
+ function addExample(name, desc, url) {
+ myModel.append({"name":name, "description":desc, "url":url})
+ }
+ function showExample(url) {
+ pageComponent.createObject(pageContainer, { exampleUrl: url }).show()
+ }
+
+ // The container rectangle here is used to give a nice "feel" when
+ // transitioning into an example.
+ Rectangle {
+ anchors.fill: parent
+ color: "black"
+
+ ListView {
+ id: launcherList
+ clip: true
+ delegate: SimpleLauncherDelegate{
+ required property url url
+ onClicked: root.showExample(url)
+ }
+ model: ListModel {id:myModel}
+ anchors.fill: parent
+ enabled: opacity == 1.0
+ }
+ }
+
+ Item {
+ id: pageContainer
+ anchors.fill: parent
+ }
+
+ Component {
+ id: pageComponent
+ Rectangle {
+ id: page
+ clip: true
+ property url exampleUrl
+ width: parent.width
+ height: parent.height - bar.height
+ color: "white"
+ TapHandler {
+ //Eats mouse events
+ }
+ Loader{
+ focus: true
+ source: parent.exampleUrl
+ anchors.fill: parent
+ }
+
+ function show() {
+ showAnim.start()
+ }
+
+ function exit() {
+ exitAnim.start()
+ }
+
+ ParallelAnimation {
+ id: showAnim
+ ScriptAction {
+ script: root.activePageCount++
+ }
+ NumberAnimation {
+ target: launcherList
+ property: "opacity"
+ from: 1.0
+ to: 0.0
+ duration: 500
+ }
+ NumberAnimation {
+ target: launcherList
+ property: "scale"
+ from: 1.0
+ to: 0.0
+ duration: 500
+ }
+ NumberAnimation {
+ target: page
+ property: "x"
+ from: -page.width
+ to: 0
+ duration: 300
+ }
+ }
+ SequentialAnimation {
+ id: exitAnim
+
+ ScriptAction {
+ script: root.activePageCount--
+ }
+
+ ParallelAnimation {
+ NumberAnimation {
+ target: launcherList
+ property: "opacity"
+ from: 0.0
+ to: 1.0
+ duration: 300
+ }
+ NumberAnimation {
+ target: launcherList
+ property: "scale"
+ from: 0.0
+ to: 1.0
+ duration: 300
+ }
+ NumberAnimation {
+ target: page
+ property: "x"
+ from: 0
+ to: -page.width
+ duration: 300
+ }
+ }
+
+ ScriptAction {
+ script: page.destroy()
+ }
+ }
+ }
+ }
+ Rectangle {
+ id: bar
+ visible: height > 0
+ anchors.bottom: parent.bottom
+ width: parent.width
+ height: root.activePageCount > 0 ? 40 : 0
+
+ Behavior on height {
+ NumberAnimation {
+ duration: 300
+ }
+ }
+
+ Rectangle {
+ height: 1
+ color: "#ccc"
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ }
+
+ Rectangle {
+ height: 1
+ color: "#fff"
+ anchors.top: parent.top
+ anchors.topMargin: 1
+ anchors.left: parent.left
+ anchors.right: parent.right
+ }
+
+ gradient: Gradient {
+ GradientStop { position: 0 ; color: "#eee" }
+ GradientStop { position: 1 ; color: "#ccc" }
+ }
+
+ Image {
+ id: back
+ source: "images/back.png"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.verticalCenterOffset: 2
+ anchors.left: parent.left
+ anchors.leftMargin: 16
+
+ TapHandler {
+ id: tapHandler
+ enabled: root.activePageCount > 0
+ onTapped: {
+ pageContainer.children[pageContainer.children.length - 1].exit()
+ }
+ }
+ Rectangle {
+ anchors.centerIn: back
+ width: 38
+ height: 31
+ anchors.verticalCenterOffset: -1
+ opacity: tapHandler.pressed ? 1 : 0
+ Behavior on opacity { NumberAnimation{ duration: 100 }}
+ gradient: Gradient {
+ GradientStop { position: 0 ; color: "#22000000" }
+ GradientStop { position: 0.2 ; color: "#11000000" }
+ }
+ border.color: "darkgray"
+ antialiasing: true
+ radius: 4
+ }
+ }
+ }
+}
diff --git a/examples/declarative/shared/README b/examples/declarative/shared/README
new file mode 100644
index 000000000..2bf26d7c8
--- /dev/null
+++ b/examples/declarative/shared/README
@@ -0,0 +1,11 @@
+These files are shared between multiple examples as a set of common and
+reusuable components. While they do demonstrate the building of reusable
+components in QML, they are not official examples themselves.
+Consequently they do not have entries in the Qt documentation, and are
+documented only through the code comments within the files. Developers
+new to QML are strongly encouraged to go through the official examples
+before delving into this directory.
+
+For most application use, see the Qt Quick Components project to find
+ready-made Components you can use in your own projects. Qt Quick
+examples do not use them only to avoid external dependencies.
diff --git a/examples/declarative/shared/SimpleLauncherDelegate.qml b/examples/declarative/shared/SimpleLauncherDelegate.qml
new file mode 100644
index 000000000..3279ea11f
--- /dev/null
+++ b/examples/declarative/shared/SimpleLauncherDelegate.qml
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+
+Rectangle {
+ id: container
+ required property string name
+ required property string description
+
+ property Item exampleItem
+ width: ListView.view.width
+ height: button.implicitHeight + 22
+
+ signal clicked()
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ Behavior on color {ColorAnimation { duration: 100 }}
+ color: tapHandler.pressed ? "#e0e0e0" : "#fff"
+ }
+ GradientStop {
+ position: 1
+ Behavior on color {ColorAnimation { duration: 100 }}
+ color: tapHandler.pressed ? "#e0e0e0" : button.containsMouse ? "#f5f5f5" : "#eee"
+ }
+ }
+
+ Image {
+ id: image
+ opacity: 0.7
+ Behavior on opacity {NumberAnimation {duration: 100}}
+ source: "images/next.png"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 16
+ }
+
+ Item {
+ id: button
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ anchors.right:image.left
+ implicitHeight: col.height
+ height: implicitHeight
+ width: buttonLabel.width + 20
+ property alias containsMouse: hoverHandler.hovered
+
+ TapHandler {
+ id: tapHandler
+ onTapped: container.clicked()
+ }
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ Column {
+ spacing: 2
+ id: col
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ Text {
+ id: buttonLabel
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ text: container.name
+ color: "black"
+ font.pixelSize: 22
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ styleColor: "white"
+ style: Text.Raised
+
+ }
+ Text {
+ id: buttonLabel2
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ text: container.description
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ color: "#666"
+ font.pixelSize: 12
+ }
+ }
+ }
+
+ Rectangle {
+ height: 1
+ color: "#ccc"
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ }
+}
diff --git a/examples/declarative/shared/Slider.qml b/examples/declarative/shared/Slider.qml
new file mode 100644
index 000000000..9c1d5bd86
--- /dev/null
+++ b/examples/declarative/shared/Slider.qml
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+
+Item {
+ id: slider
+ height: 26
+ // default drag range is 180: divisible by 2, 3, 4, 5, 6, 9, 10, ...
+ width: sliderName.width + 223 + handle.width / 2
+
+ property real min: 0
+ property real max: 1
+ property real value: min + (max - min) * dragHandler.value
+ property real init: min+(max-min)/2
+ property string name: "Slider"
+ property color color: "#0066cc"
+ property real minLabelWidth: 44
+
+ DragHandler {
+ id: dragHandler
+ target: handle
+ xAxis.minimum: Math.round(-handle.width / 2 + 3)
+ xAxis.maximum: Math.round(groove.width - handle.width / 2 - 3)
+ property real value: (handle.x - xAxis.minimum) / (xAxis.maximum - xAxis.minimum)
+ }
+
+ Component.onCompleted: setValue(init)
+ function setValue(v) {
+ if (min < max) {
+ handle.x = Math.round( v / (max - min) *
+ (dragHandler.xAxis.maximum - dragHandler.xAxis.minimum)
+ + dragHandler.xAxis.minimum);
+// console.log(name, v, "-> handle.x", handle.x, "from fraction", (v / (max - min)),
+// "of drag range", (dragHandler.xAxis.maximum - dragHandler.xAxis.minimum), "px", min, ":", max)
+ }
+ }
+ Rectangle {
+ id:sliderName
+ anchors.left: parent.left
+ anchors.leftMargin: 16
+ height: childrenRect.height
+ width: Math.max(slider.minLabelWidth, childrenRect.width)
+ anchors.verticalCenter: parent.verticalCenter
+ Text {
+ text: slider.name + ":"
+ font.pointSize: 12
+ color: "#333"
+ }
+ }
+
+ Rectangle {
+ id: groove
+ width: parent.width - 8 - sliderName.width
+ color: "#eee"
+ height: 7
+ radius: 3
+ antialiasing: true
+ border.color: Qt.darker(color, 1.2)
+ anchors.left: sliderName.right
+ anchors.right: parent.right
+ anchors.leftMargin: 10
+ anchors.rightMargin: 24
+ anchors.verticalCenter: parent.verticalCenter
+
+ Rectangle {
+ height: parent.height
+ anchors.left: parent.left
+ anchors.right: handle.horizontalCenter
+ color: slider.color
+ radius: 3
+ border.width: 1
+ border.color: Qt.darker(color, 1.3)
+ opacity: 0.8
+ }
+ Image {
+ id: handle
+ source: "images/slider_handle.png"
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+}
diff --git a/examples/declarative/shared/TabSet.qml b/examples/declarative/shared/TabSet.qml
new file mode 100644
index 000000000..c618b20fa
--- /dev/null
+++ b/examples/declarative/shared/TabSet.qml
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.12
+import QtQuick.Window 2.1
+
+Item {
+ id: tabWidget
+
+ // Setting the default property to stack.children means any child items
+ // of the TabWidget are actually added to the 'stack' item's children.
+ // See the "Property Binding"
+ // documentation for details on default properties.
+ default property alias content: stack.children
+
+ property int current: 0
+
+ onCurrentChanged: setZOrders()
+ Component.onCompleted: setZOrders()
+
+ function setZOrders() {
+ for (var i = 0; i < stack.children.length; ++i) {
+ stack.children[i].z = (i == current ? 1 : 0)
+ stack.children[i].enabled = (i == current)
+ }
+ }
+
+ Row {
+ id: header
+
+ Repeater {
+ model: stack.children.length
+ delegate: Rectangle {
+ required property int index
+ width: tabWidget.width / stack.children.length
+ height: Math.max(Screen.pixelDensity * 7, label.implicitHeight * 1.2)
+
+ Rectangle {
+ width: parent.width; height: 1
+ anchors { bottom: parent.bottom; bottomMargin: 1 }
+ color: "#acb2c2"
+ }
+ BorderImage {
+ anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
+ border { left: 7; right: 7 }
+ source: "images/tab.png"
+ visible: tabWidget.current == parent.index
+ }
+ Text {
+ id: label
+ horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
+ anchors.fill: parent
+ text: stack.children[parent.index].title
+ elide: Text.ElideRight
+ font.bold: tabWidget.current == parent.index
+ }
+ TapHandler {
+ onTapped: tabWidget.current = parent.index
+ }
+ }
+ }
+ }
+
+ Item {
+ id: stack
+ width: tabWidget.width
+ anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
+ }
+}
diff --git a/examples/declarative/shared/TextField.qml b/examples/declarative/shared/TextField.qml
new file mode 100644
index 000000000..559607480
--- /dev/null
+++ b/examples/declarative/shared/TextField.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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.1
+
+Item {
+ id: root
+
+ property alias textInput: textInput
+ property alias text: textInput.text
+ signal accepted
+ signal downPressed
+ implicitWidth: textInput.implicitWidth + rect.radius * 2
+ implicitHeight: textInput.implicitHeight
+
+ function copyAll() {
+ textInput.selectAll()
+ textInput.copy()
+ }
+
+ SystemPalette { id: palette }
+ height: textInput.implicitHeight + 8
+ clip: true
+
+ Rectangle {
+ id: rect
+ anchors.fill: parent
+ radius: height / 4
+ color: palette.button
+ border.color: Qt.darker(palette.button, 1.5)
+ }
+
+ TextInput {
+ id: textInput
+ color: palette.text
+ anchors.fill: parent
+ anchors.leftMargin: rect.radius
+ anchors.rightMargin: rect.radius
+ verticalAlignment: Text.AlignVCenter
+ onAccepted: root.accepted()
+ Keys.onDownPressed: root.downPressed()
+ }
+}
diff --git a/examples/declarative/shared/images/back.png b/examples/declarative/shared/images/back.png
new file mode 100644
index 000000000..53402096b
--- /dev/null
+++ b/examples/declarative/shared/images/back.png
Binary files differ
diff --git a/examples/declarative/shared/images/checkmark.png b/examples/declarative/shared/images/checkmark.png
new file mode 100644
index 000000000..821aafccd
--- /dev/null
+++ b/examples/declarative/shared/images/checkmark.png
Binary files differ
diff --git a/examples/declarative/shared/images/next.png b/examples/declarative/shared/images/next.png
new file mode 100644
index 000000000..cdef8db6e
--- /dev/null
+++ b/examples/declarative/shared/images/next.png
Binary files differ
diff --git a/examples/declarative/shared/images/qt-logo.png b/examples/declarative/shared/images/qt-logo.png
new file mode 100644
index 000000000..30c621c9c
--- /dev/null
+++ b/examples/declarative/shared/images/qt-logo.png
Binary files differ
diff --git a/examples/declarative/shared/images/slider_handle.png b/examples/declarative/shared/images/slider_handle.png
new file mode 100644
index 000000000..63c518be7
--- /dev/null
+++ b/examples/declarative/shared/images/slider_handle.png
Binary files differ
diff --git a/examples/declarative/shared/images/tab.png b/examples/declarative/shared/images/tab.png
new file mode 100644
index 000000000..2ea989b68
--- /dev/null
+++ b/examples/declarative/shared/images/tab.png
Binary files differ
diff --git a/examples/declarative/shared/qmldir b/examples/declarative/shared/qmldir
new file mode 100644
index 000000000..5ccdf6021
--- /dev/null
+++ b/examples/declarative/shared/qmldir
@@ -0,0 +1,11 @@
+module shared
+Button 2.0 Button.qml
+CheckBox 2.1 CheckBox.qml
+FlickrRssModel 2.0 FlickrRssModel.qml
+Label 2.0 Label.qml
+LauncherList 2.0 LauncherList.qml
+SimpleLauncherDelegate 2.0 SimpleLauncherDelegate.qml
+Slider 2.0 Slider.qml
+TabSet 2.1 TabSet.qml
+TextField 2.1 TextField.qml
+singleton Images 2.2 Images.qml
diff --git a/examples/declarative/shared/quick_shared.qrc b/examples/declarative/shared/quick_shared.qrc
new file mode 100644
index 000000000..21f393a64
--- /dev/null
+++ b/examples/declarative/shared/quick_shared.qrc
@@ -0,0 +1,15 @@
+<RCC>
+ <qresource prefix="/quick/shared">
+ <file>LauncherList.qml</file>
+ <file>SimpleLauncherDelegate.qml</file>
+ <file>Button.qml</file>
+ <file>CheckBox.qml</file>
+ <file>Label.qml</file>
+ <file>TextField.qml</file>
+ <file>images/back.png</file>
+ <file>images/next.png</file>
+ <file>images/checkmark.png</file>
+ <file>Slider.qml</file>
+ <file>images/slider_handle.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/declarative/shared/shared.qrc b/examples/declarative/shared/shared.qrc
new file mode 100644
index 000000000..c19063a58
--- /dev/null
+++ b/examples/declarative/shared/shared.qrc
@@ -0,0 +1,21 @@
+<RCC>
+ <qresource prefix="/shared">
+ <file>Button.qml</file>
+ <file>CheckBox.qml</file>
+ <file>FlickrRssModel.qml</file>
+ <file>Images.qml</file>
+ <file>Label.qml</file>
+ <file>LauncherList.qml</file>
+ <file>SimpleLauncherDelegate.qml</file>
+ <file>Slider.qml</file>
+ <file>TabSet.qml</file>
+ <file>TextField.qml</file>
+ <file>images/back.png</file>
+ <file>images/checkmark.png</file>
+ <file>images/next.png</file>
+ <file>images/qt-logo.png</file>
+ <file>images/slider_handle.png</file>
+ <file>images/tab.png</file>
+ <file>qmldir</file>
+ </qresource>
+</RCC>
diff --git a/examples/declarative/shared/shared_rc.py b/examples/declarative/shared/shared_rc.py
new file mode 100644
index 000000000..97e5ecb87
--- /dev/null
+++ b/examples/declarative/shared/shared_rc.py
@@ -0,0 +1,1884 @@
+# Resource object code (Python 3)
+# Created by: object code
+# Created by: The Resource Compiler for Qt version 6.5.0
+# WARNING! All changes made in this file will be lost!
+
+from PySide6 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x06\x9b\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+12\x0a\x0aItem {\x0a i\
+d: root\x0a impl\
+icitHeight: fram\
+e.height\x0a imp\
+licitWidth: row.\
+implicitWidth\x0a \
+ width: implici\
+tWidth\x0a heigh\
+t: implicitHeigh\
+t\x0a property a\
+lias text: label\
+.text\x0a proper\
+ty bool checked\x0a\
+ property ali\
+as pressed: tapH\
+andler.pressed\x0a \
+ property alia\
+s row: row\x0a s\
+ignal clicked\x0a\x0a \
+ SystemPalette\
+ { id: palette }\
+\x0a\x0a Row {\x0a \
+ id: row\x0a \
+ anchors.vert\
+icalCenter: pare\
+nt.verticalCente\
+r\x0a spacin\
+g: 6\x0a Rec\
+tangle {\x0a \
+ id: frame\x0a \
+ gradi\
+ent: Gradient {\x0a\
+ \
+GradientStop { p\
+osition: 0.0; co\
+lor: tapHandler.\
+pressed ? Qt.dar\
+ker(palette.butt\
+on, 1.3) : palet\
+te.button }\x0a \
+ Grad\
+ientStop { posit\
+ion: 1.0; color:\
+ Qt.darker(palet\
+te.button, 1.3) \
+}\x0a }\x0a\
+ heig\
+ht: label.implic\
+itHeight * 1.5\x0a \
+ width\
+: height\x0a \
+ anchors.mar\
+gins: 1\x0a \
+ radius: 3\x0a \
+ antial\
+iasing: true\x0a \
+ border.\
+color: Qt.darker\
+(palette.button,\
+ 1.5)\x0a \
+ Image {\x0a \
+ id: th\
+eX\x0a \
+ source: \x22imag\
+es/checkmark.png\
+\x22\x0a \
+ anchors.fill: \
+frame\x0a \
+ anchors.ma\
+rgins: frame.wid\
+th / 5\x0a \
+ fillMode:\
+ Image.PreserveA\
+spectFit\x0a \
+ smooth:\
+ true\x0a \
+ visible: r\
+oot.checked\x0a \
+ }\x0a \
+ }\x0a Text\
+ {\x0a i\
+d: label\x0a \
+ color: pale\
+tte.text\x0a \
+ anchors.ver\
+ticalCenter: fra\
+me.verticalCente\
+r\x0a }\x0a \
+}\x0a TapHandler\
+ {\x0a id: t\
+apHandler\x0a \
+ onTapped: {\x0a \
+ parent\
+.checked = !pare\
+nt.checked\x0a \
+ parent.cl\
+icked()\x0a \
+}\x0a }\x0a}\x0a\
+\x00\x00\x04\x1c\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+1\x0a\x0aItem {\x0a id\
+: root\x0a\x0a prop\
+erty alias textI\
+nput: textInput\x0a\
+ property ali\
+as text: textInp\
+ut.text\x0a sign\
+al accepted\x0a \
+signal downPress\
+ed\x0a implicitW\
+idth: textInput.\
+implicitWidth + \
+rect.radius * 2\x0a\
+ implicitHeig\
+ht: textInput.im\
+plicitHeight\x0a\x0a \
+ function copyA\
+ll() {\x0a t\
+extInput.selectA\
+ll()\x0a tex\
+tInput.copy()\x0a \
+ }\x0a\x0a SystemP\
+alette { id: pal\
+ette }\x0a heigh\
+t: textInput.imp\
+licitHeight + 8\x0a\
+ clip: true\x0a\x0a\
+ Rectangle {\x0a\
+ id: rect\
+\x0a anchors\
+.fill: parent\x0a \
+ radius: he\
+ight / 4\x0a \
+ color: palette.\
+button\x0a b\
+order.color: Qt.\
+darker(palette.b\
+utton, 1.5)\x0a \
+}\x0a\x0a TextInput\
+ {\x0a id: t\
+extInput\x0a \
+ color: palette.\
+text\x0a anc\
+hors.fill: paren\
+t\x0a anchor\
+s.leftMargin: re\
+ct.radius\x0a \
+ anchors.rightM\
+argin: rect.radi\
+us\x0a verti\
+calAlignment: Te\
+xt.AlignVCenter\x0a\
+ onAccept\
+ed: root.accepte\
+d()\x0a Keys\
+.onDownPressed: \
+root.downPressed\
+()\x0a }\x0a}\x0a\
+\x00\x00\x00\xc7\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+0\x0a\x0aText {\x0a Sy\
+stemPalette { id\
+: palette }\x0a \
+color: palette.t\
+ext\x0a}\x0a\
+\x00\x00\x0ax\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0aim\
+port QtQuick 2.1\
+2\x0a\x0aRectangle {\x0a \
+ id: container\
+\x0a required pr\
+operty string na\
+me\x0a required \
+property string \
+description\x0a\x0a \
+ property Item e\
+xampleItem\x0a w\
+idth: ListView.v\
+iew.width\x0a he\
+ight: button.imp\
+licitHeight + 22\
+\x0a\x0a signal cli\
+cked()\x0a\x0a grad\
+ient: Gradient {\
+\x0a Gradien\
+tStop {\x0a \
+ position: 0\x0a\
+ Beha\
+vior on color {C\
+olorAnimation { \
+duration: 100 }}\
+\x0a col\
+or: tapHandler.p\
+ressed ? \x22#e0e0e\
+0\x22 : \x22#fff\x22\x0a \
+ }\x0a Gr\
+adientStop {\x0a \
+ positio\
+n: 1\x0a \
+ Behavior on col\
+or {ColorAnimati\
+on { duration: 1\
+00 }}\x0a \
+ color: tapHand\
+ler.pressed ? \x22#\
+e0e0e0\x22 : button\
+.containsMouse ?\
+ \x22#f5f5f5\x22 : \x22#e\
+ee\x22\x0a }\x0a \
+ }\x0a\x0a Image {\
+\x0a id: ima\
+ge\x0a opaci\
+ty: 0.7\x0a \
+Behavior on opac\
+ity {NumberAnima\
+tion {duration: \
+100}}\x0a so\
+urce: \x22images/ne\
+xt.png\x22\x0a \
+anchors.vertical\
+Center: parent.v\
+erticalCenter\x0a \
+ anchors.ri\
+ght: parent.righ\
+t\x0a anchor\
+s.rightMargin: 1\
+6\x0a }\x0a\x0a Ite\
+m {\x0a id: \
+button\x0a a\
+nchors.top: pare\
+nt.top\x0a a\
+nchors.left: par\
+ent.left\x0a \
+ anchors.bottom:\
+ parent.bottom\x0a \
+ anchors.r\
+ight:image.left\x0a\
+ implicit\
+Height: col.heig\
+ht\x0a heigh\
+t: implicitHeigh\
+t\x0a width:\
+ buttonLabel.wid\
+th + 20\x0a \
+property alias c\
+ontainsMouse: ho\
+verHandler.hover\
+ed\x0a\x0a TapH\
+andler {\x0a \
+ id: tapHand\
+ler\x0a \
+onTapped: contai\
+ner.clicked()\x0a \
+ }\x0a \
+HoverHandler {\x0a \
+ id: h\
+overHandler\x0a \
+ }\x0a\x0a C\
+olumn {\x0a \
+ spacing: 2\x0a \
+ id: c\
+ol\x0a a\
+nchors.verticalC\
+enter: parent.ve\
+rticalCenter\x0a \
+ width: \
+parent.width\x0a \
+ Text {\x0a\
+ \
+id: buttonLabel\x0a\
+ \
+anchors.left: pa\
+rent.left\x0a \
+ anchor\
+s.leftMargin: 10\
+\x0a \
+ anchors.right: \
+parent.right\x0a \
+ anc\
+hors.rightMargin\
+: 10\x0a \
+ text: conta\
+iner.name\x0a \
+ color:\
+ \x22black\x22\x0a \
+ font.pi\
+xelSize: 22\x0a \
+ wrap\
+Mode: Text.WrapA\
+tWordBoundaryOrA\
+nywhere\x0a \
+ styleCol\
+or: \x22white\x22\x0a \
+ styl\
+e: Text.Raised\x0a\x0a\
+ }\x0a \
+ Text {\
+\x0a \
+ id: buttonLabel\
+2\x0a \
+ anchors.left: \
+parent.left\x0a \
+ anch\
+ors.leftMargin: \
+10\x0a \
+ text: contain\
+er.description\x0a \
+ w\
+rapMode: Text.Wr\
+apAtWordBoundary\
+OrAnywhere\x0a \
+ color\
+: \x22#666\x22\x0a \
+ font.pi\
+xelSize: 12\x0a \
+ }\x0a \
+ }\x0a }\x0a\x0a R\
+ectangle {\x0a \
+ height: 1\x0a \
+ color: \x22#cc\
+c\x22\x0a ancho\
+rs.bottom: paren\
+t.bottom\x0a \
+ anchors.left: p\
+arent.left\x0a \
+ anchors.right\
+: parent.right\x0a \
+ }\x0a}\x0a\
+\x00\x00\x05\xac\
+\x00\
+\x00\x16\xecx\x9c\xd5\x18ko\xdb6\xf0\xbb\x7f\x05\xa1\
+~q\xd0X\xb2\x9d\xee\x01om\x97\xbaE\x17 ]\
+\x93\xba\x1b\x06\x0c\xfb@K'\x9b\xabD\xaa\x14\x9d4\
+\x08\xfc\xdfwG\x89\xaai\xc9\x8f\xb6\xeb\x80\x1e\x90X\
+<\xde\x1d\xef\xad\xa3\xa2\x88MUq\xa7\xc5biX\
+\x7fz\xc2\xc6\xc3\xd1\x0fl\xaaE^*\xc9\xceg\xec\
+g!S\xf5K\x5c!B\xa9\x9e\xf4\xa2N\x96\xb7K\
+`\xd7\x06w\xf2\x82\xcb;vi\x92\x90(gW\xcf\
+\xff\x1c\x5c\x8a\x18d\x09\x83\x8b\x04\xa4\x11\xa9\x00=a\
+5\xee\x0d\xa4\x83k3@\xb6\x1ct,x\xc6^\xbf\
+a\xcff\xcf\x07g\x83i\xc6W%\xf4z\x22/\x94\
+6(\xfc:\xcf\xd88\x1c\x8d=L\xf8J%\x90\x95\
+\xdb\x1b+\x11\xbf\xabp\xbd7\x10\x1b.\x17\x19\xb0\xfb\
+\x1eC\x10\xc9\x84i\xa5\x8c]\x14Z\x15\xa0\xcd\x1d\x13\
+\xd20\x1e\x1bq\x03W|\x01S\xb5\x92f\xc2\x86=\
+K\x14E9\x1d\xc2D\xc98\xcbDi\x98J\xd9}\
+ y\x0e\xc1$(U\x0e\xf6\xf1\x94\x05+\x9d!&\
+\x15\x19L\xa2(\xa2\x9d\x08QQ\xce\xd1\x8b\x88\x0c\xdf\
+\xe7Y\xb0\xaee\xa6+\x89\xe7\xa1\x97\xd1\xca\x84\x19\xc5\
+xb\x7f\xaa\xb3\xceO\xe8\x19\xd0\xf9:\x06V\xc6K\
+\xc8\x81=\xb3H\x9ee\xea\x16\x8d\x0c5\x94*\xbb\x81\
+\xdf5\xaa\x86b\xf0\x87\x97\xa5XH\xd4\xc7\x94\x95\xea\
+\xb1\xca\x14z;x\x00\x00\x81\xc54\xc7\xe2q/>\
+\xf0\xbc\xc8\xa0O\xea\x9f\xb2\x04\xca\xf8\x94\xc4\x9c\xd4\x9e\
+\x22\xc8\xef\xac\x83C^\x14 \x93\xbe\xb3\xba\xe2\x08\x88\
+E\x8b\x82\xe4\x05\x93\x8a\xbf\xf2\x01\xfe[\x9fX!k\
+\xff\xd4r\xa9n\xdd\xb1[G\x15\xd6\xf1\x18B\x89\xfa\
+\x87\xb1\x06n\xe0\xf5\xfc\x1f\x0c_\xbf\xda\x92\x06\xfd\x08\
+\xfa\x94\xdd3\xa8D\xa0\xe9\x13k\xf8\xfa$$\xc9}\
+wf\xedc\x9b\x96\xb1cd\xbaI\x85%h\xa0x\
+:\xdf/0\xf0\x18\x5c\x89Y\xc9\x82\x14 \x0b\xd8\xed\
+\x12\xa4\x13c4\x97\xa5 \x03\x84\x5cP\xae`\x14\xa4\
+S\x22\xb4T\xdbiF\xc0e\xbcT\xba\x0c1\xf6\xa8\
+g\xc15\x1a\xd6l\xba\xd0\xcc3\x1e\xbf\x0bz\x0d\xfe\
+\x12\x13\xec\x0f\x01\xb7\x1br\x5c\xdabE\xa0D\xd0D\
+\xe2m\xc6\x99(&\xa8\xe5\x0a<4\x06\x0e\x16\xe8\xc5\
+\x09\x9b\x09\xd2\xf4\xb2\xe6\x7f^\xe3\xfd\x13\x084\xbc_\
+\x09\x8d>i\x0a\x83\xbc\x8b\x7f-J%\xa7\x19\x16\x19\
+\xd4\xd5\x14n\x07\xd6cX{+\x9b\xe1\x13k\xa8M\
+.v\x8f\xc6\xd5\x89\xe6S\xeeu \x01V\xde<#\
+\x1dT\xc1c\x81\xea>~\xccF\xe1\xb0\xa1Yo\xe6\
+\xc3\x85\x81|\xc3\xab\xe4Q/\xb1\x0e\xc7\xad\x16\xd4d\
+i\xa7\xb4z\xaf\xd9\xe9\xca\x8cM\x8ec\x22\xe9\x85\xe3\
+c\xf2{4\xb7\x221K\xa7nhW\xde\xfe\x12\xa8\
+e7\x04\xd5\x92\x0d\xd8\x9c\xebz\xe1kR\xe7\xe7\xed\
+R\x98\xbaw8x\xcb\x8b_\xb9L2,\xa9v\x0a\
+E\xd1\x0bnJ\x0c2\xd6\x16\x83\x1b\xdb\x8b6\xf7\xfd\
+\x08_*\x9e\x80nKIU\xbc*;\x1cAP\xaa\
+\x156\xc5\xc6\x90\x1d\xee 8\x98?\xeb\x9e\xb7\xf4\xda\
+T\xff\xa4\xc3:\xda8\x97\x22\x0fK\xc3\xb5\xe9o\xa7\
+y\xb74\xf8 L\xa74\xda8V\xda\x15\xd7\xd8\xf9\
+!#zn\xc5\xb6\xe5QJ9\x0d[\x9b3\xdb\xaa\
+\xcf\xe3\x1d\xbc\xd6:KRW\xf4\xd6\xeb\xf0\xe1\xc3\x16\
+\xcb\xba\x85\xf9m\x95\xcfA\xefS\x91\x00\x8d]\x80\xd9\
+\xd3\xcf\x1c\xb8\xb4\xc74\xac\x0b<\xe8\xa4K\xb5\xca'\
+^\xe1{\xc7)|\x95\xef\xd8KV\xdaj:a\xdf\
+\x0d\xdb\x14\xff\xa7\x81e\xcc3\xf8\xb6\xccku\xaf\x0e\
+\xb3>\xec3i@\x12:Z\x95g\xda\x01\xc3\xce\x0e\
+\x1a\xe6\xaff\xf8\x8a\xa39\x94\x1f\xac$W\x9d\xbd\xff\
+\xba\x94\x06\x83\x0e\x8d[\xa8c\x0a\x9e\xe0\xb8\x98\x11\x1c\
+\x9d\x96\x04\xc7\xd6\x1eA\x15\xcd]Ih\x8fV\xbb\x13\
+\x98`\x7f<\x09\xda\xc9J\xf0\xf5\x8d\xdfS\x97\x04\xdf\
+\x92\xe9;\xeb\x95\xe0p\xcd\x12\xd4\xe6\xee5\xf6PU\
+\x13|\x8e\xd1\x1d5\xf2\x09\x85h\x95\xc2;\x8a\xd1\xea\
+n\xebM\xdb>\xee\xe3\xcaM\x90\xf4\xbfk\x92\xa3F\
+\x81\x13T\xb3\xbe\x11\xa5\xc0\x91tR\x8f[\xec\xc9\x86\
+\xb3\xdc82W\xc6\x90\x1b\xeb\x01\xa6Z6T\xfb\xe6\
+87\xc3uu\x15:\x8a=e\x8f\x86\xac\xb9\xb9\x12\
+<\x83%\xbf\x11J\xe3\xc4\xeet\xf2\x1du8\x8fv\
+\x07k\xd3O\x07\x07^\xa7\xfc\xa8s\xce|\x10\xc7\xb1\
+\x9fw\xce]F\x15\x8d;\xf0\xb9\x93&\x83\xf4\xe3h\
+K\x8bN*\xedM\xc0\xda\x9by\xbf\xdc\x804M?\
+\xdf\x00\xc4\xbf\xc22\x15r[\xfcW\xb1p\xa1y\x22\
+\x80\xbeq\xbc\xac\x9f\xb6Lu\xe8\x19\xea\x85\xf7\xedB\
+U\xd7_\xcc,\xf6\x93\xffUa\xabrv2\x8e6\
+\x19)\xd6\xdd\xc9s\x91c>w\xdc\x94\xe6xK\xf6\
+\x90\xee\x16\x10\x08\xe2(#\x22\x08\x0b\xb9\xe8\x0e\xc1\x0d\
+\xb66\x81\x9d|\x8a\xaa\xd1\xf7\xa7\xdaA>\xfa\x08\xce\
+\xd7iZR+\x1d\x7fA\x8ch\xa3\x89\xf5\xf7~S\
+\xdb{\xb5\x22?\x98\x86\xa0}\x9bp\x97\xe1]\xdd\xa1\
+\xc5\xa1\xe4[\xfa\xb0\x83,\xdd\xbd\xd3\xbb\x1e\x87\xf1R\
+d\x09\x9a\xf6W7\x1a\xed\x92\x0b\xb3\xc4\x1b\xe5\xe8\xef\
+\xb0\xba\xf2|\xd2`\xb6\xab\xea6]\x17\xdb \x5c\xc8\
+\x8e| \xa8[\xe7\xd9\x8f\xad\x1dW\xbag\xa3\x9d\xb2\
+\xbb\x03=h3\xd4\xe3\xd0f,\xc2BCI\xdf\x92\
+\x9eb\x9ew\xbd\x1f7\xbb\xb0\xfbVq\xbf\xddz\xef\
+7:\xedh8d\xeb\xf6;\xf0`\xe1:8\xae\x80\
+\xc7\xe3\xa1\x85\xed*>,%\x1co\xca\x19\x8dv\xcb\
+ic\xe6J'\x9485w\xc2\xf5;\xb4\xabc\xbe\
+\xe4vN\x17\xbc\x14r\xb1\xe3c\x00)H_\x0a\x1e\
+\x1dx\x7f\xaf{\xff\x02>\xc5\xc9[\
+\x00\x00\x0aH\
+/\
+/ Copyright (C) \
+2016 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+12\x0a\x0aItem {\x0a i\
+d: slider\x0a he\
+ight: 26\x0a // \
+default drag ran\
+ge is 180: divis\
+ible by 2, 3, 4,\
+ 5, 6, 9, 10, ..\
+.\x0a width: sli\
+derName.width + \
+223 + handle.wid\
+th / 2\x0a\x0a prop\
+erty real min: 0\
+\x0a property re\
+al max: 1\x0a pr\
+operty real valu\
+e: min + (max - \
+min) * dragHandl\
+er.value\x0a pro\
+perty real init:\
+ min+(max-min)/2\
+\x0a property st\
+ring name: \x22Slid\
+er\x22\x0a property\
+ color color: \x22#\
+0066cc\x22\x0a prop\
+erty real minLab\
+elWidth: 44\x0a\x0a \
+ DragHandler {\x0a \
+ id: dragH\
+andler\x0a t\
+arget: handle\x0a \
+ xAxis.mini\
+mum: Math.round(\
+-handle.width / \
+2 + 3)\x0a x\
+Axis.maximum: Ma\
+th.round(groove.\
+width - handle.w\
+idth / 2 - 3)\x0a \
+ property r\
+eal value: (hand\
+le.x - xAxis.min\
+imum) / (xAxis.m\
+aximum - xAxis.m\
+inimum)\x0a }\x0a\x0a \
+ Component.onC\
+ompleted: setVal\
+ue(init)\x0a fun\
+ction setValue(v\
+) {\x0a if (\
+min < max) {\x0a \
+ handle.\
+x = Math.round( \
+v / (max - min) \
+*\x0a \
+ \
+ (dragHandler.x\
+Axis.maximum - d\
+ragHandler.xAxis\
+.minimum)\x0a \
+ \
+ + drag\
+Handler.xAxis.mi\
+nimum);\x0a// \
+ console.lo\
+g(name, v, \x22-> h\
+andle.x\x22, handle\
+.x, \x22from fracti\
+on\x22, (v / (max -\
+ min)),\x0a// \
+ \x22of dr\
+ag range\x22, (drag\
+Handler.xAxis.ma\
+ximum - dragHand\
+ler.xAxis.minimu\
+m), \x22px\x22, min, \x22\
+:\x22, max)\x0a \
+ }\x0a }\x0a Rec\
+tangle {\x0a \
+ id:sliderName\x0a \
+ anchors.l\
+eft: parent.left\
+\x0a anchors\
+.leftMargin: 16\x0a\
+ height: \
+childrenRect.hei\
+ght\x0a widt\
+h: Math.max(slid\
+er.minLabelWidth\
+, childrenRect.w\
+idth)\x0a an\
+chors.verticalCe\
+nter: parent.ver\
+ticalCenter\x0a \
+ Text {\x0a \
+ text: sli\
+der.name + \x22:\x22\x0a \
+ font.\
+pointSize: 12\x0a \
+ color:\
+ \x22#333\x22\x0a \
+}\x0a }\x0a\x0a Rec\
+tangle {\x0a \
+ id: groove\x0a \
+ width: paren\
+t.width - 8 - sl\
+iderName.width\x0a \
+ color: \x22#\
+eee\x22\x0a hei\
+ght: 7\x0a r\
+adius: 3\x0a \
+ antialiasing: t\
+rue\x0a bord\
+er.color: Qt.dar\
+ker(color, 1.2)\x0a\
+ anchors.\
+left: sliderName\
+.right\x0a a\
+nchors.right: pa\
+rent.right\x0a \
+ anchors.leftM\
+argin: 10\x0a \
+ anchors.rightM\
+argin: 24\x0a \
+ anchors.vertic\
+alCenter: parent\
+.verticalCenter\x0a\
+\x0a Rectang\
+le {\x0a \
+ height: parent.\
+height\x0a \
+ anchors.left:\
+ parent.left\x0a \
+ anchors\
+.right: handle.h\
+orizontalCenter\x0a\
+ colo\
+r: slider.color\x0a\
+ radi\
+us: 3\x0a \
+ border.width: \
+1\x0a bo\
+rder.color: Qt.d\
+arker(color, 1.3\
+)\x0a op\
+acity: 0.8\x0a \
+ }\x0a Ima\
+ge {\x0a \
+ id: handle\x0a \
+ source: \
+\x22images/slider_h\
+andle.png\x22\x0a \
+ anchors.v\
+erticalCenter: p\
+arent.verticalCe\
+nter\x0a }\x0a \
+ }\x0a}\x0a\
+\x00\x00\x06\xc5\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+12\x0a\x0aListModel {\x0a\
+ id: flickrIm\
+ages\x0a propert\
+y string tags : \
+\x22\x22\x0a readonly \
+property string \
+queryUrl : \x22http\
+://api.flickr.co\
+m/services/feeds\
+/photos_public.g\
+ne?\x22\x0a\x0a functi\
+on encodeParams(\
+x) {\x0a ret\
+urn encodeURICom\
+ponent(x.replace\
+(\x22 \x22,\x22,\x22));\x0a \
+}\x0a function f\
+etchImages(forma\
+t) {\x0a var\
+ requestURL = qu\
+eryUrl + (tags ?\
+ \x22tags=\x22+encodeP\
+arams(tags)+\x22&\x22 \
+: \x22\x22) + \x22format=\
+\x22 + format + \x22&n\
+ojsoncallback=1\x22\
+;\x0a var xh\
+r = new XMLHttpR\
+equest;\x0a \
+xhr.onreadystate\
+change = functio\
+n() {\x0a \
+ if (xhr.readyS\
+tate === XMLHttp\
+Request.DONE) {\x0a\
+\x0a \
+ if (xhr.status \
+!== 200) {\x0a \
+ c\
+onsole.log(\x22Fail\
+ed to get images\
+ from flickr. st\
+atus code: \x22 + x\
+hr.status);\x0a \
+ \
+return;\x0a \
+ }\x0a\x0a \
+ var j\
+sonText = xhr.re\
+sponseText;\x0a \
+ var \
+objArray = JSON.\
+parse(jsonText.r\
+eplace(/\x5c'/g,\x22'\x22\
+))\x0a \
+ if (objArray.\
+errors !== undef\
+ined)\x0a \
+ consol\
+e.log(\x22Error fet\
+ching tweets: \x22 \
++ objArray.error\
+s[0].message)\x0a \
+ el\
+se {\x0a \
+ for (va\
+r key in objArra\
+y.items) {\x0a \
+ \
+ var rssItem =\
+ objArray.items[\
+key];\x0a \
+ va\
+r jsonObject = \x22\
+{ \x5c\x22title\x5c\x22: \x5c\x22\x22\
+ + rssItem.title\
+ +\x22\x5c\x22,\x5c\x22media\x5c\x22:\
+ \x5c\x22\x22 + rssItem.m\
+edia.m + \x22\x5c\x22, \x5c\x22\
+thumbnail\x5c\x22: \x5c\x22\x22\
+ + rssItem.media\
+.m.replace(/\x5c_m\x5c\
+.jpg/,\x22_s.jpg\x22) \
++\x22\x5c\x22}\x22\x0a \
+ f\
+lickrImages.appe\
+nd(JSON.parse(js\
+onObject));\x0a \
+ \
+}\x0a \
+ }\x0a \
+}\x0a }\x0a \
+ xhr.open(\x22GE\
+T\x22, requestURL, \
+true);\x0a x\
+hr.send();\x0a }\
+\x0a Component.o\
+nCompleted: {\x0a \
+ fetchImage\
+s(\x22json\x22);\x0a }\
+\x0a}\x0a\x0a\
+\x00\x00\x018\
+m\
+odule shared\x0aBut\
+ton 2.0 Button.q\
+ml\x0aCheckBox 2.1 \
+CheckBox.qml\x0aFli\
+ckrRssModel 2.0 \
+FlickrRssModel.q\
+ml\x0aLabel 2.0 Lab\
+el.qml\x0aLauncherL\
+ist 2.0 Launcher\
+List.qml\x0aSimpleL\
+auncherDelegate \
+2.0 SimpleLaunch\
+erDelegate.qml\x0aS\
+lider 2.0 Slider\
+.qml\x0aTabSet 2.1 \
+TabSet.qml\x0aTextF\
+ield 2.1 TextFie\
+ld.qml\x0asingleton\
+ Images 2.2 Imag\
+es.qml\x0a\
+\x00\x00\x08\xdc\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+12\x0aimport QtQuic\
+k.Window 2.1\x0a\x0aIt\
+em {\x0a id: tab\
+Widget\x0a\x0a // S\
+etting the defau\
+lt property to s\
+tack.children me\
+ans any child it\
+ems\x0a // of th\
+e TabWidget are \
+actually added t\
+o the 'stack' it\
+em's children.\x0a \
+ // See the \x22P\
+roperty Binding\x22\
+\x0a // document\
+ation for detail\
+s on default pro\
+perties.\x0a def\
+ault property al\
+ias content: sta\
+ck.children\x0a\x0a \
+ property int cu\
+rrent: 0\x0a\x0a on\
+CurrentChanged: \
+setZOrders()\x0a \
+ Component.onCom\
+pleted: setZOrde\
+rs()\x0a\x0a functi\
+on setZOrders() \
+{\x0a for (v\
+ar i = 0; i < st\
+ack.children.len\
+gth; ++i) {\x0a \
+ stack.ch\
+ildren[i].z = (i\
+ == current ? 1 \
+: 0)\x0a \
+ stack.children[\
+i].enabled = (i \
+== current)\x0a \
+ }\x0a }\x0a\x0a \
+ Row {\x0a i\
+d: header\x0a\x0a \
+ Repeater {\x0a \
+ model:\
+ stack.children.\
+length\x0a \
+ delegate: Rec\
+tangle {\x0a \
+ require\
+d property int i\
+ndex\x0a \
+ width: tabW\
+idget.width / st\
+ack.children.len\
+gth\x0a \
+ height: Math\
+.max(Screen.pixe\
+lDensity * 7, la\
+bel.implicitHeig\
+ht * 1.2)\x0a\x0a \
+ Recta\
+ngle {\x0a \
+ width\
+: parent.width; \
+height: 1\x0a \
+ an\
+chors { bottom: \
+parent.bottom; b\
+ottomMargin: 1 }\
+\x0a \
+ color: \x22#ac\
+b2c2\x22\x0a \
+ }\x0a \
+ BorderIm\
+age {\x0a \
+ anchor\
+s { fill: parent\
+; leftMargin: 2;\
+ topMargin: 5; r\
+ightMargin: 1 }\x0a\
+ \
+ border { lef\
+t: 7; right: 7 }\
+\x0a \
+ source: \x22im\
+ages/tab.png\x22\x0a \
+ \
+ visible: tabWi\
+dget.current == \
+parent.index\x0a \
+ }\x0a \
+ T\
+ext {\x0a \
+ id: la\
+bel\x0a \
+ horizont\
+alAlignment: Qt.\
+AlignHCenter; ve\
+rticalAlignment:\
+ Qt.AlignVCenter\
+\x0a \
+ anchors.fil\
+l: parent\x0a \
+ te\
+xt: stack.childr\
+en[parent.index]\
+.title\x0a \
+ elide\
+: Text.ElideRigh\
+t\x0a \
+ font.bold:\
+ tabWidget.curre\
+nt == parent.ind\
+ex\x0a \
+ }\x0a \
+ TapHandler \
+{\x0a \
+ onTapped: \
+tabWidget.curren\
+t = parent.index\
+\x0a \
+ }\x0a }\
+\x0a }\x0a }\
+\x0a\x0a Item {\x0a \
+ id: stack\x0a \
+ width: ta\
+bWidget.width\x0a \
+ anchors.to\
+p: header.bottom\
+; anchors.bottom\
+: tabWidget.bott\
+om\x0a }\x0a}\x0a\
+\x00\x00\x02h\
+/\
+/ Copyright (C) \
+2021 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ap\
+ragma Singleton\x0a\
+import QtQml\x0a\x0aQt\
+Object {\x0a rea\
+donly property u\
+rl back: \
+ Qt.resolvedUrl(\
+\x22images/back.png\
+\x22)\x0a readonly \
+property url che\
+ckmark: Qt.re\
+solvedUrl(\x22image\
+s/checkmark.png\x22\
+)\x0a readonly p\
+roperty url next\
+: Qt.res\
+olvedUrl(\x22images\
+/next.png\x22)\x0a \
+readonly propert\
+y url qtLogo: \
+ Qt.resolvedU\
+rl(\x22images/qt-lo\
+go.png\x22)\x0a rea\
+donly property u\
+rl sliderHandle:\
+ Qt.resolvedUrl(\
+\x22images/slider_h\
+andle.png\x22)\x0a \
+readonly propert\
+y url tab: \
+ Qt.resolvedU\
+rl(\x22images/tab.p\
+ng\x22)\x0a}\x0a\
+\x00\x00\x05t\
+/\
+/ Copyright (C) \
+2017 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick 2.\
+12\x0aimport QtQuic\
+k.Window 2.1\x0a\x0aIt\
+em {\x0a id: con\
+tainer\x0a\x0a prop\
+erty alias text:\
+ buttonLabel.tex\
+t\x0a property a\
+lias label: butt\
+onLabel\x0a sign\
+al clicked\x0a p\
+roperty alias co\
+ntainsMouse: hov\
+erHandler.hovere\
+d\x0a property a\
+lias pressed: ta\
+pHandler.pressed\
+\x0a implicitHei\
+ght: Math.max(Sc\
+reen.pixelDensit\
+y * 7, buttonLab\
+el.implicitHeigh\
+t * 1.2)\x0a imp\
+licitWidth: Math\
+.max(Screen.pixe\
+lDensity * 11, b\
+uttonLabel.impli\
+citWidth * 1.3)\x0a\
+ height: impl\
+icitHeight\x0a w\
+idth: implicitWi\
+dth\x0a\x0a SystemP\
+alette { id: pal\
+ette }\x0a\x0a Rect\
+angle {\x0a \
+id: frame\x0a \
+ anchors.fill: \
+parent\x0a c\
+olor: palette.bu\
+tton\x0a gra\
+dient: Gradient \
+{\x0a Gr\
+adientStop { pos\
+ition: 0.0; colo\
+r: tapHandler.pr\
+essed ? Qt.darke\
+r(palette.button\
+, 1.3) : palette\
+.button }\x0a \
+ GradientSt\
+op { position: 1\
+.0; color: Qt.da\
+rker(palette.but\
+ton, 1.3) }\x0a \
+ }\x0a an\
+tialiasing: true\
+\x0a radius:\
+ height / 6\x0a \
+ border.color\
+: Qt.darker(pale\
+tte.button, 1.5)\
+\x0a border.\
+width: 1\x0a }\x0a\x0a\
+ TapHandler {\
+\x0a id: tap\
+Handler\x0a \
+onTapped: contai\
+ner.clicked();\x0a \
+ }\x0a HoverHa\
+ndler {\x0a \
+id: hoverHandler\
+\x0a }\x0a\x0a Text\
+ {\x0a id: b\
+uttonLabel\x0a \
+ text: contain\
+er.text\x0a \
+color: palette.b\
+uttonText\x0a \
+ anchors.center\
+In: parent\x0a }\
+\x0a}\x0a\
+\x00\x00\x03)\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\
+\x00\x00\x02\xf0IDATx\xda\xe5\x9b_h\xcda\
+\x18\xc7?\x9bm1\xab\x91\xc2\xd0Y+5\xbb`h\
+\xc9\x85\x0b7HJ\x93H))\xe5\xc2\xcd\xb0\x91R\
+\xdc(7\xbbP\xae\x88\x5cXI[v%\xc9\x9fb\
+.\xfc\xbd\xc0(\xffN\xc8\xc6\xd9p16\x8c9.\
+~?u\xac\xe3\x9c\xf3}\xb7\xc3\xfb{\xce\xb7\xde\xab\
+\xd3\xef=\xef\xe7y\xdf\xe7\xf7{\xde\xe7}^\xb0\xa7\
+\x12\xa0\x1aX\x03\xb4\x02W\x8080\x00\x0c\x03\x83@\
+w\xf8\xbb9m\x04n\x03\x9f\x80d\x96v\xc3\x12x\
+\x05p1\x07\xe8\xd4\xb6\xc2\x0a|5\xf0Z\x84?\x0f\
+L\xb0\x00_\x16\xfa\xb6\x02\xff\xde\xca\xccO\x04\xee\x89\
+\xf0\x1f\x81\x1a+\x068)\xc2'\x81uV\xe0\x0f8\
+\xc0\xef\xb6\x02\xbf\x0a\xf8.\xc2\xb7\x01\xc5\x16\xe0k\x80\
+!\x11\xfe!Pj\x01~*\xd0#\xc2\xf7\x02\x95V\
+\x96~\x9b\x08?b)\xd89\xec\xf0\xd2\xdbb\xe9\xa5\
+\xa7\xc2\x1f\xb3\x14\xec$D\xf8\xa7\xe1s&\xd4-\xc2\
+\x0f\x02\xe5\x85\xea\xf7?\x81\x95V\xe0\xeb\x1d\xfc\xbe\xd5\
+\x0a\xfcl\xe0\xb3\x08\x7f\xd6\x0a|)pI\x84\xef\x01\
+\xa6Y1@\x93\x83\xdf7X\x81_V\xc8\xdb\xdb\x0a\
+\xe0\xb9\x83\xdf\x17Y1\xc0\x09\x11>\x8e!m\x10\xe1\
+\x07\x809V\xe0g\x02}\xa2\x01\xb6Y\x9a\xfd\x0e\x87\
+\xcc\x8e\x19\xed\x13\xe1\xef[\xda\xe4\xd4\x91\xdb\xf1Uj\
+rc\x91\xa5\xd9\xbf.\xce\xfe&K\xf0\x07E\xf8\xd3\
+\x96\xbe\xf7\x0b\xd0R\xda\x09`J!/\xfd\x98%\xf8\
+\xfd\x22\xfc^K\xf0\x0d\xc07\xb4\xc3\x0cS\xba\x8av\
+\x82;\xd9\x12\xfc\x1e\xf1{\xdf\xe8\xcb\xc0g\x01k\x09\
+\x8e\xa1\xaf\x01G\x80*\xb1\x8fZ\xd1\xef;|\x00/\
+&8X\xe8O3\xc0w\xe2\xf2\xbc \xc0?\xc2\x83\
+\x13\xdc%\xc0\x87,\x03=\x9ac_\x8d\x02\xfcW\x1f\
+B\xdd\x96\xd0\x07\xb3\x0d\xf6Y\x98\xc1\xc9\xa4\x18AM\
+^\xae\x068\xf4\xbf\xe1\xeb\xc5\x08m^\x16\x17:'\
+\xf4u\xc7\x07\xbfW\x8f\x9e\x8fg\xe8k\xb9\x98\xdd\xf1\
+\xa2h\xe9.zF6\x9d\x8a\xc4\xa5\xdf\xe2\xcb'\xaf\
+\xdd\xc1\x00;\xd2\xf4\xa3$7;}\x0aV\x9a\x1c\x0c\
+p\x8b?ko\xe6\x0a\xef\x91^`\xbaO\x06X\xec\
+`\x80a`~J\x1f\x0f\x84g\xb7\xfa\x16\xaeV\x85\
+A\x8ej\x84\xc7\x0e.\xe4eb\xb3$\x5c\xd2\xc9<\
+\xb77\xc0$\x9f\xc0\x7f\x87\x9e?\x80\xcb\xff\xe0\xff\x9a\
+\x81/\xbe\xee\xdaj\xf3<\xfb\xedQ\xd8\xba\xbe\xca\x13\
+\xfc\x8b\x1c\xc2g/\xb4+O\x06\x88LZ;\x86^\
+\x88\x9c\xad\x9d\x89R\xf6\xa6\x1c\xfd\x12B\xa6\xf6\xd6w\
+\xe0\xd1\x09\x88!\xa0k\x1c\xfb\xdf\x19\xc5\x1c\xde\xc2q\
+\x9a\xfd.\x22\xac'c\x84\xef'\xe2\x15\x9b\xab\xc7\x00\
+?\x02l&\xe2*\x03^:\x1a\xe0f\x94@\xffv\
+yp\x04\x98AP\xba\xa6\xaa.\xdc)F^\x95\xe8\
+%\xab\xdb1\xa6\xa5\x02\xfc)\x8c\xdc\xcc\x1a\xad\xf5a\
+\xce0\x1efr\xfa\x08\xae\x9f&\x08.'t:\xba\
+\x8a\x17\xfa\x05\xc1\xf2\xa6\x01\x10\xe5*G\x00\x00\x00\x00\
+IEND\xaeB`\x82\
+\x00\x00\x015\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x1f\x08\x00\x00\x00\x00\xcb\xce\x12h\
+\x00\x00\x00\xfcIDAT(\x15\x05\xc1AjTa\
+\x10\x06\xc0\xea\x9e\x7fF\x12\x17\x22(\xe8\x01t#\xf1\
+\x12\x9e\xdc\xadk\x97\x0a\x0aB\x5cj\x22$\x99y\xaf\
+?\xabj\xeb\xbbo\x7f\x1f\x8e[e\xbd}\xf5&U\
+\xf3\xfd\xc7\xcd\xcbc\x0a\xbf\x7f\x9d>V\xfd\xf9\xf2i\
+{\x08\xb8:|}\xfe\xae\x7f~\xd8\xee\x0a\xd8\xee\xdf\
+\xdfN\xff{vn@\xf4<\xae\xfb\xeb\xc7\x9e\x80\xbd\
+\xfa\xf2\xd4\xe7\x95\x00Fm\xb3ZK\x81\xe9\x9a\xee\xde\
+;\x80JJ\xc7\x000\x95\x85t\x80\x99\xb2jT\x88\
+\xa8\xb2[\x95)AIfY\x22\x22\xe8\x12\x0bB)\
+\xfb!,\x12\x80$\x96\x1a*%\xe20\x16Q#J\
+\xd2m\x91\xda+\x85\xba\xecc\xc5t\x22\xe8\xde\x97%\
+\x00b\xc6\x22\x09P\x11-\x00Bi\x00D\xd3I\x12\
+\x01I,\x92\x10\xa8\xa2\x8bD\x00t\x0e\xba\x04\xb2\x1d\
+j\xfa\xf0\x94\xcbX\xe0x\xc9iM\x9f\xe6\x9cKc\
+j{\xfd\xb9\xce\xe7\xdb\xab\x9a\x14\xb6\xd3\x8b\xe3\xf1?\
+V\x8e\x9e\xad\xee\x91\x1e\xc8\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x066\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0d\x00\x00\x00\x17\x08\x06\x00\x00\x00\xd0\xa6\xc5\x81\
+\x00\x00\x00\x19tEXtSoftware\
+\x00Adobe ImageRead\
+yq\xc9e<\x00\x00\x03$iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00<?xpacket beg\
+in=\x22\xef\xbb\xbf\x22 id=\x22W5M\
+0MpCehiHzreSzNTc\
+zkc9d\x22?> <x:xmpm\
+eta xmlns:x=\x22ado\
+be:ns:meta/\x22 x:x\
+mptk=\x22Adobe XMP \
+Core 5.3-c011 66\
+.145661, 2012/02\
+/06-14:56:27 \
+ \x22> <rdf:RDF \
+xmlns:rdf=\x22http:\
+//www.w3.org/199\
+9/02/22-rdf-synt\
+ax-ns#\x22> <rdf:De\
+scription rdf:ab\
+out=\x22\x22 xmlns:xmp\
+=\x22http://ns.adob\
+e.com/xap/1.0/\x22 \
+xmlns:xmpMM=\x22htt\
+p://ns.adobe.com\
+/xap/1.0/mm/\x22 xm\
+lns:stRef=\x22http:\
+//ns.adobe.com/x\
+ap/1.0/sType/Res\
+ourceRef#\x22 xmp:C\
+reatorTool=\x22Adob\
+e Photoshop CS6 \
+(Macintosh)\x22 xmp\
+MM:InstanceID=\x22x\
+mp.iid:DCE827695\
+74811E2B0EE92BEE\
+27047DB\x22 xmpMM:D\
+ocumentID=\x22xmp.d\
+id:DCE8276A57481\
+1E2B0EE92BEE2704\
+7DB\x22> <xmpMM:Der\
+ivedFrom stRef:i\
+nstanceID=\x22xmp.i\
+id:DCE8276757481\
+1E2B0EE92BEE2704\
+7DB\x22 stRef:docum\
+entID=\x22xmp.did:D\
+CE82768574811E2B\
+0EE92BEE27047DB\x22\
+/> </rdf:Descrip\
+tion> </rdf:RDF>\
+ </x:xmpmeta> <?\
+xpacket end=\x22r\x22?\
+>\x97\xa0=\xd8\x00\x00\x02\xa8IDATx\xda\x8c\
+\x94_HSQ\x1c\xc7\xcf\xbd\xbb\xd7;\xb7\xdd\xddQ\
+\x90\xbe\x0cb\x9b\x93\xd4\xf5\x10\xc1\x0a\xf4\xc5)\xd8\x1f\
+)Fd\xd4C\xeaK\xe4CB\xf6\x98\xb4\xb5\xad=\
+\xc8\xe8\xc9\xf5\x1e\xf4\x92\xd2\x96E\xeb!Y\x96\xc5\x94\
+\xc2\x94\x05\xb2\xf9\x10H\xed\xa1\x8767\xc1\xfd\xf3\xf6\
+=\xd7ML\x97z\xe0\xcb\xdd\xef\xdc}8\xbf\xf3\xfd\
+\x9es\x19Y\x96\xc9A\xc3j\xb5\x0ep\x1c\xf7\x98\xc8\
+r\xa1P,\xde`\x0e\x82\xdaZ[\xefiu\xba1\
+\xb5 \x90r\xb9Lr\xeb\xeb1n?\xc0f\xb3\xb9\
+\x0c\x06\xc3\x03Q\xaf'u<O\x0a\x85\x02\x11Eq\
+\xb5&d6\x99\x18\xadV;\x06`D\x02\xa0\xd1h\
+\x94\xf9c\x0d\x0d?\xfc~\xff\xcc\x1e\xc8l6\xabt\
+:\xdd\xb8$I\xb7 R__O\x18\x86!\x8d\x8d\
+\x8d\x09\xaf\xcf7\xb1g%\xcb\x16\xf0\xd4 I\xd7\xf5\
+U\x00\xf3F\xa3\xf1\xbb\xc7\xeb\x0d\xa1^A\xf9v\x1b\
+\xb2X,u:Q\x9c\x04\xd0\xabGK\xea\x0a`2\
+\x99\xbe=\xf4x\xa6x\x9e_F9\x09\x15\xb9\x0a\xa0\
+\xc1\xb2/\x01t)\x80ZM\xa8\xa7\xd6\xe6\xe6y\xb7\
+\xdb\x1daY6\x8e2\x04\x95\xe9\xff\x19\xb4$\x01x\
+-\x19\x0c\xedzQ\xdc\x06N\xdal\xb3\xf7GG\xa7\
+\xf1s\x01z\x05mV\xbb\xe2\x90\xc1sl\xb8]\xaa\
+\xae\x80\xdc\xce\xd8\xed\xd3wGFf\xf1~\x1e\x8a@\
+\xff\x84\xc9\xc1\xdaN\xecE\xb1\x95\xba\x84\xf6V\xef\x0c\
+\x0f\x7f\xc2;\x0a\xbd\xab\x15\x09\xdb\xda\xd2\xf2\x91\xe78\
+\x82\xbe\x95\x89T*e\xbc\xd6\xd7w\x16'\xe1\xfd\xff\
+Bg\xc7\x83\xc1\x0f8[\x0b\xa5RI\x99P\xa9T\
+$\x9dNw\xd7\x09\xc2\x0b\xeahM\x08V~y\xe4\
+\xf7O\xc1\xa99\x0a\xa2&h\x99`\x8f\xbd0(\xd2\
+\x04gwC\xf4\xc0\xd2\xbe.B\xa7|^o\xe7\xe2\
+\xd2R\x07\xcd'\x9f\xcf\x93\xcc\xda\x1a\xc9\xa4\xd3\x9f\xb3\
+\xb9\xdc\xf9d2\x99\xd9\x09)O\xa8\x07\xb2\x07\x02\x81\
+\xf6\xb9X\xccA\xf7\xb8\xb1\xb1A\xd6\x00\xa63\x99\xaf\
+\xb9\x5c\xee\x5c\x22\x91\xf8\xbd\x13\xaa\x0e\x07\xd4\xf1$\x18\
+<\x1d\x8dF/( V\xccf\xb3t\x9fq<{\
+\x00\xfe\xdc}`i\x98\xf9\xdbCC4\xb3\xe2\x9bH\
+\xe4\x12\xee\x11\xc3l\xb5\xd2\x06\xcd\xc04G\xad\xabA\
+\xf3\xc9\x0f\x0c\x0eR\xb0\x10\x0e\x87\xaf\x08\x82\xc0\xd2\x0c\
+\xd1\x93yS\x96C*\x97\xcbU\xcb\xd5_\xd0\x1f\x5c\
+\xc2\xa3\x88 \x15\x8f\xc7O\xe0\xc9\x22}\xb2Y.\x1f\
+a\xf7\xb9\xb8\x8b\xd0\x84\xd3\xe9\x5c\xbe\xd9\xdf\xff\x0c\xdf\
+\x88\x0c\x96+uuw\x87\x99C|X\x9a\xa0\xab\x10\
+_\xa9K\x87\x81\xe88\x0e]\x86\xb4\xf4<\xfe\x15`\
+\x00\x07\x7f\xeb\x18\x9af\x83_\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x05[\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x12\x00\x00\x00\x1f\x08\x06\x00\x00\x00\xeaP\x9d\x89\
+\x00\x00\x00\x19tEXtSoftware\
+\x00Adobe ImageRead\
+yq\xc9e<\x00\x00\x03$iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00<?xpacket beg\
+in=\x22\xef\xbb\xbf\x22 id=\x22W5M\
+0MpCehiHzreSzNTc\
+zkc9d\x22?> <x:xmpm\
+eta xmlns:x=\x22ado\
+be:ns:meta/\x22 x:x\
+mptk=\x22Adobe XMP \
+Core 5.3-c011 66\
+.145661, 2012/02\
+/06-14:56:27 \
+ \x22> <rdf:RDF \
+xmlns:rdf=\x22http:\
+//www.w3.org/199\
+9/02/22-rdf-synt\
+ax-ns#\x22> <rdf:De\
+scription rdf:ab\
+out=\x22\x22 xmlns:xmp\
+=\x22http://ns.adob\
+e.com/xap/1.0/\x22 \
+xmlns:xmpMM=\x22htt\
+p://ns.adobe.com\
+/xap/1.0/mm/\x22 xm\
+lns:stRef=\x22http:\
+//ns.adobe.com/x\
+ap/1.0/sType/Res\
+ourceRef#\x22 xmp:C\
+reatorTool=\x22Adob\
+e Photoshop CS6 \
+(Macintosh)\x22 xmp\
+MM:InstanceID=\x22x\
+mp.iid:DCE827655\
+74811E2B0EE92BEE\
+27047DB\x22 xmpMM:D\
+ocumentID=\x22xmp.d\
+id:DCE8276657481\
+1E2B0EE92BEE2704\
+7DB\x22> <xmpMM:Der\
+ivedFrom stRef:i\
+nstanceID=\x22xmp.i\
+id:DCE8276357481\
+1E2B0EE92BEE2704\
+7DB\x22 stRef:docum\
+entID=\x22xmp.did:D\
+CE82764574811E2B\
+0EE92BEE27047DB\x22\
+/> </rdf:Descrip\
+tion> </rdf:RDF>\
+ </x:xmpmeta> <?\
+xpacket end=\x22r\x22?\
+>\xd9\x0c\xdf\xc0\x00\x00\x01\xcdIDATx\xda\xac\
+\x95;K\x03A\x14\x857\x994\xdaF1>@\xc5\
+\x88A\x8c,*\x16b#XZ\x08\x06\x04\x0b\xa3\xad\
+\x85\x9d`\x13\x0b\x1bm,5\x8d\x88\x89\xd8(B4\
+>@B\x88\x16\x16\x22b:\xff\x86 X\x04]\xcf\
+\x95+\x84e\xe6\xee\xaef\xe0\xec\xcc\xee\x1c\xbey\xec\
+\xbd3\x91\xa5t\xba\xd9\xb2\xac\x03h\x0ez\x832\x87\
+\xb9\x5c\xd6\x0aX\xc2\xd0\x064\x0fE\xa0(\xb4\x07\xf8\
+\xfa_@\xe3\x9a\xef[\x80e\x82\x82\x1e\x0d}\x9b\x80\
+m\xfb\x05)\xdb\xb6\x1fPO@\xbd\x9a\xfeI\xf47\
+\xbdT\xab%/P\x88\x1e\xbc\xe1\x97\xd0\x94\xc1\xb7\x03\
+\xad\xe1'8\xc6\x19\xd1\x03#\xd60\xf2\xa903\xfa\
+\xde\x06\xcf5\xbcf\x90\x0b6\x0c\x0dh\xbcc\x12L\
+\xd5\xbf0\xec\x0cM[\x80\xb5\xc3s\x03\xafc\x041\
+\xec\xd3\x036\x0a\xc5\xe19\xaf\x87)\xddz\xeb`q\
+(\xa9\xb1$\xdd0e\xfa\x0b\x0c+x\xc0\xfa\xe1)\
+\x927\xe4\x15\x1f\x08\x0d\x1a,\x0f-\x18,E(\xa5\
+\xbc@4uZ\x02\x9a1\xde\x1fw\xa1}\x8c)?\
+\xe1\xcf\xb0+4;\xa1\x11\xdd2\xc3\x01\xf22\xca1\
+\xa6+\xef!?\x04\xecS+\xaa24d\xb0\xac\xa8\
+\x06@V\x91\x83\xbb\xca\x03\xd2\x81\xaa$\xcd\x84 b\
+\x1c\x01\xd2\x85\xea\x0eJ\x08\x90\xac\x18\xd9\x0c\xa9@}\
+\x9a\xee/h\x19\x90}1\xd7\x00\xe9\xe1=1A\x16\
+\x019\x12\xb3\x1f\x10J\x87{\xa8[\x80\x1c\x8b\xe7\x11\
+C*\x1ct\xeeR\xa3\x9b\x06\x90\x13\xf1\x84\x04$\xc1\
+\xcb1AR\x80\x14\xc4\xc3\x1f\x90A^NL\x80\x5c\
+x\xc5\x1b]\x8a\xb4q-\x9a\xbe\x0fh\x16\x90[?\
+\xd1\x1f1$!Af\x00)\x07\xb9 \x9f\xff\x0b\xf9\
+\x05\xd1\x81\xf5\xc4\xef\xaf\xd0tP\xc8\xcf\x05\xe98\x8e\
+\xd5\x88\xf2-\xc0\x00\xaa\xfa\xae\x1fG|9m\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03w\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x1b\x00\x00\x00\x1c\x08\x06\x00\x00\x00\x90\xd1\xc4\xed\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03)IDATH\x0d\xbd\
+V=LZQ\x14\x06\xa4\xd1PE\x03\x14\x08\x83\xc8\
+fL\xd3\x10\x93\x06\x97\xa6\xdd\xbb3th\x8c\xa1\x1b\
+\x9d\x18\xbauaj\x22k'6\x17\x87v\xec\xd6\xa5\
+\x1b.\x84\x04\x02&\x18\x15\x02\x89\xd2\x8a\xfc$\xb6D\
+y\xaf\xdfw\xfb\xde\xf5\xf9\xfa\xe4\xa76\x9e\xe4\xe4\xde\
+\xc7\xbd\xdf\xf9\xee\xf9\xdey\xe7bWU\xd5v_\xe6\
+\xb8/\x22\xf28'%\xb3\xc3\xb4\xbd\xfah\x84\x0ay\
+\xa0\xd2H\x99\xecc\xd6m\x1a\x09\x09\x8cn$\xe2\x9c\
+$\xd2o#\x1dI\x06\x22\xcaL\x12\xf3\xa8\x13K\x02\
+\xecQ4B1\x82\x90\xe3\x0d\xb3\x94\xd1\x90\x0dI\xe8\
+3\xf0\xd9\x85\x85\x85@\x22\x91x\xbe\xbc\xbc\xbc\xb6\xb8\
+\xb8\xf8\xa8\xdb\xed~\xaf\xd7\xeb\xe5l6\xfb\xad\xdf\xef\
+\x9fb\xcf\x00>\x84+\x9a\xeaL\xf2ZZ\xce\xcd\x8e\
+\xcd$\xe0Af\xe1\x0f\xa3\xd1\xe8\xd3\x9d\x9d\x9dO\xd5\
+j\xf5\xe7\xd9\xd9\x99z~~\xae\xb6\xdbm1\xf2\x99\
+\xbfs=\x16\x8b=\xe1~\x0dG\xbc\xc3\x18{\x1c\xd1\
+<2y]\xa9T\xba$h6\x9b\xea\xe1\xe1!\x83\
+K\xe73\x7f\xe7z\xa9T\xea\xc6\xe3\xf17 \x99\xb7\
+\x22\xbc\xf1\xce4\xf9t\xd9\x1e\x00\xf8j{{\xfb#\
+\xe4s\x22\x03q0\x04\xb14\xca\xe6\xf7\xfbm \xbd\
+L\xa7\xd3\x09H\xfb\x19\x1b/\xe1BVd\xa8\x9a\xc9\
+t\x22'\xa4{\xbc\xbb\xbb\xfb5\x14\x0a\xb9OO\xf9\
+:&3\x9f\xcfg;99\xe9mnn>\xdb\xdb\
+\xdb\xab\x02u\x05\x1f\x82Kapa\x86\xa2`\xa5\xcd\
+\xa6R\xa9w\x81@\xc0\xddj\xb5\xb4\x1d\x93\x0dT \
+\x18\x0c\xba\x93\xc9\xe4{\xc6\x81\x8b\xcae|I\xa6\x85\
+\x12e\xce\xaa\xdb\xd8\xd8xyqq1R:+z\
+\x16\x04q\xc43\x0e\xf6\x90\x83q\xc5\x84#M\x9c\x80\
+\xe3\xd6\xd6\xd6\x0b\x8f\xc737\x18\xb0\x92\xa77\xe2\x88\
+g\x1c\xa0e\x5csf\x8cl\x8fD\x22\xab\x0e\x87\xc3\
+6\x1c\xf2\xddNo\xc4\x11\x1f\x0e\x87\xd7\x80&\x990\
+K2\xb7\xdb\xed\xa7\x1cw1\xe2\x97\x96\x96|\x881\
+\x92L\xed\xf5z-\x96\xf2]\x8c\xf8N\xa7\xf3\x031\
+\xe4\xa9\xad2S\x8f\x8e\x8e\xf6\x15E\xb1\xcd\xcc\xb0K\
+Mo\xc4\x11_\xab\xd5\xca@K2\xf9\x9d\xb14\xb1\
+\xc0\xe8NTQ8\x9f\xcf\x17\x5c.\xd7\x1c+kZ\
+\x03\x8e\x15\xf9k}}=\x8a\x9eY\x03^|k\xe6\
+\xccx\x0a\x85M5\x97\xcb}!hZ9\xb9\x9f8\
+\xe2\xb5\xe6\xac\xdf\x06\xd7\xa5\x8f\x17J\x22\xdd\x07\x99L\
+\xe6\x03;\x81\xd7\xeb\x9d*1\xb6\xacF\xa3\xd1'\x1e\
+@~;\x22&\xe3[f\x86\x0d\xc3B\xa1P\x06\xe0\
+-Nw\x85N26Cf\xc4V\x85\xa2\xb8Bo\
+L\x11\xcf8p\x99\xd9\xd8\xae\xcf.^,\x16{\x93\
+t\xfd\x83\x83\x83\x0eo\x09\x10Xv\xfd\xbf\xc8\xfe\xa8\
+\xf9o\xf7\x19\xef=\x10\xddz\x9f\xc9j\xc4&i\x90\
+\x84\x95I\xa7\xcc\xf4\x1b7\xf5\xca\xca\xca*\xfb\x1e\x0b\
+\xe0\xf8\xf8x\xdf\xea\xa6\x06F\xc8\xc7w\x85\xb90K\
+2\xb9\xf8\x9f\xff\x83\x8c$#\xa9!K=[\x8ef\
+\xd3\xabXV\x9ey\x03\x9f\xc7\x92\xe9 \x8dT`\xf4\
+\xdf\x0c\xa3\x90\xca(\x99aMN'&\x93\x88;L\
+~\x03}U80w\xf4\xee\xee\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x18@\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\x00\x00\x5cr\xa8f\
+\x00\x00\x00\x19tEXtSoftware\
+\x00Adobe ImageRead\
+yq\xc9e<\x00\x00\x03*iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00<?xpacket beg\
+in=\x22\xef\xbb\xbf\x22 id=\x22W5M\
+0MpCehiHzreSzNTc\
+zkc9d\x22?> <x:xmpm\
+eta xmlns:x=\x22ado\
+be:ns:meta/\x22 x:x\
+mptk=\x22Adobe XMP \
+Core 5.6-c132 79\
+.159284, 2016/04\
+/19-13:13:40 \
+ \x22> <rdf:RDF \
+xmlns:rdf=\x22http:\
+//www.w3.org/199\
+9/02/22-rdf-synt\
+ax-ns#\x22> <rdf:De\
+scription rdf:ab\
+out=\x22\x22 xmlns:xmp\
+=\x22http://ns.adob\
+e.com/xap/1.0/\x22 \
+xmlns:xmpMM=\x22htt\
+p://ns.adobe.com\
+/xap/1.0/mm/\x22 xm\
+lns:stRef=\x22http:\
+//ns.adobe.com/x\
+ap/1.0/sType/Res\
+ourceRef#\x22 xmp:C\
+reatorTool=\x22Adob\
+e Photoshop CC 2\
+015.5 (Macintosh\
+)\x22 xmpMM:Instanc\
+eID=\x22xmp.iid:EF4\
+E1F5F50C611E689D\
+8B84085AD92F4\x22 x\
+mpMM:DocumentID=\
+\x22xmp.did:EF4E1F6\
+050C611E689D8B84\
+085AD92F4\x22> <xmp\
+MM:DerivedFrom s\
+tRef:instanceID=\
+\x22xmp.iid:EF4E1F5\
+D50C611E689D8B84\
+085AD92F4\x22 stRef\
+:documentID=\x22xmp\
+.did:EF4E1F5E50C\
+611E689D8B84085A\
+D92F4\x22/> </rdf:D\
+escription> </rd\
+f:RDF> </x:xmpme\
+ta> <?xpacket en\
+d=\x22r\x22?>j\x12\xd3\xd3\x00\x00\x14\xacI\
+DATx\xda\xec\x9d\x09\x98V\xd5y\x80\xbf\x7f\xf6\
+}\x83\x19\x96a\x97m\x10A\xa1\xb8\x00\x06p\xc1h\
+]\xaaF\xf3XS5\x1a\xd7\xb4Q\xa3\xb1\xb1\xc6G\
+\xd3j%mS\x97<\xd5\x94j\x88q\x97 (\x06\
+\x97\x22ZqEPQ\x04\x14\x10d\x86\xd9g\x98}\
+\x9f\xf9{\xbf\x9bj\x091d\x06\xbe\x7f\xe6.\xef;\
+\xcf\xff\x8c\xe3\xa3\xe7\xbf\xf7\xdc\xfb\xbd\xf7\x9cs\xcf\xf9\
+N$\x1a\x8d\x0a\x00\x84\x938\xaa\x00\x00\x01\x00\x00\x02\
+\x00\x00\x04\x00\x00\x08\x00\x00\x10\x00\x00 \x00\x00@\x00\
+\x00\x80\x00\x00\x00\x01\x00\x00\x02\x00\x00\x04\x00\x00\x08\x00\
+\x00\x10\x00\x00 \x00\x00@\x00\x00\x80\x00\x00\x00\x01\x00\
+\x00\x02\x00\x00\x04\x00\x00\x08\x00\x00\x10\x00\x00 \x00\x00\
+@\x00\x00\x80\x00\x00\x00\x01\x00\x00\x02\x00\x00\x04\x00\x00\
+\x08\x00\x00\x10\x00\x00 \x00\x00@\x00\x00\x80\x00\x00\xe0\
+O\x13\xf1\xca\x81,\xd8p\xce\x11\xce\xaf5\xceg0\
+\x97\x05 D\x02 \xf8\x01B*\x00\x82\x1f \xa4\x02\
+ \xf8\x01B*\x00\x82\x1f \xa4\x02 \xf8\x01B*\
+\x00\x82\x1f \xa4\x02 \xf8\x01B*\x00\x82\x1f \xa4\
+\x02 \xf8\x01B*\x00\x82\x1f \xa4\x02 \xf8\x01B\
+*\x00\x82\x1f \xa4\x02 \xf8\x01B*\x00\x82\x1f \
+\xa4\x02 \xf8\x01B*\x00\x82\x1f \xa4\x02 \xf8\x01\
+B*\x00\x82\x1f \xa4\x02 \xf8\x01B*\x00'\xf8\
+\x8fq~\xbd\xec|\xb2\xa8F\x80\x10\x09\x80\xe0\x07\x08\
+\xa9\x00\x08~\x80\x90\x0a\x80\xe0\x07\x08\xa9\x00\x08~\x80\
+\x90\x0a\x80\xe0\x07\x08\xa9\x00\x08~\x80\x90\x0a\x80\xe0\x07\
+\x08\xa9\x00\x08~\x80\x90\x0a\x80\xe0\x07\x08\xa9\x00\x08~\
+\x80\x90\x0a\x80\xe0\x07\x08\xa9\x00\x08\xfe\xfe!#>\xfd\
+\xf7\x15\x1f\x89Hj\x5c\x8a\xb4t\xb7\xba\x7fwE\xbb\
+\xa4\xad\xa7\x9d\x0a\x82\xfe\x17\x00\xc1\x7f\xe8\xc4E\xe2d\
+d\xf2p\x19\x99R(\x85\xc9C\x9d\xcf0)H\x1a\
+$9\x09\xd9\x92\x97\x98+iq\xa9\x92\x16\x9fz\xc0\
+2\xa2\xceOsw\x8b4t5J]W\xbdTw\
+\xee\x95\xaa\x8ej\xd9\xd3^.\xa5\xce\xe7\xf3\xd6/\x9c\
+\x7fWKe\x83\x9d\x00\x08\xfe\x83#3>C\xa6g\
+N\x91\xa9\xe9ErDF\x91\x8cK\x1d-\xc9qI\
+1\xff\xde\xba\xae\x06\xf9\xace\x87lj\xda\x22\x1b\x9b\
+6\xcb\x96\xe6\xcf\x9c\xd6C7\x17\x04\x0eZ\x00\xf5\x04\
+\x7f\xef\x18\xe4<\xc9\xe7\xe7\xce\x919\xd9G\xcb4'\
+\xe8\xf5\xa9?\xd0h\x8b\xe1\xdd\x86\xf7\xe5\xcd\xbau\xf2\
+f\xfd:\xe9\xe8\xe9\xe4BA\x9f\x04\x10\xa5\x1a\x0e\xd4\
+G\x8a\xc8q\xd9\x7f!g\xe6/\x94YYG\xb9\x7f\
+{\x15\x1dOxe\xefZYQ\xf5\x82\xecl\xdd\xcd\
+\xc5\x03\x04p\xb0\xc4G\xe2ea\xde<\xb9`\xe89\
+2\xc2\xe9\xcf\xfb\x8d\x0d\x8d\x1f\xc9\x92\xd2'es\xf3\
+\xa7\x5cL@\x00}av\xf6,\xb9j\xc4\xc5\xbe\x0c\
+\xfc\xfdy\xa7~\x83\xdc_\xb2DJ\xda\xcb\xb8\xb0\x80\
+\x00\x0e\xc4\xe0\xc4<\xb9~\xd4\x95n\x93?HtF\
+;\xe5\xf1\xf2\xe5\xf2X\xf9o=;`\xa8oH\x1e\
+*\xba\xfb\x90\xcb\xf9m\xe5\xf3\xb2\xcc\xf9@\xefH\xa0\
+\x0a~\xcf\xdc\x9cc\xe4G\xa3\xae\x91\xcc\x84\x8c\xc0\x9d\
+[b$Q.\x1ev\xbe\x1c\x9b=C\xee\xd8y\xb7\
+\xfbZ\xd1k\xc49?C\x92\xf2\x0f\xb9\x9c/\xe7Y\
+@o\xeb=\xecM \xe7\xe7{\xc3/\x94\x7f\x1cw\
+S \x83\x7f_&\xa5\x8d\x97\x07&\xff\x8b\xcc\xcc\x9c\
+\xc6\x9d\x0f\x08 !\x92 \xb7\x8f\xbbQ\xfez\xe89\
+\xa19g}B\xfel\xfc\xad\xb20o>w?\x84\
+W\x00\x1a\xfc?\x1d\xf7#9>\xe7\xd8\xf0]\xf4H\
+\x9c\xfcx\xcc\xdf\xc9\x99\xf9\xa7\x10\x01\x08 \x9c\xcd\xfe\
+[\xc6\x5c\x1b\xb8\xc1\xbe\xber\xed\xc8\xcbe^\xeel\
+\xa2\x00\x01\x84\x8b+\x0a\xff\x86\x1b\xff+\x11^'S\
+\xd2'\x12\x09\x08 \x1ch\x93\xff\xdbC\xce\xe2\xca\x7f\
+\xd5\x15\x8a\x97\xdb\xc6\xdd(\xd9\x09\xcc\x06G\x00\x01G\
+\xdf\xf3\xdf4\xfa\xfb\x5c\xf5\xfd\xc8O\x1c$7\x8e\xbe\
+\x9a\x8a\x08\xe3\x03 L'{\xc3\xa8\xab%=>m\
+@\xbe[\x17\xe9\x94uT\xb8K}\xdb{:\xa4=\
+\xda\xee\xfe\xd6\x15\x84\xe9qi\x92\xe4\xfc\xceK\xccq\
+\xdf\x85\x0f\xc4z\x03]\xe0tR\xde7du\xed\xeb\
+D\x05\x02\x08\x1e'\xe4\xce\x95c\xb2g\xf4\xcbwi\
+`\xbf\xdf\xf8\x91|\xdc\xb4E\xb6\xb6l\x93\x92\xb62\
+\xa9\xe9\xdc\xeb\xae\xf7\xff\xf3M\xf2\x04\x19\x96\x5c \xa3\
+SF8}\xf3I2#\xf3\x08\x99\x98vX\xbf\x1c\
+\xf75#.\x91\xb7\xeb\xd7\xbb+\x0c\x01\x01\x04\x86\xe4\
+\xb8d\xb9r\xc4E1\xff\x9e\xf7\x1a>\x94U5\xaf\
+\xc8;N\x10\xa9\x04\x0e\x06\xcd\x0cT\xdcV\xea~\xde\
+\xa8[\xf7U\xd7\xe5\xc4\xbc\xe3\xe5\xcc\xc1\xa78r\x18\
+\x12\xb3\xe3\xd7\xe4%\x17\x0d;_\x1e(\xf95\x91\x81\
+\x00\x82\xc39\x05\xa7\xb9\xfd\xdcX\xa1\xeb\xf0\x1f\xda\xf3\
+\xb8\xecj+\x8eI\xf9\x9a\x05\xe8\xa9\x8ag\xe5\xe9\x8a\
+\xe7dA\xee\x1c\xb9t\xf8\x052<yhL\xbe\xeb\
+\xec\xfc\xd3\xdc\xb9\xf4\x95\x1d\xd5DG\x08\x08\xfc \xa0\
+\xce|\xbb`\xc8\xd91\x0b\xcc\xbf\xdf\xfeOr\xeb\x8e\
+\x9f\xc5,\xf8\xf7E\xbb\x10k\xf6\xbe!\xdf\xdd|\x9d\
+<R\xb6\xb4W]\x8a>?\x11\x22\xf1r\xe1\xd0s\
+\x89\x0c\x04\x10\x0ct\xb6[,\x16\x88\xe8z\xfb\xcb\xb6\
+\x5c\xef6\xfb\xfb\x1b]\xdd\xb7\xa4\xecI\xb9a\xdbm\
+\xd2\xd8\xd5d^\xfe\xa9\x83N\x94AN\xb7\x03\x10\x80\
+\xbf\xfb7\x91\x04\xb7Ik\xcd+\xb5k\xe5\xe6\xedw\
+\xc4$\xf8\xfa\xc2\x87\x8d\x9f\xc8\xf7?\xbd\xd9<Q\xa8\
+\xb6\x02\xce\xce?\x95\xe8@\x00\xfefA\xeel7\x8f\
+\x9f%:J~\xd7\x17\xf7yf]}I{\xa9\xdc\
+\xb8\xedv\xf3\x91\xfb\xd3\x07\x9f\xec.#\x06\x04\xe0[\
+N\x1b|\x92iy:2\xaf\xeb\xe9{\xa2=\x9e:\
+\xcf\xddm{\xe4\xce]\xf7\x98\x96\x99\x95\x90)ss\
+\x8e&B\x10\x80?\xd1t^\xd33\x0e7+O\x83\
+\xfe\x8e]wKkO\x9b'\xcfWS\x7f=[\xf5\
+\xa2\xf9X\x00 \x00\x7f6\xff\xf3\xe6\x9a\x96\xb7\xbcj\
+\x95lk\xf9\xdc\xd3\xe7\xfc`\xe9c\xb2\xb7\xb3\xce\xac\
+\xbc\x99Y\xd3\xdc\xb9\x01\x80\x00|\xc7\xfc\x1c\xbb\xd5~\
+\xbae\xd7\xa3\xe5\xcb<\x7f\xce:\x0e\xb0\xb4r\xa5Y\
+y:%9\x8c\xf9\x12\x10@\x00\x9a\xffcSG\x99\
+>\xfd\xeb\xbb\x1a|q\xee\xda\x0d\xd0\xf5\x06V\xcc\xc9\
+\x99E\x94 \x00\x7fqL\xf6L\xb3\xb2\xba\xa3\xdd\xf2\
+L\xe5*\xdf\x9c\xbb\x8eQ\xac0\x1c\x0b8*s\xaa\
+;\x95\x1a\x82I \xa7\x02\x1fk(\x00\xddv\xab\xc6\
+g\x1br\xbeT\xfb\xaa\x5c4\xec<\x93\xb2\xf4U\xa0\
+.H\xd2\xd7\x9f}A\x93\x8c\x14\xf5!\xd1\x88\xd5\xbe\
+\x8a\xfa\xbd\xe7\x16\x9cn^\xa7-N\xf7\xea\x85\x9a5\
+\x08\xc0\xf3'\x14I\x90\xa9\xe9\x93\xcd\xca{\xd1\x87\x17\
+\xbd\xac\xbd\xc2]\x89\xa8\x9b\x96Z\xa0oS\xfa*\x00\
+\xddFMS\x91\xf77\xb3\xb2\x8et?\xd6TtT\
+\x05R\x00\x81\xeb\x02\x14\xa5O0{\x9a4u7\xbb\
+\xaf\xd7\xfc\x88\xee\x11h\xc5\x91\x99\x87\x0b0\x06\xe0\x0b\
+\xa6eL1+k}\xc3F\xdfn\xbdm)\xae\xf1\
+\xa9c%\x85q\x00\x04\xe0\x97\x16\x80\x15\xeb\x1a>\xf0\
+m=\xe8r^\x9d!hr\x93D\xe2dB\xda8\
+\xa2\x05\x01x\x9f\xc9iv\x02\x18\x88\x95~\x96X\x1e\
+\x7f\x11\x99\x83\x11\x80\xd7\xd1\x85?\x9aW\xcf\x02\xdd?\
+\xcfo\xa3\xff\xfb\xb3\xa9y\xabYY\x87\xa5\x8e!Z\
+\x10\x80\xb7\xb1\x9c\xfc\xf3i\xcbv\xdf\xd7\xc7\xd6\xe6m\
+fe\x8d3\xac[@\x00\xb1\x11@\xca(\xc3\xe0\xf1\
+\xbf\x00\xf4\xd5\x95\xd5\x0c\xc6\xd1)#%>\x12O\xc4\
+ \x00\xef2*e\x04-\x80\xfd\xf8\xcch\x01\x93&\
+\x09\xb1\xd8\xbe\x1b\x10@\xcc(L\x1efV\xd6\x17m\
+%\x81\xa8\x93\xdd\x86\xe71\xc2\xb0~\x01\x01\x9832\
+\xc5\xe6\x06\xd5T_\x96\x0bj\x06V\x00\xa5\x9e\x14,\
+ \x00St\x0a\xb0U\x22\xcb\xe2\xf6\xd2\xc0\x5c\xe0=\
+\x86\xe72$i0\x11\x83\x00\xbcI\xbea\x16\xdb\x92\
+@\x09\xa0\xdc\xae\x8e\x11\x00\x02\xf0*\x05\x86\x03T\x95\
+\x1d5\x81\xb9\xc0U\x9d5f\xfb\x07\x14 \x80\xc0\x11\
+\x98\xd5\x80\xb9\x89v\xa9\xab\xfc>\x01h_4\x97a\
+]g\xbdS?\x87>A\xaa/[\x88\x17\xb7\xedq\
+wL\xea\xfd\x8d\x98`\xb2w\xa3&n\xdd\xddn?\
+\x80\xabu\x88\x00<Lf|\xa6YY\xb5\x86y\xf5\
+\xbc@mW\x9d\x89\x00\xb2\xe23z\xfd\xdf\xea\x0eF\
+\xfa\xe9-\xbay\xcbs\xd3\x7fs\xc8\xc7\xa8\xdf\xf9p\
+\xd9S<\xda\xc3\xd6\x05\xc8J\xc80++H-\x00\
+K\xa1e\x1a\xd61 \x00\xe3\x16\x80\xdd\xcdY\xe7\x93\
+\xfc\x7f\xbd?\x1f\x9b\xe6\xab&\x09E\x02\x08 \xf0-\
+\x80\xc6\xee\xa6@]\xe4\x06\xc3-\xcc\xb2\xe2\x11\x00\x02\
+\xf0 }\x19\xa0\xfas\xb4v\xb7\x06\xea\x22\xb7\xf6\xd8\
+\x9dOfB&Q\x83\x00\xbcGZ|\xaaI9\x1d\
+=\x9d\xbe\xcd\x02\xf4\xa7h1\x14Zf\x0cvZ\x06\
+\x04p\xc8Xm\x01\xde\xd2\xd3\x1a\xb8\x8blyNV\
+\xf9\x16\x01\x01x\x92\xf6\x9e\xf6\xc0\x9dSGO\x07\x17\
+\x16\x82-\x808\xa3S\xe9\x8cv\x05\xee\x22\xb7\x1aJ\
+\x8dMB\x10@\xa0\xc7\x00\x82\xd8\x02\xe86\x94Zb\
+$\x81\xa8A\x00\x00\x80\x00<D\x02O\xa6~!5\
+.\x95J@\x00\xde\xc3j\xe3\x0a}\x0d\x184\x9a\x0d\
+_\x03\xea\x1e\x01\x80\x00<G\x8f\xf3cAR\x5cb\
+\xe0.2\xfdv\x08\xbc\x00Z\xba[\xb9\x9a\xfd\x22\xb5\
+(\x15\x8a\x00 \xac4w\xb7P\x09\x08\xc0{XM\
+\xdf%\xf7= \x00\x1f\xd2\xd6\xd3fRNj\x5cJ\
+\xf0\xba\x00\x11\xa6\xef\x02]\x80\xd0\xb6\x00,\xc7\x00\x9a\
+\xe8\x02 \x00/\xd2i\xf4\xfa.-\x80\xef\xb9\xd3\xe2\
+\xd3\xcc\xcab]\x01\x02\xf0$V\x83SVS\x8a=\
+%\x00\xc3nMG\x14\x01 \x00\x0f\xd2`\x98\xc5'\
+h\x12H5<\x9f\xa6.\xba\x00\x08\xc0\x834\x1a\xa6\
+\xbd\x0aZ7\xc0r`3\x88\xf9\x12\x10\x00-\x80?\
+\xc02\xbd\x98\x17\xc82L\xe3e\x95`\x14\x10\x80)\
+M\x86\x02\x18\x94\x98\x1b\xa8\x8b\x9c\x97`s>\xdd\xd1\
+nf\x5c\x22\x00\x8f\xb6\x00\x0cw\xf3\xcd\x0b\x9a\x00\x0c\
+6\x05\xb1\xaec@\x00\xa6\xec5l\x9aZ\x05L\xd0\
+\x04\xb0\x97\xe6?\x02\xf0*\x95\x1d\xd5fe\x0d6\xdc\
+ix\xa0I\x8c$\x9a%L\xad\x0a\xd0\xa6\xa9\x100\
+\x01\x94\xb7W\x9a\x95U\x98<,0\x17\xb80y\xa8\
+\x9dd;\xab\x89\x18\x04\xe0MZ{\xda\xcc\xb6\xf4\x1a\
+\x992<@\x02\xb0\x93YU\x07\x02@\x00\x1e\xa6\xa2\
+\xc3\xa6\x150$)?0)\xc6\x0aS\x86\x1a\xd6/\
+\x02@\x00!\xe8\x06\xe8&\x98#\x02\xd2\x0d\x18\x91l\
+\xd7\x9a\xd9\xddVB\xc4 \x00\xef\xb2\xa7\xbd\xdc\xac\xac\
+\x89i\x87\x05\xa2N&\xa4\x8d3+\xab\xb8\xbd\x94\x88\
+A\x00\xde\xe5\x8b\xb6b\xb3\xb2\x8a\xd2'\xf8\xbe>\x12\
+\x22\xf1rX\xeah\x93\xb2j:\xf72\x09\x08\x01x\
+\x9b\xcf[w\xd3\x02\xd8\x87\xc3R\xc7\x98\x8de\xec2\
+\x94+ \x80\x18\xb5\x00J\xccR\x83i\xd39\xc5\xe7\
+\xdb`\x15\xa5O4+\xeb\xb3\x96\x1dD\x0b\x02\xf06\
+]\xd1.\xd9\xd1\xba\xd3\xac\xf9|T\xe6\x11\xbe\xae\x8f\
+\x99Y\xd3\x0c\x05\xf09\xd1\x82\x00\xbc\xcf\x96\xe6mf\
+e\xcd\xca:\xd2\xc7\xfd\xff\x04\x99\x91i(\x80\xe6\xed\
+\xbe8o\xf6@\x08\xb9\x0065m5+\xeb\xd8\xec\
+\x99\xee+A?25c\x92Y\x1e\x00\x9df]\xd6\
+Q\xe9\x8b\xf3f\xf7\xe2\x90\x0b\xe0\xc3\xa6Mfe\x0d\
+M*\x90#2\x8a|Y\x0f'\xe6\x1eoV\xd6\x07\
+\x8d\x9b\x88\x14\x04\xe0\x0fj;\xeb\xa4\xb8\xcd\xee}\xf5\
+7\x07\x9d\xe0\xbb:\xd0\xa7\xe0\x82\xdc\xb9f\xe5ml\
+\x8a\xbd\x00\xda\x8c\xb6e\xb7L~\x82\x00|\xca\xba\x86\
+\x0f\xcc\xca\x9a\x9f;\xdbl5]\x7f1/\xe78\xb3\
+\xbc\x86Q\xe7\xe7\xbd\x86\x8d1?f\x1d\xc05\x11@\
+|\x06Q\x1dv\x01\xbcS\xbf\xde\xac,}\x15xn\
+\xc1\xe9\xbe9w\x1d\xb3\xb8`\xe8\xd9f\xe5mm\xde\
+.5\x9d\xb5\xfdr\xec\x16\x13\x8dh\x01 \x00\xa7\xc9\
+\xbaY\x9a\xba\x9b\xcd\xca\xfb\x96#\x00\xbf\xb4\x02\x16\xe4\
+\xce\x91\xd1)#\xcc\xca{\xa3\xfe\xdd~;v\x8bk\
+\x96\x93\x98MT\x87]\x00\xda\x9c\x5c[gw\xe3\xa6\
+\xc7\xa7\xc9\xa5\xc3/\xf0\xfcy\xeb\x0e@\xdf5<N\
+m\xfe\xbfV\xfb\xa6\xaf\x0404)?\x90[\xbc#\
+\x80>\xb2\xa6v\xadiyg\xe5\x7fSfx|b\
+\xd0e\xc3/4M\x00\xf2a\xe3\xa6~}\xfdg\x91\
+\xcfA\xbb@#\x93\x0b\x89\xec\xb0\x0b\xe0\xfd\xc6\x8fM\
+o^\xbd\xb1n\x19s\x9d\xfbj\xd0\x8b\xe8\xc0\xdfy\
+\x05g\x98\x96\xf9B\xcd\x9a~=\x07\xab\x94c\x13\xd2\
+\xc6\x12\xd9a\x17\x806__\xa8~\xc5\xb4\xcc\xdc\xc4\
+\x1c\xf9\xb7\x09\xb7I~\xe2 O\x9d\xab\xb6Ln\x1e\
+s\xadi\x99\xba\xfa\xef\xb5\xbdo\xf5\xaf\x00\x8cR\x8e\
+\xcd\xca:\x8a\xc8\x0e\xbb\x00\x94\xe7\xab_\x96\x0e\xa3M\
+C\xbfd\xb8\xd3\xc4\xbeo\xd2\x9d2\xceh\x99\xed\xa1\
+rR\xde7d\xd1\xf8[\xcd\xfb\xbdK+W\x9a\xbd\
+\x9a\xeb-V\x19\x87\xe6\xe6\x1c\xed9I#\x80\x01@\
+\xfb\x94/\xd5\xda7c5e\xd8\x7fLZ$\x7f\x95\
+\x7f\xea\x80M\x15\xd6\xf7\xfc7\x8c\xbaJ\xfe\xc1y\xf2\
+'\x18oi\xae\xdb\xac\xad\xacz\xa9\xdf\xcf\xc9*\xe3\
+\x90fB\xfe\xc9\xd8\xebM\xb7DC\x00>\xe5\x89\xf2\
+\x15fK\x84\xf7%9.I~0\xf2{r\xff\xe4\
+Erd\xe6\xe1\xfdv>\xf1N\xb0\xeb\xec\xc4\x87\xa7\
+\xfcB\xfer\xf0\xc91\xf9\x8e\x87\xcb\x9fv\x93\xac\xf6\
+7;Zw\x99\x95\xa5S\xb8\x17\x17\xfd\x5c\xe6\xe5\xce\
+v\x85\x00_Od\xc1\x86s\xa2A?I\x0dT}\
+Z\xc7\x92\xcd\xcd\x9f9]\x8e\xff\x96\xb5u\xef\x98m\
+U\xbe/\x05I\x83\xe5\xe4\xbcyr\xc6\xe0\x85\xee?\
+\xc7\x8a\x92\xf6R\xb9t\xf3u1\x91f\xaf\x84=\xf5\
+\x97n\x0b\xcb\x12\x9df\xbc\xb5y\x9bsneR\xef\
+\xb4\x0a\xf5\xdcT\xe0*\x86t\xa7%\x15\x1fIpZ\
+T)\xee\xdf\xfa\xef\xb5\xe5\xa0\xab)\xf5\xf5\xaf\xb6\xae\
+R\x9c\xbf?j\xda,\xb7\xec\xb8+p\xb1\x11\x8a\xb5\
+\x93\xbf)[\xea\xf6\x95c9\x99gJ\xfaD\xf7\xf3\
+\xc3QW\xca\xc6\xc6O\xdc\xc9H\x9b\x9a\xb7\xb83\xe9\
+\x0ef\x9e\xbb\xee\xe63%}\x92LM\x9f,\xd3\x9d\
+\x16\xc6\xa4~\xcaPto\xf1\x83\x03\x16\xfc\x8a\xae\xe6\
+\x1c\x92g+\x00\x9d\xcdyd\xe6T\xf7s\xb0\x04m\
+\xc3\xd8P\x09@w\xb4\xfdU\xe9\x13nK \xe6\x15\
+\xea<9ffMw?\xfb\x8eE\x94\xb7W\xb8\xaf\
+%u\xba\xab\x0a\xa1\xcdibk\xa0\xe9\xcd\xa9\xff\x8f\
+\xca)+!\xc3}\xfa\xe9\xabF\xab\xb9\xfc}\xe1\xd9\
+\xaa\x17eC?\xcc\xfb?\x10\xba\x9a\xf3\xc4\xbc\xe3=\
+w\x0fik\x00\x01\xf8\x18\xbd\xb9u\x9a\xec@,\xef\
+\xcdq\x9e\x1e\xfa\x99\xec\xe1D\xa3\xda<^\xbc\xe7\x91\
+\x01?\x8e\xf7\x1b>\xf2d\xfd\x04U\x00qa\x11\x80\
+\xce\x0bX\xb4\xeb>2\xdb~\x0d:\xe0w\xeb\x8eE\
+\x032\xf0\xb7?\xdaJ\xfa\xb4e;\x02@\x00\xb1\xb9\
+\xb9\xeer$\x00\x7f(\xc6;w\xde\xe3&T\xf5\x0a\
+\xabk_\xf7\x5c=\xe9\xc0\xa0_\xb3C!\x80}x\
+\xb3~\x9d\xfc\xaa\xf4q\x22\xff\xff\xf8\xf7\xdd\xbf\x94\xb7\
+\xea\xdf\xf3\xd41\xad\xae]k\x96 \x84V\x00\x02\xf8\
+#\x1e-_&\xcb*\x9f\x0f}\xf0\xdfS\xbcX~\
+W\xbd\xdas\xc7\xa5\xaf\xea\x96W\xad\xf2\xdcq\xf9-\
+1\x0c\x028\x00\xf7\x97\xfcZ\x9e\xacX\x11\xcas\xd7\
+\xb7\x0f\xff\xbc\xeb^yn\x00f\xfb\xf5\x16\xbd6\xf5\
+F\xbb=\xd3\x02@\x00_\xdb\xf7\xd5Q\xef_\x14?\
+$=\xd1\x9e\xd0\x9cwCW\xa3\xdc\xb4\xfd\xa7\x9e\xec\
+g\xef\x8bNG\xfe\xf9\xee\x07\x10\x00\x02\x88-\xda\xd4\
+\xbc\xd1\x09\x88\xfeJ{5\x90\xe8l\xb6\xcb\xb7\xdc \
+\x1f6~\xe2\x8b\xe3}\xa3n\x9d<\x5c\xf64\x02@\
+\x00\xb1E\x13_\x5c\xb6\xe5\x87\xb2f\xef\x1b\x81=G\
+}\xc5\xa7SY\xab:k|u\xdc\x0f\x97=%\x0f\
+\x96>\x86\x00bD\xfc\xd8+\x8bnG\x01\x22\xed=\
+\x1d\xf2z\xdd;\xeeT\xd4I\xe9\xe3\xdd\x89;AB\
+w\xcc\xd1\x19\x87\xeb\x1b7\xfa\xee\xd8?n\xda\xe2\xae\
+\xb5\x98\x9eq\xf8\x80\x06\xa1&\x99\xf1\xe2\x1c\x05\x04`\
+HYG\x85\xbb\xa8\xa7\xdc\xf9=&u\x94;=7\
+(\xe8\x96\xe7o\xd5\xaf\x97\xda\xae:\xdf\x1d{i{\
+\xb9\xac\xac~\xd9\x15\xb5f\xfc\xd1E;\xfd.\xa2\xe6\
+-\xa6;Oy\x81P\xac\x06<\xe8\xcaq~t{\
+0\xcd\x07\xa8\xfb\x04\x06a\x22\x88>\xc1\xae\xd9\xfac\
+w\x10\xd4\xafh\xf2\x93y9\xb3e\xe1\xa0\xf92-\
+\xa3(f\xcb}\xcb;*\xdd%\xca;[w\xcb\x8e\
+\x96]\xb2\xa9y\xab\x9b)\x09\x01\x84\x90A\x89yr\
+B\xee\x1c9>\xe7X9<c\x92\xafep_\xf1\
+\x83\xb2\xa2\xea\x85@\x5c\x17\xdd\x05iz\xc6\x14\x99\xec\
+t\xdb\xc6\xa5\x8eqS\xa2\xeb\x82\xaa\xdel\xed\xae\x19\
+\x8f4\xa0u\x00xO{\x85\xd3\xca(sw\x95\xd2\
+u\x11\xba,:\x0c\xd3\xc6\x11\xc0A\xa0\x9bO\xcc\xcc\
+\x9c\xe6<}\xa6\xb8\x8b\x8b\xc6:]\x05?\x09Ao\
+\xec\x8b7\xff \xd0o>T\x0c\xf9\x8e\xb4u-\x7f\
+\x5c$\xce]\xef\xdf\x1d\xed\x91\xd6\xee6i\xedi\x95\
+f\xa7\x0et\x95h\xe8[\xb9\x08\xc0\xe2fK\x921\
+)#\xdd<\x81\x85\xc9\xc3\xdc\xd4\xdcC\x93\x0b$/\
+1Wr\x13\xb2\xdd\xc1\xb7\xbe\xa0O\xa6R\xe7\x89T\
+\xdc\xbe\xc7\x1d\xfc\x9a\x96>E\x8e\xc9\x9eaz\xcc:\
+\xe0y\xfb\xe7\xff\xca\xc5C\x00\x08 \xd6\xe8\xda~\x9d\
+F\xaa\x0bJ\xb4\xbf\x9a\xea<\x8d\xe2#\xff\xff\x06V\
+\x9fJ\xfatj\xeeiq'\xea\xec\x9fQH3\x00\
+-\x99r\xafy\x8e;}-\xf8\xb6\xe16j\x80\x00\
+ F\x9c?\xe4,\xb9\xaa\xf0\x22\xd32+;\xaa\xe5\
+\x12\xa7+\xe0\xc5\x857\xd0?0\x11\xc8'\xe8\xe2%\
+\x1d\x8d\xb6D[\x16\x97\x0c\xfb6\x95\x8b\x00\xc0\xebt\
+G\xbb\xdd\xd5{\xd6|\xab\xe0\x0c\xcf\xecq\x00\x08\x00\
+\x0e\x80\xce\x88{\xd1x\xbb.\x1d!\xbfa\xd4\xd5\x81\
+Lv\x01\x08 p\xfc\xe7\x9eG\xa4\xb1\xbb\xc9\xb4L\
+\x9d!xf\xfe)Tn\xf8h@\x00>C\xd7\xc8\
+/\xde\xf3\xa8y\xb9\x97\x0f\xff\x8e\x0cJ\xcc\xa5\x82C\
+\x14\xfc\xceg!\x02\xf0!\xab\xaaW\xbb\xf3\x03,\xd1\
+W\x95\x7f;\xe2R*7D\xc1\xff\xea\xccg\xdeE\
+\x00>D\xe7\xf1\xdf\xb3{\xb1y\x22\x13\xddF\xcbz\
+\xc2\x11x7\xf8\x19\x03\xf01\xdb[w\xca\xf2\x18\xcc\
+\xe7\xbfn\xe4\x15\xee4Z\x08~\xf0#\x00\x9f\xb3\xa4\
+\xec\x09\xf3\xd5i\xba\x90\xe6\xe2a\xe7S\xb9!\x08~\
+\x04\xe0stQ\xcf\xfd%K\xcc\xcb=\x8f\xb9\x01\xa1\
+\x08~\x04\x10\x00^\xdd\xfb\xa6lh\xb4\xddNK\xb7\
+ \xd7MN\x99\x1b\x10\xec\xe0G\x00\x01\xe1\xde\xdd\x8b\
+\xdd\x15\x84\x96\xe8\xce\xc4\xa7\x0f^H\xe5\x068\xf8\x11\
+@@\xd0\x04\x16\x8f\x97/7/\xf7\x8a\xc2\xef\xb8\xdb\
+\x94C0\x83\x1f\x01\x04\x88\xc7+\x96IY{\x85\xe9\
+\xf8\x82\xe6F\x0c\xd3\x9e\x09a\x0b~%\x81\xba\x0a\x06\
+\x1d=\x9dro\xf1\x7f\xc9\xa2\xf1?9\xa4rj;\
+\xebdY\xd5\xf3\xb2\xb2\xeaei\xean\xa6b\x03\x1c\
+\xfc\x08 `\xack\xf8@\xfe\xa7\xeem\x99\x97s\xdc\
+Au#\x9e\xaexV^\xaayM:\xa3\x9dTf\
+\x08\x82\x1f\x01\x04\x90\xfb\x8b\x97\xc8\xd1YG\xf5:{\
+\x90f\x09~\xb2|\x85\x9b\x22\xcc\xcf\x99\x82\xa1\xef\xc1\
+\x8f\x00\x02\x88\xee\xfc\xa3\xbb\xe9\x5cUx\xf1\x01\xff\xbb\
+\xf5\x0d\x1b\xe5\x89\x8a\xe5\xf2A\xe3\xc7TZH\x83\x1f\
+\x01\x04\x94e\x95\xbf\x93\x85y\xf3\xffh2\x8f\x0e\xe8\
+\xbdV\xf7\x96\xfb\xc4\xd7\xa9\xc4\x10\xee\xe0G\x00\x01\xe5\
+\xcb\xecA\xf7M\xbc\xd3\xfd[\x07\x08W\xd5\xac\x96\xa5\
+\x15\xcfIYG%\x15\x14\x1c\xaa\x9d\xcf\x89N\xf0\x1f\
+\xf4L0\x04\x10Pt\x0b\xab\xa5\x95+\xa5\xad\xbbM\
+\x9e\xa9Z\xe5\xe6\x11\x80\xc0\x05\xff\x09N\xf0\x1fR\x1f\
+\x8e\xac\xc0\x00!\x0d~\x85\x89@\x00!\x0d~\x04\x00\
+\x10\xe2\xe0G\x00\x00!\x0e~\x04\x00\x10\xe2\xe0G\x00\
+\x00!\x0e~\x04\x00\x10\xe2\xe0G\x00\x00!\x0e~\x04\
+\x00\x10\xe2\xe0G\x00\x00!\x0e~\x04\x00\x10\xe2\xe0G\
+\x00\x00!\x0e~\x04\x00\x10\xe2\xe0G\x00\x00!\x0e~\
+\x04\x00\x10\xe2\xe0G\x00\x00!\x0e~\x04\x00\x10\xe2\xe0\
+G\x00\x00!\x0e~%\x12\x8d\x92\x10\x08 \xac\xd0\x02\
+\x00@\x00\x00\x80\x00\x00\x00\x01\x00\x00\x02\x00\x00\x04\x00\
+\x00\x08\x00\x00\x10\x00\x00 \x00\x00@\x00\x00\x80\x00\x00\
+\x00\x01\x00\x00\x02\x00\x00\x04\x00\x00\x08\x00\x00\x10\x00\x00\
+ \x00\x00@\x00\x00\x80\x00\x00\x00\x01\x00\x00\x02\x00\x00\
+\x04\x00\x00\x08\x00\x00\x10\x00\x00 \x00\x00@\x00\x00\x80\
+\x00\x00\x00\x01\x00\x00\x02\x00\x00\x04\x00\x00\x08\x00\x00\x10\
+\x00\x00 \x00\x008\x00\xff+\xc0\x00\x1c{0\x19G\
+\x03\xd4k\x00\x00\x00\x00IEND\xaeB`\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x9e\x88\xb4\
+\x00s\
+\x00h\x00a\x00r\x00e\x00d\
+\x00\x0c\
+\x00V'\xdc\
+\x00C\
+\x00h\x00e\x00c\x00k\x00B\x00o\x00x\x00.\x00q\x00m\x00l\
+\x00\x0d\
+\x01\xb8P\x9c\
+\x00T\
+\x00e\x00x\x00t\x00F\x00i\x00e\x00l\x00d\x00.\x00q\x00m\x00l\
+\x00\x09\
+\x08\xbf\xf4\xdc\
+\x00L\
+\x00a\x00b\x00e\x00l\x00.\x00q\x00m\x00l\
+\x00\x1a\
+\x04'S\xdc\
+\x00S\
+\x00i\x00m\x00p\x00l\x00e\x00L\x00a\x00u\x00n\x00c\x00h\x00e\x00r\x00D\x00e\x00l\
+\x00e\x00g\x00a\x00t\x00e\x00.\x00q\x00m\x00l\
+\x00\x10\
+\x09\x8e}\x5c\
+\x00L\
+\x00a\x00u\x00n\x00c\x00h\x00e\x00r\x00L\x00i\x00s\x00t\x00.\x00q\x00m\x00l\
+\x00\x0a\
+\x0a\xce\x15\xdc\
+\x00S\
+\x00l\x00i\x00d\x00e\x00r\x00.\x00q\x00m\x00l\
+\x00\x12\
+\x06\xc0(<\
+\x00F\
+\x00l\x00i\x00c\x00k\x00r\x00R\x00s\x00s\x00M\x00o\x00d\x00e\x00l\x00.\x00q\x00m\
+\x00l\
+\x00\x06\
+\x07\x03}\xc3\
+\x00i\
+\x00m\x00a\x00g\x00e\x00s\
+\x00\x06\
+\x07\x84+\x02\
+\x00q\
+\x00m\x00l\x00d\x00i\x00r\
+\x00\x0a\
+\x09\xcc\x1a\xdc\
+\x00T\
+\x00a\x00b\x00S\x00e\x00t\x00.\x00q\x00m\x00l\
+\x00\x0a\
+\x0d\xd0R\xdc\
+\x00I\
+\x00m\x00a\x00g\x00e\x00s\x00.\x00q\x00m\x00l\
+\x00\x0a\
+\x0bhq\x5c\
+\x00B\
+\x00u\x00t\x00t\x00o\x00n\x00.\x00q\x00m\x00l\
+\x00\x0d\
+\x0b]\x12\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00m\x00a\x00r\x00k\x00.\x00p\x00n\x00g\
+\x00\x07\
+\x0auW\xa7\
+\x00t\
+\x00a\x00b\x00.\x00p\x00n\x00g\
+\x00\x08\
+\x07\x9eZG\
+\x00b\
+\x00a\x00c\x00k\x00.\x00p\x00n\x00g\
+\x00\x08\
+\x0c\xf7Y\xc7\
+\x00n\
+\x00e\x00x\x00t\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x02G!g\
+\x00s\
+\x00l\x00i\x00d\x00e\x00r\x00_\x00h\x00a\x00n\x00d\x00l\x00e\x00.\x00p\x00n\x00g\
+\
+\x00\x0b\
+\x05R\xbf'\
+\x00q\
+\x00t\x00-\x00l\x00o\x00g\x00o\x00.\x00p\x00n\x00g\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x06\x9f\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00h\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x8a\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00&\x02\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01\x0c\x00\x02\x00\x00\x00\x06\x00\x00\x00\x0e\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x00,\xcb\
+\x00\x00\x01\x82_\xc7\xcc\xde\
+\x00\x00\x00P\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xbf\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00\xa2\x00\x01\x00\x00\x00\x01\x00\x00\x16\x06\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x010\x00\x00\x00\x00\x00\x01\x00\x00.\x07\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xb6\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01d\x00\x00\x00\x00\x00\x01\x00\x009S\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01J\x00\x00\x00\x00\x00\x01\x00\x006\xe7\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00N\xca\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00RE\
+\x00\x00\x01\x82_\xc1\xa7\xb9\
+\x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00C1\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01\x9e\x00\x00\x00\x00\x00\x01\x00\x00A\xf8\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01~\x00\x00\x00\x00\x00\x01\x00\x00>\xcb\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x01\xc8\x00\x00\x00\x00\x00\x01\x00\x00Ik\
+\x00\x00\x01\x82Y\xad^\x0f\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/declarative/window/AllScreens.qml b/examples/declarative/window/AllScreens.qml
new file mode 100644
index 000000000..6ce06db58
--- /dev/null
+++ b/examples/declarative/window/AllScreens.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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
+import QtQuick.Controls
+
+Column {
+ id: root
+ spacing: 8
+
+ Label {
+ text: "Total number of screens: " + screenInfo.count
+ font.bold: true
+ }
+
+ Flow {
+ spacing: 12
+ width: parent.width
+
+ Repeater {
+ id: screenInfo
+ model: (Qt.application as Application).screens
+ Label {
+ required property string name
+ required property int virtualX
+ required property int virtualY
+ required property var modelData // avoid shadowing Label.width and height
+
+ lineHeight: 1.5
+ text: name + "\n" + virtualX + ", " + virtualY + " " + modelData.width + "x" + modelData.height
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ var screens = (Qt.application as Application).screens;
+ for (var i = 0; i < screens.length; ++i)
+ console.log("screen " + screens[i].name + " has geometry " +
+ screens[i].virtualX + ", " + screens[i].virtualY + " " +
+ screens[i].width + "x" + screens[i].height)
+ }
+}
diff --git a/examples/declarative/window/CurrentScreen.qml b/examples/declarative/window/CurrentScreen.qml
new file mode 100644
index 000000000..d0f7245ef
--- /dev/null
+++ b/examples/declarative/window/CurrentScreen.qml
@@ -0,0 +1,120 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: 400
+ height: propertyGrid.implicitHeight + 16
+
+ function orientationToString(o) {
+ switch (o) {
+ case Qt.PrimaryOrientation:
+ return "primary";
+ case Qt.PortraitOrientation:
+ return "portrait";
+ case Qt.LandscapeOrientation:
+ return "landscape";
+ case Qt.InvertedPortraitOrientation:
+ return "inverted portrait";
+ case Qt.InvertedLandscapeOrientation:
+ return "inverted landscape";
+ }
+ return "unknown";
+ }
+
+ Grid {
+ id: propertyGrid
+ columns: 2
+ spacing: 8
+ x: spacing
+ y: spacing
+
+ //! [screen]
+ Label {
+ text: "Screen \"" + Screen.name + "\":"
+ font.bold: true
+ }
+ Item { width: 1; height: 1 } // spacer
+
+ Label { text: "manufacturer" }
+ Label { text: Screen.manufacturer ? Screen.manufacturer : "unknown" }
+
+ Label { text: "model" }
+ Label { text: Screen.model ? Screen.model : "unknown" }
+
+ Label { text: "serial number" }
+ Label { text: Screen.serialNumber ? Screen.serialNumber : "unknown" }
+
+ Label { text: "dimensions" }
+ Label { text: Screen.width + "x" + Screen.height }
+
+ Label { text: "pixel density" }
+ Label { text: Screen.pixelDensity.toFixed(2) + " dots/mm (" + (Screen.pixelDensity * 25.4).toFixed(2) + " dots/inch)" }
+
+ Label { text: "logical pixel density" }
+ Label { text: Screen.logicalPixelDensity.toFixed(2) + " dots/mm (" + (Screen.logicalPixelDensity * 25.4).toFixed(2) + " dots/inch)" }
+
+ Label { text: "device pixel ratio" }
+ Label { text: Screen.devicePixelRatio.toFixed(2) }
+
+ Label { text: "available virtual desktop" }
+ Label { text: Screen.desktopAvailableWidth + "x" + Screen.desktopAvailableHeight }
+
+ Label { text: "position in virtual desktop" }
+ Label { text: Screen.virtualX + ", " + Screen.virtualY }
+
+ Label { text: "orientation" }
+ Label { text: root.orientationToString(Screen.orientation) + " (" + Screen.orientation + ")" }
+
+ Label { text: "primary orientation" }
+ Label { text: root.orientationToString(Screen.primaryOrientation) + " (" + Screen.primaryOrientation + ")" }
+ //! [screen]
+
+ Label { text: "10mm rectangle" }
+ Rectangle {
+ color: "red"
+ width: Screen.pixelDensity * 10
+ height: width
+ }
+ }
+}
diff --git a/examples/declarative/window/Splash.qml b/examples/declarative/window/Splash.qml
new file mode 100644
index 000000000..41c82c0c7
--- /dev/null
+++ b/examples/declarative/window/Splash.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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
+import shared
+
+//! [splash-properties]
+Window {
+ id: splash
+ color: "transparent"
+ title: "Splash Window"
+ modality: Qt.ApplicationModal
+ flags: Qt.SplashScreen
+ property int timeoutInterval: 2000
+ signal timeout
+//! [splash-properties]
+//! [screen-properties]
+ x: (Screen.width - splashImage.width) / 2
+ y: (Screen.height - splashImage.height) / 2
+//! [screen-properties]
+ width: splashImage.width
+ height: splashImage.height
+
+ Image {
+ id: splashImage
+ source: Images.qtLogo
+ MouseArea {
+ anchors.fill: parent
+ onClicked: Qt.quit()
+ }
+ }
+ //! [timer]
+ Timer {
+ interval: splash.timeoutInterval; running: true; repeat: false
+ onTriggered: {
+ splash.visible = false
+ splash.timeout()
+ }
+ }
+ //! [timer]
+ Component.onCompleted: visible = true
+}
diff --git a/examples/declarative/window/doc/window.png b/examples/declarative/window/doc/window.png
new file mode 100644
index 000000000..72487b4d9
--- /dev/null
+++ b/examples/declarative/window/doc/window.png
Binary files differ
diff --git a/examples/declarative/window/doc/window.rst b/examples/declarative/window/doc/window.rst
new file mode 100644
index 000000000..8736bb629
--- /dev/null
+++ b/examples/declarative/window/doc/window.rst
@@ -0,0 +1,35 @@
+Qt Quick Examples - Window and Screen
+=====================================
+
+This example demonstrates the Window and Screen types in QML.
+
+.. image:: window.png
+ :width: 392
+ :alt: Window and Screen screenshot
+
+In addition, this example demonstrates the usage of the Qt Resource System in
+Qt for Python for more advanced scenarios. There are several QML files, one of
+which imports a module from this sibling directory. Both this "shared" module
+and the QML files of the example need to be compiled into Python modules with
+the resource compiler rcc.
+
+For the "shared" module approach to work with QML and rcc, you need:
+
+* A module definition *qmldir* file
+* A Qt Resource Collection file (.qrc) specifying all the QML files and other
+resources, plus the *qmldir* file
+
+The .qrc file is the input to rcc. This will generate a Python module (called
+*shared_rc* here) that can then be imported from the Python code. At runtime,
+only this Python module is needed, not the .qrc file or any of the .qml files
+or even the image resources, as they have all been compiled into the Python
+module.
+
+For the example, rcc needs:
+
+* A Qt Resource Collection file (.qrc) specifying all the QML files and other
+resources. There is no qmldir file here because this is not a module.
+
+This will generate a Python module (called *window_rc* here) that can then be
+imported from the Python code. Again, only the Python module is needed at
+runtime.
diff --git a/examples/declarative/window/main.py b/examples/declarative/window/main.py
new file mode 100644
index 000000000..74d475e0b
--- /dev/null
+++ b/examples/declarative/window/main.py
@@ -0,0 +1,74 @@
+#############################################################################
+##
+## Copyright (C) 2022 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Qt for Python 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 os
+from pathlib import Path
+import sys
+
+from PySide6.QtCore import QUrl, qWarning
+from PySide6.QtGui import QGuiApplication
+from PySide6.QtQml import QQmlComponent, QQmlEngine
+from PySide6.QtQuick import QQuickWindow
+
+import window_rc
+
+# Append the parent directory of this file so that Python can find and
+# import from the "shared" sibling directory.
+sys.path.append(os.fspath(Path(__file__).parent.parent))
+from shared import shared_rc
+
+
+if __name__ == "__main__":
+ app = QGuiApplication(sys.argv)
+ engine = QQmlEngine()
+
+ # Add the qrc root as QML import path so that the "shared" module
+ # can be found.
+ engine.addImportPath(":/")
+
+ component = QQmlComponent(engine)
+ QQuickWindow.setDefaultAlphaBuffer(True)
+ component.loadUrl(QUrl("qrc:///window/window.qml"))
+ if component.isReady():
+ component.create()
+ else:
+ qWarning(component.errorString())
+ app.exit(1)
+ app.exec()
diff --git a/examples/declarative/window/resources/icon.icns b/examples/declarative/window/resources/icon.icns
new file mode 100644
index 000000000..88b4b2444
--- /dev/null
+++ b/examples/declarative/window/resources/icon.icns
Binary files differ
diff --git a/examples/declarative/window/resources/icon.ico b/examples/declarative/window/resources/icon.ico
new file mode 100644
index 000000000..52af30a6c
--- /dev/null
+++ b/examples/declarative/window/resources/icon.ico
Binary files differ
diff --git a/examples/declarative/window/resources/icon.svg b/examples/declarative/window/resources/icon.svg
new file mode 100644
index 000000000..0b6153206
--- /dev/null
+++ b/examples/declarative/window/resources/icon.svg
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.48.2 r9819"
+ version="1.0"
+ sodipodi:docname="icon.svg"
+ inkscape:export-filename="/Users/rutledge/dev/qt5-stable/qtdeclarative/examples/quick/window/window/icon80.png"
+ inkscape:export-xdpi="61.509998"
+ inkscape:export-ydpi="61.509998"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient4009">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4011" />
+ <stop
+ id="stop4019"
+ offset="0.875"
+ style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4013" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 186.64798 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="559.62469 : 186.64798 : 1"
+ inkscape:persp3d-origin="279.81235 : 124.43199 : 1"
+ id="perspective4876" />
+ <inkscape:perspective
+ id="perspective2836"
+ inkscape:persp3d-origin="22 : 14.666667 : 1"
+ inkscape:vp_z="44 : 22 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 22 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <filter
+ inkscape:collect="always"
+ id="filter4063"
+ x="-0.195491"
+ width="1.390982"
+ y="-0.16235915"
+ height="1.3247183">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="3.3077485"
+ id="feGaussianBlur4065" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10"
+ guidetolerance="10"
+ objecttolerance="10000"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.9775825"
+ inkscape:cx="62.656189"
+ inkscape:cy="42.423381"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1280"
+ inkscape:window-height="744"
+ inkscape:window-x="2003"
+ inkscape:window-y="156"
+ showgrid="true"
+ borderlayer="true"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-global="false"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid7194"
+ visible="true"
+ enabled="true"
+ spacingx="8px"
+ spacingy="8px" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-66.38047,-391.3222)">
+ <path
+ id="path7304"
+ d="M 95.556318,434.65407 L 165.25811,434.65407 L 165.25811,490.10429 L 95.556318,490.10429 L 95.556318,434.65407 z"
+ style="fill:#01afaf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.24121141000000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:#a7c706;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 96.869177,465.30846 c 27.677903,3.04574 41.155393,12.11589 48.000003,24 l -48.000003,0 0,-24 z"
+ id="path7300"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path7302"
+ d="M 165.46767,465.22201 C 137.78977,468.26775 124.31228,477.33791 117.46767,489.22201 L 165.46767,489.22201 L 165.46767,465.22201 z"
+ style="fill:#966406;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1" />
+ <path
+ style="fill:#80ffff;fill-rule:evenodd;stroke:#000000;stroke-width:5.24121141000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;fill-opacity:1"
+ d="M 95.532809,434.35736 L 74.567964,420.38079 L 74.567964,497.25189 L 95.532809,490.26361 L 95.532809,434.35736 z"
+ id="path7270"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00ffff;fill-rule:evenodd;stroke:#000000;stroke-width:5.24121141;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 74.567964,455.3222 L 95.532809,462.31048"
+ id="path7272"
+ sodipodi:nodetypes="cc" />
+ <g
+ style="fill:#80ffff;fill-opacity:1"
+ id="g7278"
+ transform="matrix(-0.8735352,0,0,0.8735352,244.36615,64.570513)">
+ <path
+ style="fill:#80ffff;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 24,32 L 0,16 L 0,104 L 24,96 L 24,32 z"
+ id="path7280"
+ transform="translate(66.38047,391.3222)" />
+ <path
+ style="fill:#80ffff;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 0,56 L 24,64"
+ id="path7282"
+ transform="translate(66.38047,391.3222)"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:#ffffff;fill-opacity:1;filter:url(#filter4063)"
+ d="m 119.74679,437.94232 c -0.0487,0.003 -0.0932,0.0315 -0.14149,0.0354 -0.1659,0.0132 -0.33372,0.008 -0.49523,0.0354 -0.96156,0.0643 -1.9037,0.14607 -2.86523,0.21224 -2.94807,0.23566 -5.19987,2.66253 -5.19987,6.01345 l 0,39.51194 3.32508,3.07747 0,-0.0354 33.2155,-5.58898 c 2.28673,-0.39587 4.06792,-3.06727 4.06792,-5.97808 l 0,-32.18967 -30.5625,-5.023 c -0.45263,-0.0748 -0.91269,-0.0942 -1.34418,-0.0708 z"
+ id="path3987"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g3"
+ transform="matrix(0.20572087,0,0,0.20572087,113.4162,440.80626)">
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path5"
+ style="fill:#006225"
+ d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path7"
+ style="fill:#80c342"
+ d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path11"
+ style="fill:#006225"
+ d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path13"
+ style="fill:#006225"
+ d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z"
+ style="fill:#ffffff"
+ id="path17"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path19"
+ style="fill:#006225"
+ d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z"
+ style="fill:#006225"
+ id="path21"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.24121141;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 96.506224,434.65407 L 166.20801,434.65407 L 166.20801,490.10429 L 96.506224,490.10429 L 96.506224,434.65407 z"
+ id="rect7265" />
+ </g>
+</svg>
diff --git a/examples/declarative/window/resources/icon64.png b/examples/declarative/window/resources/icon64.png
new file mode 100644
index 000000000..0fa324401
--- /dev/null
+++ b/examples/declarative/window/resources/icon64.png
Binary files differ
diff --git a/examples/declarative/window/window.pyproject b/examples/declarative/window/window.pyproject
new file mode 100644
index 000000000..8ce352cd2
--- /dev/null
+++ b/examples/declarative/window/window.pyproject
@@ -0,0 +1,3 @@
+{
+ "files": ["main.py", "window.qml", "Splash.qml", "AllScreens.qml", "CurrentScreen.qml"]
+}
diff --git a/examples/declarative/window/window.qml b/examples/declarative/window/window.qml
new file mode 100644
index 000000000..a744cf60f
--- /dev/null
+++ b/examples/declarative/window/window.qml
@@ -0,0 +1,188 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt for Python 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
+import QtQuick.Controls
+
+QtObject {
+ id: root
+ property real defaultSpacing: 10
+ property SystemPalette palette: SystemPalette { }
+
+ property var controlWindow: Window {
+ width: col.implicitWidth + root.defaultSpacing * 2
+ height: col.implicitHeight + root.defaultSpacing * 2
+ color: root.palette.window
+ title: "Control Window"
+ Column {
+ id: col
+ anchors.fill: parent
+ anchors.margins: root.defaultSpacing
+ spacing: root.defaultSpacing
+ property real cellWidth: col.width / 3 - spacing
+ Label { text: "Control the second window:" }
+ Grid {
+ id: grid
+ columns: 3
+ spacing: root.defaultSpacing
+ width: parent.width
+ Button {
+ id: showButton
+ width: col.cellWidth
+ text: root.testWindow.visible ? "Hide" : "Show"
+ onClicked: root.testWindow.visible = !root.testWindow.visible
+ }
+ //! [windowedCheckbox]
+ CheckBox {
+ text: "Windowed"
+ height: showButton.height
+ width: col.cellWidth
+ Binding on checked { value: root.testWindow.visibility === Window.Windowed }
+ onClicked: root.testWindow.visibility = Window.Windowed
+ }
+ //! [windowedCheckbox]
+ CheckBox {
+ height: showButton.height
+ width: col.cellWidth
+ text: "Full Screen"
+ Binding on checked { value: root.testWindow.visibility === Window.FullScreen }
+ onClicked: root.testWindow.visibility = Window.FullScreen
+ }
+ Button {
+ id: autoButton
+ width: col.cellWidth
+ text: "Automatic"
+ onClicked: root.testWindow.visibility = Window.AutomaticVisibility
+ }
+ CheckBox {
+ height: autoButton.height
+ text: "Minimized"
+ Binding on checked { value: root.testWindow.visibility === Window.Minimized }
+ onClicked: root.testWindow.visibility = Window.Minimized
+ }
+ CheckBox {
+ height: autoButton.height
+ text: "Maximized"
+ Binding on checked { value: root.testWindow.visibility === Window.Maximized }
+ onClicked: root.testWindow.visibility = Window.Maximized
+ }
+ }
+ function visibilityToString(v) {
+ switch (v) {
+ case Window.Windowed:
+ return "windowed";
+ case Window.Minimized:
+ return "minimized";
+ case Window.Maximized:
+ return "maximized";
+ case Window.FullScreen:
+ return "fullscreen";
+ case Window.AutomaticVisibility:
+ return "automatic";
+ case Window.Hidden:
+ return "hidden";
+ }
+ return "unknown";
+ }
+ Label {
+ id: visibilityLabel
+ text: "second window is " + (root.testWindow.visible ? "visible" : "invisible") +
+ " and has visibility " + parent.visibilityToString(root.testWindow.visibility)
+ }
+ Rectangle {
+ color: root.palette.text
+ width: parent.width
+ height: 1
+ }
+ CurrentScreen { }
+ Rectangle {
+ color: root.palette.text
+ width: parent.width
+ height: 1
+ }
+ AllScreens { width: parent.width }
+ }
+ }
+
+ property var testWindow: Window {
+ width: 320
+ height: 240
+ color: "#215400"
+ title: "Test Window with color " + color
+ flags: Qt.Window | Qt.WindowFullscreenButtonHint
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: root.defaultSpacing
+ Label {
+ anchors.centerIn: parent
+ text: "Second Window"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: root.testWindow.color = "#e0c31e"
+ }
+ Button {
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: root.defaultSpacing
+ text: root.testWindow.visibility === Window.FullScreen ? "exit fullscreen" : "go fullscreen"
+ width: 150
+ onClicked: {
+ if (root.testWindow.visibility === Window.FullScreen)
+ root.testWindow.visibility = Window.AutomaticVisibility
+ else
+ root.testWindow.visibility = Window.FullScreen
+ }
+ }
+ Button {
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: root.defaultSpacing
+ text: "X"
+ width: 30
+ onClicked: root.testWindow.close()
+ }
+ }
+ }
+
+ property var splashWindow: Splash {
+ onTimeout: root.controlWindow.visible = true
+ }
+}
diff --git a/examples/declarative/window/window.qrc b/examples/declarative/window/window.qrc
new file mode 100644
index 000000000..89d1de1b1
--- /dev/null
+++ b/examples/declarative/window/window.qrc
@@ -0,0 +1,8 @@
+<RCC>
+ <qresource prefix="/window">
+ <file>window.qml</file>
+ <file>Splash.qml</file>
+ <file>CurrentScreen.qml</file>
+ <file>AllScreens.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/declarative/window/window_rc.py b/examples/declarative/window/window_rc.py
new file mode 100644
index 000000000..71a65fc44
--- /dev/null
+++ b/examples/declarative/window/window_rc.py
@@ -0,0 +1,328 @@
+# Resource object code (Python 3)
+# Created by: object code
+# Created by: The Resource Compiler for Qt version 6.5.0
+# WARNING! All changes made in this file will be lost!
+
+from PySide6 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x04\xe8\
+/\
+/ Copyright (C) \
+2021 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick\x0aim\
+port QtQuick.Con\
+trols\x0a\x0aColumn {\x0a\
+ id: root\x0a \
+ spacing: 8\x0a\x0a \
+ Label {\x0a \
+ text: \x22Total nu\
+mber of screens:\
+ \x22 + screenInfo.\
+count\x0a fo\
+nt.bold: true\x0a \
+ }\x0a\x0a Flow {\x0a\
+ spacing:\
+ 12\x0a widt\
+h: parent.width\x0a\
+\x0a Repeate\
+r {\x0a \
+id: screenInfo\x0a \
+ model\
+: (Qt.applicatio\
+n as Application\
+).screens\x0a \
+ Label {\x0a \
+ re\
+quired property \
+string name\x0a \
+ requ\
+ired property in\
+t virtualX\x0a \
+ requi\
+red property int\
+ virtualY\x0a \
+ requir\
+ed property var \
+modelData // avo\
+id shadowing Lab\
+el.width and hei\
+ght\x0a\x0a \
+ lineHeight:\
+ 1.5\x0a \
+ text: name \
++ \x22\x5cn\x22 + virtual\
+X + \x22, \x22 + virtu\
+alY + \x22 \x22 + mode\
+lData.width + \x22x\
+\x22 + modelData.he\
+ight\x0a \
+ }\x0a }\x0a \
+ }\x0a\x0a Componen\
+t.onCompleted: {\
+\x0a var scr\
+eens = (Qt.appli\
+cation as Applic\
+ation).screens;\x0a\
+ for (var\
+ i = 0; i < scre\
+ens.length; ++i)\
+\x0a con\
+sole.log(\x22screen\
+ \x22 + screens[i].\
+name + \x22 has geo\
+metry \x22 +\x0a \
+ \
+ screens[i].vir\
+tualX + \x22, \x22 + s\
+creens[i].virtua\
+lY + \x22 \x22 +\x0a \
+ \
+ screens[i].wi\
+dth + \x22x\x22 + scre\
+ens[i].height)\x0a \
+ }\x0a}\x0a\
+\x00\x00\x04\x8e\
+\x00\
+\x00\x16\x10x\x9c\xcdXKo\xdb8\x10\xbe\xfbW\xb0\
+\xdaK\xb2\x85\xdf\xed\xc5E\xb0H\x5ctS E\x9b\
+8h\x0a,\xf6\xa0Hc\x8b\x1bZ4H*v6\
+\x9b\xff\xbe#\x91\xd4\xc3\xa2d\xa7q\xb7\xcb\x8b%r\
+\xf8q\xe6\x9b\x878\xee\xf7\xc9\x94\xaf\x1e\x04]D\x8a\
+\x1cM\x8f\xc9h0\x1a\x92\xeb\x08\xc8\xa5\xc2\x95\xe5\xca\
+\x8f\x1f\xc8\x85\x0a{\x9d~\x9f\xcc\xbe\xbc\xff\xd6\xbd\xa0\
+\x01\xc4\x12\xba\x1fC\x88\x15\x9dS\x10\x13b\xe6\xae`\
+\xde\xbdT]\xdc\xb6\x04\x11P\x9f\x91\xcfW\xe4l\xf6\
+\xbe;\xeeN\x99\x9fH\xe8t\xe8r\xc5\x85B\xf0\xcb\
+\x84\x06w[\xaf\xbd)\x8f\x95\xe0Lv:\x97\xea\xf3\
+\xed_\x10(\xf2\xd8!8h8!\x82s\x95\xbd\xac\
+\x04_\x81P\x0fD\x00\x1e\x11\xc2\xdcO\x98\x9a\xad\xfc\
+\x80\xc6\x8b\x09\x19\x0e\xaaB\xb3\x07\xa9`\xf9\xc5g\xa0\
+\x14\x90\x95\xfe\x9dlM?\x92\xa7Nu\xdb\xbd/H\
+\xa0\xd5\xb9\xa1q\xc8\xd7\x13\xa2\x7f\x8dF\xe9X\xd3P\
+E\x13\x14c=4\x84\xd1\x80\xaa\x9bt\x8a\xbc\xce\x94\
+\xedUU#\xbf\x92Q\xbe5\x82\x94\xf1\xea\xde\xf3l\
+n\x8f\xcd\xb8\x89\x0bMH\xcf\x18\xd4[g\xca\xe5\x22\
+\x8a*\x86Vz\x86Q\xa3\xbb\x97\xafO9K\x96q\
+\xc9\x16\xcb2bW\xe6\xfc8\x88\xb8\x90\xbd9el\
+\x82\xf4\x09\xf4\xbaS`\xe9\x8b\x05\x8d\xe5\xc4\xa5}e\
+\x83\xb4\x9e\xda%X\xf5s\x00\x8c\xdd\x14\x84g\xdc\x93\
+>\x19\x93\xaeE\xacl\xbe\xf0o\x81\xa1_\x15lT\
+\x89\x07\x85\x91-\x01\x1d\x1b\x12\xcd\xd8\xc4C\xd7\x977\
+\xfe.h\xb8\xc5\x8b\xe5f\x81K\xb5\x85 c\x12\xed\
+\x1e\xd7\x96\xf6\xb64\x1d&\x984\xc3\xda\xbc\x9a\xccY\
+\xa2\x14\xdf\xf6ZYC\x19\xf1\xb5\x16r\x8a\x94\x026\
+\xa7\xd3)\xa8Y\xcb\xd4V \x95\x8e\x9e\xde=\x95\xf4\
+\x96\x01\xf9\x8dx\xe74\x04\x8f \xb1\xb3\xa8\x1cV\xe5\
+\xc1\xe3)\x86\xf5\x1d\x84\xcd@'\xe4U\xc3R\x0d\xf1\
+\xa96\xd3\xef\xbf\x22\x7fh'B8\x8d \xb8\xbb\xe5\
+\x9b?kb\xd9\xca\x19\xdf4\xb0f\xe2\xe3\xc6\xe0\xb8\
+M\xb1\xd9Z\xd0\xdb\xd3S/c\xf9\x0c\x0fMs\x1b\
+]\x1a\xa4Z\x02\x06\x1e\x16\x1e\x96@\x03e\x94QL\
+\x87\x93\x93\x13\x93\xcf=\xab\xb6\x83\x9et\xecr\x81\xc1\
+\xdbF\xfb\xcf\xc8\xffA\xbc\x1a\x9f~H\x18#\xb3@\
+\x00\xc4n\xb7\xbe\x9c\xff\xf4\x08}\xc2a<P\xe0\xed\
+\xe1\x83\x9d\xd5\xc0O\x14?\x5c5\xf0N\x11n\xe9+\
+\x1a|_\xbeo\x99\x9a\xa3}\xcd\x17\xf7\xb0y\xcf\x80\
+*,o\x0b(c\xd7'\x1a\xd3%\xfd\xbb)\xf9_\
+\x1e%\xf9\x01\x87\x09\x92\x1c\xeeg\xf1\xe5o~0_\
+\xf6\x80\x03\xf1e\xe1v\xf0U}\x9b'q\xa0(\x1a\
+Q@^\xf3\x99\x12h\xda\xd1\xfd\xb1\x83O\xb9\xa6*\
+\x88\x88{1\xf0%l\x97\xd9\x89\xd38\x01*\x111\
+\xf1lq\xf5\xde\xb5\x82\xe5\xc1\xd0\x8e\xb6\xccc|\x07\
+\x9c\xe5j\x07\x5c\x1e\x02\xedpE=k\xc7\x9b\xa3\x9c\
+\xd4\x95\xba\x1d\xd0Q5\xda\x91\xfd\xbch\xb5\x03\xe3\x85\
+&\xdc\xa5e\x94\xc98\x80\xeaaj\xb7$\xf1]\xcc\
+\xd7\xdb{\xaa\xf2\xe6\xaa\xea\xbcr\x16\xc1\x97I\xd5d\
+LJV\xae\xb4\x84J\xe2a\x1bq\xd4r\x7f3\x8f\
+\xd9\x15\x8e\xc6\xf6\xed\x98\xbcv\x12@\x10\xcfG\xfc\xc8\
+\x97%\x8d\xb2C\xcc}\xd5\x91$\xcd\xa9y\xdcB\xc6\
+\x156}~\xbc@-\x1dI\xe4\xe8{R\x02\xbe\xeb\
+.mK\xdf\xb0E\x99i\x22R\x04\xf3\x85\x7f\xfc?\
+\xabzj\x13M\xa2\x9e\x0e\xd0\x92\xb8~r5\xbc\x85\
+\xb7\x9a\xbb\xdd\xf1hP\xebbGo\x8a9c\xb9\xf7\
+\xcbh\xf8\xf6\xcd`P|#lKz\x8d\x87Xt\
+,\x99\x91\xde\x91\x05S\xf6\x94o\x983\x7f\x81}\xd5\
+\xa52\x15\x93\xfcS<\x7f\xc8\x0b\x86\xfel\x9d\xd3R\
+[\xda\xe4\x98\xc3\xf7\xb2M\xa9k\x81\x02<\x01\xc4\xc7\
+\xd8yZF\x8a\xce\xdf\x99\xce\xdf\xed.\xbd\xee\xe6O\
+<\x91p\x8a\x0dq\xcb\xa1\x8d\xe6\xa5\xa3\xe5\xdb\xa9\xfd\
+p\x82\xae\x83A0\x1eB\x9b\x1e\x8dwO\xab\x84\xd0\
+\x91aBP8\xef\x14VV\xf1U.\x89\xcf\x8dr\
+{\xbb\xa5`\xf6\xd9\xd7x\xac\x8d\xb0\xa1\x8a\x94\xbeH\
+i\x8d\x5c\xf0\xf2LS\x16\x0f\xdf\x0e\xda\x08o\xb8\xa9\
+\xcf\x1b*u\x8b\x9a\xc7N\xa4t\x1c\xea\xea\x9d\x0e`\
+\xb2\xde\x88?\xe7\xa0\xbd\xdb\x99g\x06\x17\x83y\x11[\
+\xe9\xcb\xcf\x08-\xef[c\x1c\x8c[\xc3\xa0\x96w\x8c\
+K8j\xfa(6Wk\xb9b\xbe\x8cl\xbd\x9ee\
+o%\xd2x|M\x97\xc0\x13\x9b\x05\x95\x7f3K\x7f\
+\xc1(\x91\x809\xe3\xa9\xf3/I\x8e\xfe,\
+\x00\x00\x03\xfa\
+/\
+/ Copyright (C) \
+2021 The Qt Comp\
+any Ltd.\x0a// SPDX\
+-License-Identif\
+ier: LicenseRef-\
+Qt-Commercial OR\
+ BSD-3-Clause\x0a\x0ai\
+mport QtQuick\x0aim\
+port shared\x0a\x0a//!\
+ [splash-propert\
+ies]\x0aWindow {\x0a \
+ id: splash\x0a \
+ color: \x22transpa\
+rent\x22\x0a title:\
+ \x22Splash Window\x22\
+\x0a modality: Q\
+t.ApplicationMod\
+al\x0a flags: Qt\
+.SplashScreen\x0a \
+ property int t\
+imeoutInterval: \
+2000\x0a signal \
+timeout\x0a//! [spl\
+ash-properties]\x0a\
+//! [screen-prop\
+erties]\x0a x: (\
+Screen.width - s\
+plashImage.width\
+) / 2\x0a y: (Sc\
+reen.height - sp\
+lashImage.height\
+) / 2\x0a//! [scree\
+n-properties]\x0a \
+ width: splashI\
+mage.width\x0a h\
+eight: splashIma\
+ge.height\x0a\x0a I\
+mage {\x0a i\
+d: splashImage\x0a \
+ source: I\
+mages.qtLogo\x0a \
+ MouseArea {\
+\x0a anc\
+hors.fill: paren\
+t\x0a on\
+Clicked: Qt.quit\
+()\x0a }\x0a \
+ }\x0a //! [time\
+r]\x0a Timer {\x0a \
+ interval:\
+ splash.timeoutI\
+nterval; running\
+: true; repeat: \
+false\x0a on\
+Triggered: {\x0a \
+ splash.\
+visible = false\x0a\
+ spla\
+sh.timeout()\x0a \
+ }\x0a }\x0a \
+ //! [timer]\x0a \
+ Component.onCom\
+pleted: visible \
+= true\x0a}\x0a\
+\x00\x00\x02\xff\
+\x00\
+\x00\x0adx\x9c\xadV\xdfo\xda0\x10~\xcf_q\
+\xcb\x13l#\x01\xd6MS\xfa0mT[+\xa1\xb5\
+\x85J\xeb\xb4\xee\xc1$\x07XM\xec\xc8q(h\xe2\
+\x7f\x9f\x9d_8\x90\x12\xaa-O\xb9\xf3w\xf7}\xf1\
+\x9d}q]\x18\xf1x#\xe8b)\xa13\xea\xc2\xb0\
+?\x1c\xc0\xdd\x12\xe1V\xaa\x95(&l\x03c\x198\
+\x96\xeb\xc2\xf4\xe6\xe2\xbe7\xa6>\xb2\x04{W\x012\
+I\xe7\x14\x85\x07\x85o\x82\xf3\xde\xad\xec\xa9\xb0\x08\x85\
+OI\x08\xd7\x13\xf82\xbd\xe8\xbd\xeb\x8dB\x92&h\
+Y4\x8a\xb9\x90*\xf9mJ\xfd\xc7=\xd3\x19q&\
+\x05\x0f\x13\xcb\xba\x92\x18\xc1\x1f\x0b\xd4C\x03\x0f\x04\xe7\
+23\x9eh \x97\x1e\x9c\xf5\xfb\x99\xb9D-\xdc\x83\
+X\xf0\x18\x85\xdc|\x134pT\xd2\x90\xfaT^f\
+\x8b\xf0\x06\x06\x1f\xac\x0c=O\x99/)g\xc0\x05U\
+\xe2\x89~\xbf\xe3S)([tx\xb7\xe0\xd3O\xf2\
+D\xa5\xbf\x84\xba\xd3'\x89\xde\x16\xe7F\xd0\x88\x88\xcd\
+\xf5.\x89Wa\xf4#P\xa6\x82\x81\x1d\xe78\xfb\xfc\
+0\x83\xfahA\xa8lOQ\x00\x1br\x8c\x09\x0b\x12\
+\x9f\xc4\xd8\x9a$,\x91\x0dY\xae\xd8J\xed\x1b\x06'\
++\xa2E\x00\x1c\x91V&=]b\x95\xb5I\xeb\xd6\
+\xda\x87\xa7\xec\x91\xf1'V`\xb6yuu\xed\x8dj\
+\xe9\xb61\xdbb\xa7\x92\x87i\xc4\x12\x0f\x86\xbbr\xc7\
+\xc4W=\xe0\xc1\xc7\xca\xb5\xf6Jo\xe5\xda\xec\x5c\x95\
+\xcfu_\xc1\xaf\xc4\x17\x88\xecw\xe5\x1c\x93\x19\x86\x86\
+\x14\xfdH\x5c\xab>\xb5\xa7\x19\x14\x1el[\xf5en\
+8\x8cD\xa8,\xfb\xc1\xf6\xecZ\xcc\x5c\x1d\x07g\xc6\
+C\xf5%R\xa4\xd8\xb0!\xf91)O\xc5\xe0\xbc:\
+\x10\x03\xd8*m\x99^\x14\xd6\xbe\xb2RMDX:\
+'\xbe\xdaT\x14\xb6\x91\xb6\x0e+d\x9a`\xf8\xd4\xe8\
+\xf5v\xa5)\xab\xd2\xc4\xca\x03\x0c\xdb\xe94\xca\xe0\xc9\
+\xcc\xd3\x08\x12\x14\xfa\xf2ai4;\xe1\xbbr\xf4\xf7\
+\x0c\xbc\xe3\xabyO\xa3\x0dh\xa4nA\xd5\xe3I+\
+gV0]\xf3\xb5\xd1\x07y\xed\x8e\x10\xc4t\xad\xcc\
+@\x93\xc8M+G\x86\xbe\xc8\xc1\x8e\xe4_\x95\x19t\
+\x86]\xcd\x0a\x01\x97\x89\x1bE\xd0\xd1\xf4\x9d\x86\x00x\
+\x0d\xc3\xf7\xceY\xb71\x902\x7f\xd9=\xb6\x13!_\
+P_U\xe0e\x82\x8b\xa8\x9b\x97\xean\x88\xfb7\xf9\
+\x01\xae\xd4@+\xd4\x0b}m\xb5j\xcfC2\x09\x13\
+\x1d`\x12?ODV\x84\x86d\x16\x22\xac\xa8\x90)\
+\xd1{\x95<J\x1e\x9f\xc0\x97\xe1>\x97\x09~45\
+\xd4>\xe8\xb2\xb5\xc1\xb8\xda<= ){\xb1\xa2\x02\
+\x7f\xafE\xbc\x05CE\xb1\xf0\xf3\x08\xaf1\x8f\x9f\xe7\
+\xd1\xff\x00N\xd3\xe4.x\x8c\xa5\xbc\xd8\x1dC\x84\xb1\
+\xa8\xd7\x8e\x96\xbf\x98\xdb\xf0_T\xc5\x07?\x0b\x87\xe2\
+\x0e1\x95\xc6\x92\xb46g\x9e\x13>\xe8\xab\xa3!\xd0\
+\x97\x84-B4\xc3'\xa5so*\xa9Y\xc8\xd5\xff\
+\x9b-0\xa8\x8f\x9eb\xa24\xdf\x0c\x83~\x0d[\xce\
+\x9c,foHm\xad\xad\xf5\x17o|\x1ar\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\xe0Kg\
+\x00w\
+\x00i\x00n\x00d\x00o\x00w\
+\x00\x0e\
+\x0ei\x17\x5c\
+\x00A\
+\x00l\x00l\x00S\x00c\x00r\x00e\x00e\x00n\x00s\x00.\x00q\x00m\x00l\
+\x00\x0a\
+\x0bi\x98\xbc\
+\x00w\
+\x00i\x00n\x00d\x00o\x00w\x00.\x00q\x00m\x00l\
+\x00\x0a\
+\x08\x90\x1a|\
+\x00S\
+\x00p\x00l\x00a\x00s\x00h\x00.\x00q\x00m\x00l\
+\x00\x11\
+\x02YG\x1c\
+\x00C\
+\x00u\x00r\x00r\x00e\x00n\x00t\x00S\x00c\x00r\x00e\x00e\x00n\x00.\x00q\x00m\x00l\
+\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00h\x00\x01\x00\x00\x00\x01\x00\x00\x0d|\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00N\x00\x00\x00\x00\x00\x01\x00\x00\x09~\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x004\x00\x01\x00\x00\x00\x01\x00\x00\x04\xec\
+\x00\x00\x01\x82Y\xad^\x0f\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x82Y\xad^\x0f\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()