{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Matterhorn.Draw.ThemeListOverlay ( drawThemeListOverlay ) where import Prelude () import Matterhorn.Prelude import Brick import qualified Brick.Widgets.List as L import Brick.Widgets.Border ( hBorder ) import Brick.Widgets.Center ( hCenter ) import Matterhorn.Draw.ListOverlay ( drawListOverlay, OverlayPosition(..) ) import Matterhorn.Themes import Matterhorn.Types import Matterhorn.Types.KeyEvents ( ppBinding ) import Matterhorn.Events.Keybindings drawThemeListOverlay :: ChatState -> Widget Name drawThemeListOverlay :: ChatState -> Widget Name drawThemeListOverlay ChatState st = let overlay :: Widget Name overlay = ListOverlayState InternalTheme () -> (() -> Widget Name) -> (() -> Widget Name) -> (() -> Widget Name) -> (Bool -> InternalTheme -> Widget Name) -> Maybe (Widget Name) -> OverlayPosition -> Int -> Widget Name forall a b. ListOverlayState a b -> (b -> Widget Name) -> (b -> Widget Name) -> (b -> Widget Name) -> (Bool -> a -> Widget Name) -> Maybe (Widget Name) -> OverlayPosition -> Int -> Widget Name drawListOverlay (ChatState stChatState -> Getting (ListOverlayState InternalTheme ()) ChatState (ListOverlayState InternalTheme ()) -> ListOverlayState InternalTheme () forall s a. s -> Getting a s a -> a ^.(TeamState -> Const (ListOverlayState InternalTheme ()) TeamState) -> ChatState -> Const (ListOverlayState InternalTheme ()) ChatState Lens' ChatState TeamState csCurrentTeam((TeamState -> Const (ListOverlayState InternalTheme ()) TeamState) -> ChatState -> Const (ListOverlayState InternalTheme ()) ChatState) -> ((ListOverlayState InternalTheme () -> Const (ListOverlayState InternalTheme ()) (ListOverlayState InternalTheme ())) -> TeamState -> Const (ListOverlayState InternalTheme ()) TeamState) -> Getting (ListOverlayState InternalTheme ()) ChatState (ListOverlayState InternalTheme ()) forall b c a. (b -> c) -> (a -> b) -> a -> c .(ListOverlayState InternalTheme () -> Const (ListOverlayState InternalTheme ()) (ListOverlayState InternalTheme ())) -> TeamState -> Const (ListOverlayState InternalTheme ()) TeamState Lens' TeamState (ListOverlayState InternalTheme ()) tsThemeListOverlay) (Widget Name -> () -> Widget Name forall a b. a -> b -> a const (Widget Name -> () -> Widget Name) -> Widget Name -> () -> Widget Name forall a b. (a -> b) -> a -> b $ Text -> Widget Name forall n. Text -> Widget n txt Text "Themes") (Widget Name -> () -> Widget Name forall a b. a -> b -> a const (Widget Name -> () -> Widget Name) -> Widget Name -> () -> Widget Name forall a b. (a -> b) -> a -> b $ Text -> Widget Name forall n. Text -> Widget n txt Text "No matching themes found.") (Widget Name -> () -> Widget Name forall a b. a -> b -> a const (Widget Name -> () -> Widget Name) -> Widget Name -> () -> Widget Name forall a b. (a -> b) -> a -> b $ Text -> Widget Name forall n. Text -> Widget n txt Text "Search built-in themes:") Bool -> InternalTheme -> Widget Name renderInternalTheme (Widget Name -> Maybe (Widget Name) forall a. a -> Maybe a Just Widget Name forall n. Widget n footer) OverlayPosition OverlayUpperRight Int 50 footer :: Widget n footer = Widget n forall n. Widget n hBorder Widget n -> Widget n -> Widget n forall n. Widget n -> Widget n -> Widget n <=> (Widget n -> Widget n forall n. Widget n -> Widget n hCenter (Widget n -> Widget n) -> Widget n -> Widget n forall a b. (a -> b) -> a -> b $ [Widget n] -> Widget n forall n. [Widget n] -> Widget n hBox [ Widget n forall n. Widget n enter , Text -> Widget n forall n. Text -> Widget n txt (Text -> Widget n) -> Text -> Widget n forall a b. (a -> b) -> a -> b $ Text ":choose theme " , Widget n forall n. Widget n close , Text -> Widget n forall n. Text -> Widget n txt Text ":close" ]) enter :: Widget n enter = Widget n -> Widget n forall n. Widget n -> Widget n emph (Widget n -> Widget n) -> Widget n -> Widget n forall a b. (a -> b) -> a -> b $ Text -> Widget n forall n. Text -> Widget n txt (Text -> Widget n) -> Text -> Widget n forall a b. (a -> b) -> a -> b $ Binding -> Text ppBinding (KeyEvent -> Binding getFirstDefaultBinding KeyEvent ActivateListItemEvent) close :: Widget n close = Widget n -> Widget n forall n. Widget n -> Widget n emph (Widget n -> Widget n) -> Widget n -> Widget n forall a b. (a -> b) -> a -> b $ Text -> Widget n forall n. Text -> Widget n txt (Text -> Widget n) -> Text -> Widget n forall a b. (a -> b) -> a -> b $ Binding -> Text ppBinding (KeyEvent -> Binding getFirstDefaultBinding KeyEvent CancelEvent) emph :: Widget n -> Widget n emph = AttrName -> Widget n -> Widget n forall n. AttrName -> Widget n -> Widget n withDefAttr AttrName clientEmphAttr in Widget Name -> Widget Name forall n. Widget n -> Widget n joinBorders Widget Name overlay renderInternalTheme :: Bool -> InternalTheme -> Widget Name renderInternalTheme :: Bool -> InternalTheme -> Widget Name renderInternalTheme Bool foc InternalTheme it = (if Bool foc then AttrName -> Widget Name -> Widget Name forall n. AttrName -> Widget n -> Widget n forceAttr AttrName L.listSelectedFocusedAttr else Widget Name -> Widget Name forall a. a -> a id) (Widget Name -> Widget Name) -> Widget Name -> Widget Name forall a b. (a -> b) -> a -> b $ (Padding -> Widget Name -> Widget Name forall n. Padding -> Widget n -> Widget n padRight Padding Max (Widget Name -> Widget Name) -> Widget Name -> Widget Name forall a b. (a -> b) -> a -> b $ AttrName -> Widget Name -> Widget Name forall n. AttrName -> Widget n -> Widget n withDefAttr AttrName clientEmphAttr (Widget Name -> Widget Name) -> Widget Name -> Widget Name forall a b. (a -> b) -> a -> b $ Text -> Widget Name forall n. Text -> Widget n txt (Text -> Widget Name) -> Text -> Widget Name forall a b. (a -> b) -> a -> b $ InternalTheme -> Text internalThemeName InternalTheme it) Widget Name -> Widget Name -> Widget Name forall n. Widget n -> Widget n -> Widget n <=> (Int -> Widget Name -> Widget Name forall n. Int -> Widget n -> Widget n vLimit Int 2 (Widget Name -> Widget Name) -> Widget Name -> Widget Name forall a b. (a -> b) -> a -> b $ (Padding -> Widget Name -> Widget Name forall n. Padding -> Widget n -> Widget n padLeft (Int -> Padding Pad Int 2) (Widget Name -> Widget Name) -> Widget Name -> Widget Name forall a b. (a -> b) -> a -> b $ Text -> Widget Name forall n. Text -> Widget n txtWrap (Text -> Widget Name) -> Text -> Widget Name forall a b. (a -> b) -> a -> b $ InternalTheme -> Text internalThemeDesc InternalTheme it) Widget Name -> Widget Name -> Widget Name forall n. Widget n -> Widget n -> Widget n <=> Char -> Widget Name forall n. Char -> Widget n fill Char ' ')