While working on a TornadoFX application prototype...
# tornadofx
z
While working on a TornadoFX application prototype which uses Reactive Extensions I'd like to 'route' events from the SourceView to the TargetView. Currently I use a Controller which exposes a Property which is update via a subscription in the SourceView. I have some doubts about this approach and would like to learn about a idiomatic solution using TFX and RX.
Copy code
class SourceView : View() {

    val signalController: SignalsController by inject()

    add(JFXToggleButton().apply {
        selectedProperty().toObservableChanges().subscribe { signalController.sourceToSignalProperty.value = selectedProperty().value; }
    })

}

class TargetView : View() {

    val signalController: SignalsController by inject()

    Observable.combineLatest(signalController.searchFieldProperty.toObservableChanges().startWith(Change<String>("", "")),
    signalController.protocolPredicateProperty.toObservableChanges().startWith(Change<List<(SignalProperty) -> Boolean>>(listOf(), listOf())),

    signalController.sourceToSignalProperty.toObservableChanges().startWith(Change(true, true)),

    Function3 { _: Change<String>, _: Change<List<(SignalProperty) -> Boolean>>, enable: Change<Boolean> -> { enable.newVal } })
    .forEach { f ->
        if (f()) doSomeFancyStuff()
    }
}

class SignalsController : Controller() {

    val sourceToSignalProperty = SimpleBooleanProperty(true)
    var sourceToSignal by sourceToSignalProperty
}