Move task list related controls to new behavior

This commit is contained in:
Joscha 2018-09-28 18:10:51 +00:00
parent 11ef930835
commit 7fb6ff4add
5 changed files with 44 additions and 27 deletions

View file

@ -13,6 +13,7 @@ import qualified Graphics.Vty.Input.Events as VTY
import TaskMachine.LTask import TaskMachine.LTask
import TaskMachine.Options import TaskMachine.Options
import TaskMachine.UI.Behaviors.TaskEdit import TaskMachine.UI.Behaviors.TaskEdit
import TaskMachine.UI.Behaviors.TaskList
import TaskMachine.UI.Popup import TaskMachine.UI.Popup
import TaskMachine.UI.TaskList import TaskMachine.UI.TaskList
import TaskMachine.UI.Types import TaskMachine.UI.Types
@ -61,18 +62,6 @@ focusBehavior _ s (VTY.EvKey (VTY.KChar '\t') []) = B.continue $ bigFocusNext s
focusBehavior _ s (VTY.EvKey VTY.KBackTab []) = B.continue $ bigFocusPrev s focusBehavior _ s (VTY.EvKey VTY.KBackTab []) = B.continue $ bigFocusPrev s
focusBehavior f s e = f s e -- wrapper around another behavior focusBehavior f s e = f s e -- wrapper around another behavior
taskListBehavior :: UIState -> VTY.Event -> NewState
-- Mark/unmark a task as completed
taskListBehavior s (VTY.EvKey (VTY.KChar 'x') []) = undefined s
-- Delete tasks
taskListBehavior s (VTY.EvKey (VTY.KChar 'd') []) = undefined s
-- Start editing a new task
taskListBehavior s (VTY.EvKey (VTY.KChar 'e') []) = B.continue (startEdit s)
-- Update the task list (scroll etc.)
taskListBehavior s e = do
newTasks <- updateTaskList e (tasks s)
B.continue s{tasks=newTasks}
selectBehavior :: UIState -> VTY.Event -> NewState selectBehavior :: UIState -> VTY.Event -> NewState
-- Deal with popup if there is one -- Deal with popup if there is one
selectBehavior s@UIState{errorPopup=Just popup} e = undefined popup s e selectBehavior s@UIState{errorPopup=Just popup} e = undefined popup s e

View file

@ -1,6 +1,5 @@
module TaskMachine.UI.Behaviors.TaskEdit module TaskMachine.UI.Behaviors.TaskEdit
( startEdit ( taskEditBehavior
, taskEditBehavior
) where ) where
import qualified Brick as B import qualified Brick as B
@ -13,14 +12,6 @@ import TaskMachine.Task
import TaskMachine.UI.TaskList import TaskMachine.UI.TaskList
import TaskMachine.UI.Types import TaskMachine.UI.Types
startEdit :: UIState -> UIState
startEdit s =
case taskListSelectedElement (tasks s) of
Nothing -> undefined -- TODO: Add popup notification
Just t ->
let edit = B.editor RTaskEdit (Just 1) (formatTask t)
in s{taskEdit=Just edit}
finishEdit :: B.Editor String RName -> UIState -> UIState finishEdit :: B.Editor String RName -> UIState -> UIState
finishEdit edit s = finishEdit edit s =
let editedText = unlines $ B.getEditContents edit let editedText = unlines $ B.getEditContents edit
@ -34,10 +25,10 @@ taskEditBehavior :: B.Editor String RName -> UIState -> VTY.Event -> NewState
taskEditBehavior _ s (VTY.EvKey VTY.KEsc []) = B.continue s{taskEdit=Nothing} taskEditBehavior _ s (VTY.EvKey VTY.KEsc []) = B.continue s{taskEdit=Nothing}
taskEditBehavior edit s (VTY.EvKey VTY.KHome []) = B.continue s{taskEdit=Just (B.applyEdit T.gotoBOL edit)} taskEditBehavior edit s (VTY.EvKey VTY.KHome []) = B.continue s{taskEdit=Just (B.applyEdit T.gotoBOL edit)}
taskEditBehavior edit s (VTY.EvKey VTY.KEnd []) = B.continue s{taskEdit=Just (B.applyEdit T.gotoEOL edit)} taskEditBehavior edit s (VTY.EvKey VTY.KEnd []) = B.continue s{taskEdit=Just (B.applyEdit T.gotoEOL edit)}
taskEditBehavior edit s (VTY.EvKey VTY.KEnter []) = do taskEditBehavior edit s (VTY.EvKey VTY.KEnter []) = B.suspendAndResume $ do
let newState = finishEdit edit s let newState = finishEdit edit s
-- TODO: Save changes to file saveUIState newState
B.continue newState pure newState
taskEditBehavior edit s e = do taskEditBehavior edit s e = do
newEdit <- B.handleEditorEvent e edit newEdit <- B.handleEditorEvent e edit
B.continue s{taskEdit=Just newEdit} B.continue s{taskEdit=Just newEdit}

