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 { 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("") // } }