barrie-0.4.1: demos/ListDemo.hs
module Main where
import Data.List
import Data.Maybe
import Barrie
demoWidget :: Widget
demoWidget = vbox [ui "demo list" listView,
ui "selected" (textLabel ""),
hbox [ui "newname" textBox, ui "add" (labelButton "Add")]
]
listItems :: [String]
listItems = ["Planes", "Trains", "Automobiles"]
type DemoState = ([String], Maybe String, String)
getList :: DemoState -> [String]
getList (items, _, _) = items
addItem :: DemoState -> DemoState
addItem (items, sel, item) = (item:items, sel, "")
type DemoGadget = Gadget DemoState
demoGUI :: DemoGadget
demoGUI = sectionG "demo gui" [chooseEqG "demo list" get set getList,
displayG "selected" get,
editorG "newname" getname setname,
commandG "add" addItem]
where set sel (items, _, new) = (items, Just sel, new)
selected (_, Nothing, _) = -1
selected (items, Just s, _) = maybe (-1) id (elemIndex s items)
getname (_, _, nm) = nm
setname nm (x, y, _) = (x,y,nm)
get (_, Just v, _) = v
get (_, Nothing, _) = ""
main = gtkMain demoGUI demoWidget (listItems, Nothing, "")