View file

@ -0,0 +1,31 @@
module TaskMachine.UI.Behaviors.TaskList
( taskListBehavior
) where
import qualified Brick as B
import qualified Brick.Widgets.Edit as B
import qualified Graphics.Vty as VTY
import TaskMachine.Task
import TaskMachine.UI.TaskList
import TaskMachine.UI.Types
startEdit :: UIState -> UIState
startEdit s =
case taskListSelectedElement (tasks s) of
Nothing -> undefined -- TODO: Add popup notification
Just t ->
let edit = B.editor RTaskEdit (Just 1) (formatTask t)
in s{taskEdit=Just edit}
taskListBehavior :: UIState -> VTY.Event -> NewState
-- Mark/unmark a task as completed
taskListBehavior s (VTY.EvKey (VTY.KChar 'x') []) = undefined s
-- Delete tasks
taskListBehavior s (VTY.EvKey (VTY.KChar 'd') []) = undefined s
-- Start editing a new task
taskListBehavior s (VTY.EvKey (VTY.KChar 'e') []) = B.continue (startEdit s)
-- Update the task list (scroll etc.)
taskListBehavior s e = do
newTasks <- updateTaskList e (tasks s)
B.continue s{tasks=newTasks}

View file

@ -19,6 +19,7 @@ module TaskMachine.UI.Types
, bigFocusNext, bigFocusPrev , bigFocusNext, bigFocusPrev
--, smallFocusNext, smallFocusPrev --, smallFocusNext, smallFocusPrev
, defaultTheme , defaultTheme
, saveUIState
) where ) where
import qualified Brick as B import qualified Brick as B
@ -30,7 +31,7 @@ import qualified Brick.Widgets.List as B
import qualified Graphics.Vty as VTY import qualified Graphics.Vty as VTY
--import qualified Data.Vector as V --import qualified Data.Vector as V
--import TaskMachine.LTask import TaskMachine.LTask
import TaskMachine.Options import TaskMachine.Options
import TaskMachine.UI.Popup import TaskMachine.UI.Popup
import TaskMachine.UI.Task import TaskMachine.UI.Task
@ -180,3 +181,9 @@ defaultTheme = B.newTheme VTY.defAttr
bg' = VTY.withBackColor none bg' = VTY.withBackColor none
st' = VTY.withStyle none st' = VTY.withStyle none
none = VTY.defAttr none = VTY.defAttr
saveUIState :: UIState -> IO ()
saveUIState s = do
let filepath = oTodofile (options s)
ltasks = taskListElements (tasks s)
saveLTasks filepath ltasks

View file

@ -4,7 +4,6 @@
- c2018-09-18 Offer to clean up file when loading (adding creation/completion dates) - c2018-09-18 Offer to clean up file when loading (adding creation/completion dates)
- c2018-09-18 Purge - move completed tasks to a separate file - c2018-09-18 Purge - move completed tasks to a separate file
- c2018-09-18 Sort tasks by completion, priority, due date, description - c2018-09-18 Sort tasks by completion, priority, due date, description
- c2018-09-28 Load file in initial app action
- c2018-09-28 Move cursor to beginning of task description when editing tasks - c2018-09-28 Move cursor to beginning of task description when editing tasks
- c2018-09-28 Syntax highlighting while editing tasks - c2018-09-28 Syntax highlighting while editing tasks
x2018-09-27 c2018-09-18 Quit using Esc or q x2018-09-27 c2018-09-18 Quit using Esc or q