package net.shadowfacts.cacao.view.textfield /** * @author shadowfacts */ open class NumberField( initialValue: Int, handler: ((NumberField) -> Unit)? = null, ): AbstractTextField(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 == "-" } }