module UI.Parameter (drawUI, theMap, handleEvent) where import UI.Attributes import Brick import Brick.Focus import Brick.Forms import Brick.Widgets.Border import Brick.Widgets.Border.Style import Brick.Widgets.Center import Control.Monad (when) import Control.Monad.IO.Class import Lens.Micro.Platform import States import StateManagement import Runners import qualified Graphics.Vty as V drawUI :: PS -> [Widget Name] drawUI :: PS -> [Widget Name] drawUI = (forall a. a -> [a] -> [a] :[]) forall b c a. (b -> c) -> (a -> b) -> a -> c . PS -> Widget Name ui ui :: PS -> Widget Name ui :: PS -> Widget Name ui PS s = forall n. Widget n -> Widget n joinBorders forall a b. (a -> b) -> a -> b $ forall n. Widget n -> Widget n center forall a b. (a -> b) -> a -> b $ forall n. BorderStyle -> Widget n -> Widget n withBorderStyle BorderStyle unicodeRounded forall a b. (a -> b) -> a -> b $ forall n. Widget n -> Widget n border forall a b. (a -> b) -> a -> b $ forall n. Int -> Widget n -> Widget n hLimitPercent Int 60 forall a b. (a -> b) -> a -> b $ forall n. Int -> Widget n -> Widget n hLimit Int 40 forall a b. (a -> b) -> a -> b $ forall n. Widget n -> Widget n hCenter (forall n. AttrName -> Widget n -> Widget n withAttr AttrName titleAttr (forall n. FilePath -> Widget n str FilePath "Select parameters")) forall n. Widget n -> Widget n -> Widget n <=> forall n. Widget n hBorder forall n. Widget n -> Widget n -> Widget n <=> forall n. Int -> Widget n -> Widget n padLeftRight Int 1 (forall n s e. Eq n => Form s e n -> Widget n renderForm (PS s forall s a. s -> Getting a s a -> a ^. Lens' PS (Form Parameters Event Name) psForm)) handleEvent :: BrickEvent Name Event -> EventM Name GlobalState () handleEvent :: BrickEvent Name Event -> EventM Name GlobalState Event handleEvent ev :: BrickEvent Name Event ev@(VtyEvent Event e) = do PS s <- forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Lens' GlobalState PS ps let form :: Form Parameters Event Name form = PS s forall s a. s -> Getting a s a -> a ^. Lens' PS (Form Parameters Event Name) psForm focus :: FocusRing Name focus = forall s e n. Form s e n -> FocusRing n formFocus Form Parameters Event Name form (Just Name n) = forall n. FocusRing n -> Maybe n focusGetCurrent FocusRing Name focus down :: EventM Name GlobalState Event down = forall (m :: * -> *) (n :: * -> *) s t c. Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c zoom Lens' GlobalState PS ps forall a b. (a -> b) -> a -> b $ case Name n of Name ParametersOkField -> forall (m :: * -> *) a. Monad m => a -> m a return () Name ChunkField1 -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusNext (forall n. FocusRing n -> FocusRing n focusNext FocusRing Name focus) } Name _ -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusNext FocusRing Name focus } up :: EventM Name GlobalState Event up = forall (m :: * -> *) (n :: * -> *) s t c. Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c zoom Lens' GlobalState PS ps forall a b. (a -> b) -> a -> b $ case Name n of Name ChunkField1 -> forall (m :: * -> *) a. Monad m => a -> m a return () Name ChunkField2 -> forall (m :: * -> *) a. Monad m => a -> m a return () Name SubsetField -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusPrev (forall n. FocusRing n -> FocusRing n focusPrev FocusRing Name focus) } Name _ -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusPrev FocusRing Name focus } right :: EventM Name GlobalState Event right = forall (m :: * -> *) (n :: * -> *) s t c. Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c zoom Lens' GlobalState PS ps forall a b. (a -> b) -> a -> b $ case Name n of Name ChunkField1 -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusNext FocusRing Name focus } Name _ -> forall (m :: * -> *) a. Monad m => a -> m a return () left :: EventM Name GlobalState Event left = forall (m :: * -> *) (n :: * -> *) s t c. Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c zoom Lens' GlobalState PS ps forall a b. (a -> b) -> a -> b $ case Name n of Name ChunkField2 -> Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Form Parameters Event Name form { formFocus :: FocusRing Name formFocus = forall n. FocusRing n -> FocusRing n focusPrev FocusRing Name focus } Name _ -> forall (m :: * -> *) a. Monad m => a -> m a return () case Event e of V.EvKey Key V.KEsc [] -> forall (m :: * -> *). MonadState GlobalState m => m Event popState V.EvKey (V.KChar Char 'q') [] -> forall (m :: * -> *). MonadState GlobalState m => m Event popState V.EvKey Key V.KDown [] -> EventM Name GlobalState Event down V.EvKey (V.KChar Char 'j') [] -> EventM Name GlobalState Event down V.EvKey Key V.KUp [] -> EventM Name GlobalState Event up V.EvKey (V.KChar Char 'k') [] -> EventM Name GlobalState Event up V.EvKey (V.KChar Char '\t') [] -> forall (m :: * -> *) a. Monad m => a -> m a return () V.EvKey Key V.KBackTab [] -> forall (m :: * -> *) a. Monad m => a -> m a return () V.EvKey (V.KChar Char 'h') [] -> EventM Name GlobalState Event left V.EvKey (V.KChar Char 'l') [] -> EventM Name GlobalState Event right Event _ -> case (Event e, Name n) of (V.EvKey Key V.KRight [], Name ChunkField2) -> forall (m :: * -> *) a. Monad m => a -> m a return () (V.EvKey Key V.KLeft [], Name ChunkField1) -> forall (m :: * -> *) a. Monad m => a -> m a return () (V.EvKey Key V.KRight [], Name SubsetField) -> forall (m :: * -> *) a. Monad m => a -> m a return () (V.EvKey Key V.KLeft [], Name SubsetField) -> forall (m :: * -> *) a. Monad m => a -> m a return () (Event, Name) _ -> do forall (m :: * -> *) (n :: * -> *) s t c. Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c zoom (Lens' GlobalState PS psforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' PS (Form Parameters Event Name) psForm) forall a b. (a -> b) -> a -> b $ forall n e s. Eq n => BrickEvent n e -> EventM n (Form s e n) Event handleFormEvent BrickEvent Name Event ev Form Parameters Event Name f <- forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use forall a b. (a -> b) -> a -> b $ Lens' GlobalState PS psforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' PS (Form Parameters Event Name) psForm forall (f :: * -> *). Applicative f => Bool -> f Event -> f Event when (forall s e n. Form s e n -> s formState Form Parameters Event Name f forall s a. s -> Getting a s a -> a ^. Lens' Parameters Bool pOk) forall a b. (a -> b) -> a -> b $ do Lens' GlobalState Parameters parameters forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= forall s e n. Form s e n -> s formState Form Parameters Event Name f Lens' GlobalState Parameters parametersforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' Parameters Bool pOk forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= Bool False Parameters paramsWithoutOk <- forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Lens' GlobalState Parameters parameters Lens' GlobalState PS psforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' PS (Form Parameters Event Name) psForm forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m Event .= forall s e n. s -> Form s e n -> Form s e n updateFormState Parameters paramsWithoutOk Form Parameters Event Name f State state <- forall (m :: * -> *). (MonadState GlobalState m, MonadIO m) => FilePath -> [Card] -> m State cardsWithOptionsStateM (PS s forall s a. s -> Getting a s a -> a ^. Lens' PS FilePath psFp) (PS s forall s a. s -> Getting a s a -> a ^. Lens' PS [Card] psCards) forall (m :: * -> *). MonadState GlobalState m => State -> m Event goToState State state handleEvent BrickEvent Name Event _ = forall (m :: * -> *) a. Monad m => a -> m a return ()