From 7aa80f54f72bded85c9082a1d6be210cdc85b662 Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Sun, 20 Dec 2020 15:59:09 +0530 Subject: [PATCH] Converted implicit classes to implicit methods --- src/main/scala/nova/monadic_sfx/MainApp.scala | 2 +- .../monadic_sfx/implicits/JFXButton.scala | 2 +- .../implicits/JavaFxMonixObservables.scala | 45 ++++++++++---- .../nova/monadic_sfx/implicits/MenuItem.scala | 4 +- .../nova/monadic_sfx/implicits/package.scala | 62 +++++-------------- .../todo/TodoListComponentOld.scala | 2 +- .../ui/components/todo/TodoListView.scala | 2 +- .../monadic_sfx/ui/screens/HomeScreen.scala | 2 +- 8 files changed, 56 insertions(+), 65 deletions(-) diff --git a/src/main/scala/nova/monadic_sfx/MainApp.scala b/src/main/scala/nova/monadic_sfx/MainApp.scala index 4489892..c443e1b 100644 --- a/src/main/scala/nova/monadic_sfx/MainApp.scala +++ b/src/main/scala/nova/monadic_sfx/MainApp.scala @@ -12,7 +12,7 @@ import monix.eval.Coeval import monix.{eval => me} import nova.monadic_sfx.executors.Schedulers import nova.monadic_sfx.implicits.JFXButton -import nova.monadic_sfx.implicits.JavaFXMonixObservables._ +import nova.monadic_sfx.implicits._ import nova.monadic_sfx.ui.MyFxApp import nova.monadic_sfx.ui.components.router.FXRouter import nova.monadic_sfx.ui.components.router.Page diff --git a/src/main/scala/nova/monadic_sfx/implicits/JFXButton.scala b/src/main/scala/nova/monadic_sfx/implicits/JFXButton.scala index 0f42006..19a6c7f 100644 --- a/src/main/scala/nova/monadic_sfx/implicits/JFXButton.scala +++ b/src/main/scala/nova/monadic_sfx/implicits/JFXButton.scala @@ -37,6 +37,6 @@ class JFXButton( } def obsAction = - new ActionObservableBuilder(this.observableAction()) + new ActionObservableBuilder(this.observableAction) } diff --git a/src/main/scala/nova/monadic_sfx/implicits/JavaFxMonixObservables.scala b/src/main/scala/nova/monadic_sfx/implicits/JavaFxMonixObservables.scala index 4bca855..27cccff 100644 --- a/src/main/scala/nova/monadic_sfx/implicits/JavaFxMonixObservables.scala +++ b/src/main/scala/nova/monadic_sfx/implicits/JavaFxMonixObservables.scala @@ -27,10 +27,32 @@ import scalafx.scene.Scene import scalafx.scene.control.ButtonBase import scalafx.scene.control.MenuItem +trait JavaFXMonixObservables { + import JavaFXMonixObservables._ + implicit def extendedScene(scene: Scene) = new SceneExt(scene) + implicit def extendedProperty[T, J]( + propery: Property[T, J] + ): PropertyExt[T, J] = + new PropertyExt(propery) + implicit def extendedObjectPropety[A](prop: ObjectProperty[A]) = + new ObjectPropertyExt[A](prop) + implicit def extendedReadOnlyObjectPropety[T, J]( + prop: ReadOnlyProperty[T, J] + ) = + new ReadOnlyPropertyExt[T, J](prop) + implicit def extendedObservableList[A]( + list: ObservableList[A] + ) = new ObservableListExt(list) + implicit def extendedObjectPropertyObservableList[A]( + prop: ObjectProperty[ObservableList[A]] + ) = new ObjectPropertyObservableListExt(prop) + implicit def extendedButton(button: ButtonBase) = new ButtonBaseExt(button) + implicit def extendedMenuItem(item: MenuItem) = new MenuItemExt(item) +} + object JavaFXMonixObservables { - implicit final class SceneObservables(private val scene: Scene) - extends AnyVal { + final class SceneExt(private val scene: Scene) extends AnyVal { def observableMousePressed(): Observable[jfxsi.MouseEvent] = { import monix.execution.cancelables.SingleAssignCancelable @@ -75,7 +97,7 @@ object JavaFXMonixObservables { } } - implicit final class BindObs[T, J](private val prop: Property[T, J]) + final class PropertyExt[T, J](private val prop: Property[T, J]) extends AnyVal { def -->(op: Observer[T]) = { op.onNext(prop.value) @@ -107,7 +129,7 @@ object JavaFXMonixObservables { } } - implicit final class BindObs2[A](private val prop: ObjectProperty[A]) + final class ObjectPropertyExt[A](private val prop: ObjectProperty[A]) extends AnyVal { def -->(sub: Observer[A]) = @@ -136,7 +158,7 @@ object JavaFXMonixObservables { } } - implicit final class ObservableListExt[A]( + final class ObservableListExt[A]( private val buffer: ObservableList[A] ) extends AnyVal { @@ -189,8 +211,9 @@ object JavaFXMonixObservables { } else Task.unit } - implicit final class BindObs3[T, J](private val prop: ReadOnlyProperty[T, J]) - extends AnyVal { + final class ReadOnlyPropertyExt[T, J]( + private val prop: ReadOnlyProperty[T, J] + ) extends AnyVal { def -->(op: Observer[T]) = { op.onNext(prop.value) } @@ -214,7 +237,7 @@ object JavaFXMonixObservables { } } - implicit final class ObjectPropertyObservableListExt[A]( + final class ObjectPropertyObservableListExt[A]( private val prop: ObjectProperty[ObservableList[A]] ) extends AnyVal { def <--(obs: Observable[Seq[A]])(implicit s: Scheduler) = { @@ -259,7 +282,7 @@ object JavaFXMonixObservables { } - implicit final class ObjectPropertyActionEvent( + final class ObjectPropertyActionEvent( private val prop: ObjectProperty[EventHandler[ActionEvent]] ) extends AnyVal { // def <--(obs: Observable[ActionEvent])(implicit s: Scheduler) = { @@ -273,7 +296,7 @@ object JavaFXMonixObservables { // def emit(prop: ObjectProperty[EventHandler[ActionEvent]]) = - implicit final class OnActionObservable( + final class ButtonBaseExt( private val button: ButtonBase ) extends AnyVal { @@ -299,7 +322,7 @@ object JavaFXMonixObservables { } } - implicit final class MenuItemActionObservable( + final class MenuItemExt( private val item: MenuItem ) extends AnyVal { diff --git a/src/main/scala/nova/monadic_sfx/implicits/MenuItem.scala b/src/main/scala/nova/monadic_sfx/implicits/MenuItem.scala index adf6864..104caf3 100644 --- a/src/main/scala/nova/monadic_sfx/implicits/MenuItem.scala +++ b/src/main/scala/nova/monadic_sfx/implicits/MenuItem.scala @@ -1,9 +1,7 @@ package nova.monadic_sfx.implicits +import nova.monadic_sfx.implicits._ import scalafx.scene.{control => sfxc} - -import JavaFXMonixObservables._ - class MenuItem extends sfxc.MenuItem { def obsAction = new ActionObservableBuilder(this.observableAction) } diff --git a/src/main/scala/nova/monadic_sfx/implicits/package.scala b/src/main/scala/nova/monadic_sfx/implicits/package.scala index c069c65..dff6712 100644 --- a/src/main/scala/nova/monadic_sfx/implicits/package.scala +++ b/src/main/scala/nova/monadic_sfx/implicits/package.scala @@ -1,50 +1,20 @@ 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 + with JavaFXMonixObservables -package object implicits extends MySfxObservableImplicits { +// 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 +// } +// } - 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("") - // } - -} +// val x = node.lookup2("") +// } diff --git a/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListComponentOld.scala b/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListComponentOld.scala index 7b7f2e6..539a4ae 100644 --- a/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListComponentOld.scala +++ b/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListComponentOld.scala @@ -13,7 +13,7 @@ import monix.reactive.Observer import nova.monadic_sfx.implicits.FontIcon import nova.monadic_sfx.implicits.IconLiteral import nova.monadic_sfx.implicits.JFXListView -import nova.monadic_sfx.implicits.JavaFXMonixObservables._ +import nova.monadic_sfx.implicits._ import nova.monadic_sfx.util.reactive._ import scalafx.Includes._ import scalafx.beans.property.StringProperty diff --git a/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListView.scala b/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListView.scala index e11dc5b..d80a7e4 100644 --- a/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListView.scala +++ b/src/main/scala/nova/monadic_sfx/ui/components/todo/TodoListView.scala @@ -8,8 +8,8 @@ import nova.monadic_sfx.implicits.IconLiteral import nova.monadic_sfx.implicits.JFXButton import nova.monadic_sfx.implicits.JFXListView import nova.monadic_sfx.implicits.JFXTextField -import nova.monadic_sfx.implicits.JavaFXMonixObservables._ import nova.monadic_sfx.implicits.MenuItem +import nova.monadic_sfx.implicits._ import nova.monadic_sfx.util.reactive._ import org.gerweck.scalafx.util._ import scalafx.Includes._ diff --git a/src/main/scala/nova/monadic_sfx/ui/screens/HomeScreen.scala b/src/main/scala/nova/monadic_sfx/ui/screens/HomeScreen.scala index 8544876..d19c842 100644 --- a/src/main/scala/nova/monadic_sfx/ui/screens/HomeScreen.scala +++ b/src/main/scala/nova/monadic_sfx/ui/screens/HomeScreen.scala @@ -19,7 +19,7 @@ class HomeScreen( // onAction = () => Action.asyncT(onLogout()) } - val myObs = myButton.observableAction() + val myObs = myButton.observableAction // myObs.foreachL(_ => ()) private lazy val root = Task.deferAction { implicit s => Task {