tart 0.1.1 → 0.1.2
raw patch · 10 files changed
+50/−13 lines, 10 filesdep ~brick
Dependency ranges changed: brick
Files
- CHANGELOG.md +8/−0
- programs/App.hs +1/−0
- programs/Events/AskForSaveFilename.hs +1/−1
- programs/Events/CanvasSizePrompt.hs +6/−0
- programs/State.hs +12/−5
- programs/Theme.hs +5/−0
- programs/Types.hs +2/−0
- programs/UI/AskForSaveFilename.hs +7/−1
- programs/UI/CanvasSizePrompt.hs +6/−4
- tart.cabal +2/−2
CHANGELOG.md view
@@ -1,4 +1,12 @@ +0.1.2+-----++Bug fixes:+ * Exceptions triggered during an attempt to save to an invalid path no+ longer cause a crash and are now reported to the user (#4)+ * Canvas size dialog fields are now clickable (#5)+ 0.1.1 -----
programs/App.hs view
@@ -91,6 +91,7 @@ , _canvasPath = fp , _canvasDirty = False , _askToSaveFilenameEdit = editor AskToSaveFilenameEdit (Just 1) ""+ , _saveError = Nothing , _appEventChannel = chan , _textEntered = mempty , _textEntryStart = (0, 0)
programs/Events/AskForSaveFilename.hs view
@@ -22,7 +22,7 @@ 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'+ then quit False (popMode s') else continue =<< (popMode <$> saveAndContinue s') handleAskForSaveFilenameEvent _ s (VtyEvent e) = continue =<< handleEventLensed s askToSaveFilenameEdit handleEditorEvent e
programs/Events/CanvasSizePrompt.hs view
@@ -14,6 +14,12 @@ import State handleCanvasSizePromptEvent :: AppState -> BrickEvent Name e -> EventM Name (Next AppState)+handleCanvasSizePromptEvent s (MouseDown CanvasSizeWidthEdit _ _ _) =+ continue $ s & canvasSizeFocus %~ focusSetCurrent CanvasSizeWidthEdit+handleCanvasSizePromptEvent s (MouseDown CanvasSizeHeightEdit _ _ _) =+ continue $ s & canvasSizeFocus %~ focusSetCurrent CanvasSizeHeightEdit+handleCanvasSizePromptEvent s (MouseDown _ _ _ _) =+ continue $ popMode s handleCanvasSizePromptEvent s (VtyEvent (V.EvKey (V.KChar '\t') [])) = continue $ s & canvasSizeFocus %~ focusNext handleCanvasSizePromptEvent s (VtyEvent (V.EvKey V.KBackTab [])) =
programs/State.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE ScopedTypeVariables #-} module State ( checkForMouseSupport , setTool@@ -78,6 +79,7 @@ import Control.Monad (when, forM, forM_) import Control.Monad.Trans (liftIO)+import qualified Control.Exception as E import Data.Monoid ((<>)) import qualified Graphics.Vty as V import qualified Data.Vector as Vec@@ -369,8 +371,12 @@ if ask then continue $ askToSave s else do- liftIO $ saveToDisk s p- halt s+ result <- liftIO $ E.try $ saveToDisk s p+ case result of+ Left (e::E.SomeException) ->+ continue $ askForSaveFilename True $+ s & saveError .~ (Just $ T.pack $ show e)+ Right () -> halt s False -> halt s saveToDisk :: AppState -> FilePath -> IO ()@@ -382,9 +388,10 @@ saveAndContinue :: AppState -> EventM Name AppState saveAndContinue s = do case s^.canvasPath of- Nothing -> return ()- Just p -> liftIO $ saveToDisk s p- return $ s & canvasDirty .~ False+ Nothing -> return s+ Just p -> do+ liftIO $ saveToDisk s p+ return $ s & canvasDirty .~ False writeCanvasFiles :: FilePath -> [Canvas] -> [Int] -> [String] -> IO () writeCanvasFiles path cs order names = do
programs/Theme.hs view
@@ -5,6 +5,7 @@ , keybindingAttr , selectedLayerAttr , clickableAttr+ , errorAttr ) where @@ -21,6 +22,9 @@ clickableAttr :: AttrName clickableAttr = "clickable" +errorAttr :: AttrName+errorAttr = "error"+ theme :: AttrMap theme = attrMap defAttr [ (keybindingAttr, fg white `withStyle` underline)@@ -28,4 +32,5 @@ , (editFocusedAttr, black `on` yellow) , (selectedLayerAttr, white `on` magenta) , (clickableAttr, fg white `withStyle` bold)+ , (errorAttr, fg red) ]
programs/Types.hs view
@@ -63,6 +63,7 @@ , undoStack , redoStack , drawStyle+ , saveError ) where @@ -233,6 +234,7 @@ , _canvasPath :: Maybe FilePath , _canvasDirty :: Bool , _askToSaveFilenameEdit :: Editor T.Text Name+ , _saveError :: Maybe T.Text , _appEventChannel :: BChan AppEvent , _textEntered :: [(Char, V.Attr)] , _textEntryStart :: (Int, Int)
programs/UI/AskForSaveFilename.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE OverloadedStrings #-} module UI.AskForSaveFilename ( drawAskForSaveFilenameUI )@@ -37,8 +38,13 @@ , withDefAttr keybindingAttr $ str "Esc" , str " to cancel)" ]- body = (hCenter $ str "Save changes to:") <=>+ body = maybeError <=>+ (hCenter $ str "Save changes to:") <=> (hCenter help) <=> padTopBottom 1 fn+ maybeError = maybe emptyWidget mkSaveError (s^.saveError)+ mkSaveError msg = withDefAttr errorAttr $+ (hCenter $ txt "Error saving:") <=>+ (padBottom (Pad 1) $ txtWrap msg) renderString = txt . T.unlines fn = str "Path: " <+> renderEditor renderString True (s^.askToSaveFilenameEdit)
programs/UI/CanvasSizePrompt.hs view
@@ -26,7 +26,9 @@ where body = padBottom (Pad 1) width <=> height renderString = txt . T.unlines- width = str "Width: " <+> withFocusRing (s^.canvasSizeFocus)- (renderEditor renderString) (s^.canvasSizeWidthEdit)- height = str "Height: " <+> withFocusRing (s^.canvasSizeFocus)- (renderEditor renderString) (s^.canvasSizeHeightEdit)+ width = str "Width: " <+>+ (clickable CanvasSizeWidthEdit $+ withFocusRing (s^.canvasSizeFocus) (renderEditor renderString) (s^.canvasSizeWidthEdit))+ height = str "Height: " <+>+ (clickable CanvasSizeHeightEdit $+ withFocusRing (s^.canvasSizeFocus) (renderEditor renderString) (s^.canvasSizeHeightEdit))
tart.cabal view
@@ -1,5 +1,5 @@ name: tart-version: 0.1.1+version: 0.1.2 synopsis: Terminal Art description: A program to make ASCII art license: BSD3@@ -77,7 +77,7 @@ Draw.Box default-language: Haskell2010 build-depends: base >=4.9 && < 5,- brick >= 0.24,+ brick >= 0.30, vty >= 5.17, vector, microlens-platform,