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"