You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.9 KiB
QML

import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5
import FishUI 1.0 as FishUI
import Cutefish.Calculator 1.0
Item {
id: zone
ColumnLayout {
id: layout
anchors.fill: parent
anchors.margins: 0
ListView {
id: listView
model: ListModel { id: historyModel }
clip: true
Layout.fillHeight: true
Layout.fillWidth: true
flickableDirection: Flickable.VerticalFlick
ScrollBar.vertical: ScrollBar {}
onCountChanged: {
listView.currentIndex = count - 1
}
delegate: Item {
height: label.implicitHeight + FishUI.Units.largeSpacing * 2
width: parent ? parent.width : undefined
Label {
id: label
anchors.fill: parent
horizontalAlignment: Qt.AlignRight
text: historyModel.count > 0 ? historyModel.get(index).text : ""
elide: Text.ElideMiddle
color: FishUI.Theme.disabledTextColor
leftPadding: FishUI.Units.largeSpacing
rightPadding: FishUI.Units.largeSpacing
MouseArea {
hoverEnabled: true
}
}
}
}
TextField {
id: textField
Layout.preferredHeight: 50
Layout.fillWidth: true
Keys.onReturnPressed: appendToTextField('=')
Keys.onEnterPressed: appendToTextField('=')
selectByMouse: true
horizontalAlignment: TextInput.AlignRight
focus: Qt.StrongFocus
font.pixelSize: 24
background: Rectangle {
border.width: 0
color: "transparent"
}
leftPadding: FishUI.Units.largeSpacing
rightPadding: FishUI.Units.largeSpacing
}
}
function appendToTextField(text) {
if (text === '=') {
var res = calculate(textField.text)
if (res !== '') {
var expressionText = textField.text
textField.text = res
// If the expression and the result area equal,
// it will not be added to the ListView
if (expressionText !== res) {
expressionText = expressionText + " = " + res
historyModel.append({"text": expressionText})
}
}
} else if (text === 'C') {
if (textField.text != "")
textField.clear()
else
historyModel.clear()
} else if (text === 'BACKSPACE') {
// backspace
textField.remove(textField.cursorPosition, textField.cursorPosition - 1)
} else {
textField.insert(textField.cursorPosition, text)
}
}
}