packages feed

barrie-0.4.1: demos/LayoutDemo.hs

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"