mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-28 23:35:13 +00:00
parent
dc716ad1b0
commit
f1395a3a0a
@ -19,6 +19,8 @@ SplitView {
|
|||||||
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
width: 400
|
||||||
|
|
||||||
interactive: interactiveCheckBox.checked
|
interactive: interactiveCheckBox.checked
|
||||||
fiatInputInteractive: fiatInteractiveCheckBox.checked
|
fiatInputInteractive: fiatInteractiveCheckBox.checked
|
||||||
markAsInvalid: markAsInvalidCheckBox.checked
|
markAsInvalid: markAsInvalidCheckBox.checked
|
||||||
@ -26,7 +28,7 @@ SplitView {
|
|||||||
mainInputLoading: ctrlMainInputLoading.checked
|
mainInputLoading: ctrlMainInputLoading.checked
|
||||||
bottomTextLoading: ctrlBottomTextLoading.checked
|
bottomTextLoading: ctrlBottomTextLoading.checked
|
||||||
|
|
||||||
caption: "Amount to send"
|
caption: captionField.text
|
||||||
|
|
||||||
decimalPoint: decimalPointRadioButton.checked ? "." : ","
|
decimalPoint: decimalPointRadioButton.checked ? "." : ","
|
||||||
price: parseFloat(priceTextField.text)
|
price: parseFloat(priceTextField.text)
|
||||||
@ -35,6 +37,10 @@ SplitView {
|
|||||||
|
|
||||||
formatFiat: balance => `${balance.toLocaleString(Qt.locale())} USD`
|
formatFiat: balance => `${balance.toLocaleString(Qt.locale())} USD`
|
||||||
formatBalance: balance => `${balance.toLocaleString(Qt.locale())} ETH`
|
formatBalance: balance => `${balance.toLocaleString(Qt.locale())} ETH`
|
||||||
|
|
||||||
|
dividerVisible: ctrlDividerVisible.checked
|
||||||
|
selectedSymbol: ctrlShowMainInputSymbol.checked ? amountToSend.fiatMode ? "USD": "ETH": ""
|
||||||
|
progressivePixelReduction: ctrlProgressivePixelReduction.checked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,6 +52,19 @@ SplitView {
|
|||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
spacing: 15
|
spacing: 15
|
||||||
|
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Label {
|
||||||
|
text: "Caption"
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField {
|
||||||
|
id: captionField
|
||||||
|
|
||||||
|
text: "Amount to send"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Label {
|
Label {
|
||||||
text: "Price"
|
text: "Price"
|
||||||
@ -119,6 +138,22 @@ SplitView {
|
|||||||
id: ctrlBottomTextLoading
|
id: ctrlBottomTextLoading
|
||||||
text: "Bottom text loading"
|
text: "Bottom text loading"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckBox {
|
||||||
|
id: ctrlDividerVisible
|
||||||
|
text: "Divider"
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox {
|
||||||
|
id: ctrlProgressivePixelReduction
|
||||||
|
text: "Progressive Pixel Reduction"
|
||||||
|
checked: true
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox {
|
||||||
|
id: ctrlShowMainInputSymbol
|
||||||
|
text: "Show Main Input Symbol"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
@ -20,6 +20,7 @@ Item {
|
|||||||
|
|
||||||
maxIntegralDigits: maxIntegralDigitsSpinBox.value
|
maxIntegralDigits: maxIntegralDigitsSpinBox.value
|
||||||
maxDecimalDigits: maxDecimalDigitsSpinBox.value
|
maxDecimalDigits: maxDecimalDigitsSpinBox.value
|
||||||
|
maxDigits: maxTotalDigitsSpinBox.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,6 +81,20 @@ Item {
|
|||||||
value: 5
|
value: 5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: "Max total digits:"
|
||||||
|
}
|
||||||
|
|
||||||
|
SpinBox {
|
||||||
|
id: maxTotalDigitsSpinBox
|
||||||
|
|
||||||
|
value: maxIntegralDigitsSpinBox.value + maxDecimalDigitsSpinBox.value
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,5 +171,27 @@ Item {
|
|||||||
compare(textField.acceptableInput, true)
|
compare(textField.acceptableInput, true)
|
||||||
compare(textField.text, ".22")
|
compare(textField.text, ".22")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_maxTotalDigits() {
|
||||||
|
textField.text = "1234567891."
|
||||||
|
textField.forceActiveFocus()
|
||||||
|
textField.validator.maxDecimalDigits = 18
|
||||||
|
textField.validator.maxDigits = 15
|
||||||
|
textField.cursorPosition = 11
|
||||||
|
|
||||||
|
type(Qt.Key_1)
|
||||||
|
type(Qt.Key_2)
|
||||||
|
type(Qt.Key_3)
|
||||||
|
type(Qt.Key_4)
|
||||||
|
type(Qt.Key_5)
|
||||||
|
|
||||||
|
compare(textField.acceptableInput, true)
|
||||||
|
compare(textField.text, "1234567891.12345")
|
||||||
|
|
||||||
|
type(Qt.Key_6)
|
||||||
|
|
||||||
|
compare(textField.acceptableInput, true)
|
||||||
|
compare(textField.text, "1234567891.12345")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,11 @@ Item {
|
|||||||
|
|
||||||
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
||||||
verify(!!amountToSendInput)
|
verify(!!amountToSendInput)
|
||||||
mouseClick(amountToSendInput)
|
|
||||||
|
const amountToSend_textField = findChild(controlUnderTest, "amountToSend_textField")
|
||||||
|
verify(!!amountToSend_textField)
|
||||||
|
|
||||||
|
mouseClick(amountToSend_textField)
|
||||||
waitForRendering(amountToSendInput)
|
waitForRendering(amountToSendInput)
|
||||||
verify(amountToSendInput.cursorVisible)
|
verify(amountToSendInput.cursorVisible)
|
||||||
|
|
||||||
@ -221,7 +225,11 @@ Item {
|
|||||||
|
|
||||||
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
||||||
verify(!!amountToSendInput)
|
verify(!!amountToSendInput)
|
||||||
mouseClick(amountToSendInput)
|
|
||||||
|
const amountToSend_textField = findChild(controlUnderTest, "amountToSend_textField")
|
||||||
|
verify(!!amountToSend_textField)
|
||||||
|
|
||||||
|
mouseClick(amountToSend_textField)
|
||||||
waitForRendering(amountToSendInput)
|
waitForRendering(amountToSendInput)
|
||||||
verify(amountToSendInput.cursorVisible)
|
verify(amountToSendInput.cursorVisible)
|
||||||
|
|
||||||
@ -398,10 +406,13 @@ Item {
|
|||||||
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
|
||||||
verify(!!amountToSendInput)
|
verify(!!amountToSendInput)
|
||||||
|
|
||||||
|
const amountToSend_textField = findChild(controlUnderTest, "amountToSend_textField")
|
||||||
|
verify(!!amountToSend_textField)
|
||||||
|
|
||||||
const bottomItemText = findChild(amountToSendInput, "bottomItemText")
|
const bottomItemText = findChild(amountToSendInput, "bottomItemText")
|
||||||
verify(!!bottomItemText)
|
verify(!!bottomItemText)
|
||||||
|
|
||||||
mouseClick(amountToSendInput)
|
mouseClick(amountToSend_textField)
|
||||||
// enter 5.42 as entered amount
|
// enter 5.42 as entered amount
|
||||||
keyClick(Qt.Key_5)
|
keyClick(Qt.Key_5)
|
||||||
keyClick(Qt.Key_Period)
|
keyClick(Qt.Key_Period)
|
||||||
|
@ -24,6 +24,7 @@ GenericValidator {
|
|||||||
property string decimalPoint: Qt.locale(locale).decimalPoint
|
property string decimalPoint: Qt.locale(locale).decimalPoint
|
||||||
property int maxIntegralDigits: 10
|
property int maxIntegralDigits: 10
|
||||||
property int maxDecimalDigits: 10
|
property int maxDecimalDigits: 10
|
||||||
|
property int maxDigits: maxIntegralDigits + maxDecimalDigits
|
||||||
|
|
||||||
validate: {
|
validate: {
|
||||||
if (input.length === 0)
|
if (input.length === 0)
|
||||||
@ -52,6 +53,9 @@ GenericValidator {
|
|||||||
const [integral, decimal] = pointsCount ? delocalized.split(".")
|
const [integral, decimal] = pointsCount ? delocalized.split(".")
|
||||||
: [delocalized, ""]
|
: [delocalized, ""]
|
||||||
|
|
||||||
|
if ((integral.length + decimal.length) > root.maxDigits)
|
||||||
|
return GenericValidator.Invalid
|
||||||
|
|
||||||
if (integral.length > root.maxIntegralDigits)
|
if (integral.length > root.maxIntegralDigits)
|
||||||
return GenericValidator.Invalid
|
return GenericValidator.Invalid
|
||||||
|
|
||||||
|
@ -55,6 +55,19 @@ Control {
|
|||||||
property alias caption: captionText.text
|
property alias caption: captionText.text
|
||||||
property bool interactive: true
|
property bool interactive: true
|
||||||
|
|
||||||
|
/* Boolean flag decides whether divider is shown between main input
|
||||||
|
area and bottom text */
|
||||||
|
property bool dividerVisible
|
||||||
|
|
||||||
|
/* Boolean flag decides whether the main input text area's fontsize reduces
|
||||||
|
as more and more characters are added.
|
||||||
|
True by default */
|
||||||
|
property bool progressivePixelReduction: true
|
||||||
|
|
||||||
|
/* This string holds the current main input area's currency symbol (fiat or crypto)
|
||||||
|
Not set = not shown */
|
||||||
|
property string selectedSymbol
|
||||||
|
|
||||||
readonly property bool cursorVisible: textField.cursorVisible
|
readonly property bool cursorVisible: textField.cursorVisible
|
||||||
readonly property alias placeholderText: textField.placeholderText
|
readonly property alias placeholderText: textField.placeholderText
|
||||||
|
|
||||||
@ -155,6 +168,22 @@ Control {
|
|||||||
multiplier),
|
multiplier),
|
||||||
SQUtils.AmountsArithmetic.fromNumber(price)).toFixed()
|
SQUtils.AmountsArithmetic.fromNumber(price)).toFixed()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Incase we dont have progressing font size reduction we only
|
||||||
|
allow users to enter digits until there is place left */
|
||||||
|
function getMaxDigitsAllowed() {
|
||||||
|
if (root.progressivePixelReduction) {
|
||||||
|
return validator.maxDecimalDigits + validator.maxIntegralDigits
|
||||||
|
} else {
|
||||||
|
let availableSpaceForAmount = root.availableWidth - currencyField.contentWidth - layout.spacing
|
||||||
|
return Math.floor(availableSpaceForAmount/textMetrics.tightBoundingRect.width)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property TextMetrics textMetrics: TextMetrics {
|
||||||
|
font: textField.font
|
||||||
|
text: "0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
@ -173,13 +202,14 @@ Control {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
id: layout
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
StatusTextField {
|
StatusTextField {
|
||||||
id: textField
|
id: textField
|
||||||
|
|
||||||
objectName: "amountToSend_textField"
|
objectName: "amountToSend_textField"
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
implicitHeight: 44
|
implicitHeight: 44
|
||||||
padding: 0
|
padding: 0
|
||||||
background: null
|
background: null
|
||||||
@ -198,11 +228,16 @@ Control {
|
|||||||
+ "0".repeat(root.fiatDecimalPlaces)
|
+ "0".repeat(root.fiatDecimalPlaces)
|
||||||
}
|
}
|
||||||
|
|
||||||
font.pixelSize: Utils.getFontSizeBasedOnLetterCount(text)
|
font.pixelSize:{
|
||||||
|
if (!root.progressivePixelReduction)
|
||||||
|
return 34
|
||||||
|
return Utils.getFontSizeBasedOnLetterCount(text)
|
||||||
|
}
|
||||||
|
|
||||||
validator: AmountValidator {
|
validator: AmountValidator {
|
||||||
id: validator
|
id: validator
|
||||||
|
|
||||||
|
maxDigits: d.getMaxDigitsAllowed()
|
||||||
maxDecimalDigits: d.fiatMode ? root.fiatDecimalPlaces
|
maxDecimalDigits: d.fiatMode ? root.fiatDecimalPlaces
|
||||||
: root.multiplierIndex
|
: root.multiplierIndex
|
||||||
locale: root.locale.name
|
locale: root.locale.name
|
||||||
@ -215,6 +250,26 @@ Control {
|
|||||||
Layout.preferredHeight: textField.height
|
Layout.preferredHeight: textField.height
|
||||||
visible: root.mainInputLoading
|
visible: root.mainInputLoading
|
||||||
}
|
}
|
||||||
|
StatusBaseText {
|
||||||
|
id: currencyField
|
||||||
|
|
||||||
|
objectName: "amountToSend_currencyField"
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
Layout.topMargin: 10
|
||||||
|
|
||||||
|
color: Theme.palette.directColor5
|
||||||
|
text: selectedSymbol
|
||||||
|
font.pixelSize: Theme.additionalTextSize
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 1
|
||||||
|
Layout.bottomMargin: 12
|
||||||
|
color: Theme.palette.baseColor2
|
||||||
|
visible: root.dividerVisible
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusBaseText {
|
StatusBaseText {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user