| /**************************************************************************** |
| ** |
| ** 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.12 |
| import QtQuick.Layouts 1.12 |
| import QtQuick.Controls 2.12 |
| import QtQuick.Controls.Material 2.12 |
| import QtQuick.Controls.Universal 2.12 |
| import Qt.labs.settings 1.0 |
| |
| ApplicationWindow { |
| id: window |
| width: 360 |
| height: 520 |
| visible: true |
| title: "Qt Quick Controls 2" |
| |
| Settings { |
| id: settings |
| property string style: "Default" |
| } |
| |
| Shortcut { |
| sequences: ["Esc", "Back"] |
| enabled: stackView.depth > 1 |
| onActivated: navigateBackAction.trigger() |
| } |
| |
| Action { |
| id: navigateBackAction |
| icon.name: stackView.depth > 1 ? "back" : "drawer" |
| onTriggered: { |
| if (stackView.depth > 1) { |
| stackView.pop() |
| listView.currentIndex = -1 |
| } else { |
| drawer.open() |
| } |
| } |
| } |
| |
| Shortcut { |
| sequence: "Menu" |
| onActivated: optionsMenuAction.trigger() |
| } |
| |
| Action { |
| id: optionsMenuAction |
| icon.name: "menu" |
| onTriggered: optionsMenu.open() |
| } |
| |
| header: ToolBar { |
| Material.foreground: "white" |
| |
| RowLayout { |
| spacing: 20 |
| anchors.fill: parent |
| |
| ToolButton { |
| action: navigateBackAction |
| } |
| |
| Label { |
| id: titleLabel |
| text: listView.currentItem ? listView.currentItem.text : "Gallery" |
| font.pixelSize: 20 |
| elide: Label.ElideRight |
| horizontalAlignment: Qt.AlignHCenter |
| verticalAlignment: Qt.AlignVCenter |
| Layout.fillWidth: true |
| } |
| |
| ToolButton { |
| action: optionsMenuAction |
| |
| Menu { |
| id: optionsMenu |
| x: parent.width - width |
| transformOrigin: Menu.TopRight |
| |
| Action { |
| text: "Settings" |
| onTriggered: settingsDialog.open() |
| } |
| Action { |
| text: "About" |
| onTriggered: aboutDialog.open() |
| } |
| } |
| } |
| } |
| } |
| |
| Drawer { |
| id: drawer |
| width: Math.min(window.width, window.height) / 3 * 2 |
| height: window.height |
| interactive: stackView.depth === 1 |
| |
| ListView { |
| id: listView |
| |
| focus: true |
| currentIndex: -1 |
| anchors.fill: parent |
| |
| delegate: ItemDelegate { |
| width: parent.width |
| text: model.title |
| highlighted: ListView.isCurrentItem |
| onClicked: { |
| listView.currentIndex = index |
| stackView.push(model.source) |
| drawer.close() |
| } |
| } |
| |
| model: ListModel { |
| ListElement { title: "BusyIndicator"; source: "qrc:/pages/BusyIndicatorPage.qml" } |
| ListElement { title: "Button"; source: "qrc:/pages/ButtonPage.qml" } |
| ListElement { title: "CheckBox"; source: "qrc:/pages/CheckBoxPage.qml" } |
| ListElement { title: "ComboBox"; source: "qrc:/pages/ComboBoxPage.qml" } |
| ListElement { title: "DelayButton"; source: "qrc:/pages/DelayButtonPage.qml" } |
| ListElement { title: "Dial"; source: "qrc:/pages/DialPage.qml" } |
| ListElement { title: "Dialog"; source: "qrc:/pages/DialogPage.qml" } |
| ListElement { title: "Delegates"; source: "qrc:/pages/DelegatePage.qml" } |
| ListElement { title: "Frame"; source: "qrc:/pages/FramePage.qml" } |
| ListElement { title: "GroupBox"; source: "qrc:/pages/GroupBoxPage.qml" } |
| ListElement { title: "PageIndicator"; source: "qrc:/pages/PageIndicatorPage.qml" } |
| ListElement { title: "ProgressBar"; source: "qrc:/pages/ProgressBarPage.qml" } |
| ListElement { title: "RadioButton"; source: "qrc:/pages/RadioButtonPage.qml" } |
| ListElement { title: "RangeSlider"; source: "qrc:/pages/RangeSliderPage.qml" } |
| ListElement { title: "ScrollBar"; source: "qrc:/pages/ScrollBarPage.qml" } |
| ListElement { title: "ScrollIndicator"; source: "qrc:/pages/ScrollIndicatorPage.qml" } |
| ListElement { title: "Slider"; source: "qrc:/pages/SliderPage.qml" } |
| ListElement { title: "SpinBox"; source: "qrc:/pages/SpinBoxPage.qml" } |
| ListElement { title: "StackView"; source: "qrc:/pages/StackViewPage.qml" } |
| ListElement { title: "SwipeView"; source: "qrc:/pages/SwipeViewPage.qml" } |
| ListElement { title: "Switch"; source: "qrc:/pages/SwitchPage.qml" } |
| ListElement { title: "TabBar"; source: "qrc:/pages/TabBarPage.qml" } |
| ListElement { title: "TextArea"; source: "qrc:/pages/TextAreaPage.qml" } |
| ListElement { title: "TextField"; source: "qrc:/pages/TextFieldPage.qml" } |
| ListElement { title: "ToolTip"; source: "qrc:/pages/ToolTipPage.qml" } |
| ListElement { title: "Tumbler"; source: "qrc:/pages/TumblerPage.qml" } |
| } |
| |
| ScrollIndicator.vertical: ScrollIndicator { } |
| } |
| } |
| |
| StackView { |
| id: stackView |
| anchors.fill: parent |
| |
| initialItem: Pane { |
| id: pane |
| |
| Image { |
| id: logo |
| width: pane.availableWidth / 2 |
| height: pane.availableHeight / 2 |
| anchors.centerIn: parent |
| anchors.verticalCenterOffset: -50 |
| fillMode: Image.PreserveAspectFit |
| source: "images/qt-logo.png" |
| } |
| |
| Label { |
| text: "Qt Quick Controls 2 provides a set of controls that can be used to build complete interfaces in Qt Quick." |
| anchors.margins: 20 |
| anchors.top: logo.bottom |
| anchors.left: parent.left |
| anchors.right: parent.right |
| anchors.bottom: arrow.top |
| horizontalAlignment: Label.AlignHCenter |
| verticalAlignment: Label.AlignVCenter |
| wrapMode: Label.Wrap |
| } |
| |
| Image { |
| id: arrow |
| source: "images/arrow.png" |
| anchors.left: parent.left |
| anchors.bottom: parent.bottom |
| } |
| } |
| } |
| |
| Dialog { |
| id: settingsDialog |
| x: Math.round((window.width - width) / 2) |
| y: Math.round(window.height / 6) |
| width: Math.round(Math.min(window.width, window.height) / 3 * 2) |
| modal: true |
| focus: true |
| title: "Settings" |
| |
| standardButtons: Dialog.Ok | Dialog.Cancel |
| onAccepted: { |
| settings.style = styleBox.displayText |
| settingsDialog.close() |
| } |
| onRejected: { |
| styleBox.currentIndex = styleBox.styleIndex |
| settingsDialog.close() |
| } |
| |
| contentItem: ColumnLayout { |
| id: settingsColumn |
| spacing: 20 |
| |
| RowLayout { |
| spacing: 10 |
| |
| Label { |
| text: "Style:" |
| } |
| |
| ComboBox { |
| id: styleBox |
| property int styleIndex: -1 |
| model: availableStyles |
| Component.onCompleted: { |
| styleIndex = find(settings.style, Qt.MatchFixedString) |
| if (styleIndex !== -1) |
| currentIndex = styleIndex |
| } |
| Layout.fillWidth: true |
| } |
| } |
| |
| Label { |
| text: "Restart required" |
| color: "#e41e25" |
| opacity: styleBox.currentIndex !== styleBox.styleIndex ? 1.0 : 0.0 |
| horizontalAlignment: Label.AlignHCenter |
| verticalAlignment: Label.AlignVCenter |
| Layout.fillWidth: true |
| Layout.fillHeight: true |
| } |
| } |
| } |
| |
| Dialog { |
| id: aboutDialog |
| modal: true |
| focus: true |
| title: "About" |
| x: (window.width - width) / 2 |
| y: window.height / 6 |
| width: Math.min(window.width, window.height) / 3 * 2 |
| contentHeight: aboutColumn.height |
| |
| Column { |
| id: aboutColumn |
| spacing: 20 |
| |
| Label { |
| width: aboutDialog.availableWidth |
| text: "The Qt Quick Controls 2 module delivers the next generation user interface controls based on Qt Quick." |
| wrapMode: Label.Wrap |
| font.pixelSize: 12 |
| } |
| |
| Label { |
| width: aboutDialog.availableWidth |
| text: "In comparison to the desktop-oriented Qt Quick Controls 1, Qt Quick Controls 2 " |
| + "are an order of magnitude simpler, lighter and faster, and are primarily targeted " |
| + "towards embedded and mobile platforms." |
| wrapMode: Label.Wrap |
| font.pixelSize: 12 |
| } |
| } |
| } |
| } |