From 389d091ea25f123cecc7d63379ce8fb2ce16ebd9 Mon Sep 17 00:00:00 2001 From: J-P Nurmi <jpnurmi@theqtcompany.com> Date: Tue, 4 Nov 2014 15:32:27 +0100 Subject: [PATCH] Workshop manual test (the former Gallery example) Change-Id: Ib62be83b1652777e7603a262a8a89c132d3766e7 Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Caroline Chao <caroline.chao@theqtcompany.com> --- tests/manual/workshop/content/AboutDialog.qml | 49 +++ tests/manual/workshop/content/Controls.qml | 280 +++++++++++++ tests/manual/workshop/content/ImageViewer.qml | 59 +++ tests/manual/workshop/content/ModelView.qml | 88 ++++ tests/manual/workshop/content/Styles.qml | 382 ++++++++++++++++++ tests/manual/workshop/images/bubble.png | Bin 0 -> 214 bytes .../manual/workshop/images/button-pressed.png | Bin 0 -> 3094 bytes tests/manual/workshop/images/button.png | Bin 0 -> 3164 bytes .../manual/workshop/images/document-open.png | Bin 0 -> 1550 bytes .../workshop/images/document-open@2x.png | Bin 0 -> 3355 bytes .../workshop/images/document-save-as.png | Bin 0 -> 1837 bytes .../workshop/images/document-save-as@2x.png | Bin 0 -> 4500 bytes tests/manual/workshop/images/folder_new.png | Bin 0 -> 1199 bytes tests/manual/workshop/images/go-next.png | Bin 0 -> 1219 bytes tests/manual/workshop/images/go-previous.png | Bin 0 -> 1200 bytes .../workshop/images/preferences-system.png | Bin 0 -> 2129 bytes tests/manual/workshop/images/process-stop.png | Bin 0 -> 1927 bytes .../workshop/images/progress-background.png | Bin 0 -> 456 bytes .../manual/workshop/images/progress-fill.png | Bin 0 -> 507 bytes .../manual/workshop/images/slider-handle.png | Bin 0 -> 3523 bytes tests/manual/workshop/images/tab.png | Bin 0 -> 9877 bytes tests/manual/workshop/images/tab_selected.png | Bin 0 -> 10184 bytes tests/manual/workshop/images/textfield.png | Bin 0 -> 3023 bytes .../workshop/images/toplevel_window.png | Bin 0 -> 3690 bytes tests/manual/workshop/images/view-refresh.png | Bin 0 -> 2024 bytes .../manual/workshop/images/window-new@2x.png | Bin 0 -> 1900 bytes tests/manual/workshop/main.qml | 169 ++++++++ tests/manual/workshop/src/main.cpp | 57 +++ tests/manual/workshop/src/src.pri | 2 + tests/manual/workshop/workshop.pro | 18 + tests/manual/workshop/workshop.qrc | 24 ++ 31 files changed, 1128 insertions(+) create mode 100644 tests/manual/workshop/content/AboutDialog.qml create mode 100644 tests/manual/workshop/content/Controls.qml create mode 100644 tests/manual/workshop/content/ImageViewer.qml create mode 100644 tests/manual/workshop/content/ModelView.qml create mode 100644 tests/manual/workshop/content/Styles.qml create mode 100644 tests/manual/workshop/images/bubble.png create mode 100644 tests/manual/workshop/images/button-pressed.png create mode 100644 tests/manual/workshop/images/button.png create mode 100644 tests/manual/workshop/images/document-open.png create mode 100644 tests/manual/workshop/images/document-open@2x.png create mode 100644 tests/manual/workshop/images/document-save-as.png create mode 100644 tests/manual/workshop/images/document-save-as@2x.png create mode 100644 tests/manual/workshop/images/folder_new.png create mode 100644 tests/manual/workshop/images/go-next.png create mode 100644 tests/manual/workshop/images/go-previous.png create mode 100644 tests/manual/workshop/images/preferences-system.png create mode 100644 tests/manual/workshop/images/process-stop.png create mode 100644 tests/manual/workshop/images/progress-background.png create mode 100644 tests/manual/workshop/images/progress-fill.png create mode 100644 tests/manual/workshop/images/slider-handle.png create mode 100644 tests/manual/workshop/images/tab.png create mode 100644 tests/manual/workshop/images/tab_selected.png create mode 100644 tests/manual/workshop/images/textfield.png create mode 100644 tests/manual/workshop/images/toplevel_window.png create mode 100644 tests/manual/workshop/images/view-refresh.png create mode 100644 tests/manual/workshop/images/window-new@2x.png create mode 100644 tests/manual/workshop/main.qml create mode 100644 tests/manual/workshop/src/main.cpp create mode 100644 tests/manual/workshop/src/src.pri create mode 100644 tests/manual/workshop/workshop.pro create mode 100644 tests/manual/workshop/workshop.qrc diff --git a/tests/manual/workshop/content/AboutDialog.qml b/tests/manual/workshop/content/AboutDialog.qml new file mode 100644 index 000000000..c4d87ee03 --- /dev/null +++ b/tests/manual/workshop/content/AboutDialog.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Dialogs 1.1 + +MessageDialog { + icon: StandardIcon.Information + title: "Qt Quick Controls Workshop" + text: "Qt Quick Controls Workshop" + detailedText: "A manual test for most of the available Qt Quick Controls" +} diff --git a/tests/manual/workshop/content/Controls.qml b/tests/manual/workshop/content/Controls.qml new file mode 100644 index 000000000..1abd57e4c --- /dev/null +++ b/tests/manual/workshop/content/Controls.qml @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +Item { + id: flickable + anchors.fill: parent + enabled: enabledCheck.checked + + property int tabPosition: tabPositionGroup.current === r2 ? Qt.BottomEdge : Qt.TopEdge + + property string loremIpsum: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor "+ + "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor "+ + "incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud "+ + "exercitation ullamco laboris nisi ut aliquip ex ea commodo cosnsequat. "; + + ListModel { + id: choices + ListElement { text: "Banana" } + ListElement { text: "Orange" } + ListElement { text: "Apple" } + ListElement { text: "Coconut" } + } + + RowLayout { + id: contentRow + anchors.fill:parent + anchors.margins: 8 + spacing: 16 + ColumnLayout { + id: firstColumn + Layout.minimumWidth: implicitWidth + Layout.fillWidth: false + RowLayout { + id: buttonrow + Button { + id: button1 + text: "Button 1" + tooltip:"This is an interesting tool tip" + Layout.fillWidth: true + } + Button { + id:button2 + text:"Button 2" + Layout.fillWidth: true + menu: Menu { + MenuItem { text: "This Button" } + MenuItem { text: "Happens To Have" } + MenuItem { text: "A Menu Assigned" } + } + } + } + ComboBox { + id: combo + model: choices + currentIndex: 2 + Layout.fillWidth: true + } + ComboBox { + model: Qt.fontFamilies() + Layout.fillWidth: true + currentIndex: 47 + } + ComboBox { + id: editableCombo + editable: true + model: choices + Layout.fillWidth: true + currentIndex: 2 + onAccepted: { + if (editableCombo.find(currentText) === -1) { + choices.append({text: editText}) + currentIndex = editableCombo.find(editText) + } + } + } + RowLayout { + SpinBox { + id: t1 + Layout.fillWidth: true + minimumValue: -50 + value: -20 + } + SpinBox { + id: t2 + Layout.fillWidth: true + } + } + TextField { + id: t3 + placeholderText: "This is a placeholder for a TextField" + Layout.fillWidth: true + } + ProgressBar { + // normalize value [0.0 .. 1.0] + value: (slider.value - slider.minimumValue) / (slider.maximumValue - slider.minimumValue) + Layout.fillWidth: true + } + ProgressBar { + indeterminate: true + Layout.fillWidth: true + } + Slider { + id: slider + value: 0.5 + Layout.fillWidth: true + tickmarksEnabled: tickmarkCheck.checked + stepSize: tickmarksEnabled ? 0.1 : 0 + } + MouseArea { + id: busyCheck + Layout.fillWidth: true + Layout.fillHeight: true + hoverEnabled:true + Layout.preferredHeight: busyIndicator.height + BusyIndicator { + id: busyIndicator + running: busyCheck.containsMouse + anchors.horizontalCenter: parent.horizontalCenter + } + } + } + ColumnLayout { + id: rightcol + Layout.fillWidth: true + anchors { + top: parent.top + bottom: parent.bottom + } + + GroupBox { + id: group1 + title: "CheckBox" + Layout.fillWidth: true + RowLayout { + Layout.fillWidth: true + CheckBox { + id: frameCheckbox + text: "Text frame" + checked: true + Layout.minimumWidth: 100 + } + CheckBox { + id: tickmarkCheck + text: "Tickmarks" + checked: false + Layout.minimumWidth: 100 + } + CheckBox { + id: wrapCheck + text: "Word wrap" + checked: true + Layout.minimumWidth: 100 + } + } + } + GroupBox { + id: group2 + title:"Tab Position" + Layout.fillWidth: true + RowLayout { + ExclusiveGroup { id: tabPositionGroup } + RadioButton { + id: r1 + text: "Top" + checked: true + exclusiveGroup: tabPositionGroup + Layout.minimumWidth: 100 + } + RadioButton { + id: r2 + text: "Bottom" + exclusiveGroup: tabPositionGroup + Layout.minimumWidth: 100 + } + } + } + + TextArea { + id: area + frameVisible: frameCheckbox.checked + text: loremIpsum + loremIpsum + textFormat: Qt.RichText + wrapMode: wrapCheck.checked ? TextEdit.WordWrap : TextEdit.NoWrap + Layout.fillWidth: true + Layout.fillHeight: true + menu: editmenu + } + } + } + + ExclusiveGroup { + id: textFormatGroup + + Action { + id: a1 + text: "Align &Left" + checkable: true + Component.onCompleted: checked = true + } + + Action { + id: a2 + text: "&Center" + checkable: true + } + + Action { + id: a3 + text: "Align &Right" + checkable: true + } + } + + Component { + id: editmenu + Menu { + MenuItem { action: cutAction } + MenuItem { action: copyAction } + MenuItem { action: pasteAction } + MenuSeparator {} + Menu { + title: "Text &Format" + MenuItem { action: a1 } + MenuItem { action: a2 } + MenuItem { action: a3 } + MenuSeparator { } + MenuItem { text: "Allow &Hyphenation"; checkable: true } + } + Menu { + title: "Font &Style" + MenuItem { text: "&Bold"; checkable: true } + MenuItem { text: "&Italic"; checkable: true } + MenuItem { text: "&Underline"; checkable: true } + } + } + } +} diff --git a/tests/manual/workshop/content/ImageViewer.qml b/tests/manual/workshop/content/ImageViewer.qml new file mode 100644 index 000000000..26d2da173 --- /dev/null +++ b/tests/manual/workshop/content/ImageViewer.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.1 + +Window { + id: imageViewer + minimumWidth: viewerImage.width + minimumHeight: viewerImage.height + function open(source) { + viewerImage.source = source + width = viewerImage.implicitWidth + 20 + height = viewerImage.implicitHeight + 20 + title = source + visible = true + } + Image { + id: viewerImage + anchors.centerIn: parent + } +} diff --git a/tests/manual/workshop/content/ModelView.qml b/tests/manual/workshop/content/ModelView.qml new file mode 100644 index 000000000..eb9f720d3 --- /dev/null +++ b/tests/manual/workshop/content/ModelView.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 + +Item { + id: root + width: 600 + height: 300 + anchors.fill: parent + anchors.margins: Qt.platform.os === "osx" ? 12 : 6 + + ListModel { + id: dummyModel + Component.onCompleted: { + for (var i = 0 ; i < 100 ; ++i) { + append({"index": i, "title": "A title " + i, "imagesource" :"http://someurl.com", "credit" : "N/A"}) + } + } + } + + TableView{ + model: dummyModel + anchors.fill: parent + + TableViewColumn { + role: "index" + title: "#" + width: 36 + resizable: false + movable: false + } + TableViewColumn { + role: "title" + title: "Title" + width: 120 + } + TableViewColumn { + role: "credit" + title: "Credit" + width: 120 + } + TableViewColumn { + role: "imagesource" + title: "Image source" + width: 200 + visible: true + } + } +} diff --git a/tests/manual/workshop/content/Styles.qml b/tests/manual/workshop/content/Styles.qml new file mode 100644 index 000000000..d490e2b5e --- /dev/null +++ b/tests/manual/workshop/content/Styles.qml @@ -0,0 +1,382 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Particles 2.0 +import QtQuick.Layouts 1.0 + +Item { + id: root + width: 300 + height: 200 + + property int columnWidth: 120 + GridLayout { + rowSpacing: 12 + columnSpacing: 30 + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + anchors.margins: 30 + + Button { + text: "Push me" + style: ButtonStyle { } + implicitWidth: columnWidth + } + Button { + text: "Push me" + style: ButtonStyle { + background: BorderImage { + source: control.pressed ? "../images/button-pressed.png" : "../images/button.png" + border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4 + } + } + implicitWidth: columnWidth + } + Button { + text: "Push me" + style: buttonStyle + implicitWidth: columnWidth + } + + TextField { + Layout.row: 1 + style: TextFieldStyle { } + implicitWidth: columnWidth + } + TextField { + style: TextFieldStyle { + background: BorderImage { + source: "../images/textfield.png" + border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4 + } + } + implicitWidth: columnWidth + } + TextField { + style: textfieldStyle + implicitWidth: columnWidth + } + + Slider { + id: slider1 + Layout.row: 2 + value: 0.5 + implicitWidth: columnWidth + style: SliderStyle { } + } + Slider { + id: slider2 + value: 0.5 + implicitWidth: columnWidth + style: SliderStyle { + groove: BorderImage { + height: 6 + border.top: 1 + border.bottom: 1 + source: "../images/progress-background.png" + border.left: 6 + border.right: 6 + BorderImage { + anchors.verticalCenter: parent.verticalCenter + source: "../images/progress-fill.png" + border.left: 5 ; border.top: 1 + border.right: 5 ; border.bottom: 1 + width: styleData.handlePosition + height: parent.height + } + } + handle: Item { + width: 13 + height: 13 + Image { + anchors.centerIn: parent + source: "../images/slider-handle.png" + } + } + } + } + Slider { + id: slider3 + value: 0.5 + implicitWidth: columnWidth + style: sliderStyle + } + + ProgressBar { + Layout.row: 3 + value: slider1.value + implicitWidth: columnWidth + style: ProgressBarStyle{ } + } + ProgressBar { + value: slider2.value + implicitWidth: columnWidth + style: progressBarStyle + } + ProgressBar { + value: slider3.value + implicitWidth: columnWidth + style: progressBarStyle2 + } + + CheckBox { + text: "CheckBox" + style: CheckBoxStyle{} + Layout.row: 4 + implicitWidth: columnWidth + } + RadioButton { + style: RadioButtonStyle{} + text: "RadioButton" + implicitWidth: columnWidth + } + + ComboBox { + model: ["Paris", "Oslo", "New York"] + style: ComboBoxStyle{} + implicitWidth: columnWidth + } + + TabView { + Layout.row: 5 + Layout.columnSpan: 3 + Layout.fillWidth: true + implicitHeight: 30 + Tab { title: "One" ; Item {}} + Tab { title: "Two" ; Item {}} + Tab { title: "Three" ; Item {}} + Tab { title: "Four" ; Item {}} + style: TabViewStyle {} + } + + TabView { + Layout.row: 6 + Layout.columnSpan: 3 + Layout.fillWidth: true + implicitHeight: 30 + Tab { title: "One" ; Item {}} + Tab { title: "Two" ; Item {}} + Tab { title: "Three" ; Item {}} + Tab { title: "Four" ; Item {}} + style: tabViewStyle + } + } + + // Style delegates: + + property Component buttonStyle: ButtonStyle { + background: Rectangle { + implicitHeight: 22 + implicitWidth: columnWidth + color: control.pressed ? "darkGray" : control.activeFocus ? "#cdd" : "#ccc" + antialiasing: true + border.color: "gray" + radius: height/2 + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + antialiasing: true + visible: !control.pressed + border.color: "#aaffffff" + radius: height/2 + } + } + } + + property Component textfieldStyle: TextFieldStyle { + background: Rectangle { + implicitWidth: columnWidth + implicitHeight: 22 + color: "#f0f0f0" + antialiasing: true + border.color: "gray" + radius: height/2 + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + antialiasing: true + border.color: "#aaffffff" + radius: height/2 + } + } + } + + property Component sliderStyle: SliderStyle { + handle: Rectangle { + width: 18 + height: 18 + color: control.pressed ? "darkGray" : "lightGray" + border.color: "gray" + antialiasing: true + radius: height/2 + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + antialiasing: true + border.color: "#eee" + radius: height/2 + } + } + + groove: Rectangle { + height: 8 + implicitWidth: columnWidth + implicitHeight: 22 + + antialiasing: true + color: "#ccc" + border.color: "#777" + radius: height/2 + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + antialiasing: true + border.color: "#66ffffff" + radius: height/2 + } + } + } + + property Component progressBarStyle: ProgressBarStyle { + background: BorderImage { + source: "../images/progress-background.png" + border.left: 2 ; border.right: 2 ; border.top: 2 ; border.bottom: 2 + } + progress: Item { + clip: true + BorderImage { + anchors.fill: parent + anchors.rightMargin: (control.value < control.maximumValue) ? -4 : 0 + source: "../images/progress-fill.png" + border.left: 10 ; border.right: 10 + Rectangle { + width: 1 + color: "#a70" + opacity: 0.8 + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.bottomMargin: 1 + anchors.right: parent.right + visible: control.value < control.maximumValue + anchors.rightMargin: -parent.anchors.rightMargin + } + } + ParticleSystem{ id: bubbles; running: visible } + ImageParticle{ + id: fireball + system: bubbles + source: "../images/bubble.png" + opacity: 0.7 + } + Emitter{ + system: bubbles + anchors.bottom: parent.bottom + anchors.margins: 4 + anchors.bottomMargin: -4 + anchors.left: parent.left + anchors.right: parent.right + size: 4 + sizeVariation: 4 + acceleration: PointDirection{ y: -6; xVariation: 3 } + emitRate: 6 * control.value + lifeSpan: 3000 + } + } + } + + property Component progressBarStyle2: ProgressBarStyle { + background: Rectangle { + implicitWidth: columnWidth + implicitHeight: 24 + color: "#f0f0f0" + border.color: "gray" + } + progress: Rectangle { + color: "#ccc" + border.color: "gray" + Rectangle { + color: "transparent" + border.color: "#44ffffff" + anchors.fill: parent + anchors.margins: 1 + } + } + } + + property Component tabViewStyle: TabViewStyle { + tabOverlap: 16 + frameOverlap: 4 + tabsMovable: true + + frame: Rectangle { + gradient: Gradient{ + GradientStop { color: "#e5e5e5" ; position: 0 } + GradientStop { color: "#e0e0e0" ; position: 1 } + } + border.color: "#898989" + Rectangle { anchors.fill: parent ; anchors.margins: 1 ; border.color: "white" ; color: "transparent" } + } + tab: Item { + property int totalOverlap: tabOverlap * (control.count - 1) + implicitWidth: Math.min ((styleData.availableWidth + totalOverlap)/control.count - 4, image.sourceSize.width) + implicitHeight: image.sourceSize.height + BorderImage { + id: image + anchors.fill: parent + source: styleData.selected ? "../images/tab_selected.png" : "../images/tab.png" + border.left: 30 + smooth: false + border.right: 30 + } + Text { + text: styleData.title + anchors.centerIn: parent + } + } + leftCorner: Item { implicitWidth: 12 } + } +} diff --git a/tests/manual/workshop/images/bubble.png b/tests/manual/workshop/images/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..62aa1efe54c76991fdaea3a103d362bcc635e5c6 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE(~)SY8aIDBX`UIif|Tq zL>4nJa0`PlBg3pY5<o%r5>H=O_PcDXyxg)u2ilr|Ldl*kjv*44ThDJ4JZ!+@e9?Vw zHvdHLg@z%OdgrHlB`>)o5b2N^aU!p$tKDC&vB5Ikxj3}HLypt`jRa@>kB4_Y6&+{4 zAG5;Zf|pcsW072d%?cg+*N?7$$$2sJ@qyoBn~n#cwKskxC7pKh=vtt444$rjF6*2U FngDAvM$-TQ literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/button-pressed.png b/tests/manual/workshop/images/button-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..d64cdaa7876296e8ff5fe0953c5f364a0a6be118 GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/button.png b/tests/manual/workshop/images/button.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab41cc804991d9da9d2c0dd2140579b8a405cf7 GIT binary patch literal 3164 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 Czt&*@ literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/document-open.png b/tests/manual/workshop/images/document-open.png new file mode 100644 index 0000000000000000000000000000000000000000..f35f2583540678b7a544d9175245096082f302af GIT binary patch literal 1550 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/document-open@2x.png b/tests/manual/workshop/images/document-open@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdbb6657744a38310d3fa4ab8b7558e5966987e GIT binary patch literal 3355 zcmV+$4dn8PP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-2@g3HY`;a8KnRK45&#& zK~#9!?OWZC994Gz-CNbw-Q(`*o*8?_@ffoP8$wuRArEF9n@D*9i5F1B6SlO=)4s5O z!9K)N$Rh%2MWk3LQC2H>0EOMGHf$6kmd$PgiijXy$b#Fmp3na7>aMA-&wKC5Lw6P3 zJ^eYfF(^KxqprI5)~!0f^Ks8TRRi3i|KG$8d*M@0J@t(+4EZ!;iD=O<46U~<kw^?Z z)-)}{7)$879-YU1QCsxO7(2okGkV8F$AfK*vEM%b{PX`i_-y)N0SLqJ$BeNHQ=!Zl zq?F*CgE0oqIh0cIdGB#VN~ySS@ER#)+}1m`cdo%U06zdQKL7yyvtbzDe&dZdG$90t zs8{3hZ*P0|K_ZRxjqe@TI|pMdKGrm?PqP!OE<S$grI-9hqd~*Q9U1^l)7}b#;ID-c zeZoW!eXD2?sA;IHpz#1)xpIYn_St8-8C;;^x-LA=Lpq%X5#3V3Zxv`d06g=|GiM8h z!mj`vpLWtjA_3p`A*F<r62mNElr>D-HtX0?<oiAoLWCm$V2phyo6Rmi{q)mQ`xpSc z_~MITj6nziAp`(mYikQ1fBf-n)Ao~3K6wBv*L8Iws*VJJi2PhGhvUbO!?tbI>-DMp zN=k`TDh1bdV*oOl49=cCI~NTeW?UGCgRTl81ZRxZ##ungG))cw)oK;RVsYY4Ez3e8 zkw7w;gk@PV07QgTD)oiUe3HP4L;{P8iwEZD1%NSzX0sVBjg@ghuxQ)1zPPxEqeqXz zw(W@zQLEK(`t)fK5j@X}1I_mKHa0gmZ@H=GaygtkcWxr6l}ZIlDd@U>a~uF=B0{ND zf@zvlxxn`JHZESgh#&|M1VP+>;=~E8t*y;HAP!q<BW;fxUn-Tr7&BjZ;f2vIAf+rt zS=F&)$55$MCIZlCH1P1l55sYsKC>$pi+zC1%g?7Bo6Tmiwzd|ZS1J_{(Qn5tgHp;e z=bU`sXW49a;!T>(COpr>nKNgwwYAj;fa5sueShx4&$2xCKF{{{b|8fKudx8U{`%{| zrAwErMx&9_G;M4QAR-hB1)M*B9z=v@v)R{w;>3x$=K{0N5dq-3F6#BV!5DjYEC2w& zIWLD{m^*dq6t=duhGtJuTeVunv(G*Y(=_|g-r3oK=Xtj+2YB$o2M@$4DJ2<(@tcVN z0N8D{TKAcz3E%fensK>YhU>a`;DHBFC=~ht$Y!%xSXlT{{C-&bU=C0y6cl6ZqnBTP zxjqp9Ddmo7no23fqcnFIZEkMj@y8#BQVP}T=gCzN1PAs5vzqi_P2VsK=(^qqfRqw9 zZro5ph#!xeU+<Z;)ND3IE|)WwmzVptp%J;Ri*mV)#~ynOJ3BjlH>}s|aWeE})9UIf z(&_X8^Y?vU({=sLsQ^$)m72{aDwPUM(?qRyaM|40*ub%4$8h)EcjKLR-sxM1d$Y1H zJMeMN519WapL`+!{Q8wwUitl00C3JrtyU{><j4`MtgH+TX1lw)xP19C%H=ZJ?RH$` z7`5)tE9cjB9m!;JBp^|tC8Bn_jqUAijWPB&lkTneMEIf*f=MZ17{&qfkA%K(;Q~JV z@WU8!BAVLtzsR~jZkIYZ@3m{!6k}{JolgH`Y5=5^B~8=NYPBGQfMr>I1Fv7djz=DO z1f26Y_(dS~7By$C%1&wKK@dze)^%MJ3Izc8tE*S9hEoHeX<DgUJU~95$I{YLUv^im zR`J|(&tYR@BQ8e%+ouxOcIC*)IR_HjXsvTLzF*^j#u<R&6&;;3XajZWb~}KVeN=eb z(&dZaf9fw7hZw${mu=q<ufzbn`s%CZrAwCr%d!kj)A}sn=FOW(rBb;6{`>Lv+i!z& zj+RUKpIwCue{wG}Y2&L_1v3CVI<l6bB!2PhPZekUU-SWUYS^}Ye0h1fuTs0Ww}&U5 zcmnl$JuYvT_XR?!@TY&gj&wqY7zjl3tLM#kzGQ-9uigd`I5G9{U{!d}ah&71Tn>wi ziwJ@Mwr#_*ESx`o9>roYHh<Fr7Lo}p7&>m0ZJ2g2cL8bS2|zs!H0HwIzECK9`@R+2 zEVcl~eW3l{d?44~u`CPKYBjD4Y;0^`VPOI5>+7i1YH@A8;Si24XP^l10yUGsy*&8b zG54Gh5qkerSNw?4H+J|OQW7-Iplb{_woNcbAANB3d!ar6z@BAUB9qDJxm*rJ1k18; z@#00aTCF(g0D!8kuy*_iq*4fkyzSZ@*GEKf0)h4AG~7VpX0Z{Fq<<aU3;{sNvMfnN zI_Dfh2$-gcbLY;XQmMqk13-OW;hTSW1YW2h6&+e&8W3Y@foaVAJ!gsl#}^<1atjHR zO$V+U7y!Ks0D~@2vMft$x7%p9+bEaIP)gy<nKNiMo8X*-a}GCT@Ir;9TpDdp9582^ z(wqlPnP@t5?rV=h>^bX>Q3SZY1X1TLa3+<&R;dNXm>}-_<^TYUv6AomdMcH|>gp<l z5Xfe;&@>H7so4MP?T*jqGD$eToFK#@e0QwCgTm6#xT1*Q`Vy+!u#oH+`)1JufDb>o z`aS1>3n-;ZoO4)~1=n@aY&P-GLl0qpf4|@SZH0u+v5-ul((+@A8*9#l!}SfGP2pxz z5&S^*U71bma6^f$QZs;}w}%x(U>HVG2m#l1!5E9{e(iR<4}h92aV&oXiU428u71CG zuo`TcI;QkAgi;|C>Og-crK8ex;kkjqG>S`PeJ)U~R?7g$^E@mqEg=X3tgWrVah%xy zIp?TaA@aF2La7i4HMQ@~YR*$Hkwj2L@Iu*no&za0L(0&wTd_b4iW}@dh63=`TW|TC zbGzMcqgt&Z3`6Aec?3ZKP19lkc1(e##m)+#ruN-_fk*l7EJ2jI0Z*!q@X=~CNDD~~ zLK3$3OlXW>d;f=*t)VW^4TKfPakBY*K1MhC(gFZ%PoZgt$mbS1>p#uUcPHiq1AU4J zLefaVBT5@O9ABVRZv`ajpGFl$<7CKjoO`2vKp2L7{=aK>3MKh$8eX7=rYwi?-JwBr z#5~gq9#Ja6QERyfd|@bb5}=U)D5bV++g7%1^9X?6V#IdcM?RZ`#yLU}#_R69wL5s3 zQXM~+ie}m%CA7}BN4upa7~m|PJo%rKETH5#j#yq^HUPl3ZRGR$&#S@}AItd+gj5i+ zKj6%wT^0HC0Dw{4=uK!ket-DgUmz5UwWb2YuYP&u&&5~(0F>M9cKo$fwOWk<P(=9M zo{ewbcNYSwpeAUylZ_FS>im9DVGi}GOy{uO5RFEgpxB$^UW`Ok^gK^jN+Fp{;=T9Y z!{+8DJkLWbFyQ)kVL5*Up`Zf^P$aOB6bpPii8BU`Gwf6?C<U&8{d6J#jIokZiZjNL z&*xDr7Evmdz&VGRIE_?BLn>`_la0@pA*l#TO|M;=13ENO`wXE_*e#pHI6ip)>NDku z0BD+4l2T%Se;@1X>u~@iB9!TP$Nxnq)f7X7o|n>TE|W2|1A$t7UyxF7PI@=kEf$Ir zV+_9UBb&{_G|f&`R%x)jC7fEx!3h++P>mOv4yUz4X`hBwn>#L9sqaHbscRa4eW;rZ zHoW%QYjps^aU2j4eBX!Xc_{ihXc|X8pMf9B&a$Ms0j|rkmuWbwK~@+&#~A+n{+)O; z$N=Dn62+3KIA`y_|F@T}Ph|mJb8oa-tyQH|{E<;D`z<UT%|NKmhT|~mq&cX2mO1=T z!ffsnN&Nl9_X1G}0FVxXpw?=&R##S5z&VGbt-#}pIJKNd5UQaML5G%{=I0*Nza_5M znotU|`suqrL#HM}lK@C{0VvzH{YQpjz_MM`j{X_4*)-DWG=!pC60xU|ewI5E5z6Jd z5U%y3&40h@14sh!#sQFs*z>%q<2Z6LzpOQu9tDgnPTq9_>Nc<IvrwbnL>Pv&_t8)P zuKS`S1P}oI`J3LiW^|ZKDJzcSs854?HId5T8>df#@y<8@Uk7Tp9qjE@l-DZ%L*?2p zYQ3_J13*Q*ySw|3_uO;OcU!GiLM1cUC~V_vMZ_p<H-7%vPyX_U0A#Oh2Q!6%+Ci7o z>+9<$^Q(VwHY6iMO6gJxP17_bgc$lNm=j|xl}k@ZO?g7sI%D*7k{F-rUv9Xb(4i$q zzJd+~nx4{2o%NqfyHqIDuK#kg>+?<z`;!1*0McDfb=l}ziZ*WP{0dO?DqMDt{Vsa| z++hK57y$7uvdcy{Flt@@;XOcn)ks98gYI$AWv_dVSpewG3%;%Zgu{G(RsiO8&6g7T laEI>D9lAqz=nl<9{|EE9pt%I-qHh2I002ovPDHLkV1l_=RMP+e literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/document-save-as.png b/tests/manual/workshop/images/document-save-as.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9f6b343bdff4e1295342362486b2cc37387ecb GIT binary patch literal 1837 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 bhk^JvK%sGhfx2y<00000NkvXXu0mjf^huI9 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/document-save-as@2x.png b/tests/manual/workshop/images/document-save-as@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a15e34c924abc6f343e2a3ff35368035930488d6 GIT binary patch literal 4500 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 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/folder_new.png b/tests/manual/workshop/images/folder_new.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8bb9bd768d8e8ab785d95483ead02ae6800dc5 GIT binary patch literal 1199 zcmV;g1W@~lP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H101k9TSaeirbZlh+MsI9nWpZ;NRH|S>0000NbVXQnL3MO!Z*l-k zVQ_CCLt$)TZDDR?a%E}Xks2xh001d;MObu1WpiV4X>fFDZ*BlWVRL0<Aa7<MN?~ht zVjxp=Wod3@av)@7b7^O8po9f;000BJNkl<ZNQteLO^6&t6vuznRnt8)&TMwwuc%3g z2L+Xg#E;-dLX;fTm|zS9BAz685^_-q9uyG|f}n_a(2IhCBC^TJQ#K*NgBpV$m_(v6 zF_>g`c6MfW=cA{)s-B0L%+9*2hHM@b)l|QFzxV#Hs#}Q&%d^*l_WY_}>aDt3Kzece zdac!cscYUPuC`9W*HJk92_px7S~kFycI-lAJK{H5*Ic8E&yrT&@tI8VfYQZJ^~l(l zmwip|#uxVO*{fCXra&~m+D)M1J<q-M(o_YJ-N2KO!4!9)i@N~{((3y=LS69o(vGrO zId*svK%9I1q0Ns(S_gRVJHz3<CyrYKCr=*#c)D6YRLJYc6$)i;#1wY6Gc7ztQu%<| z%y&DLl1=G}{I<c{8{aGdSnG2joc`^XMY0r&{j9rVbuJV9ywwc6OOU;Hp@YhjUvn5_ zmSlGSu)Fa5e&B{+0l-;iW~wBuWYH*3O%mybvOb5M`wVbPbq9Q%v^M5~Aos%}iJWyz zPnT&lnhUmh??_V18P(#pwbv7wBlyxQWQX7A(KiM^NB!bn;@KZtgZ+2Eya-^er8GH7 zlC*j|g9-v3-n@mitA`mX97b^#d=1<bC_pSCF-RR`hQG?I@|iw=uCEvH;=Vmk_YbTv z^=7?SSd7u!zu^H^j*c=>Dx=aIqXmef0C9hk*2YO{UlA4_C6ix|QhDZT75Y{knO;zV zv+nIDwr*o+Xk<RT0tAvIrcx~-;+dSeiBNA~Me-5N@`spkluS5CYx+HE6D1(W!Ed+l z;A8C=T|gYSMuNaIIeC7G=JoW+8O}}J!${vsiuq|GV&Vj1n`bT_pe1)QG4*-ZzYDO| z5=A+jv;PSIur9}i$}L25F=3`HX`JRsZH}R#eyp88Ve^30k;@fGlK6iC-D=3tOpEiu z3}|hzc0S22AnjCOOy-IKOPPqrrb_^9>IedjUM9eK|1T0*i-^A_6{Jg5fY7Kn>iICt z0`2?LKBu5iorT^=AeX<i(tZ*V>h&5TG%mXZ?KsMa$kgwrf2GxI;;lnGC<)NYV01`m za%95-+3-3-lf~!|tqgdDcY;eT&3cV<f1E+Ql$25iz$m2@5LK(QhsMXppV_!^MhC$^ z)4eit&U5tW_pVy49t0w#lrtSQ^zq{-zHrWOI)DDs%~ut@W6fss?6G5~#sE!6WCeu4 zAaHAEUXE3OQ$QI=l!%~|3TQVxL#HpxFb|}F6%pV4>34c@%}hFh{|2rA&Q3Ns=Tray N002ovPDHLkV1nxxBC7xZ literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/go-next.png b/tests/manual/workshop/images/go-next.png new file mode 100644 index 0000000000000000000000000000000000000000..a68e2db77531cb15a2cddd62f567f030513b60fa GIT binary patch literal 1219 zcmV;!1U&nRP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS000DfNkl<ZScUDDe`r-@7{@>Fd(Ls*Wa_5Q6f;u`ihh?a=O`)@EeXr|Ly9sZ zC=5b3BMHKwqR9S{L?bMO<qxEV7-g(!vo_pvD(0`y&6!g-o7%R!yL*1T@7o{uoOyTM z=A7VPd*Hdx%RT3LzTfkGp7Xv325ry=Xaz;KnNe&#cfEDw^(0Rod*{Z&VtXYZ23o@! zXyPpea^;7weQU>)t&cFZZhGEqz3tp@_}5zJx)hL7Fu!o|&;^gZF(;OA_T|6Jgd0l0 zQ!YoFtGH)szVrIL_irC&WgjdkwrAWh0$K+ogE&W<Dj7LqxP1GCk8(y0A6s6q%v#jn z8a)nAL6L0`boQBPh<*CjcN}Oe!&5HCXvSnuWK3)lo6FWD>zfXLJ-$IL-MSSuAOasO zUW;WpNF+iC1OlQMW=di6=cym@wTspYgC;v`G*d=DNO?_Zvij)GJxLkNul<bH-U!&e zQ#0&7u?Z=xE*C<ik-02|)*5XL+9+B&PSc*ez@rb%9Xcv!Y~jyUoBzsRE}yLa+&$hC zOs_MbjKWtQzV-;Thp%0Hm0AaQC_Ho+mGDr)MUlGR?p~ng)OIFLxXpfP&XNhkoUGcJ zMfOwIM8FuG0#hEoa`Ckrf`l%70^y;Aj}|@(m$=`;#bhJrJ5F-0t&ZKtH{n@v@#?&H zvU5h{ZJW8=S=#RwXsrmehd?5w#1>YHuasf`1<C|;c$a8Pwvh1K(Mq9}NpooayMa6M zrt|XLC9!Q4B_C6Kd{*VE;F+ru@U=_AYr~Q@j^hw$g9#Ky1q8;$)p0zPzz6_?v<YVf zQa>7F3`RqsJv{BAO(1|N{Zb&|wbRsAkC0$F63Z4?wm{kfX$hnR>7?EXgTQEmj=+Th zBftpm9{&V+vB_-Nv97bV{o?A%Rl$m@5$HA-(h^83jJCiEqm%*>-f0XN9VuV{gDqk_ zJn32dxHjLHZRkvNbiP@=T5SSMUj#(@e?q4Adnv=Gj=;NA5Fr7B(czN=!<<~E-TXZD zC+mWWnzFXmMzi41W>rh-@Kfm|G6~3Z1zvn$MHf({f{-csg-rFk?97+=fs0nDnqy)U zxi|M|D);X84j!qkJM~Af@JtP7!@A)lU)~*iYJmV)yXBJ}E_Ju!B`dHTfewf7*6jP3 z6w7D(FQv(b(+xY1Y*fqITZpIEC1dx^Bwzqt^+hlo7y>w<r>`BrDJ-@t5M)`FKpTs@ zMm|o=9Y;y&2KV28F0QHlMy&(<ux7e<I~y_y=+G4qglr@4BG^?#2!>|e#QnLmxOBGD zl>D?laqd`h>9HTwt}s7xmA3A42uTCJLYcHe7Jw~=FfC^x`}gk)cK!ZqOXEKM%E@wd zA_Lq{i&uOx^+dn`UI-Wg2jRUI(I5$o@}aDv+&yq)@4@;V{-UPC{FgyAiZ1kgEcfSQ z(!K&5WI>UAAuo5F-*o<L$)WY?y?C5}%PovZ`@I48r9h@dQbx1T^{O^EH!a_@T75<L h0gF@{v_b2a{SV9&9x2I+Scw1t002ovPDHLkV1o1PM3evk literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/go-previous.png b/tests/manual/workshop/images/go-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..c37bc0414c24b6e4f34096d0c0f20fbe0bf84045 GIT binary patch literal 1200 zcmV;h1W)^kP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS000DMNkl<ZScUDDZD`e19LGQBod18j&diD&q$0z#6%iC!v)!p>R-4&_N(%y0 z5>0!N*ydiwAf#TXK|#<H%r`|%$}sRnN|xwF1BnId7G>&u+I8MN-n)D6dFaLezuUdn zt@c3g_Jtq6Kj+W+{l4e-bPh~m3X{a*Mpa+k;JJzJmy_@<qC32u3+}pqukV#k*vNzk zJl)9jnkMhS;`>&-_4*5MM?B?En1DCl4OLCdP2wL~vvkw^MfWcAl~faU4&#hKb))y# zbnn)-H&(y1@ZriOetXwRtkaVsFy;tE8`Sz)GiQIa^~L5g<tsY6PLeTc93a5_e*~J5 z(WJM#a?V3rHq`Bi^kw3l@BSTQHO^UZ4hL#1op5}&7ULoiZDIz4-u{{g>Z+fMZirm! zX(y4oiggBS4aRAtkTk#c3D#L02J37n1{Z2$4ez$RIW(>a)NGH;cfuTAyKLi}MU_wZ z9bG3#X8LfroMGz>vA@2>SdFn79cp8<Xq(OH<@dZg>LEuYP}Ar=UgG=Tt*hHHWA>f% zMBC*b$(nTd*Ws`r92SGc;H1W)aW2rq<g7C|EY6Ldotp?m8~iPI%q-utu6Fx0=|kJ) zBSEf(KnM^L5C9e{3>F)Z5E>^9<fSJFzXmK0M(o!D0?{V_tBUf<=hv@nj9ltFOK104 z1Og!hQU+Q8LJ*t`OUm?<%=9v(lW3F18i#NS>3kF=VQpA&j5w_d2v}>Yg$IL~1bsu- z(Ix`~&Xo`W861O|9{MwJ`m@)`*i_I74x9yR9acN6aTx9Jh>+H)v87<{c~fzYv%5at zzjO1mOJ6Ee(&x;z7^NjX(gQ;pEz%$jQVE0<cv9dH;2hS1FkyxO=OCL+<r7d8&5VLc z*xHIYwo7mC?MrOk_ru<#Z_3=G6?LTTAOqQMG7KV=MR^kCi9mdT=Zk;Vlt6j{sRUAi zR0XZ?Q&bBhjba(wW4`XclBxavr+tYlSFh?P7p~{FvRR?gz=854$`>eKqI`+;L&rJi zLF$6qDTsJM)JJMV3CL3|x^3PPmK?K(TW=(~?p|8;O6hOi2Z^WuMCCbIS<wKFum*xO z1lnPBSQEw-*bc>xMj(d^M~U}#=vBJDZBI{MqIT6&Ya^XQzjA)?mw<#9)WLfnH2<5K ze2i%nyO5m&Z0|LOPJC##WjA(i{$ik|Va=-g$nE9jobEq_P$rk-<GXbf(4l1WB$M}T z^X%tBQVdfh8qlXc*PnKt?%DL^H!TB$ap$Va>zU@?5)7sQNni*_7dh2=V#2i?Mte=T z5x!mgjJqHe2QR12tca+xvPTv?qe@gMM`K607_;veow%4pHY8WjhNIPh3k}#j(SUdE zXWc$<iRI27{j94yUbVWmK9U!K;qVqmaG20dm%@L&r-mJyaI*n)GC}HM%(j*;xG}xs zkM;+XLj&H$nB7@)@^qd|?%7lX5fb+RfAKc;a`+hW!?oOXHH9gR1%CsLV@9Tom>C)X O0000<MNUMnLSTYFF-HFY literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/preferences-system.png b/tests/manual/workshop/images/preferences-system.png new file mode 100644 index 0000000000000000000000000000000000000000..6e52db7cfd482e228dae640a7717ea1dcaf523e8 GIT binary patch literal 2129 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 Hu0mjfPcQ*~ literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/process-stop.png b/tests/manual/workshop/images/process-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a8d1722f328be5fa649f774e2fa6bcf049ebef GIT binary patch literal 1927 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 N002ovPDHLkV1lnLttkKi literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/progress-background.png b/tests/manual/workshop/images/progress-background.png new file mode 100644 index 0000000000000000000000000000000000000000..55a069dfce0cba716f426a78c04346cadb60cfad GIT binary patch literal 456 zcmV;(0XP1MP)<h;3K|Lk000e1NJLTq004#n000>X1^@s6^hs6+00006VoOIv0G$AQ z03$D1xR?L{010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3A2=F9gPcrPBZa0aZyv zK~!ko?b)$v!!QsA;9o+Xx&`tEeuB`+tM~4Gfe>iv+&NPp!LQKCL!n!ScF>q1OXf_0 z7&2r?K;d+qY-*fBN<usM|G;>(bvjNb$&AP2bTXMdc<-OkW&y+t-<OD2`iK7-!!^J2 z7h?qgWLfrF6vfmmm&=!`svbw9(G95g=JR<q91f?ZEX$bZxnW4CHk-}V0f2}w8r10{ zh&mhqs462tObj|RF=C921hL1UGb)Cva#unvstRsbiAxFnVkrqBV7J>b64VGGuwu{; z6+=Xt?W(H67+#z7wc)JiUPQVFTs-XRcXBipqs|ak3;Lb|O=4JUSuLnJx^N<b`XOq1 z3{~Y_33Zkf$7(?*D+a*ZRqAp8a5x-VI}$db{c>vV-G0A++iW&>gTa6iB5b!?c<(>m yVzIbS)AVDtTHPLxM@FW{k|e=;y?(dWK7RpGO4a*{$2V610000<MNUMnLSTZ|M7m=D literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/progress-fill.png b/tests/manual/workshop/images/progress-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..b588c9586d9c9ba0d07966f448c19e23320bf6e3 GIT binary patch literal 507 zcmV<X0R;YuP)<h;3K|Lk000e1NJLTq004#n000>X1^@s6^hs6+00006VoOIv0G$AQ z03$D1xR?L{010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3A2=E;biU#S#Dj0f<RN zK~!ko?U_AD!%!53&kN5Y=vEyZg@UU{2f^9Zy?a4H5l6wTAn4|(=q`d=!NtjfxQL5% zaFEhTrL;&bYLoZlkj5mof?(0%oo~q!NZz@ZbAO)LEl%W$D;ukKmj~-e;{h<geEtSA zq<{FYGYs=Pe{og-z|6w($<h8^Njz5%citN}YuWtP7>M&UueTeclXE3eKb<#Ii^qbJ zkcfx#f|USZO_yqr6cS-(PzlnX7}i=ULFgFdr;cF)Dna^o70EG{IFIQ$hE=edjzJPw z)hi{M<0=_gN(lMVd>X%vpnXpzNZe)kZH}wtJIBy|Jg!;;2v!$28_qcPM*ERtsPqfO z-Q<WIBbrLAwGe`rtWM`eA_wAe)yweCgnX_pq|#wcf%d5i0RSisNNX)%m=q*kQl!${ ze3Ai<5jLZ|D<Nql0O+>{AY{Tz6qRv_0kM}auc|Dcs!QY9X)d^&ZY;vscbYYnuR0Z3 xx$PEabFB-%-pcy{$5offj0n^ogEP+)n;+LZ&ue)7Pl5md002ovPDHLkV1m7^)K~xj literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/slider-handle.png b/tests/manual/workshop/images/slider-handle.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4d4a0d981cf7257756d5ecd7951154b70b87d5 GIT binary patch literal 3523 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 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/tab.png b/tests/manual/workshop/images/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..74fefab78a719e4883756d2bcc1b968835dd4fa0 GIT binary patch literal 9877 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 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/tab_selected.png b/tests/manual/workshop/images/tab_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..665400ccfd2da9264fa4cf0e653e2573a8f7daf7 GIT binary patch literal 10184 zcmb_>Wmp_bxAh<ag6p8cg9I7e-QC^YnZYeskl^kPfdmNd?(QKFT!On3Tt0HnE9ai~ ze)s;l^E^G>z4qFBSFK%D{d8BDl7b`(A^{=*06>wJ5>t6O8^0Vx2yid|j?I&;0017H zwWz3)w5TYlk`u(j+RhvR(0W~_ZK;JVTXQ_$I>Kl?#J!W5u$f6oEpDXkgqcDb5dO&@ zR#*%p3>q2}7W*}3q7gtmHkTYuNK9N=xKF4RMsk9C^<w${Wc*@uwB-jxQ&aPoi{>?S zr)v}@21d9MEGa!-__mP+&Cl(2S-?HC5CCe<pG)bJ5(NeF;bCdlv!{<Aa?P5poSW?I zv-JHcQmXeOc`-o9&7mp=LdlNYKMN45SEjI12IMweh8@O)&vh3Xjfw=K1fBIU5S`+J z7rO=g*1GJY69O?t)8GJ-1xi*>fLNeWlMpgHU`A9C79fgxje;0b^14$ig+S`;mH!Cg z_Fz!((Q-FFQ}XF;O18hBF=F2iBnw-nbM>a8y_0?IV^knHg$ONtz2AeMK(|P~v7f!6 z_h|wi{<_txj(MYwJ{4N3Xr^s{M~mE?;9n3=bFsv{9*C!<QerSxq_)wxhf!_Q1>}K| zr*|IE&sXWqU{>)1NOFZ0K(S<5$PhWi1k95l=xSfJLCOQ-?rz>?m>wNi+CiIoV3RFb zy?^s`3PWK^^gOt+4jtw8v<9zA->@!^b}>c6hG)MRICz1?zG$O~kUT3cHg7-Q^kYWJ zV|RSjN4WK>Fb(Wjze(pCxA?eR&A{~T+YnK54+jN)zLkP5QDcl0@iVC^5?)U|84k4d zw%_I*M&6<+L3xDBCvjf8TVdG#C*QSkU4f<e!dsQd25+Q$SZxG3s8`?oNlu~GjEE5c zwnng#euA%zJh|xe1KLQj+pVFI{basDzESLI?n>@jUrq_KG;TwP5un?do@8e`_IsQp z(cuNUbsmK_b7qwEX!H{~h6#N4dm1ohU_Rd#+F9kfuAx2I+XD17uNuHTt1|<g1hdbl ztpS+Uey1lq0)DeMkPNvl+c_90KRm=b#0x}Qzy0Sa)5zETc&5?JeNyC#q#3d9ar}c& zX4KU<2&545#n`~Xa)yV+a=|hsqoHKYdOo7prADB;54%T(Ykmv&Xdv<Dv753F2H^%c zT%C2@!U%f6OLrv3MGg4Jlw_;aHJAoGWaqM{=mAKJl1Zhzy7EVwH**t}G0Ju{jHD4N zANaxk-vdo^5oMpl*8Q#|fH#o$ycR7WvY#kRF_knOb2J|GQ2A{b@K(Z5AC#ftPVM%n zDU2`_k`geKRFu@<be&It@ctF3i_Y(QIUZsnRS^6a908Ra&x74gP*z%jg14i7X6su3 z2V$t)p$`P|5%U`GO1dC6QUKgd$xm2sAv~#0Vr6I>A;Mi4ETh+UAFv$Yvrq9*VT~*M z?z@B?uqgvw91t^K-R8n32Fm_qX++c!rrw2e@ANrE=YyW;WJ`r1=_J2F)gVLY7NHEq zUk|z=Q<fr731B1DAB3&`NJQ#BNQmg)ooBU6>Vhm2q9A&!M5~6P|Djxz{~Le}nm^bg z*K-%CHb96x6afee5<w=5`6h%%T8gd^${z~o6%Zp@=OV|73!xF6CeuOZ54{hS47Kis z?`6Rx-HWx85-y-ufw2y%6+afaqp%+A8DukKtVY(3u?rbk$8#cR@_z{K&P`Q@rqSk# z-=?v|#;HSd#Y_4yEU7P2mkZA8S7I#^pN2~h+7_10ulokH;&cIc3G(1)MU;zi=0kc` zFNp4V;R20&LQSXFCXb_E_xGBzFo~za$#Gi1vPNk4n^a|LS(l>D0A;%*j1#JMs$AzX z=9CYKuBf9?2Vzva)7IVAx*fwB_4H7V;lS9}z=m+k-iY<O(|QlX2Pkjg6M6d^!N{DR z3d~f5b=WrnSY)XViLsJJ)Js%+)ZU--^RYfn71R_Wec}~Kk(`y9Rpb=Cj*y~~!H5ba z?zJ+ZstTWz_m+8(A&={ox+~Bxpi!YJPM?<alD?CkkON6VgimC1gbamNMFeG@!=NTe zhmAUa4xtakj(qE78m;UMwZt}MGbvyqwxBm^9lr^3ObbhsjvGp*jie1M{%GyL_Xb}U zNRbiiGc+)?wJC5;&l<0tIv<)g>>YVaeqq1O4MdLMig+c<B+D~mo=lc3uEA1*Sb}6r zZwqCMd%#8*FCRG;z>vrgarAD{v>wOJzzxPt@Jj8<>q_~GglLKAj>wnDnh1p`hD(F% z6_-4hC|3=)F1MjWUSmPyVbhf}j`Q-i&QFWAne8u5g^q?>*_*<rQfFMJy%&iW$mjGI z=V$3>5~tZaM;rP-O*f`?khXby+yf!mIcbI|f}zjI&+<>#(529D(0S0F&<(J_SDvtA zukv5Xz6ycW4DJoi48{y52r@vx3Stj>44y!^Mg)bQM$Cm0VHe}1VfRJYgu;bqW3|!U ziOT7Xs?&>?svl-?g)|0xWO|g{IKPe$%I*~iV+nJVjx6|S7HSr^DM}lZ_*E@e?Zb2> zn~07)k5sdimlzyFJ}nlbD%FKpGL0=MA%!j-FU0_rB|{3$?7M4e12Nwe@A?P*Ta;Jo z!Aijqh!faD;mP4);YZ<yi3N#8GOuJdhAGWew_vw8w%+1c;|M01B)wL*P$&F>{lnmg zE4wRux=!0dYjbFGgIC@i777rBHwrn*SHAX3o<)E~;WmhYy^N-;L?@@tyiT;%ws!Rh zeRZv2V?A2?4cVJ;h2rtra{uy%<5$bp{KEX<25BpFKE^(Vk1~%9aPe?maISDU$T-N> zAICllM%G56;=2-3M2$sGMTW=?QjJsHQi0@y<zVD&<#ET<#@5H0$0oNmw&%AM={*>V zfIol{$@|G6^bl=~GNQ8cG6QW{?Wxj5dvuOu4sMPK_wZxn)p;8vI|e&vJHxrK#iN>o z%7MAXdEB`UM<o}oU5DAY`N@&0{<D^ZJk{hWR?F8rRyzi`aJXnGHYp_K{pE%Fh0B}E zs7=f6J5Fd$kj3ETt?Ck|*>iBhvZeckXOS1>d%hKlc51f?f9e#=BFhxqK-|8PA;P1h zef^C#iK@?u%E><T-iSWHVu@+zX|(pcc1!P_N0$eM`?g=RXM#u1j6&3;)J6hIASO-+ zvOyXeK`YuhzDCL$$xwSK^+AgwTPsmK#!=owFD`CA%7+<)_O`0`lH>&x@f2UKt&ezH zAaNGrC6Pho*JAbJRh`nuMzvxtDwlGRU^(H@iATo!43jjI9#eQUsW(#mryS#K<>bUT zicu&0G#;nBU1_3lAu?#9AwH<rR0z~WimALNZkykgyC-Aw(J*l^6{&rBx4lXqxlYa~ z1}qas<82c560C<5Rccjb6mk_{v+!ip75H<S<F+&0K>B3-oIVVJ>5eA_>qD&x8EH>x zqS`jveT7Vg-HQC<Gb8OT>3c3qd-FsYnaQlsmfy#{c@JFONHyO!Y!a>MT{i9U9kkY8 zknbpF8IGWh`l%UdeN!4#P1U){A8fFy)#_+$4{D%nGusmR796Hh^F5iRs(Q&u&QtC- zBZ3k4M8ir=P18yJi)OiIu%^7BQ=?0XPFr*H$3m(SpfaI8ui=jJ^=b9lR=wB!-FLY9 zkCzhP@Ro0$!mpDCG|S4bIIP)z7-F?)%#AK(&Op}@S!vs$*kys8A%sm}&$b5rmbNC* z^8Bx=l{L8$b#w=CYyD@08JrtnMt4aU&?W5U=#|$mfdl6Q!VYsk+uiyfM^C(8-0zMF zmfGekrdGLg*&QCU``c#jZLW3U)ZsHoiUh2PRS0eHHAukki*74@%mxOdl-nk=nK!C< zH-H=0BuCzC=X1Aby;w2SQ&{a-C)pnb^wT5L^nBblx$is|kos|(K%NH4^3n?IawYQa zV|WwD?M~jm?2>uz*IYLb>Y6qnQV^%r^Nup#!pm~!6_=;A`{k1z0WohaeW|Cx%c|3a z-a^})UxH|i%?#rVlgS(%X5L#5I=|$%bWf_6&qq#-S2g_#9ycF6_fq;RTIkB@Aez?| z#<S-$Z)X=dOF6P3AML>sN>+(SdVtr07*9_C@8W=K@nZm!AgsU8^X!UM22^1S`sn;P zp4J*s7ZSF=d+fVJL<Ukm^aQDQt-c0g@4M+%6%S#{Nmdm-q^>h>va)+~#~VXv!}JFD zhO0*<EO58JZBFm7tZ{5A|1{qbJ#E_|!QI6y#Tdp?z~ZKt!9v2kj(13MNpebZOPXgm zpvI;06CzV*HY`?XQZ$!wRnO8l4cP{l1uhi2Ved`v*YEw>M<bNO_hr#xB}+R`qfIB& zn$v~T>eIEHS39(;X@hXucB~I>QXZG?tZx$>CGV`X9n`>|5X(;BRXCl52>5^9JlIIt z5d=!%nqg#Oun_m-5Z5-ClB5BFo*<ofRL;*@hlO0|6CO&NvBSm*uq_nXk}#NoF_Y1f zl&`4oKR4!7%Bjn5C`x|r7{lYzj`O6nouCc0E1ue%qT{ZyJkDuL)^#}6GMMw6_0EUB z6*(sNo~&3$d#j4uFAF~cPI1?_t0*dxD@SbG)GAY^P>Lvd)Z=t)s%US|%VoYrJo>7c zFvfmlQ4Ac{a5+e+FFv?lEaAcA(Qn>dQ|5KAX=rKOaj3A&d19DcELa?Iw>U<<Ud6L& z)pYD|VA|;l%X{qcMLUvok@(!-*k83V60^eR`(S4D>0&Qw=&R-1iHWvBPfw?JK6kxx z=OvNzhqHy-Dyu|Zgtv@V+2`5kWJY8_V#E9h5!oig&+TnbPd7XJ`zt6_WAa>2TBHbv zLX0=4*22`evk1;&geq9vq34oQc@R^Tsuss|4=8BDH=J=Hl=2l5KZiX0X=9eU`Nq%F zP%5XK9h?xI&KzsH=+1RljN1<$K0_A=#ED=V!((76n=`+5G<Xds9gnR*5dXn!(#gX! z9=e3QAwIP_J-m3IvCin1Sd?=*yN+fZq5JfK-b~p{$@dD5BIZ)&udL;qO(qLwGbStG zNqf&ln@+Dm3$vY|qr_#~`)gF$=#I=uM!Rw+u*UI+mgtlApObYvX*=PZoZ^cE8R^H1 zo18eEcvhI$giF}xZ{^tez>o<6o^)L^2{mgMQMrMq_f?9hqy0YN&#nlLco{-G-7bll zQUd)RnTbIPI*L!p=f}Mf(|NTSd%y6TsIgdKYKRo~x;Om!;gc@5MwjNpmf&~p&UwZ; zw>W{*xHGu=v|z@))^Dl{hBL|rF3g|FtG|~FZ-0-rNh4_2ae7k@-Z-DVyZyM=A4V6b z3E_0rE3st+bN}!vWw`Q^y3a;!QOIYkBaG+tY{q{d%fI?w@N#U4po1S_LiOlT9wz1F z$5I7Rsjq{xmD9}#f?J}coa54I+=gifH8U1<Hc*a3pyk4QyKfkKw)QIWx+HP_<E-K; z`ie~(QdWicvzPFV>CeKFh|sqwAof+Ik@i){Gxl>*Q*~?o`^SE&d$$MXQ(}Ge-R}D| zzEcE~5WQUTU98Lq!w)rwd>))SA7&&3dnk=QS57$2dk{jytP$(;I8ukjUHU(91p<34 z`^l-Czr<`}jgpV*)0flBmhRcD+cnG;6VXIFaiwJJ3~y>|`F16Ymh|$Dr1U^WpJj6u zV&C<GF6C}ALlbC1c7x`$9qG;>n7EW>Z~dh76WtPphuKEp2G0hg1`BC+X-jE1=#Er1 zlnj)Ll~Gg@l<#v5N-)Zci<(M*e0|f=BNdX%`Zc3sCm&Syyqr65S`Zgfm3h`YRJkW! z<Ke7}BrRL8m8f3m+Ae>n;I8Yrh|(f_FB0M)2}7+=D86&gn4*`k9I$NfR(uRRCG{*l z(mwUxW8Yp@+`F>=JacbwIdZ0mJV&_uW)shj;M1FTBve4g$`rZ)9}>DK?s%d;qA_4k zT@Fa&(qAsqr1e~QJWw{|4lRZ9TXgE1Ek2%{IY;^nuD8-}@iQLixAwy>)pFR{T(U2d zA`7W`S&(Y3vRK9~CZ1fpNDKEz!)nNy7<VEs)FwuDMz9Bg?{N2kx+xw8q3_1tl?3l3 zw}<N{xqrO_p{NTMr<Lm$>6R4Q{<KwVH$k1CW1dyu(5zds%Cfp&iauc4r9aVWvYyxf zUNed7VSA^bCFuEc{xJhhf<z|rO5m%n%yYm~(zll53O?Pl=YvQ)Tlvl+C<kH#481!j zhmV{I^HG3MN$5@mKxZ_pe*%>dx(lF|1%{OQxnma1f)wV2p-qT>5U%bgM=Ep&DNqV( z1qDu&R_Uz^yjKJ%>E_S2WnnQK6XY<lujGMoID@k^7;1p8sK0QC4W)ODk<nUPYz8o^ z-d9F(v4J_uF=BdDPmf@M-2&Y(JhaW&&75MaCU0LWBEIGS#Q6ncfo@7;W@apBDZ>1g zsVre*kZ$yBG=pBc6n4gr16+^j_V&sERWe#LlUdJ2&wNQ|$&@dzm1admK)k)>Vda4i zdIwe=b|Cmukam!+m|IwB1TYLgybVV&B{l&sIWl=YaX<Dd5sJmUy1yE-`F+cLGX#4b zJ1WT|$(L48*;-{xH9`~ZTjea<_wSP$D|uh?3vG*c%19te7F<@5Op|Q<b~6y+`q~B_ zbN=>(shNS}>c@}yWvay&XqvJOPS?Md$B9$;nGFn9$^?+7l~x7(e)(sU_WXQO8mJs< z6UGp<mR2sE#JP9xjqZI#B1YUCo9kmn#r&&L<-5yp(sb$NU;?W4@H~B?=7ij~+ZN8w z0I(TIr`MUJkYrdQRqj-rT-rC|Q=DU;*~sH{q#+Ag9J@Nmvgb^1skq`;YW6Pt(s5_7 zXLPHy*0VnO>8y5u7ORl@AUmf0fv<<VgwOJ3#?D~vaa&}da5={^xwKu)S6?sr0esuD zV|i22i8HHS$KGF;a)8S@Za+aHc9Urg?_G|Lsv<<Y3yA5$6bqsxQys*W2^!87utNP1 zvT+hAB{WT*O@1cz#tgd}qbXEHOgwL45}_97j^2xaB8EE>zaP;wzv|jSq!FeOqm@nI zm7pvWW#V@z9z=bRa%QT89%WP9-7fnsAwDG@BMTyHGRtcgeM;HbgR~#1E!w5pRN64w zepTj`NY#cRrq3T(lVk&I{dt2zvUd<GU`{YsX??}HM7c=^K^~ekBB`=B^$7BbinWIH z5_)3ZYU{BDiJJv#;kDJ5wQ?UzzZ_=jmA8I)_|$FQmoJk&-2Cq0YwUjOLg*bzl+GBE zj;F&+d|5)iZmwqDsvVQr%>tf1xrvQ^{c7uXlbP^|g@G^LJA}N}_dcll3b8exW$O<L zTE3N^F3<AK@I|$;v<`T475lckK5hD62-9~JillY3Tz!```yLvHKY5c{s+A1$>Z}{S z;?0aA9xnk@g}i1$ma1=ofmFko)<~=O@I9O6_~3k`Gw%e}1w4{-xIW`)Vmo6+N$A(_ zUnOQQXOs^xP}DVv($QxLbOIK{DkfYKU2a#f_k3q{o#`H;FPA4^QjS$gPEn%-<Vb#y z+@BSlhaIS{Z~od@0Zpo=SlSu-cxPQn{5<;MIdZLvgh8Syn4@KKuW}}D+;kK&KQTbp zUUG1dws^J^tSA+@2I)YN6Xv?1AH)*)wHKs`juAxt3GWP%Hc(DTAVhKQ-K5#2@}=et zT~42uvEh2FBkK*|fw~)thf*J?>^~>OLO%8_$AZat&dAO*oSZJ9gSnxa$b#L3qDsEf za6NRRb{lhRVbiyNYFxKFWsro%2vkHzNjFN@O&Jb+q^+kE05QM46?s`g8%IMAE0>BM zQoC*6CRR6wH`#>hG<ya1$8O`=-@Q5K;b<0q`2=DP*Y*(<$syM$=Q`RtmO#HiFQ_BC zpyal_C{S(bQt3YGK;Y2TLeTQIX>~s8qH-=_?e<$nQuW9V^sj`Ryk{v=hE%cw)=@u@ zU$5#y8chgZ@}nXecK>@KOrD2xDeF%sj&TK?wC<{eQ%DN^mQCh#n?~cvTiIjILj%BC z+*gU;3>$T}m7bc`#c)<X+p-_KmZlhT=rv>hD40Ulfm^6vIN}-7$Kss0Y`k(@N^ezN zI&oKAe`<h#)3ZmBZ7Q;1NxYF$AYh(N@5^}p$vgZ#kB^1*%$@7x(xGm&``v}W$%Y`2 zuGF2>eeF)o9eK}s!smEUx#3=io451*l@IqL@BQ^T38o;TAIk&ZmGfRoPlYX=9bFaO zwMLpIzXqL#U|DfRU#WUIzm8-@N$Gw0PU&@--!l3_<#Om^(VRzPRWoh-UZtni#rN$S zjR%Uyq@;QcGyn$5+QvXiMuuVE&w_I{z`=Y*Mu~Yw#=)uf+jDNfa-QGgNws)?r{%9; z$p$6G+3mQp>yC<ND3;N_AN~p?zxNYfJ4k6e0{}=^zYi!tdL|wK0J~zXrsbj~FUMmF zv1c?kgP52zde}R>umJ!*51yAxdvh0KQV)AOurrSbKlvXFo|o(2Fo>M=4~mN|Ke?8? z5~(P}$()p(k(rT&TmX@jl$6iO%z{TnOyVEzFL(UpRxU0MJRp#}yE~&hD<j0o62#2S z%?)B=0kN<!yf7G?J;5%<9t>b-ia&$=Gme<Kv#FD{gNro;O!_;nu?fW0g`b@KccOp& z{%og<wZ*?Pft~-+t(Ojhep^7yj7*?^#eQ++`;GFbm^(x4Tz`jG2V1)cF!TLE{yY5d zY=3%*LhK!!%$=QI+yvPF;qq7P?|iL)rxD;}`G><_!M{5wI$4{)2=cpK|7z1;vA^@R z|GNZ#1^?l|2l_4IUqt<*V!ze+8~(qEZSG<H{}KDQ<v+##jq)g2dzjm4iCNp5ga43@ zo0AXp-x~hXy+7=t5IcyIs)Mnq`END;4*i||M;h&ar(xmxYns0p{;x$bGyT^{cW`yG z`(vD&nS#vi%wKx!;{2it^M4(JW~MyOt|m6-rY`@i!=GdNk7|e*TY~-q^MU@8{eM=@ zml^-BrvI0z<6-RZpT&G(^T<QYtSvmnj9ttHSeTeu8JL(Em|4|Wn0T0&d6-`W{~PBo zHTrE4buu@0fjFr_Aa(+Ol*|72Eh)>(D#G@s?_U}JW1arg;AOoLKz#B1=h`KJxGx0A z2LKSYrNxBRtX^%U%R*G8fdeBw`GjP`NWw~hupml=*XGkM*8wOcqaV>aKfWUIk9mba z28&7WVJB26V#2Fk`5IGBF%WkBZE8^ORo2CQ4$rm0;%u}%2ZcO$ySgj!^F@)W`RYM! z_$R5UTFDq<oRifK#e;(bn0=#qoiZq%pj<`U1`_Pn&hRs)`>vA#gbwJ!Fp^r|$Tz%h z1^O*+pG8AZKPM$6ZRd)5O05zMICLEUI+%^XqE;vf4i2vMdw%l0dj8QmwO3GK*zu*V zuI}=DYsBSjy)O*cWL><`?MTP*c&Ukvm$$_1WT~l!d#}C=(b>`@CjHx7sVOuH&YNK? z7OPt3hZyK%x0Z#d3WGM8iEMt^6h?i5DcuJCNpig=r_VPVF{@MS>nbx;oEC~uz!_@} zbam$kDhP5tCt%mh8T+hP7!H+Y@(`ig*a}wtQAr|3t)j@q_uKQ~%ECxp?cKx=m$mL- ziEFsFN-h)jj8xZ!o)EMM{`Xe}HI@^}mJV5lQB_&|h$gY65d4xDLX|e3nKMR!4LM2y zL4z?@xk!heJ-FxSp|B`h(65|g|Kaw62D126UnT~;Ib9RgF))~k45o-{j#nE766oJL zHJi1Z>h*sl(A6|%k`OeN!G80eEC;ckmj%;h9y}wg2+255&(H9nAy7#ceP@Q(%jF;k zPR(X+Hl9$g>5C-OiBrfC$P(~<Kp57tFBNa}d-i1(<V?9bUe0K~5-uR+f=@zd!3%!* zDu4OTL7aw1rt;@ra5a-&Av`N4@Z9`o72X#LB5nGkA+UjiDN>I3W*N7FQI>dJ9H=}} z$W0D!d)A8ox@qVcT&R@2y|XhF2#;n4r<%W@7160V+4uQv&0d$JnzFu3IT2@jK(Dm; zXCoXXh0@?c|E@u9jZ;^-Fq$(d%M8+?c53+rGhns&Zi_H+lBsvqYrVI?96mVO%Q-aO z_Qu7753+hrA7rx!VF*Etj9=VOR-%S|h8Ep0vITr}i1<91jusn0uFdvugQtxWXuRKV zBaS7FeF_DOEZ{rEs>QzSI=_eIl84?;jZdiEOD&()Hj``C8Mp0cCI>ZyC9?NW=T!$A zRwK>BS3kpeRc}dl`9EiYC2z?gF(iT<f%%K|5vSW@gk?5r1a1rlw%LF}EIp=3>y5ed zaC~j^iCtLK$ra+zF;RA=IN|K<l-D$M2rTst8@!4Fq$ibB0j(Rn7|!DbpkMa%yr%oK z61PD<c7X@X#x0|-S^D*=A#vWx;MscppqJ@XNFf<b36|lb1*-|ik<!!964$zYu%ZHw z7p*&RfnX`HG~-QDI_YpF<Ecz}WHi$BfGn40-x=qCpW-ow*x7DvDjN?&>w<gQtS?6s zA7<jHkZZ87oY!mWrojzUhjH_lM~j?kgs%8a2-nBUbd9td^{vat9wO$EHk8p)+3-lp zpts+!!WQGl_*nM5hDBMwV8W3gSJ+g{*-cEn(+AE^cqW+V#~Rk)AejIjn$XsnKMF<> zUmcA_c(5@3R4Pm8xLMkBN#Z;oz|APe{ZLkGMlyH^?OzpsA%i+Th>_+_U_d50q!VL{ zd={-)Jc0a#E;nRJyh7(t%p1L3jV56<IlH3O!0lesE_Df>I{WfX6`4Dm$Z$@r^?ZnE z%##eV32AxRiDiX1<jfTCzNxHFj@-(?IhUajp6qQH>KsE3TU$w{giF}Lx9PX-4vOMq z`2s1rvQSRjvA&$gKa=@PAHvtn5KbP0&z0GTwU@@kEQSZT9MI?NiNn54s3J?r8<@=E zbr0Vdh@sBLtmn1Iui-0dHu<$DjhVE4_WqY}LgYJW#eC?zd=Zhn`2wgZcdh<d@7-67 zcpO0AZG3VEz21CWc{r9adxf$T`|6%bR-R*#KG~=3?d|U`L-ee?3T64VVY|1q<#?vF zuC6X3@TfZ8R_TLW=fh-xMvi)|K^~RdYz-X_-I+{F^gM+mnN|Wx*DgEG^w-&FJjobK z6C9R_>T2#n)EZMKUEL!#LBSk@4qyHGBSQA$AZo>I1UCzde%ud;gX&5eY0|x^Uqh>| zyDr)vh?rB7zBGGlj~N9S5FcO<@qQ_v5}eVFInF)Ig|HhAOq)`tFi+c|nV{Wu{8*9O zjB6D$xSt_?3EBWz{qm}1W5XDGCtZ`$+%yVC8J5M2?Y;*P!*gVvE9SCkdwB6R`UVOP zV{<Q^S(nF!L0el*A1EFo1Dn5Y+64qSC7aUYW#I01CarIJ8NDX-PG4K|a$ZVhwnoCv zy3*jR^95@Q;C|0}zEj<QOzF=$y}j6}H4~h(1A~XrEv-DuZKe9msY_+1OTSW5HEU9W zcY`A*kI-Fr92{W3w2$S6DHxeKeAQp|2#RZx7)cH~Sp8@wbMaHYB!qBb%~<>lIi_XR z?|d+dP|{nKP%B8c0gN*c{YLiw5SJA^{fU-j8#Zkwwcuys`F<_JOpPTgZd~hyQcAs% zkJ+rRTx?&d=?zyx682#WYrvo?J-0tKYAJ!jGA-7Kaq74OKaO139u?unOf#3l@=Fp> z?8|deo)fZ?_`Xy8C7EK5z+N2tfKq1Fu@M}#*puCeHSao~Fr2=ryP8Dmz@pjQSF)VC zcgvlLt;U0D$-}0c8v;gey&cx%Bv&I-B;m{^zsx%OWC@cV=nqVLgg!5E#ZPQ?fT$JH zo@QzgG%E}kwxcKZ0?kZKMIEJuIbL&3t3Qn+>LeF$+9xKE<usknQX7unmg~qX%^+oE zH*A`Tx5UOx6SZSrskkCTHAZi$SE=rPux1doJ#62~mAL7sYLBx(9V@uKZR!OjmLJYK zVStw!l@C|icpvXFd>HCjBj3Y_7gBnd_rX_`c&YbBceY3D>%dj0rPIjesRhJCdPlop zCknsV!z|yd2_<6)P;CUppHJ8gdh(hrj*>Nl0#e0d(9CX)G)yJw7$rv)q~K(hpQE=D zCO#TYJS6)rJgQEJ)E=+2>9%^DiJ<LiJXOW}&Ob*82r(r)!)J3+q#lJ*6qyT>q7}x> zapL%4TfBY}<iiWK4z2KB+@ywjk{`^brkzLu8G`F>a=ARu&3Ih*6SHO+?zN8->^a|? z?61PSiQXqu<<5^Rs(grwk(SR67oY9`CRg*bl(QfvAP!_h*UFByhVy<c)!CGhO1}*N z86^s_j9DhYjSv3Z*cI1v`V=|TR<>hS^lWj~`2l7D=OJTsf8WMte%|mj*V@^Zwd{G| zDNdF+Bya}J+8o*Ef!IsV7rkbpH`JP=h%qt-9i*MG_hYz3%!nyW{K-0CBWHl1tmEl1 z1qZ;6uK6z0wU#)V>_7s(eO$MK{Ef!D8oTr?W1a6MdEDn_sfSYbg*s}{2REIvK~Mu< zdXKsduke$*F~>sR`J_mqcXW@cd4<<<QzzVYB-D^lx2~lRD8i=C_emnCv-R8T-jg=o zat&|N@0cV#(a7BfdA+h1uvjMMYv^+K`TWDHILM&iAswqpLwxIwrb#Y4=5vVP7<bzA b^E0#tYFFn$sSL*Nmu6{k1+j7wqk#VhN-ggt literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/textfield.png b/tests/manual/workshop/images/textfield.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4a38ab38bea53d34f71c84e4f88669b99f3447 GIT binary patch literal 3023 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 R;yM5T002ovPDHLkV1mLVmXQDe literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/toplevel_window.png b/tests/manual/workshop/images/toplevel_window.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc6a8cee217d45990972ff43f27d06c6a851b61 GIT binary patch literal 3690 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 IM6N<$g0L_WG5`Po literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/view-refresh.png b/tests/manual/workshop/images/view-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..606ea9eba46b82eea04678e64369b97e595f9da5 GIT binary patch literal 2024 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 GLSTY33DUU$ literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/images/window-new@2x.png b/tests/manual/workshop/images/window-new@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..36503018ef4157fa20f6cfdaf9fb851137384c53 GIT binary patch literal 1900 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 literal 0 HcmV?d00001 diff --git a/tests/manual/workshop/main.qml b/tests/manual/workshop/main.qml new file mode 100644 index 000000000..723a8886b --- /dev/null +++ b/tests/manual/workshop/main.qml @@ -0,0 +1,169 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.0 +import QtQuick.Dialogs 1.0 +import "content" + +ApplicationWindow { + visible: true + title: "Qt Quick Controls Workshop" + + width: 640 + height: 420 + minimumHeight: 400 + minimumWidth: 600 + + ImageViewer { id: imageViewer } + + FileDialog { + id: fileDialog + nameFilters: [ "Image files (*.png *.jpg)" ] + onAccepted: imageViewer.open(fileUrl) + } + + AboutDialog { id: aboutDialog } + + Action { + id: openAction + text: "&Open" + shortcut: StandardKey.Open + iconSource: "images/document-open.png" + onTriggered: fileDialog.open() + tooltip: "Open an image" + } + + Action { + id: copyAction + text: "&Copy" + shortcut: StandardKey.Copy + iconName: "edit-copy" + enabled: (!!activeFocusItem && !!activeFocusItem["copy"]) + onTriggered: activeFocusItem.copy() + } + + Action { + id: cutAction + text: "Cu&t" + shortcut: StandardKey.Cut + iconName: "edit-cut" + enabled: (!!activeFocusItem && !!activeFocusItem["cut"]) + onTriggered: activeFocusItem.cut() + } + + Action { + id: pasteAction + text: "&Paste" + shortcut: StandardKey.Paste + iconName: "edit-paste" + enabled: (!!activeFocusItem && !!activeFocusItem["paste"]) + onTriggered: activeFocusItem.paste() + } + + toolBar: ToolBar { + id: toolbar + RowLayout { + id: toolbarLayout + spacing: 0 + anchors.fill: parent + ToolButton { action: openAction } + ToolButton { + Accessible.name: "Save as" + iconSource: "images/document-save-as.png" + tooltip: "(Pretend to) Save as..." + } + Item { Layout.fillWidth: true } + CheckBox { + id: enabledCheck + text: "Enabled" + checked: true + } + } + } + + menuBar: MenuBar { + Menu { + title: "&File" + MenuItem { action: openAction } + MenuItem { + text: "E&xit" + shortcut: StandardKey.Quit + onTriggered: Qt.quit() + } + } + Menu { + title: "&Edit" + MenuItem { action: cutAction } + MenuItem { action: copyAction } + MenuItem { action: pasteAction } + } + Menu { + title: "&Help" + MenuItem { + text: "About..." + onTriggered: aboutDialog.open() + } + } + } + + TabView { + id:frame + enabled: enabledCheck.checked + tabPosition: controlPage.item ? controlPage.item.tabPosition : Qt.TopEdge + anchors.fill: parent + anchors.margins: Qt.platform.os === "osx" ? 12 : 2 + + Tab { + id: controlPage + title: "Controls" + Controls { } + } + Tab { + title: "Itemviews" + ModelView { } + } + Tab { + title: "Styles" + Styles { anchors.fill: parent } + } + } +} diff --git a/tests/manual/workshop/src/main.cpp b/tests/manual/workshop/src/main.cpp new file mode 100644 index 000000000..d8b3665ca --- /dev/null +++ b/tests/manual/workshop/src/main.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module 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 Digia Plc and its Subsidiary(-ies) 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 "qt_quick_controls_testapp.h" +#include <QtQml/QQmlApplicationEngine> +#include <QtGui/QSurfaceFormat> +#include <QtQuick/QQuickWindow> + +int main(int argc, char *argv[]) +{ + QtQuickControlsTestApp app(argc, argv); + if (QCoreApplication::arguments().contains(QLatin1String("--coreprofile"))) { + QSurfaceFormat fmt; + fmt.setVersion(4, 4); + fmt.setProfile(QSurfaceFormat::CoreProfile); + QSurfaceFormat::setDefaultFormat(fmt); + } + QQmlApplicationEngine engine(QUrl("qrc:/main.qml")); + return app.exec(); +} diff --git a/tests/manual/workshop/src/src.pri b/tests/manual/workshop/src/src.pri new file mode 100644 index 000000000..66d903eac --- /dev/null +++ b/tests/manual/workshop/src/src.pri @@ -0,0 +1,2 @@ +SOURCES += \ + $$PWD/main.cpp diff --git a/tests/manual/workshop/workshop.pro b/tests/manual/workshop/workshop.pro new file mode 100644 index 000000000..c3abc14ce --- /dev/null +++ b/tests/manual/workshop/workshop.pro @@ -0,0 +1,18 @@ +QT += qml quick +TARGET = workshop +!no_desktop: QT += widgets + +include(src/src.pri) + +INCLUDEPATH += ../../shared + +OTHER_FILES += \ + main.qml \ + content/AboutDialog.qml \ + content/Controls.qml \ + content/ImageViewer.qml \ + content/ModelView.qml \ + content/Styles.qml + +RESOURCES += \ + workshop.qrc diff --git a/tests/manual/workshop/workshop.qrc b/tests/manual/workshop/workshop.qrc new file mode 100644 index 000000000..57d803b22 --- /dev/null +++ b/tests/manual/workshop/workshop.qrc @@ -0,0 +1,24 @@ +<RCC> + <qresource prefix="/"> + <file>main.qml</file> + <file>content/AboutDialog.qml</file> + <file>content/Controls.qml</file> + <file>content/ImageViewer.qml</file> + <file>content/ModelView.qml</file> + <file>content/Styles.qml</file> + <file>images/document-open.png</file> + <file>images/document-open@2x.png</file> + <file>images/document-save-as.png</file> + <file>images/document-save-as@2x.png</file> + <file>images/folder_new.png</file> + <file>images/tab.png</file> + <file>images/tab_selected.png</file> + <file>images/bubble.png</file> + <file>images/button-pressed.png</file> + <file>images/button.png</file> + <file>images/progress-background.png</file> + <file>images/progress-fill.png</file> + <file>images/textfield.png</file> + <file>images/slider-handle.png</file> + </qresource> +</RCC> -- GitLab