module FPPrac.Trees
( RoseTree(..)
, RBTree(..)
, NodeColor(..)
, rbExampleTree
, roseExampleTree
, showRBTree
, showRBTreeList
, showRoseTree
, showRoseTreeList
, showTree
, showTreeList
) where
import Prelude
import Eventloop.EventloopCore
import Eventloop.Types.EventTypes
import Eventloop.DefaultConfiguration
import qualified Eventloop.Module.Websocket.Canvas as C
import Eventloop.Module.DrawTrees
import Eventloop.Module.BasicShapes
import Eventloop.Utility.Trees.GeneralTree
data ProgramState = ProgramState
deriving (Eq, Show)
beginProgramState = ProgramState
eventloopConfig trees = defaultConfig { moduleConfigurations=[ defaultDrawTreesModuleConfiguration
, defaultBasicShapesModuleConfiguration
, C.defaultCanvasModuleConfiguration
]}
where
defaultConfig = allModulesEventloopConfiguration beginProgramState (eventloop trees)
eventloop :: [GeneralTree] -> ProgramState -> In -> (ProgramState, [Out])
eventloop trees state Start = (state, [ OutCanvas $ C.SetupCanvas 1 1 (round width, round height) (C.CSSPosition C.CSSFromCenter (C.CSSPercentage 50, C.CSSPercentage 50))
, OutDrawTrees $ DrawTrees 1 trees
, Stop
]
)
where
(_, width, height) = showGeneralTreeList trees
showRBTree :: RBTree -> IO()
showRBTree tree = showTree tree
showRBTreeList :: [RBTree] -> IO ()
showRBTreeList trees = showTreeList trees
showRoseTree :: RoseTree -> IO()
showRoseTree tree = showTree tree
showRoseTreeList :: [RoseTree] -> IO ()
showRoseTreeList trees = showTreeList trees
showTree :: (GeneralizeTree a) => a -> IO ()
showTree tree = showTreeList [tree]
showTreeList :: (GeneralizeTree a) => [a] -> IO ()
showTreeList trees = startMainloop (eventloopConfig $ map generalizeTree trees)