module Dodge.SelectionList where import Color import Regex import Dodge.Data.Universe import LensHelp import Data.Maybe --import Data.IntMap.Strict (IntMap) getAvailableListLines :: ListDisplayParams -> Configuration -> Int getAvailableListLines ldps cfig = floor ((dToBot - vgap) / itmHeight) where vgap = ldps ^. ldpVerticalGap itmHeight = 10 * ldps ^. ldpScale + vgap dToBot = cfig ^. windowY - (ldps ^. ldpPosY + dFromScreenBot) dFromScreenBot = 5 -- fromMaybe 0 $ sl ^? slSizeRestriction . ssrType . ssrFromScreenBottom getShownItems :: SelectionList a -> [SelectionItem a] getShownItems sl = case sl ^. slRegexList of [] -> sl ^. slItems xs -> fmap fst xs makeRegexList :: SelectionList a -> [(SelectionItem a, Maybe Int)] makeRegexList sl = case sl ^. slRegex of "" | not (sl ^. slRegexInput) -> [] str -> (SelectionInfo { _siPictures = ["FILTER: "++str] , _siHeight = 1 , _siIsSelectable = False --, _siWidth = length $ "FILTER: "++str , _siColor = white , _siOffX = 0 }, Nothing) : filter (doregex str) (zip (_slItems sl) $ fmap Just [0..]) where doregex str = regexList str . _siPictures . fst setShownItems :: SelectionList a -> SelectionList a setShownItems sl = sl & slRegexList .~ makeRegexList sl moveSelectionListSelection :: Int -> SelectionList a -> SelectionList a moveSelectionListSelection yi sl = sl & slSelPos %~ f where f x | maxsel == 0 = Nothing | isNothing x = Just 0 | otherwise = fmap ((`mod` maxsel) . subtract yi) x maxsel = case _slRegex sl of "" -> length (_slItems sl) _ -> length (_slRegexList sl)