diff options
Diffstat (limited to 'lib/Daffm')
| -rw-r--r-- | lib/Daffm/Attrs.hs | 17 | ||||
| -rw-r--r-- | lib/Daffm/Types.hs | 29 | ||||
| -rw-r--r-- | lib/Daffm/View.hs | 25 |
3 files changed, 71 insertions, 0 deletions
diff --git a/lib/Daffm/Attrs.hs b/lib/Daffm/Attrs.hs new file mode 100644 index 0000000..93a4163 --- /dev/null +++ b/lib/Daffm/Attrs.hs @@ -0,0 +1,17 @@ +module Daffm.Attrs where + +import qualified Brick.AttrMap as A +import Brick.Util (fg) +import qualified Brick.Widgets.List as L +import qualified Graphics.Vty as V + +selectedFileAttr :: A.AttrName +selectedFileAttr = A.attrName "selected-file" + +appAttrMap :: A.AttrMap +appAttrMap = + A.attrMap + V.defAttr + [ (L.listAttr, fg V.white), + (selectedFileAttr, fg V.cyan) + ] diff --git a/lib/Daffm/Types.hs b/lib/Daffm/Types.hs new file mode 100644 index 0000000..2a8e97d --- /dev/null +++ b/lib/Daffm/Types.hs @@ -0,0 +1,29 @@ +module Daffm.Types where + +import qualified Brick.Widgets.List as L +import System.Posix.Types (FileOffset) + +data FileType + = RegularFile + | BlockDevice + | CharacterDevice + | NamedPipe + | Directory + | SymbolicLink + | UnixSocket + deriving (Show) + +data FileInfo = FileInfo + { fileName :: String, + filePath :: FilePath, + fileSize :: FileOffset, + fileType :: FileType + } + deriving (Show) + +data AppState = AppState + { stateFiles :: L.List () FileInfo, + stateCwd :: FilePath, + stateParentDir :: FilePath + } + deriving (Show) diff --git a/lib/Daffm/View.hs b/lib/Daffm/View.hs new file mode 100644 index 0000000..02529ac --- /dev/null +++ b/lib/Daffm/View.hs @@ -0,0 +1,25 @@ +module Daffm.View where + +import Brick.Types (Widget) +import Brick.Widgets.Core (str, vBox, vLimit, withAttr, (<+>)) +import qualified Brick.Widgets.List as L +import Daffm.Attrs (selectedFileAttr) +import Daffm.Types (AppState (..), FileInfo (..)) +import qualified Data.Vector as Vec + +appView :: AppState -> [Widget ()] +appView (AppState {stateFiles, stateCwd}) = [ui] + where + ui = vBox [vLimit 1 header, box, vLimit 1 cmdline] + header = str stateCwd + cmdline = str "Item " <+> cur <+> str " of " <+> total + cur = case L.listSelected stateFiles of + Nothing -> str "-" + Just i -> str (show (i + 1)) + total = str $ show $ Vec.length $ L.listElements stateFiles + box = L.renderList fileItemView True stateFiles + +fileItemView :: Bool -> FileInfo -> Widget () +fileItemView sel (FileInfo {fileName, fileSize, fileType}) = + let wrap w = if sel then withAttr selectedFileAttr w else w + in wrap (str fileName) <+> str (" : " <> show fileSize <> " | " <> show fileType) |
