packages feed

tart-0.1.1: programs/Events/AskForSaveFilename.hs

module Events.AskForSaveFilename
  ( handleAskForSaveFilenameEvent
  )
where

import qualified Graphics.Vty as V
import Lens.Micro.Platform
import qualified Data.Text as T

import Brick
import Brick.Widgets.Edit

import Types
import State

handleAskForSaveFilenameEvent :: Bool -> AppState -> BrickEvent Name e -> EventM Name (Next AppState)
handleAskForSaveFilenameEvent isQuitting s (VtyEvent (V.EvKey V.KEsc [])) =
    if isQuitting then halt s else continue $ popMode s
handleAskForSaveFilenameEvent isQuitting s (VtyEvent (V.EvKey V.KEnter [])) = do
    let [fn] = getEditContents (s^.askToSaveFilenameEdit)
    if T.null fn
        then if isQuitting then halt s else continue $ popMode s
        else let s' = s & canvasPath .~ Just (T.unpack fn)
             in if isQuitting
                then quit False s'
                else continue =<< (popMode <$> saveAndContinue s')
handleAskForSaveFilenameEvent _ s (VtyEvent e) =
    continue =<< handleEventLensed s askToSaveFilenameEdit handleEditorEvent e
handleAskForSaveFilenameEvent _ s _ =
    continue s