{-# LANGUAGE CPP, TemplateHaskell #-}
module Client.State.Focus
(
Focus(..)
, Subfocus(..)
, WindowsFilter(..)
, focusNetwork
, _ChannelFocus
, _NetworkFocus
, _Unfocused
) where
import Control.Lens
import Data.Monoid ((<>))
import Data.Text (Text)
import Irc.Identifier
data Focus
= Unfocused
| NetworkFocus !Text
| ChannelFocus !Text !Identifier
deriving (Eq,Show)
makePrisms ''Focus
data Subfocus
= FocusMessages
| FocusInfo
| FocusUsers
| FocusMasks !Char
| FocusWindows WindowsFilter
| FocusPalette
| FocusMentions
| FocusDigraphs
| FocusKeyMap
| FocusHelp (Maybe Text)
| FocusRtsStats
| FocusIgnoreList
deriving (Eq,Show)
instance Ord Focus where
compare Unfocused Unfocused = EQ
compare (NetworkFocus x) (NetworkFocus y ) = compare x y
compare (ChannelFocus x1 x2) (ChannelFocus y1 y2) = compare x1 y1 <> compare x2 y2
compare Unfocused _ = LT
compare _ Unfocused = GT
compare (NetworkFocus x ) (ChannelFocus y _) = compare x y <> LT
compare (ChannelFocus x _) (NetworkFocus y ) = compare x y <> GT
focusNetwork :: Focus -> Maybe Text
focusNetwork Unfocused = Nothing
focusNetwork (NetworkFocus network) = Just network
focusNetwork (ChannelFocus network _) = Just network
data WindowsFilter
= AllWindows
| NetworkWindows
| ChannelWindows
| UserWindows
deriving (Eq, Show)