module Glue where import Brick import States import StateManagement import qualified Graphics.Vty as V import qualified UI.MainMenu as MM import qualified UI.Settings as S import qualified UI.Info as I import qualified UI.CardSelector as CS import qualified UI.FileBrowser as FB import qualified UI.Cards as C import qualified UI.Parameter as P globalApp :: App GlobalState Event Name globalApp :: App GlobalState Event Name globalApp = App :: forall s e n. (s -> [Widget n]) -> (s -> [CursorLocation n] -> Maybe (CursorLocation n)) -> (s -> BrickEvent n e -> EventM n (Next s)) -> (s -> EventM n s) -> (s -> AttrMap) -> App s e n App { appDraw :: GlobalState -> [Widget Name] appDraw = GlobalState -> [Widget Name] drawUI , appChooseCursor :: GlobalState -> [CursorLocation Name] -> Maybe (CursorLocation Name) appChooseCursor = GlobalState -> [CursorLocation Name] -> Maybe (CursorLocation Name) forall s n. s -> [CursorLocation n] -> Maybe (CursorLocation n) showFirstCursor , appHandleEvent :: GlobalState -> BrickEvent Name Event -> EventM Name (Next GlobalState) appHandleEvent = GlobalState -> BrickEvent Name Event -> EventM Name (Next GlobalState) handleEvent , appStartEvent :: GlobalState -> EventM Name GlobalState appStartEvent = GlobalState -> EventM Name GlobalState forall (m :: * -> *) a. Monad m => a -> m a return , appAttrMap :: GlobalState -> AttrMap appAttrMap = GlobalState -> AttrMap handleAttrMap } drawUI :: GlobalState -> [Widget Name] drawUI :: GlobalState -> [Widget Name] drawUI GlobalState gs = case GlobalState -> State getState GlobalState gs of MainMenuState MMS s -> MMS -> [Widget Name] MM.drawUI MMS s SettingsState SS s -> SS -> [Widget Name] S.drawUI SS s InfoState Event s -> Event -> [Widget Name] I.drawUI Event s CardSelectorState CSS s -> GlobalState -> CSS -> [Widget Name] CS.drawUI GlobalState gs CSS s FileBrowserState FBS s -> FBS -> [Widget Name] FB.drawUI FBS s CardsState CS s -> CS -> [Widget Name] C.drawUI CS s ParameterState PS s -> PS -> [Widget Name] P.drawUI PS s handleEvent :: GlobalState -> BrickEvent Name Event -> EventM Name (Next GlobalState) handleEvent :: GlobalState -> BrickEvent Name Event -> EventM Name (Next GlobalState) handleEvent GlobalState gs BrickEvent Name Event ev = if BrickEvent Name Event ev BrickEvent Name Event -> BrickEvent Name Event -> Bool forall a. Eq a => a -> a -> Bool == Event -> BrickEvent Name Event forall n e. Event -> BrickEvent n e VtyEvent (Key -> [Modifier] -> Event V.EvKey (Char -> Key V.KChar Char 'c') [Modifier V.MCtrl]) then GlobalState -> EventM Name (Next GlobalState) forall s n. s -> EventM n (Next s) halt GlobalState gs else case GlobalState -> State getState GlobalState gs of MainMenuState MMS s -> GlobalState -> MMS -> BrickEvent Name Event -> EventM Name (Next GlobalState) MM.handleEvent GlobalState gs MMS s BrickEvent Name Event ev SettingsState SS s -> GlobalState -> SS -> BrickEvent Name Event -> EventM Name (Next GlobalState) S.handleEvent GlobalState gs SS s BrickEvent Name Event ev InfoState Event s -> GlobalState -> Event -> BrickEvent Name Event -> EventM Name (Next GlobalState) I.handleEvent GlobalState gs Event s BrickEvent Name Event ev CardSelectorState CSS s -> GlobalState -> CSS -> BrickEvent Name Event -> EventM Name (Next GlobalState) CS.handleEvent GlobalState gs CSS s BrickEvent Name Event ev FileBrowserState FBS s -> GlobalState -> FBS -> BrickEvent Name Event -> EventM Name (Next GlobalState) FB.handleEvent GlobalState gs FBS s BrickEvent Name Event ev CardsState CS s -> GlobalState -> CS -> BrickEvent Name Event -> EventM Name (Next GlobalState) C.handleEvent GlobalState gs CS s BrickEvent Name Event ev ParameterState PS s -> GlobalState -> PS -> BrickEvent Name Event -> EventM Name (Next GlobalState) P.handleEvent GlobalState gs PS s BrickEvent Name Event ev handleAttrMap :: GlobalState -> AttrMap handleAttrMap :: GlobalState -> AttrMap handleAttrMap GlobalState gs = case GlobalState -> State getState GlobalState gs of MainMenuState MMS _ -> AttrMap MM.theMap SettingsState SS _ -> AttrMap S.theMap InfoState Event _ -> AttrMap I.theMap CardSelectorState CSS _ -> AttrMap CS.theMap FileBrowserState FBS _ -> AttrMap FB.theMap CardsState CS _ -> AttrMap C.theMap ParameterState PS _ -> AttrMap P.theMap