Added implicit conversion for fx obs filter

methods
This commit is contained in:
Rohan Sircar 2020-12-20 15:35:06 +05:30
parent a905c5efaf
commit 80b32b063e
2 changed files with 30 additions and 8 deletions

View File

@ -1,21 +1,42 @@
package nova.monadic_sfx.util package nova.monadic_sfx.implicits
import scalafx.beans.property.ObjectProperty import scalafx.beans.property.ObjectProperty
import scalafx.beans.property.ReadOnlyObjectProperty import scalafx.beans.property.ReadOnlyObjectProperty
import scalafx.beans.value.ObservableValue import scalafx.beans.value.ObservableValue
object Misc { /**
* experimental implicits to be incorporated better later
*/
trait MySfxObservableImplicits {
import nova.monadic_sfx.implicits.ExtraObservableImplicits._
implicit def myRichObservable[A, C](
observable: ObservableValue[A, C]
): MyRichObservable[A, C] = new MyRichObservable(observable)
}
implicit final class MyRichObservable[A, C](val self: ObservableValue[A, C]) object ExtraObservableImplicits {
final class MyRichObservable[A, C](val self: ObservableValue[A, C])
extends AnyVal { extends AnyVal {
def filter(f: A => Boolean): ReadOnlyObjectProperty[A] = def filter(f: A => Boolean): ReadOnlyObjectProperty[A] =
Method.filter(self)(f) Methods.filter(self)(f)
def filterNull: ReadOnlyObjectProperty[A] = Method.filterNull(self)
/**
* Simply creates a new observable that mirrors the source observable but
* doesn't emit null values. JavaFX likes to work with null values in scene
* nodes/properties (shrugs) and observables by default emit null values
* that can cause crashes if you forget to null check. ScalaFX does not
* offer any *fixes* for this.
*/
def filterNull: ReadOnlyObjectProperty[A] = Methods.filterNull(self)
} }
} }
object Method { object Types {
type Observable[A] = ObservableValue[A, _] type Observable[A] = ObservableValue[A, _]
}
object Methods {
import Types._
def filter[B]( def filter[B](
a: Observable[B] a: Observable[B]
@ -38,7 +59,8 @@ object Method {
* Simply creates a new observable that mirrors the source observable but * Simply creates a new observable that mirrors the source observable but
* doesn't emit null values. JavaFX likes to work with null values in scene * doesn't emit null values. JavaFX likes to work with null values in scene
* nodes/properties (shrugs) and observables by default emit null values * nodes/properties (shrugs) and observables by default emit null values
* that can cause crashes. ScalaFX does not offer any *fixes* for this * that can cause crashes if you forget to null check. ScalaFX does not
* offer any *fixes* for this.
* *
* @param a * @param a
* @return * @return

View File

@ -7,7 +7,7 @@ import monix.reactive.Observable
import monix.reactive.OverflowStrategy import monix.reactive.OverflowStrategy
import scalafx.scene.control._ import scalafx.scene.control._
package object implicits { package object implicits extends MySfxObservableImplicits {
implicit class MyButtonExt(val button: Button) extends AnyVal { implicit class MyButtonExt(val button: Button) extends AnyVal {
def observableAction(): Observable[ActionEvent] = { def observableAction(): Observable[ActionEvent] = {