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, "")