202 lines
5.8 KiB
QML
202 lines
5.8 KiB
QML
// This program is free software: you can redistribute it and/or modify
|
||
// it under the terms of the GNU General Public License as published by
|
||
// the Free Software Foundation, either version 3 of the License, or
|
||
// (at your option) any later version.
|
||
//
|
||
// This program is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
//
|
||
// You should have received a copy of the GNU General Public License
|
||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
||
import QtQuick 2.0
|
||
import QtQuick.Controls 1.0
|
||
|
||
ApplicationWindow
|
||
{
|
||
visible: true
|
||
width: 4 * (100 + 5)
|
||
height: 5 * (100 + 5) + 200 + 30
|
||
title: qsTr("RPN Calculator")
|
||
|
||
//calculator
|
||
Column {
|
||
id: base;
|
||
spacing: 5;
|
||
width: 4 * (100 + 5)
|
||
height: 5 * (100 + 5) + 200 + 30
|
||
|
||
//quit button
|
||
Rectangle{
|
||
width: 100
|
||
height: 25
|
||
color: "#ff9494"
|
||
Text {text: "Quit"}
|
||
MouseArea {
|
||
onClicked: Qt.quit()
|
||
anchors.fill: parent
|
||
}
|
||
|
||
//handle key presses from physical keyboard
|
||
focus: true //handle keypresses here
|
||
//numbers
|
||
Keys.onDigit0Pressed: _calculator.buttonClicked("4,0")
|
||
Keys.onDigit1Pressed: _calculator.buttonClicked("3,0")
|
||
Keys.onDigit2Pressed: _calculator.buttonClicked("3,1")
|
||
Keys.onDigit3Pressed: _calculator.buttonClicked("3,2")
|
||
Keys.onDigit4Pressed: _calculator.buttonClicked("2,0")
|
||
Keys.onDigit5Pressed: _calculator.buttonClicked("2,1")
|
||
Keys.onDigit6Pressed: _calculator.buttonClicked("2,2")
|
||
Keys.onDigit7Pressed: _calculator.buttonClicked("1,0")
|
||
Keys.onDigit8Pressed: _calculator.buttonClicked("1,1")
|
||
Keys.onDigit9Pressed: _calculator.buttonClicked("1,2")
|
||
//swap
|
||
Keys.onRightPressed: _calculator.buttonClicked("0,1")
|
||
//enter
|
||
Keys.onEnterPressed: _calculator.buttonClicked("4,2")
|
||
Keys.onReturnPressed: _calculator.buttonClicked("4,2")
|
||
Keys.onSpacePressed: _calculator.buttonClicked("4,2")
|
||
Keys.onPressed: {
|
||
if ((event.key == Qt.Key_Q) && (event.modifiers == Qt.ControlModifier))
|
||
Qt.quit()
|
||
else if ((event.key == Qt.Key_S))
|
||
_calculator.buttonClicked("0,0")
|
||
else if ((event.key == Qt.Key_Backspace))
|
||
_calculator.buttonClicked("0,3")
|
||
else if ((event.key == Qt.Key_Slash))
|
||
_calculator.buttonClicked("1,3")
|
||
else if ((event.key == Qt.Key_division))
|
||
_calculator.buttonClicked("1,3")
|
||
else if ((event.key == Qt.Key_Asterisk))
|
||
_calculator.buttonClicked("2,3")
|
||
else if ((event.key == Qt.Key_Minus))
|
||
_calculator.buttonClicked("3,3")
|
||
else if ((event.key == Qt.Key_Plus))
|
||
_calculator.buttonClicked("4,3")
|
||
else if ((event.key == Qt.Key_N)) //negate
|
||
_calculator.buttonClicked("0,2")
|
||
else if ((event.key == Qt.Key_Equal)) //enter
|
||
_calculator.buttonClicked("4,2")
|
||
else if ((event.key == Qt.Key_Period)) // "."
|
||
_calculator.buttonClicked("4,1")
|
||
else if ((event.key == Qt.Key_E)) // also "."
|
||
_calculator.buttonClicked("4,1")
|
||
}
|
||
}
|
||
|
||
//LCD
|
||
Rectangle {
|
||
objectName: "lcd";
|
||
color: "lightgray"
|
||
width: 4 * (100 + 5) - 5
|
||
height: 200
|
||
Text {
|
||
objectName: "lcd_text";
|
||
text: _calculator.lcdText
|
||
font: _fixedFont
|
||
anchors.centerIn: parent
|
||
}
|
||
}
|
||
|
||
//Keyboard
|
||
Repeater {
|
||
model: 5;
|
||
//row
|
||
delegate: Row {
|
||
id: key_row
|
||
spacing: 5
|
||
objectName: index
|
||
//keys within row
|
||
Repeater {
|
||
model: 4;
|
||
delegate: Rectangle {
|
||
id: key_key;
|
||
width: 100;
|
||
height: 100;
|
||
color: getBackgroundColor(parent.objectName, index)
|
||
border { width: 1; color: "black" }
|
||
Text {
|
||
horizontalAlignment: Text.AlignHCenter
|
||
font.pointSize: 16
|
||
color: "gray"
|
||
text: {getShiftedUpText(parent.parent.objectName, index) + "<br><br>"}
|
||
textFormat: Text.RichText
|
||
anchors.centerIn: parent
|
||
}
|
||
Text {
|
||
horizontalAlignment: Text.AlignHCenter
|
||
font.pointSize: 24
|
||
text: {"<br>" + getText(parent.parent.objectName, index) + "<br>"}
|
||
textFormat: Text.RichText
|
||
anchors.centerIn: parent
|
||
}
|
||
Text {
|
||
horizontalAlignment: Text.AlignHCenter
|
||
font.pointSize: 16
|
||
color: "gray"
|
||
text: {"<br><br>" + getShiftedDownText(parent.parent.objectName, index)}
|
||
textFormat: Text.RichText
|
||
anchors.centerIn: parent
|
||
}
|
||
MouseArea {
|
||
//get row/column
|
||
onClicked: _calculator.buttonClicked(parent.parent.objectName + "," + index)
|
||
anchors.fill: parent
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function getText(row, col) {
|
||
var keys = [
|
||
["Shift", "x ⇄ y", "±", "←"],
|
||
["7", "8", "9", "÷"],
|
||
["4", "5", "6", "×"],
|
||
["1", "2", "3", "-"],
|
||
["0", ".", "Enter", "+"]
|
||
]
|
||
|
||
return "<b>" + keys[row][col] + "</b>"
|
||
}
|
||
|
||
function getShiftedUpText(row, col) {
|
||
var shifted_keys = [
|
||
["Shift", "1/x", " √<span style=\"text-decoration: overline\">x</span> ", "CL<i>x</i>"],
|
||
["y<sup>x</sup> ", "ln(x)", "log(x)", "π"],
|
||
["R▼", "e<sup>x</sup>", "10<sup>x</sup>", ""],
|
||
["sin(x)", "cos(x)", "tan(x)", "►rad"],
|
||
["off", "STO", "RCL", "LAST<i>x</i>"]
|
||
]
|
||
|
||
return "<small>" + shifted_keys[row][col] + "</small>"
|
||
}
|
||
|
||
function getShiftedDownText(row, col) {
|
||
var shifted_keys = [
|
||
["", "", "", ""],
|
||
["", "", "", ""],
|
||
["R▲", "", "", ""],
|
||
["asin(x)", "acos(x)", "atan(x)", "►deg"],
|
||
["", "", "", ""]
|
||
]
|
||
|
||
return "<small>" + shifted_keys[row][col] + "</small>"
|
||
}
|
||
|
||
function getBackgroundColor(row, col) {
|
||
var background_color = [
|
||
["white", "white", "white", "#ff9494"],
|
||
["#eeeeee", "#eeeeee", "#eeeeee", "white"],
|
||
["#eeeeee", "#eeeeee", "#eeeeee", "white"],
|
||
["#eeeeee", "#eeeeee", "#eeeeee", "white"],
|
||
["#eeeeee", "#eeeeee", "white", "white"]
|
||
]
|
||
|
||
return background_color[row][col]
|
||
}
|
||
}
|