From 96a80fca7017ea3be4cfd6eea086c94d3190cc99 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 17 Nov 2021 17:50:54 -1000 Subject: [PATCH] ui: register: left click enters transaction screen --- hledger-ui/Hledger/UI/RegisterScreen.hs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/hledger-ui/Hledger/UI/RegisterScreen.hs b/hledger-ui/Hledger/UI/RegisterScreen.hs index b7d5cb6b4..2e5e8ffeb 100644 --- a/hledger-ui/Hledger/UI/RegisterScreen.hs +++ b/hledger-ui/Hledger/UI/RegisterScreen.hs @@ -19,10 +19,10 @@ import Data.Maybe import qualified Data.Text as T import Data.Time.Calendar import qualified Data.Vector as V -import Graphics.Vty (Event(..),Key(..),Modifier(..)) +import Graphics.Vty (Event(..),Key(..),Modifier(..), Button (BLeft)) import Brick import Brick.Widgets.List - (handleListEvent, list, listElementsL, listMoveDown, listMoveTo, listNameL, listSelectedElement, listSelectedL, renderList) + (handleListEvent, list, listElementsL, listMoveDown, listMoveTo, listNameL, listSelectedElement, listSelectedL, renderList, listElements) import Brick.Widgets.Edit import Lens.Micro.Platform import Safe @@ -39,6 +39,7 @@ import Hledger.UI.UIUtils import Hledger.UI.Editor import Hledger.UI.TransactionScreen import Hledger.UI.ErrorScreen +import Data.Vector ((!?)) registerScreen :: Screen registerScreen = RegisterScreen{ @@ -357,6 +358,15 @@ rsHandle ui@UIState{ Just _ -> continue $ screenEnter d transactionScreen{tsAccount=rsAccount} ui Nothing -> continue ui + -- or clicked transaction + MouseDown _n BLeft _mods Location{loc=(_x,y)} | not $ (=="") clickeddate -> do + let + list' = listMoveTo y rsList + ui' = ui{aScreen=s{rsList=list'}} + continue $ screenEnter d transactionScreen{tsAccount=rsAccount} ui' + where + clickeddate = maybe "" rsItemDate $ listElements rsList !? y + -- prevent moving down over blank padding items; -- instead scroll down by one, until maximally scrolled - shows the end has been reached VtyEvent e | e `elem` moveDownEvents, isBlankElement mnextelement -> do @@ -382,9 +392,9 @@ rsHandle ui@UIState{ newitems <- handleListEvent ev' rsList continue ui{aScreen=s{rsList=newitems}} - AppEvent _ -> continue ui MouseDown{} -> continue ui MouseUp{} -> continue ui + AppEvent _ -> continue ui rsHandle _ _ = error "event handler called with wrong screen type, should not happen" -- PARTIAL: