module Main where import Barrie demoWidget :: Widget demoWidget = vbox [ui "entry" textBox ,hbox [ui "clear" (labelButton "clear") ,ui "set" (labelButton "set") ,ui "reverse" (labelButton "reverse") ] ,ui "label" (textLabel "Hello, world!")] data DemoState = S { first :: String, second :: String } setFirst, setSecond :: String -> DemoState -> DemoState setFirst s st = st { first = s } setSecond s st = st { second = s } update :: (a -> b) -> (b -> a -> a) -> a -> a update get set state = set (get state) state type DemoGadget = Gadget DemoState demoGUI :: DemoGadget demoGUI = sectionG "demo gui" [editorG "entry" first setFirst ,commandG "clear" (setSecond "") ,commandG "set" (update first setSecond) ,commandG "reverse" (update (reverse . first) setSecond) ,displayG "label" second ] main = gtkMain demoGUI demoWidget $ S "Type Here" "Hello, world"