You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
856 B
28 lines
856 B
package org.gerweck.scalafx.util
|
|
|
|
/** A property that can be parsed from a TextField.
|
|
*
|
|
* @author Sarah Gerweck <sarah@atscale.com>
|
|
*/
|
|
trait Parseable[A] {
|
|
val builder: PropertyBuilder[A]
|
|
|
|
type Prop = builder.Prop
|
|
|
|
def toString(a: A): String = a.toString
|
|
def fromString(s: String): A
|
|
|
|
def makeNew(default: A) = builder.makeNew(default)
|
|
}
|
|
|
|
object Parseable {
|
|
private[this] def parseable[A](from: String => A)(implicit build: PropertyBuilder[A]) = new Parseable[A] {
|
|
val builder = build
|
|
def fromString(s: String): A = from(s)
|
|
}
|
|
implicit val IntParseable = parseable[Int](_.toInt)
|
|
implicit val LongParseable = parseable[Long](_.toLong)
|
|
implicit val FloatParseable = parseable[Float](_.toFloat)
|
|
implicit val DoubleParseable = parseable[Double](_.toDouble)
|
|
implicit val BooleanParseable = parseable[Boolean](_.toBoolean)
|
|
}
|