UI input with reactive-banana-wx
Asked Answered
S

2

6

How do you get the content of ui elements when using reactive-banana? The event0 returns an event of type Event (), which has unit type instead of the type of the control. event1 takes an event of type Event w (a -> IO ()), but command is of type Event w (IO ()). mapAccumE and mapAccumB takes pure functions as parameters, so get text foo can't be used with them.

Semang answered 1/7, 2011 at 6:52 Comment(0)
R
4

Basically, you want to work with functions instead of data. If you're thinking "How do I create a behavior which has the current text in a box", you don't. Instead you write functions that take the current text as a parameter, and pass it in when necessary. Suppose you want to print the contents of a textbox when a button is pressed. Then you would do something like this:

eButton :: NetworkDescription (Event ())
eButton = event0 button command

network = do
  pressButton <- eButton
  reactimate $ (\() -> get text foo >>= print) <$> pressButton

If you need to get input into a Behavior, you can similarly use a function with type Behavior (String -> a) (or whatever type you need), and then just pass the string in at the point of the reactimate call.

Russo answered 1/7, 2011 at 17:40 Comment(0)
S
4

(Author of reactive-banana speaking. Sorry for the late reply, the possibility of questions being asked here didn't even cross my mind. :-) )

I discovered today that I omitted a very crucial feature from the library: getting the content of a UI element as a Behavior. Embarassing! :-D

John describes the current workaround, but the next version of reactive-banana will include the missing feature.

EDIT: I have released reactive-banana version 0.4 which now includes the functionality in form of a function

fromPoll :: IO a -> NetworkDescription (Behavior a)
Switzer answered 4/7, 2011 at 14:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.