clifm-0.5.0.0: src/Commons.hs
module Commons where
import Brick.Widgets.Core (withDefAttr, str)
import Brick.Types (Widget)
import Brick.Themes (Theme, newTheme)
import Brick.AttrMap (AttrName, AttrMap, attrName, attrMap)
import Graphics.Vty (Key(..), withStyle, underline, black, yellow, white, blue, red)
import Brick.Util (on, fg, bg)
import Brick.BChan (BChan)
import Brick.Widgets.Edit (editFocusedAttr)
import Brick.Widgets.List (listSelectedFocusedAttr, listSelectedAttr)
-- data definitions
data Name = Button {keyBind :: Key, withCtrl :: Bool} |
LabelsRow {pnName :: PaneName} |
Label {pnName :: PaneName, labelNum :: Int} |
PromptEditor |
EntryList {pnName :: PaneName} deriving (Ord, Show, Eq)
type EChan a = BChan (ThreadEvent a)
data ThreadEvent a = PromptClosed | PromptSuccess a | PromptError String | SizeFound FilePath Integer | SizeNotFound FilePath
type PaneName = Int
-- attributes and themes
defaultTheme :: Theme
defaultTheme = newTheme (white `on` black) [
(listSelectedAttr, fg yellow),
(listSelectedFocusedAttr, black `on` yellow),
(keybindAttr, fg white `withStyle` underline),
(promptAttr, bg blue),
(errorAttr, bg red),
(editFocusedAttr, black `on` yellow),
(disclaimerAttr, black `on` white)
]
keybindAttr :: AttrName
keybindAttr = attrName "keybind"
promptAttr :: AttrName
promptAttr = attrName "prompt"
errorAttr :: AttrName
errorAttr = attrName "error"
disclaimerAttr :: AttrName
disclaimerAttr = attrName "disclaimer"
-- utility functions
keybindStr :: String -> Widget Name
keybindStr = withDefAttr keybindAttr . str