-
Notifications
You must be signed in to change notification settings - Fork 3
/
PropertyBuilder.scala
51 lines (46 loc) · 1.67 KB
/
PropertyBuilder.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package org.gerweck.scalafx.util
import scalafx.beans.property._
/** A property builder is something that knows how to build a JavaFX Property
* for a given type of object.
*
* @author Sarah Gerweck <sarah@atscale.com>
*/
trait PropertyBuilder[A] {
type Prop <: SimpleProperty[A]
def makeNew(default: A): Prop
}
sealed trait PropertyBuilderLP {
implicit def objectPropertyBuilder[A]: PropertyBuilder[A] = new PropertyBuilder[A] {
type Prop = ObjectProperty[A]
def makeNew(default: A) = ObjectProperty[A](default)
}
}
object PropertyBuilder extends PropertyBuilderLP {
implicit object IntPropertyBuilder extends PropertyBuilder[Int] {
type Prop = IntegerProperty
def makeNew(default: Int) = IntegerProperty(default)
}
implicit object LongPropertyBuilder extends PropertyBuilder[Long] {
type Prop = LongProperty
def makeNew(default: Long) = LongProperty(default)
}
implicit object FloatPropertyBuilder extends PropertyBuilder[Float] {
type Prop = FloatProperty
def makeNew(default: Float) = FloatProperty(default)
}
implicit object DoublePropertyBuilder extends PropertyBuilder[Double] {
type Prop = DoubleProperty
def makeNew(default: Double) = DoubleProperty(default)
}
implicit object BooleanPropertyBuilder extends PropertyBuilder[Boolean] {
type Prop = BooleanProperty
def makeNew(default: Boolean) = BooleanProperty(default)
}
implicit object StringPropertyBuilder extends PropertyBuilder[String] {
type Prop = StringProperty
def makeNew(default: String) = StringProperty(default)
}
def apply[A](default: A)(implicit builder: PropertyBuilder[A]): builder.Prop = {
builder.makeNew(default)
}
}