mirror of https://github.com/qt/qtdoc.git
200 lines
7.9 KiB
QML
200 lines
7.9 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import QtQuick.Controls
|
|
import QtQuick.Effects
|
|
|
|
// Height, width and any other size related properties containing odd looking float or other dividers
|
|
// that do not seem to have any logical origin are just arbitrary and based on original design
|
|
// and/or personal preference on what looks nice.
|
|
Column {
|
|
id: root
|
|
spacing: -coffeeCardCircle.height / 2
|
|
rotation: 180
|
|
property alias button: button
|
|
property alias coffeeCardRectangle: coffeeCardRectangle
|
|
property alias innerCoffeeCardRectangle: innerCoffeeCardRectangle
|
|
property alias coffeeCardCircle: coffeeCardCircle
|
|
property alias coffeeText: coffeeText
|
|
property alias ingredientText: ingredientText
|
|
property alias timeText: timeText
|
|
property alias actualTimeText: actualTimeText
|
|
property alias cupsLeftText: cupsLeftText
|
|
property alias box: box
|
|
property string coffeeName: ""
|
|
property string ingredients: ""
|
|
property int time: 4
|
|
property int cupsLeft: 0
|
|
|
|
states: [
|
|
State {
|
|
name: "portrait"
|
|
when: applicationFlow.mode == "portrait"
|
|
PropertyChanges {
|
|
target: coffeeCardRectangle
|
|
implicitHeight: (applicationFlow.stack.height / 2) - 20 - (coffeeCardCircle.height / 2)
|
|
implicitWidth: applicationFlow.width / 2.4
|
|
}
|
|
},
|
|
State {
|
|
name: "landscape"
|
|
when: applicationFlow.mode == "landscape"
|
|
PropertyChanges {
|
|
target: coffeeCardRectangle
|
|
implicitHeight: applicationFlow.height / 2
|
|
implicitWidth: applicationFlow.width / 5
|
|
}
|
|
}
|
|
]
|
|
|
|
Rectangle {
|
|
id: coffeeCardRectangle
|
|
radius: 8
|
|
gradient: Colors.invertedGreyBorder
|
|
//! [AbstractButton]
|
|
AbstractButton {
|
|
width: parent.width - 2
|
|
height: parent.height - 2
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
id: button
|
|
hoverEnabled: true
|
|
checkable: true
|
|
enabled: (cupsLeft != 0) ? true : false
|
|
transitions: Transition {
|
|
NumberAnimation {
|
|
properties: "scale"
|
|
duration: 50
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
//! [AbstractButton]
|
|
contentItem: Rectangle {
|
|
id: innerCoffeeCardRectangle
|
|
anchors.fill: parent
|
|
color: Colors.currentTheme.cardColor
|
|
radius: 8
|
|
ColumnLayout {
|
|
rotation: 180
|
|
anchors.top: parent.top
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: parent.width / 1.19
|
|
height: parent.height - (coffeeCardCircle.height / 2)
|
|
Text {
|
|
id: coffeeText
|
|
text: coffeeName
|
|
color: Colors.currentTheme.textColor
|
|
font.weight: 700
|
|
font.pixelSize: 18
|
|
Layout.maximumWidth: parent.width
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
Text {
|
|
id: ingredientText
|
|
text: ingredients
|
|
color: Colors.currentTheme.caption
|
|
Layout.alignment: Qt.AlignHCenter
|
|
Layout.maximumWidth: parent.width
|
|
wrapMode: Text.Wrap
|
|
}
|
|
Text {
|
|
id: timeText
|
|
text: "Time"
|
|
font.pointSize: 12
|
|
color: Colors.currentTheme.caption
|
|
wrapMode: Text.Wrap
|
|
}
|
|
RowLayout {
|
|
Layout.bottomMargin: 12
|
|
Layout.alignment: Qt.AlignBottom
|
|
Text {
|
|
id: actualTimeText
|
|
Layout.fillWidth: true
|
|
text: time + " Mins"
|
|
font.pixelSize: 14
|
|
color: Colors.currentTheme.textColor
|
|
}
|
|
Rectangle {
|
|
id: box
|
|
Layout.preferredHeight: 24
|
|
Layout.preferredWidth: 24
|
|
color: Colors.currentTheme.cardColor
|
|
border.color: Colors.border
|
|
border.width: 1
|
|
radius: 8
|
|
Text {
|
|
id: cupsLeftText
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: cupsLeft
|
|
font.pixelSize: 12
|
|
font.weight: 600
|
|
color: Colors.green
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Rectangle {
|
|
id: outOfDialog
|
|
width: coffeeCardRectangle.width / 1.5
|
|
height: coffeeCardRectangle.height / 5
|
|
visible: (cupsLeft != 0) ? false : true
|
|
radius: 8
|
|
color: (Colors.currentTheme
|
|
== Colors.dark) ? Colors.light.cardColor : Colors.dark.cardColor
|
|
rotation: 180
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
Text {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: "Out of " + coffeeName
|
|
color: (Colors.currentTheme
|
|
== Colors.dark) ? Colors.light.textColor : Colors.dark.textColor
|
|
}
|
|
}
|
|
}
|
|
MultiEffect {
|
|
source: innerCoffeeCardRectangle
|
|
anchors.fill: innerCoffeeCardRectangle
|
|
shadowEnabled: true
|
|
shadowColor: Colors.shadow
|
|
shadowOpacity: (cupsLeft != 0) ? 0.5 : 0.0
|
|
}
|
|
}
|
|
}
|
|
Rectangle {
|
|
id: coffeeCardCircle
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
implicitHeight: implicitWidth
|
|
implicitWidth: coffeeCardRectangle.implicitWidth / 1.36
|
|
radius: width * 0.5
|
|
gradient: Colors.invertedGreyBorder
|
|
Rectangle {
|
|
id: innerCoffeeCardCircle
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
height: width
|
|
width: parent.width - 2
|
|
radius: width * 0.5
|
|
color: Colors.currentTheme.cardColor
|
|
Image {
|
|
source: (Colors.currentTheme == Colors.dark) ? "./images/Cups/card_cup_dark.svg" : "./images/Cups/card_cup_light.svg"
|
|
sourceSize.width: coffeeCardCircle.width / 2.2
|
|
sourceSize.height: coffeeCardCircle.height / 1.9
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
rotation: 180
|
|
}
|
|
}
|
|
MultiEffect {
|
|
source: innerCoffeeCardCircle
|
|
anchors.fill: innerCoffeeCardCircle
|
|
shadowEnabled: true
|
|
shadowColor: Colors.shadow
|
|
shadowOpacity: (cupsLeft != 0) ? 0.5 : 0.0
|
|
}
|
|
}
|
|
}
|