module Matterhorn.Draw.ManageAttachments
( drawManageAttachments
)
where
import Prelude ()
import Matterhorn.Prelude
import Brick
import Brick.Widgets.Border
import Brick.Widgets.Center
import qualified Brick.Widgets.FileBrowser as FB
import Brick.Widgets.List
import Data.Maybe ( fromJust )
import Matterhorn.Types
import Matterhorn.Types.KeyEvents
import Matterhorn.Events.Keybindings ( getFirstDefaultBinding )
import Matterhorn.Themes
drawManageAttachments :: ChatState -> Widget Name
drawManageAttachments :: ChatState -> Widget Name
drawManageAttachments ChatState
st =
Widget Name
topLayer
where
topLayer :: Widget Name
topLayer = case ChatState
stChatState -> Getting Mode ChatState Mode -> Mode
forall s a. s -> Getting a s a -> a
^.(TeamState -> Const Mode TeamState)
-> ChatState -> Const Mode ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> Const Mode TeamState)
-> ChatState -> Const Mode ChatState)
-> ((Mode -> Const Mode Mode) -> TeamState -> Const Mode TeamState)
-> Getting Mode ChatState Mode
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Mode -> Const Mode Mode) -> TeamState -> Const Mode TeamState
Lens' TeamState Mode
tsMode of
Mode
ManageAttachments -> ChatState -> Widget Name
drawAttachmentList ChatState
st
Mode
ManageAttachmentsBrowseFiles -> ChatState -> Widget Name
drawFileBrowser ChatState
st
Mode
_ -> [Char] -> Widget Name
forall a. HasCallStack => [Char] -> a
error [Char]
"BUG: drawManageAttachments called in invalid mode"
drawAttachmentList :: ChatState -> Widget Name
drawAttachmentList :: ChatState -> Widget Name
drawAttachmentList ChatState
st =
let addBinding :: Text
addBinding = Binding -> Text
ppBinding (Binding -> Text) -> Binding -> Text
forall a b. (a -> b) -> a -> b
$ KeyEvent -> Binding
getFirstDefaultBinding KeyEvent
AttachmentListAddEvent
delBinding :: Text
delBinding = Binding -> Text
ppBinding (Binding -> Text) -> Binding -> Text
forall a b. (a -> b) -> a -> b
$ KeyEvent -> Binding
getFirstDefaultBinding KeyEvent
AttachmentListDeleteEvent
escBinding :: Text
escBinding = Binding -> Text
ppBinding (Binding -> Text) -> Binding -> Text
forall a b. (a -> b) -> a -> b
$ KeyEvent -> Binding
getFirstDefaultBinding KeyEvent
CancelEvent
openBinding :: Text
openBinding = Binding -> Text
ppBinding (Binding -> Text) -> Binding -> Text
forall a b. (a -> b) -> a -> b
$ KeyEvent -> Binding
getFirstDefaultBinding KeyEvent
AttachmentOpenEvent
in Widget Name -> Widget Name
forall n. Widget n -> Widget n
centerLayer (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Int -> Widget Name -> Widget Name
forall n. Int -> Widget n -> Widget n
hLimit Int
60 (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Int -> Widget Name -> Widget Name
forall n. Int -> Widget n -> Widget n
vLimit Int
15 (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Widget Name -> Widget Name
forall n. Widget n -> Widget n
joinBorders (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Widget Name -> Widget Name -> Widget Name
forall n. Widget n -> Widget n -> Widget n
borderWithLabel (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
"Attachments") (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
[Widget Name] -> Widget Name
forall n. [Widget n] -> Widget n
vBox [ (Bool -> AttachmentData -> Widget Name)
-> Bool -> GenericList Name Vector AttachmentData -> Widget Name
forall (t :: * -> *) n e.
(Traversable t, Splittable t, Ord n, Show n) =>
(Bool -> e -> Widget n) -> Bool -> GenericList n t e -> Widget n
renderList Bool -> AttachmentData -> Widget Name
renderAttachmentItem Bool
True (ChatState
stChatState
-> Getting
(GenericList Name Vector AttachmentData)
ChatState
(GenericList Name Vector AttachmentData)
-> GenericList Name Vector AttachmentData
forall s a. s -> Getting a s a -> a
^.(TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState)
-> ChatState
-> Const (GenericList Name Vector AttachmentData) ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState)
-> ChatState
-> Const (GenericList Name Vector AttachmentData) ChatState)
-> ((GenericList Name Vector AttachmentData
-> Const
(GenericList Name Vector AttachmentData)
(GenericList Name Vector AttachmentData))
-> TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState)
-> Getting
(GenericList Name Vector AttachmentData)
ChatState
(GenericList Name Vector AttachmentData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ChatEditState
-> Const (GenericList Name Vector AttachmentData) ChatEditState)
-> TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState
Lens' TeamState ChatEditState
tsEditState((ChatEditState
-> Const (GenericList Name Vector AttachmentData) ChatEditState)
-> TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState)
-> ((GenericList Name Vector AttachmentData
-> Const
(GenericList Name Vector AttachmentData)
(GenericList Name Vector AttachmentData))
-> ChatEditState
-> Const (GenericList Name Vector AttachmentData) ChatEditState)
-> (GenericList Name Vector AttachmentData
-> Const
(GenericList Name Vector AttachmentData)
(GenericList Name Vector AttachmentData))
-> TeamState
-> Const (GenericList Name Vector AttachmentData) TeamState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(GenericList Name Vector AttachmentData
-> Const
(GenericList Name Vector AttachmentData)
(GenericList Name Vector AttachmentData))
-> ChatEditState
-> Const (GenericList Name Vector AttachmentData) ChatEditState
Lens' ChatEditState (GenericList Name Vector AttachmentData)
cedAttachmentList)
, Widget Name
forall n. Widget n
hBorder
, Widget Name -> Widget Name
forall n. Widget n -> Widget n
hCenter (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
clientMessageAttr (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
$ Text
addBinding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":add " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>
Text
delBinding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":delete " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>
Text
openBinding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":open " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>
Text
escBinding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":close"
]
renderAttachmentItem :: Bool -> AttachmentData -> Widget Name
renderAttachmentItem :: Bool -> AttachmentData -> Widget Name
renderAttachmentItem Bool
_ AttachmentData
d =
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
$ [Char] -> Widget Name
forall n. [Char] -> Widget n
str ([Char] -> Widget Name) -> [Char] -> Widget Name
forall a b. (a -> b) -> a -> b
$ FileInfo -> [Char]
FB.fileInfoSanitizedFilename (FileInfo -> [Char]) -> FileInfo -> [Char]
forall a b. (a -> b) -> a -> b
$ AttachmentData -> FileInfo
attachmentDataFileInfo AttachmentData
d
drawFileBrowser :: ChatState -> Widget Name
drawFileBrowser :: ChatState -> Widget Name
drawFileBrowser ChatState
st =
Widget Name -> Widget Name
forall n. Widget n -> Widget n
centerLayer (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Int -> Widget Name -> Widget Name
forall n. Int -> Widget n -> Widget n
hLimit Int
60 (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Int -> Widget Name -> Widget Name
forall n. Int -> Widget n -> Widget n
vLimit Int
20 (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Widget Name -> Widget Name -> Widget Name
forall n. Widget n -> Widget n -> Widget n
borderWithLabel (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
"Attach File") (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
Bool -> FileBrowser Name -> Widget Name
forall n. (Show n, Ord n) => Bool -> FileBrowser n -> Widget n
FB.renderFileBrowser Bool
True (FileBrowser Name -> Widget Name)
-> FileBrowser Name -> Widget Name
forall a b. (a -> b) -> a -> b
$ Maybe (FileBrowser Name) -> FileBrowser Name
forall a. HasCallStack => Maybe a -> a
fromJust (ChatState
stChatState
-> Getting
(Maybe (FileBrowser Name)) ChatState (Maybe (FileBrowser Name))
-> Maybe (FileBrowser Name)
forall s a. s -> Getting a s a -> a
^.(TeamState -> Const (Maybe (FileBrowser Name)) TeamState)
-> ChatState -> Const (Maybe (FileBrowser Name)) ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> Const (Maybe (FileBrowser Name)) TeamState)
-> ChatState -> Const (Maybe (FileBrowser Name)) ChatState)
-> ((Maybe (FileBrowser Name)
-> Const (Maybe (FileBrowser Name)) (Maybe (FileBrowser Name)))
-> TeamState -> Const (Maybe (FileBrowser Name)) TeamState)
-> Getting
(Maybe (FileBrowser Name)) ChatState (Maybe (FileBrowser Name))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ChatEditState -> Const (Maybe (FileBrowser Name)) ChatEditState)
-> TeamState -> Const (Maybe (FileBrowser Name)) TeamState
Lens' TeamState ChatEditState
tsEditState((ChatEditState -> Const (Maybe (FileBrowser Name)) ChatEditState)
-> TeamState -> Const (Maybe (FileBrowser Name)) TeamState)
-> ((Maybe (FileBrowser Name)
-> Const (Maybe (FileBrowser Name)) (Maybe (FileBrowser Name)))
-> ChatEditState -> Const (Maybe (FileBrowser Name)) ChatEditState)
-> (Maybe (FileBrowser Name)
-> Const (Maybe (FileBrowser Name)) (Maybe (FileBrowser Name)))
-> TeamState
-> Const (Maybe (FileBrowser Name)) TeamState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Maybe (FileBrowser Name)
-> Const (Maybe (FileBrowser Name)) (Maybe (FileBrowser Name)))
-> ChatEditState -> Const (Maybe (FileBrowser Name)) ChatEditState
Lens' ChatEditState (Maybe (FileBrowser Name))
cedFileBrowser)