packages feed

lgtk-0.8: src/LGtk/Key.hs

{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
-- | Lens-based Gtk interface
module LGtk.Key where

data Key
    = Key'Char Char
    | Key'Escape
    | Key'Backspace
    | Key'Insert
    | Key'Delete
    | Key'Right
    | Key'Left
    | Key'Down
    | Key'Up
    | Key'PageUp
    | Key'PageDown
    | Key'Home
    | Key'End
    | Key'Unknown
        deriving (Eq, Ord, Read, Show)

pattern Key'Tab   = Key'Char '\t'
pattern Key'Enter = Key'Char '\n'
pattern Key'Space = Key'Char ' '

data ModifiedKey = ModifiedKey
    { modifierKeysShift   :: Bool
    , modifierKeysControl :: Bool
    , modifierKeysAlt     :: Bool
    , modifierKeysSuper   :: Bool
    , theModifiedKey      :: Key
    }
        deriving (Eq, Ord, Read, Show)

pattern SimpleKey k  = ModifiedKey False False False False k
pattern ShiftKey k   = ModifiedKey True  False False False k
pattern ControlKey k = ModifiedKey False True  False False k
pattern AltKey k     = ModifiedKey False False True  False k
pattern SuperKey k   = ModifiedKey False False False True  k

pattern CharKey c   <- (getSimpleChar -> Just c)

getSimpleChar (SimpleKey (Key'Char c)) = Just c
getSimpleChar (ShiftKey (Key'Char c)) = Just c
getSimpleChar _ = Nothing