packages feed

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