Add some very basic task list interaction

This commit is contained in:
Joscha 2018-09-16 20:55:49 +00:00
parent b524441d9c
commit 902c23eb83
5 changed files with 108 additions and 14 deletions

View file

@ -1,14 +1,15 @@
{-# LANGUAGE RecordWildCards #-}
module TaskMachine.UI where
--import Data.Monoid
--
import qualified Brick as B
import qualified Brick.Themes as B
import qualified Brick.Widgets.List as B
import qualified Brick as B
import qualified Brick.Focus as B
import qualified Brick.Themes as B
import qualified Graphics.Vty.Input.Events as VTY
import TaskMachine.UI.NewTask
import TaskMachine.UI.TaskList
import TaskMachine.UI.TopBar
import TaskMachine.UI.Types
--import qualified Database.SQLite.Simple as DB
--import qualified Brick.Themes as B
@ -44,13 +45,33 @@ Edit _____________________________
-- [_] display loaded tasks in UI
drawUIState :: UIState -> [B.Widget RName]
drawUIState UIState{..} = [B.renderList (renderLTask taskEdit) True taskList]
drawUIState s =
let wTopBar = const placeholderTopBar
wTaskList = renderTaskList (taskList s) (taskEdit s)
wNewTask = const placeholderNewTask
in pure $ case B.focusGetCurrent (focus s) of
Nothing -> B.vBox [wTopBar False, wTaskList False, wNewTask False] -- should never happen
(Just BRTopBar) -> B.vBox [wTopBar True, wTaskList False, wNewTask False]
(Just BRTaskList) -> B.vBox [wTopBar False, wTaskList True, wNewTask False]
(Just BRNewTask) -> B.vBox [wTopBar False, wTaskList False, wNewTask True ]
updateUIState :: UIState -> B.BrickEvent RName () -> B.EventM RName (B.Next UIState)
updateUIState s e =
case B.focusGetCurrent (focus s) of
Nothing -> undefined
(Just BRTopBar) -> placeholderUpdate s e
(Just BRTaskList) -> updateTaskList s e
(Just BRNewTask) -> placeholderUpdate s e
placeholderUpdate :: UIState -> B.BrickEvent RName () -> B.EventM RName (B.Next UIState)
placeholderUpdate s (B.VtyEvent (VTY.EvKey VTY.KEsc [])) = B.halt s
placeholderUpdate s _ = B.continue s
myApp :: B.Theme -> B.App UIState () RName
myApp theme = B.App
{ B.appDraw = drawUIState
, B.appChooseCursor = B.neverShowCursor
, B.appHandleEvent = B.resizeOrQuit
, B.appChooseCursor = B.showFirstCursor
, B.appHandleEvent = updateUIState
, B.appStartEvent = pure
, B.appAttrMap = const attrMap
}