module Graphics.UI.Gtk.Generics.TreeView where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Generics.ListStore
import Control.Monad( forM )
treeViewGetSingleSelection :: TreeView -> ListStore a -> IO ( Maybe a )
treeViewGetSingleSelection tree store = treeViewGetSelection tree >>= treeSelectionGetSelectedRows >>= ( \s ->
case ( length s ) of
0 -> return ( Nothing )
_ -> listStoreGetValueAtPath ( head s ) store >>= (\r -> return ( Just r ) ) )
treeViewGetMultipleSelections :: TreeView -> ListStore a -> IO ( Maybe [a] )
treeViewGetMultipleSelections tree store = treeViewGetSelection tree >>=
treeSelectionGetSelectedRows >>= ( \s ->
case ( length s ) of
0 -> return ( Nothing )
_ -> (\r -> return ( Just r ) )
=<< ( forM s $ \path -> listStoreGetValueAtPath path store ) )
treeViewOperateOnSelection :: TreeView -> ListStore a -> ( a -> b ) -> IO ( Maybe b )
treeViewOperateOnSelection tree store func = treeViewGetSingleSelection tree store >>= (\r ->
case r of
Nothing -> return Nothing
( Just n ) -> return ( Just ( func n ) ) )
treeViewOperateOnSelections :: TreeView -> ListStore a -> ( [a] -> b ) -> IO ( Maybe b )
treeViewOperateOnSelections tree store func = treeViewGetMultipleSelections tree store >>= (\r ->
case r of
Nothing -> return Nothing
( Just n ) -> return ( Just ( func n ) ) )