chiasma-0.2.0.0: lib/Chiasma/Ui/ShowTree.hs
module Chiasma.Ui.ShowTree where
import Chiasma.Data.Ident (identText)
import Chiasma.Ui.Data.View (
LayoutView,
Pane(Pane),
PaneView,
Tree(Tree),
TreeSub(TreeNode, TreeLeaf),
View(View),
ViewTree,
)
formatLayout :: LayoutView -> Text
formatLayout (View ident _ _ _) = "l: " <> identText ident
formatPane :: PaneView -> Text
formatPane (View ident _ _ (Pane open _ _)) =
"p: " <> identText ident <> openFrag
where
openFrag = " " <> if open then "open" else "closed"
formatViewTree :: ViewTree -> Tree Text Text
formatViewTree = bimap formatLayout formatPane
indent :: [Text] -> [Text]
indent = fmap (" " <>)
showTreeSub :: TreeSub Text Text -> [Text]
showTreeSub (TreeNode tree) = showTree tree
showTreeSub (TreeLeaf pane) = [pane]
showTree :: Tree Text Text -> [Text]
showTree (Tree l sub) =
l : indent (sub >>= showTreeSub)
showViewTree :: ViewTree -> [Text]
showViewTree = showTree . formatViewTree
printViewTree :: MonadIO m => ViewTree -> m ()
printViewTree = liftIO . traverse_ putStrLn . fmap toString . showViewTree