{-# LANGUAGE TemplateHaskell #-}
module Vgrep.Widget.Pager.Internal (
    -- * Pager widget state
      Pager (..)

    -- * Lenses
    , position
    -- ** Auto-generated lenses
    , column
    , above
    , visible
    , highlighted
    ) where

import Control.Lens
import Data.Sequence  (Seq)
import Data.Set       (Set)
import Data.Text.Lazy (Text)


-- | Keeps track of the lines of text to display, the current scroll
-- positions, and the set of highlighted line numbers.
data Pager = Pager
    { _column      :: Int
    , _highlighted :: Set Int
    , _above       :: Seq Text
    , _visible     :: Seq Text }
    deriving (Eq, Show)

makeLenses ''Pager

-- | The number of invisible lines above the screen
position :: Getter Pager Int
position = above . to length