qtdoc/examples/demos/coffee/ApplicationFlow.qml

225 lines
6.8 KiB
QML

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
ApplicationFlowForm {
id: applicationFlow
state: "Home"
property int animationDuration: 400
property string platform: Qt.platform.os
CoffeeConfig {
id: coffeeConfig
}
stack.initialItem: Home {
id: home
visible: true
//! [On clicked]
getStartedbutton.onClicked: {
applicationFlow.state = "Coffee-selection"
applicationFlow.stack.pushItem(applicationFlow.choosingCoffee, {appFlow: applicationFlow})
}
//! [On clicked]
}
//! [Theme button]
function themeButton() {
if (Colors.currentTheme == Colors.dark) {
Colors.currentTheme = Colors.light
} else {
Colors.currentTheme = Colors.dark
}
}
//! [Theme button]
function cappuccino() {
applicationFlow.state = "Settings"
applicationFlow.coffeeName = "Cappuccino"
coffeeConfig.coffeeAmount = 60
coffeeConfig.milkAmount = 60
coffeeConfig.foamAmount = 60
coffeeConfig.brewTime = 5000
coffeeConfig.sugarAmount = 0
stack.pushItem(settings, {appFlow: applicationFlow, coffeeConfig})
coffeeText.text = "Cappuccino"
}
function espresso() {
applicationFlow.state = "Settings"
applicationFlow.coffeeName = "Espresso"
coffeeConfig.coffeeAmount = 80
coffeeConfig.milkAmount = 0
coffeeConfig.foamAmount = 0
coffeeConfig.brewTime = 4000
coffeeConfig.sugarAmount = 0
stack.pushItem(settings, {appFlow: applicationFlow, coffeeConfig})
coffeeText.text = "Espresso"
}
function latte() {
applicationFlow.state = "Settings"
applicationFlow.coffeeName = "Latte"
coffeeConfig.coffeeAmount = 40
coffeeConfig.milkAmount = 20
coffeeConfig.foamAmount = 60
coffeeConfig.brewTime = 6000
coffeeConfig.sugarAmount = 0
stack.pushItem(settings, {appFlow: applicationFlow, coffeeConfig})
coffeeText.text = "Latte"
}
function macchiato() {
applicationFlow.state = "Settings"
applicationFlow.coffeeName = "Macchiato"
coffeeConfig.coffeeAmount = 100
coffeeConfig.milkAmount = 5
coffeeConfig.foamAmount = 10
coffeeConfig.brewTime = 8000
coffeeConfig.sugarAmount = 0
stack.pushItem(settings, {appFlow: applicationFlow, coffeeConfig})
coffeeText.text = "Macchiato"
}
function backButton() {
stack.pop()
applicationFlow.state = applicationFlow.previousState
}
function confirmButton() {
stack.pushItem(insert, {appFlow: applicationFlow})
applicationFlow.state = "Insert"
}
function continueButton() {
stack.pushItem(progress, {appFlow: applicationFlow, coffeeConfig})
applicationFlow.state = "Progress"
applicationFlow.progressBarValue = 1
applicationFlow.progressCupState = "1"
if (applicationFlow.coffeeName == "Cappuccino") {
applicationFlow.cappuccinos = applicationFlow.cappuccinos - 1
} else if (applicationFlow.coffeeName == "Espresso") {
applicationFlow.espressos = applicationFlow.espressos - 1
} else if (applicationFlow.coffeeName == "Latte") {
applicationFlow.lattes = applicationFlow.lattes - 1
} else {
applicationFlow.macchiatos = applicationFlow.macchiatos - 1
}
}
function cancelButton() {
applicationFlow.state = "Coffee-selection"
stack.pop(stack.get(1))
}
function onFinished() {
stack.pushItem(ready, {appFlow: applicationFlow, coffeeConfig})
applicationFlow.state = "Ready"
}
function onReturnToStart() {
stack.pop(stack.get(0))
applicationFlow.state = "Home"
applicationFlow.progressBarValue = 0
applicationFlow.progressCupState = "0"
}
toolbar.onBackClicked: applicationFlow.backButton()
toolbar.onThemeChangeRequested: applicationFlow.themeButton()
//! [States]
states: [
State {
name: "Home"
PropertyChanges {
target: toolbar
backButton.opacity: 0
backButton.enabled: false
themeButton.opacity: 0
themeButton.enabled: false
logo.sourceSize.width: 70
logo.sourceSize.height: 50
}
//! [States]
PropertyChanges {
target: coffeeText
visible: false
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
},
State {
name: "Coffee-selection"
PropertyChanges {
target: applicationFlow
previousState: "Home"
}
PropertyChanges {
target: coffeeText
text: "Coffee Selection"
}
PropertyChanges {
target: toolbar
backButton.opacity: 0
backButton.enabled: false
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
},
State {
name: "Settings"
PropertyChanges {
target: applicationFlow
previousState: "Coffee-selection"
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
},
State {
name: "Insert"
PropertyChanges {
target: applicationFlow
previousState: "Settings"
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
},
State {
name: "Progress"
PropertyChanges {
target: applicationFlow
previousState: "Insert"
}
PropertyChanges {
target: toolbar
backButton.opacity: 0
backButton.enabled: false
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
},
State {
name: "Ready"
PropertyChanges {
target: applicationFlow
previousState: "Progress"
}
PropertyChanges {
target: toolbar
backButton.opacity: 0
backButton.enabled: false
}
PropertyChanges {
target: stack
anchors.top: coffeeText.bottom
}
}
]
}