module Graphics.UI.WxGeneric.GenericWidget.WidgetTree
( WidTree, WxWindow(..)
, WidgetTree(..)
, mkWidTree, singleChild, leafWidTree
, getChildren, updateChildren, getSubTrees, updateSubTrees
, depthFirstTraversal
)
where
import Graphics.UI.WX
type Update a = a -> a
data WidTree = WidTree [WxWindow] [WidTree]
data WxWindow = forall w. WxWindow (Window w)
getChildren :: WidTree -> [WxWindow]
getChildren (WidTree x _) = x
updateChildren :: Update [WxWindow] -> Update WidTree
updateChildren f (WidTree x y) = (WidTree (f x) y)
getSubTrees :: WidTree -> [WidTree]
getSubTrees (WidTree _ x) = x
updateSubTrees :: Update [WidTree] -> Update WidTree
updateSubTrees f (WidTree x y) = WidTree x (f y)
mkWidTree :: [WxWindow] -> [WidTree] -> WidTree
mkWidTree = WidTree
leafWidTree :: [WxWindow] -> IO WidTree
leafWidTree cs = return $ WidTree cs []
singleChild :: Window w -> IO WidTree
singleChild w = leafWidTree [WxWindow w]
depthFirstTraversal :: WidTree -> [Window ()]
depthFirstTraversal (WidTree wids cs)
= concatMap depthFirstTraversal cs ++ map toWindowOOClass wids
toWindowOOClass :: WxWindow -> Window ()
toWindowOOClass (WxWindow c) = objectCast c
class WidgetTree w where
widgetTree :: ReadAttr w WidTree