aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2017-01-04 16:10:51 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2017-01-05 14:17:35 +0000
commit4f7ec6143afce84804a230306008caefaa86a05b (patch)
treeee2d4297c20ccad50606796a1b23642b91251e00
parent314a05debe668cf0a17991121401e93fb846adf6 (diff)
Flat Style example
This example shows how to integrate custom styled components with tooling. The example uses states in the styling items, so they can be easily edited and checked in the designer. Change-Id: Ie665bb3938cdb1b135dbbd4163e1b901e61a6be0 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
-rw-r--r--.gitignore1
-rw-r--r--examples/quickcontrols2/flatstyle/Flat/Button.qml122
-rw-r--r--examples/quickcontrols2/flatstyle/Flat/CheckBox.qml146
-rw-r--r--examples/quickcontrols2/flatstyle/Flat/Switch.qml140
-rw-r--r--examples/quickcontrols2/flatstyle/MainForm.ui.qml146
-rw-r--r--examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle-creator.pngbin0 -> 22469 bytes
-rw-r--r--examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle.pngbin0 -> 12186 bytes
-rw-r--r--examples/quickcontrols2/flatstyle/doc/src/qtquickcontrols2-flatstyle.qdoc93
-rw-r--r--examples/quickcontrols2/flatstyle/flatstyle.pro18
-rw-r--r--examples/quickcontrols2/flatstyle/flatstyle.qml80
-rw-r--r--examples/quickcontrols2/flatstyle/imports/Theme/Theme.qml74
-rw-r--r--examples/quickcontrols2/flatstyle/imports/Theme/qmldir2
-rw-r--r--examples/quickcontrols2/flatstyle/main.cpp64
-rw-r--r--examples/quickcontrols2/flatstyle/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols2/quickcontrols2.pro3
15 files changed, 890 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 9f5df423..24170d65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
/examples/quickcontrols2/chattutorial/chapter4-models/chapter4-models
/examples/quickcontrols2/chattutorial/chapter5-styling/chapter5-styling
/examples/quickcontrols2/contactlist/contactlist
+/examples/quickcontrols2/flatstyle/flatstyle
/examples/quickcontrols2/gallery/gallery
/examples/quickcontrols2/texteditor/texteditor
diff --git a/examples/quickcontrols2/flatstyle/Flat/Button.qml b/examples/quickcontrols2/flatstyle/Flat/Button.qml
new file mode 100644
index 00000000..c56a9c6a
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/Flat/Button.qml
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Templates 2.1 as T
+import Theme 1.0
+
+T.Button {
+ id: control
+
+ font: Theme.font
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ contentItem.implicitHeight + topPadding + bottomPadding)
+ leftPadding: 4
+ rightPadding: 4
+
+ background: Rectangle {
+ id: buttonBackground
+ implicitWidth: 100
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ border.color: Theme.mainColor
+ border.width: 1
+ radius: 2
+
+ states: [
+ State {
+ name: "normal"
+ when: !control.down
+ PropertyChanges {
+ target: buttonBackground
+ }
+ },
+ State {
+ name: "down"
+ when: control.down
+ PropertyChanges {
+ target: buttonBackground
+ border.color: Theme.mainColorDarker
+ }
+ }
+ ]
+ }
+
+ contentItem: Text {
+ id: textItem
+ text: control.text
+
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: Theme.mainColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+
+ states: [
+ State {
+ name: "normal"
+ when: !control.down
+ },
+ State {
+ name: "down"
+ when: control.down
+ PropertyChanges {
+ target: textItem
+ color: Theme.mainColorDarker
+ }
+ }
+ ]
+ }
+}
+
diff --git a/examples/quickcontrols2/flatstyle/Flat/CheckBox.qml b/examples/quickcontrols2/flatstyle/Flat/CheckBox.qml
new file mode 100644
index 00000000..332d63b8
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/Flat/CheckBox.qml
@@ -0,0 +1,146 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Templates 2.1 as T
+import Theme 1.0
+
+T.CheckBox {
+ id: control
+
+ font: Theme.font
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ Math.max(contentItem.implicitHeight,
+ indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)
+ leftPadding: 4
+ indicator: Rectangle {
+ id: checkboxHandle
+ implicitWidth: Theme.baseSize * 2.6
+ implicitHeight: Theme.baseSize * 2.6
+ x: control.leftPadding
+ anchors.verticalCenter: parent.verticalCenter
+ radius: 2
+ border.color: Theme.mainColor
+
+ Rectangle {
+ id: rectangle
+ width: Theme.baseSize * 1.4
+ height: Theme.baseSize * 1.4
+ x: Theme.baseSize * 0.6
+ y: Theme.baseSize * 0.6
+ radius: Theme.baseSize * 0.4
+ visible: false
+ color: Theme.mainColor
+ }
+
+ states: [
+ State {
+ name: "unchecked"
+ when: !control.checked && !control.down
+ },
+ State {
+ name: "checked"
+ when: control.checked && !control.down
+
+ PropertyChanges {
+ target: rectangle
+ visible: true
+ }
+ },
+ State {
+ name: "unchecked_down"
+ when: !control.checked && control.down
+
+ PropertyChanges {
+ target: rectangle
+ color: Theme.mainColorDarker
+ }
+
+ PropertyChanges {
+ target: checkboxHandle
+ border.color: Theme.mainColorDarker
+ }
+ },
+ State {
+ name: "checked_down"
+ extend: "unchecked_down"
+ when: control.checked && control.down
+
+ PropertyChanges {
+ target: rectangle
+ visible: true
+ }
+ }
+ ]
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: Theme.baseSize * 3.8
+ color: Theme.lightGray
+ border.color: Theme.gray
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator.width + 4
+
+ text: control.text
+ font: control.font
+ color: Theme.dark
+ elide: Text.ElideRight
+ visible: control.text
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ }
+}
+
diff --git a/examples/quickcontrols2/flatstyle/Flat/Switch.qml b/examples/quickcontrols2/flatstyle/Flat/Switch.qml
new file mode 100644
index 00000000..00b38767
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/Flat/Switch.qml
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Templates 2.1 as T
+import Theme 1.0
+
+T.Switch {
+ id: control
+
+ implicitWidth: indicator.implicitWidth
+ implicitHeight: background.implicitHeight
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: Theme.baseSize * 3.8
+ color: Theme.lightGray
+ border.color: Theme.gray
+ }
+
+ leftPadding: 4
+
+ indicator: Rectangle {
+ id: switchHandle
+ implicitWidth: Theme.baseSize * 4.8
+ implicitHeight: Theme.baseSize * 2.6
+ x: control.leftPadding
+ anchors.verticalCenter: parent.verticalCenter
+ radius: Theme.baseSize * 1.3
+ color: Theme.light
+ border.color: Theme.lightGray
+
+ Rectangle {
+ id: rectangle
+
+ width: Theme.baseSize * 2.6
+ height: Theme.baseSize * 2.6
+ radius: Theme.baseSize * 1.3
+ color: Theme.light
+ border.color: Theme.gray
+ }
+
+ states: [
+ State {
+ name: "off"
+ when: !control.checked && !control.down
+ },
+ State {
+ name: "on"
+ when: control.checked && !control.down
+
+ PropertyChanges {
+ target: switchHandle
+ color: Theme.mainColor
+ border.color: Theme.mainColor
+ }
+
+ PropertyChanges {
+ target: rectangle
+ x: parent.width - width
+
+ }
+ },
+ State {
+ name: "off_down"
+ when: !control.checked && control.down
+
+ PropertyChanges {
+ target: rectangle
+ color: Theme.light
+ }
+
+ },
+ State {
+ name: "on_down"
+ extend: "off_down"
+ when: control.checked && control.down
+
+ PropertyChanges {
+ target: rectangle
+ x: parent.width - width
+ color: Theme.light
+ }
+
+ PropertyChanges {
+ target: switchHandle
+ color: Theme.mainColorDarker
+ border.color: Theme.mainColorDarker
+ }
+ }
+ ]
+ }
+}
diff --git a/examples/quickcontrols2/flatstyle/MainForm.ui.qml b/examples/quickcontrols2/flatstyle/MainForm.ui.qml
new file mode 100644
index 00000000..06b87d5e
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/MainForm.ui.qml
@@ -0,0 +1,146 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Controls 2.1
+import QtQuick.Layouts 1.0
+import Theme 1.0
+
+Item {
+ id: form
+
+ width: 320
+ height: 480
+ property alias slider: slider
+ property alias checkBoxUnderline: checkBoxUnderline
+ property alias checkBoxBold: checkBoxBold
+ property alias sizeSwitch: sizeSwitch
+ property alias button: button
+
+ Slider {
+ id: slider
+ width: 297
+ height: 38
+ stepSize: 1
+ to: 18
+ from: 10
+ value: 14
+ anchors.topMargin: Theme.baseSize
+ anchors.top: gridLayout.bottom
+ anchors.right: gridLayout.right
+ anchors.left: gridLayout.left
+ handle: Rectangle {
+ id: sliderHandle
+ x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width)
+ y: slider.topPadding + slider.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: slider.pressed ? Theme.mainColorDarker : Theme.mainColor
+ border.color: Theme.gray
+ }
+ }
+
+ GridLayout {
+ id: gridLayout
+ anchors.top: parent.top
+ anchors.topMargin: 64
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ columnSpacing: Theme.baseSize * 0.5
+ rowSpacing: Theme.baseSize * 0.5
+ rows: 4
+ columns: 2
+
+ Label {
+ text: qsTr("Toggle Size")
+ font: Theme.font
+ }
+
+ Switch {
+ id: sizeSwitch
+ Layout.fillWidth: true
+ }
+
+ CheckBox {
+ id: checkBoxBold
+ text: qsTr("Bold")
+ checked: true
+ Layout.fillWidth: true
+ }
+
+ CheckBox {
+ id: checkBoxUnderline
+ text: qsTr("Underline")
+ Layout.fillWidth: true
+ }
+
+ Rectangle {
+ id: rectangle
+ color: Theme.mainColor
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ Layout.preferredHeight: 38
+ Layout.preferredWidth: 297
+ }
+
+ Label {
+ id: label
+ text: qsTr("Customization")
+ font: Theme.font
+ }
+
+ Button {
+ id: button
+ text: qsTr("Change Color")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle-creator.png b/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle-creator.png
new file mode 100644
index 00000000..d77a7ffc
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle-creator.png
Binary files differ
diff --git a/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle.png b/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle.png
new file mode 100644
index 00000000..71fa8411
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/doc/images/qtquickcontrols2-flatstyle.png
Binary files differ
diff --git a/examples/quickcontrols2/flatstyle/doc/src/qtquickcontrols2-flatstyle.qdoc b/examples/quickcontrols2/flatstyle/doc/src/qtquickcontrols2-flatstyle.qdoc
new file mode 100644
index 00000000..44fc704a
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/doc/src/qtquickcontrols2-flatstyle.qdoc
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \example flatstyle
+ \title Qt Quick Controls 2 - Flat Style
+ \ingroup qtquickcontrols2-examples
+ \brief A QML app using Qt Quick Controls 2 and a QML plugin
+ with customized controls.
+
+ \e Flat Style shows how to integrate customized controls into Qt Quick Designer.
+ The example uses a pure QML plugin to define constants in a singleton. For the
+ declarative parts of the UI, \c .ui.qml files are used. These can be edited
+ visually in Qt Quick Designer.
+
+ \borderedimage qtquickcontrols2-flatstyle.png
+
+ \section1 QML Plugin
+
+ The example contains a plugin called Theme. The plugin consists of a QML file
+ \c Theme.qml and a \c qmldir file. The plugin is located in the imports subdirectory
+ and added as a resource.
+ To ensure the plugin is found by QML, we add the import directory to the import
+ paths of the engine in \c main.cpp.
+
+ \code
+ ...
+ engine.addImportPath(":/imports");
+ ...
+ \endcode
+
+ To ensure the code model and Qt Quick Designer can find the plugin, we add the following
+ line to \e flatstyle.pro.
+
+ \code
+ QML_IMPORT_PATH = $$PWD/imports
+ \endcode
+
+ All colors, font parameters, and size constants that are used in this example
+ are defined as properties in the singleton called \e Theme.qml.
+ Usually such attribute values are defined as constants as they are not suppose to change at run time.
+ In this example, we allow the user to change some attributes like the main color, the size parameter,
+ and some font parameters while the application is running.
+
+ Defining these attribute values in a singleton makes it easy to maintain and change them.
+ This pattern makes it easy to implement theming.
+
+ \section1 Implementing Custom Controls
+
+ The plugin also contains a style for a couple of controls that implement a custom look and feel.
+ This style is located in \c Flat and is set as the style for the application in \c qtquickcontrols2.conf.
+
+ The example uses the states of a Qt Quick Item to implement the different states of a control.
+ This has the advantage that we can define the custom look in Qt Quick Designer and we can easily
+ verify the different states of a control.
+ To edit the indicator of a switch in Qt Quick Designer we can open Switch.qml and then enter the implementation
+ of the indicator called \c switchHandle using the combo box on the top next to the combo box for the open documents.
+
+ \borderedimage qtquickcontrols2-flatstyle-creator.png
+
+ The application itself is just a simple form that allows the user to adjust a couple of parameters of the custom controls.
+ The user can choose another main color, set the font to bold or underline, and increase the size of the controls by
+ toggling a switch.
+
+ \e MainForm.ui.qml is just the pure declarative definition of the form, while \e flatstyle.qml instantiates the form
+ and implements the logic.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols2/flatstyle/flatstyle.pro b/examples/quickcontrols2/flatstyle/flatstyle.pro
new file mode 100644
index 00000000..a8ca01bf
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/flatstyle.pro
@@ -0,0 +1,18 @@
+TEMPLATE = app
+TARGET = flatstyle
+
+QT += quick quickcontrols2 widgets
+
+SOURCES += main.cpp
+
+RESOURCES += \
+ qtquickcontrols2.conf \
+ $$files(*.qml) \
+ $$files(imports/Theme/*) \
+ $$files(Flat/*.qml)
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH = $$PWD/imports
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols2/flatstyle
+INSTALLS += target
diff --git a/examples/quickcontrols2/flatstyle/flatstyle.qml b/examples/quickcontrols2/flatstyle/flatstyle.qml
new file mode 100644
index 00000000..f3e35876
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/flatstyle.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Controls 2.1
+import Qt.labs.platform 1.0
+import Theme 1.0
+
+ApplicationWindow {
+ id: window
+ visible: true
+ minimumWidth: 360
+ height: 480
+
+ title: qsTr("Flat Style")
+
+ MainForm {
+ id: form
+
+ anchors.fill: parent
+ button.onClicked: colorDialog.open()
+
+ sizeSwitch.onCheckedChanged: Theme.baseSize = (sizeSwitch.checked ? Theme.largeSize : Theme.smallSize)
+ checkBoxBold.onCheckedChanged: Theme.font.bold = checkBoxBold.checked
+ checkBoxUnderline.onCheckedChanged: Theme.font.underline = checkBoxUnderline.checked
+ slider.onPositionChanged: Theme.font.pixelSize = slider.valueAt(slider.position)
+ }
+
+ ColorDialog {
+ id: colorDialog
+ onCurrentColorChanged: Theme.mainColor = currentColor
+ }
+}
diff --git a/examples/quickcontrols2/flatstyle/imports/Theme/Theme.qml b/examples/quickcontrols2/flatstyle/imports/Theme/Theme.qml
new file mode 100644
index 00000000..003e743b
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/imports/Theme/Theme.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+pragma Singleton
+
+import QtQuick 2.8
+
+QtObject {
+ readonly property color gray: "#b2b1b1"
+ readonly property color lightGray: "#dddddd"
+ readonly property color light: "#ffffff"
+ readonly property color blue: "#2d548b"
+ property color mainColor: "#17a81a"
+ readonly property color dark: "#222222"
+ readonly property color mainColorDarker: Qt.darker(mainColor, 1.5)
+
+ property int baseSize: 10
+
+ readonly property int smallSize: 10
+ readonly property int largeSize: 16
+
+ property font font
+ font.bold: true
+ font.underline: false
+ font.pixelSize: 14
+ font.family: "arial"
+}
diff --git a/examples/quickcontrols2/flatstyle/imports/Theme/qmldir b/examples/quickcontrols2/flatstyle/imports/Theme/qmldir
new file mode 100644
index 00000000..4a58c13a
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/imports/Theme/qmldir
@@ -0,0 +1,2 @@
+module Theme
+singleton Theme 1.0 Theme.qml
diff --git a/examples/quickcontrols2/flatstyle/main.cpp b/examples/quickcontrols2/flatstyle/main.cpp
new file mode 100644
index 00000000..93f856a9
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/main.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(":/imports");
+ engine.load(QUrl(QStringLiteral("qrc:/flatstyle.qml")));
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols2/flatstyle/qtquickcontrols2.conf b/examples/quickcontrols2/flatstyle/qtquickcontrols2.conf
new file mode 100644
index 00000000..9cd59e5a
--- /dev/null
+++ b/examples/quickcontrols2/flatstyle/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Flat
diff --git a/examples/quickcontrols2/quickcontrols2.pro b/examples/quickcontrols2/quickcontrols2.pro
index 458d10db..f9a4a7ab 100644
--- a/examples/quickcontrols2/quickcontrols2.pro
+++ b/examples/quickcontrols2/quickcontrols2.pro
@@ -3,4 +3,5 @@ SUBDIRS += \
gallery \
chattutorial \
texteditor \
- contactlist
+ contactlist \
+ flatstyle