module Taskell.UI.Draw.Modal ( renderModal ) where import ClassyPrelude import Control.Lens ((^.)) import Brick import Brick.Widgets.Border import Brick.Widgets.Center import Taskell.Events.State.Types (height, mode) import Taskell.Events.State.Types.Mode (ModalType (..), Mode (..)) import Taskell.UI.Draw.Field (textField) import Taskell.UI.Draw.Modal.Detail (detail) import Taskell.UI.Draw.Modal.Due (due) import Taskell.UI.Draw.Modal.Help (help) import Taskell.UI.Draw.Modal.MoveTo (moveTo) import Taskell.UI.Draw.Types (DSWidget, DrawState (dsState), TWidget) import Taskell.UI.Theme (titleAttr) import Taskell.UI.Types (ResourceName (..)) surround :: (Text, TWidget) -> DSWidget surround :: (Text, TWidget) -> DSWidget surround (Text title, TWidget widget) = do Int ht <- (State -> Getting Int State Int -> Int forall s a. s -> Getting a s a -> a ^. Getting Int State Int Lens' State Int height) (State -> Int) -> ReaderT DrawState Identity State -> ReaderT DrawState Identity Int forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (DrawState -> State) -> ReaderT DrawState Identity State forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks DrawState -> State dsState let t :: TWidget t = Padding -> TWidget -> TWidget forall n. Padding -> Widget n -> Widget n padBottom (Int -> Padding Pad Int 1) (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . AttrName -> TWidget -> TWidget forall n. AttrName -> Widget n -> Widget n withAttr AttrName titleAttr (TWidget -> TWidget) -> TWidget -> TWidget forall a b. (a -> b) -> a -> b $ Text -> TWidget textField Text title TWidget -> DSWidget forall (f :: * -> *) a. Applicative f => a -> f a pure (TWidget -> DSWidget) -> (TWidget -> TWidget) -> TWidget -> DSWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> TWidget -> TWidget forall n. Int -> Widget n -> Widget n padTopBottom Int 1 (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . TWidget -> TWidget forall n. Widget n -> Widget n centerLayer (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . TWidget -> TWidget forall n. Widget n -> Widget n border (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> TWidget -> TWidget forall n. Int -> Widget n -> Widget n padTopBottom Int 1 (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> TWidget -> TWidget forall n. Int -> Widget n -> Widget n padLeftRight Int 4 (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> TWidget -> TWidget forall n. Int -> Widget n -> Widget n vLimit (Int ht Int -> Int -> Int forall a. Num a => a -> a -> a - Int 9) (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> TWidget -> TWidget forall n. Int -> Widget n -> Widget n hLimit Int 50 (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (TWidget t TWidget -> TWidget -> TWidget forall n. Widget n -> Widget n -> Widget n <=>) (TWidget -> TWidget) -> (TWidget -> TWidget) -> TWidget -> TWidget forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ResourceName -> ViewportType -> TWidget -> TWidget forall n. (Ord n, Show n) => n -> ViewportType -> Widget n -> Widget n viewport ResourceName RNModal ViewportType Vertical (TWidget -> DSWidget) -> TWidget -> DSWidget forall a b. (a -> b) -> a -> b $ TWidget widget renderModal :: DSWidget renderModal :: DSWidget renderModal = do Mode md <- (State -> Getting Mode State Mode -> Mode forall s a. s -> Getting a s a -> a ^. Getting Mode State Mode Lens' State Mode mode) (State -> Mode) -> ReaderT DrawState Identity State -> ReaderT DrawState Identity Mode forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (DrawState -> State) -> ReaderT DrawState Identity State forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks DrawState -> State dsState case Mode md of Modal ModalType Help -> (Text, TWidget) -> DSWidget surround ((Text, TWidget) -> DSWidget) -> ReaderT DrawState Identity (Text, TWidget) -> DSWidget forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< ReaderT DrawState Identity (Text, TWidget) help Modal Detail {} -> (Text, TWidget) -> DSWidget surround ((Text, TWidget) -> DSWidget) -> ReaderT DrawState Identity (Text, TWidget) -> DSWidget forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< ReaderT DrawState Identity (Text, TWidget) detail Modal ModalType MoveTo -> (Text, TWidget) -> DSWidget surround ((Text, TWidget) -> DSWidget) -> ReaderT DrawState Identity (Text, TWidget) -> DSWidget forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< ReaderT DrawState Identity (Text, TWidget) moveTo Modal (Due Seq (Pointer, Task) tasks Int selected) -> (Text, TWidget) -> DSWidget surround ((Text, TWidget) -> DSWidget) -> ReaderT DrawState Identity (Text, TWidget) -> DSWidget forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Seq (Pointer, Task) -> Int -> ReaderT DrawState Identity (Text, TWidget) due Seq (Pointer, Task) tasks Int selected Mode _ -> TWidget -> DSWidget forall (f :: * -> *) a. Applicative f => a -> f a pure TWidget forall n. Widget n emptyWidget