qtdoc/examples/demos/calqlatr/content/NumberPad.qml

148 lines
4.4 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
pragma ComponentBehavior: Bound
import QtQuick
import "calculator.js" as CalcEngine
import QtQuick.Layouts
Item {
id: controller
implicitWidth: isPortraitMode ? portraitModeWidth : landscapeModeWidth
implicitHeight: mainGrid.height
readonly property color qtGreenColor: "#2CDE85"
readonly property color backspaceRedColor: "#DE2C2C"
readonly property int spacing: 5
property bool isPortraitMode: root.isPortraitMode
property int portraitModeWidth: mainGrid.width
property int landscapeModeWidth: scientificGrid.width + mainGrid.width
function updateDimmed() {
for (let i = 0; i < mainGrid.children.length; i++) {
mainGrid.children[i].dimmed = root.isButtonDisabled(mainGrid.children[i].text);
}
for (let j = 0; j < scientificGrid.children.length; j++) {
scientificGrid.children[j].dimmed = root.isButtonDisabled(
scientificGrid.children[j].text);
}
}
component DigitButton: CalculatorButton {
onReleased: {
root.digitPressed(text);
updateDimmed();
}
}
component OperatorButton: CalculatorButton {
onReleased: {
root.operatorPressed(text);
updateDimmed();
}
textColor: controller.qtGreenColor
implicitWidth: 48
dimmable: true
}
Component.onCompleted: updateDimmed()
Rectangle {
id: numberPad
anchors.fill: parent
radius: 8
color: "transparent"
RowLayout {
spacing: controller.spacing
GridLayout {
id: scientificGrid
columns: 3
columnSpacing: controller.spacing
rowSpacing: controller.spacing
visible: !isPortraitMode
OperatorButton { text: "x²" }
OperatorButton { text: "⅟x" }
OperatorButton { text: "√" }
OperatorButton { text: "x³" }
OperatorButton { text: "sin" }
OperatorButton { text: "|x|" }
OperatorButton { text: "log" }
OperatorButton { text: "cos" }
DigitButton {
text: "e"
dimmable: true
implicitWidth: 48
}
OperatorButton { text: "ln" }
OperatorButton { text: "tan" }
DigitButton {
text: "π"
dimmable: true
implicitWidth: 48
}
}
GridLayout {
id: mainGrid
columns: 5
columnSpacing: controller.spacing
rowSpacing: controller.spacing
BackspaceButton {}
DigitButton { text: "7" }
DigitButton { text: "8" }
DigitButton { text: "9" }
OperatorButton {
text: "÷"
implicitWidth: 38
}
OperatorButton {
text: "AC"
textColor: controller.backspaceRedColor
accentColor: controller.backspaceRedColor
}
DigitButton { text: "4" }
DigitButton { text: "5" }
DigitButton { text: "6" }
OperatorButton {
text: "×"
implicitWidth: 38
}
OperatorButton {
text: "="
implicitHeight: 81
Layout.rowSpan: 2
}
DigitButton { text: "1" }
DigitButton { text: "2" }
DigitButton { text: "3" }
OperatorButton {
text: ""
implicitWidth: 38
}
OperatorButton {
text: "±"
implicitWidth: 38
}
DigitButton { text: "0" }
DigitButton {
text: "."
dimmable: true
}
OperatorButton {
text: "+"
implicitWidth: 38
}
}
} // RowLayout
}
}