PhysicalConnectivity/src/main/kotlin/net/shadowfacts/cacao/view/textfield/NumberField.kt

47 lines
912 B
Kotlin
Raw Normal View History

2021-03-03 03:20:25 +00:00
package net.shadowfacts.cacao.view.textfield
/**
* @author shadowfacts
*/
2021-03-21 02:31:53 +00:00
open class NumberField(
2021-03-03 03:20:25 +00:00
initialValue: Int,
handler: ((NumberField) -> Unit)? = null,
): AbstractTextField<NumberField>(initialValue.toString()) {
var number: Int?
get() {
2021-03-04 03:00:21 +00:00
return if (isTextTemporarilyAllowed(text)) {
2021-03-03 03:20:25 +00:00
null
} else {
try {
Integer.parseInt(text)
} catch (e: NumberFormatException) {
null
}
}
}
set(value) {
text = value?.toString() ?: ""
}
var validator: ((Int) -> Boolean)? = null
init {
this.handler = handler
}
override fun validate(proposedText: String): Boolean {
2021-03-04 03:00:21 +00:00
return isTextTemporarilyAllowed(proposedText) || try {
2021-03-03 03:20:25 +00:00
val value = Integer.parseInt(proposedText)
validator?.invoke(value) ?: true
} catch (e: NumberFormatException) {
false
}
}
2021-03-04 03:00:21 +00:00
private fun isTextTemporarilyAllowed(s: String): Boolean {
return s.isEmpty() || s == "-"
}
2021-03-03 03:20:25 +00:00
}