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.
50 lines
1.4 KiB
50 lines
1.4 KiB
package nova.monadic_sfx
|
|
|
|
import javafx.event.ActionEvent
|
|
import monix.execution.Ack
|
|
import monix.execution.Cancelable
|
|
import monix.reactive.Observable
|
|
import monix.reactive.OverflowStrategy
|
|
import scalafx.scene.control._
|
|
|
|
package object implicits extends MySfxObservableImplicits {
|
|
|
|
implicit class MyButtonExt(val button: Button) extends AnyVal {
|
|
def observableAction(): Observable[ActionEvent] = {
|
|
import monix.execution.cancelables.SingleAssignCancelable
|
|
Observable.create(OverflowStrategy.Unbounded) { sub =>
|
|
val c = SingleAssignCancelable()
|
|
val l = new javafx.event.EventHandler[ActionEvent] {
|
|
override def handle(event: ActionEvent): Unit = {
|
|
if (sub.onNext(event) == Ack.Stop) c.cancel()
|
|
}
|
|
}
|
|
|
|
button.onAction = l
|
|
c := Cancelable(() =>
|
|
button.removeEventHandler(
|
|
ActionEvent.ACTION,
|
|
l
|
|
)
|
|
)
|
|
c
|
|
}
|
|
}
|
|
}
|
|
|
|
// implicit class NodeExt(val node: Node) {
|
|
// def lookup2[T <: SFXDelegate[_]](
|
|
// selector: String
|
|
// )(implicit c: ClassTag[T]) = {
|
|
// val t = c.runtimeClass
|
|
// Option(node.delegate.lookup(selector)) match {
|
|
// case Some(value) =>
|
|
// if (value.getClass == t) Some(value) else None
|
|
// case None => None
|
|
// }
|
|
// }
|
|
|
|
// val x = node.lookup2("")
|
|
// }
|
|
|
|
}
|