47 lines
912 B
Kotlin
47 lines
912 B
Kotlin
package net.shadowfacts.cacao.view.textfield
|
|
|
|
/**
|
|
* @author shadowfacts
|
|
*/
|
|
open class NumberField(
|
|
initialValue: Int,
|
|
handler: ((NumberField) -> Unit)? = null,
|
|
): AbstractTextField<NumberField>(initialValue.toString()) {
|
|
|
|
var number: Int?
|
|
get() {
|
|
return if (isTextTemporarilyAllowed(text)) {
|
|
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 {
|
|
return isTextTemporarilyAllowed(proposedText) || try {
|
|
val value = Integer.parseInt(proposedText)
|
|
validator?.invoke(value) ?: true
|
|
} catch (e: NumberFormatException) {
|
|
false
|
|
}
|
|
}
|
|
|
|
private fun isTextTemporarilyAllowed(s: String): Boolean {
|
|
return s.isEmpty() || s == "-"
|
|
}
|
|
|
|
}
|