content: {-# language ExistentialQuantification #-}
  module Rasa.Internal.Events
    ( BeforeRender(..)
    , OnRender(..)
    , AfterRender(..)
    , BufAdded(..)
    , Keypress(..)
    , Mod(..)
    , BufTextChanged(..)
    ) where
  
  import Data.Dynamic
  import Rasa.Internal.Range
  import Rasa.Internal.Buffer
  import qualified Yi.Rope as Y
  
  -- | This event is dispatched immediately before dispatching
  -- the 'OnRender' event.
  data BeforeRender = BeforeRender deriving (Show, Eq, Typeable)
  
  -- | This event is dispatched when it's time for extensions to render to screen.
  data OnRender = OnRender deriving (Show, Eq, Typeable)
  
  -- | This event is dispatched immediately after dispatching 'OnRender'.
  data AfterRender = AfterRender deriving (Show, Eq, Typeable)
  
  -- | This event is dispatched after adding a new buffer. The contained BufRef refers to the new buffer.
  data BufAdded = BufAdded BufRef deriving (Show, Eq, Typeable)
  
  -- | This event is dispatched in response to keyboard key presses. It contains both
  -- the char that was pressed and any modifiers ('Mod') that where held when the key was pressed.
  data Keypress
    = Keypress Char [Mod]
    | KEsc      [Mod]
    | KBS       [Mod]
    | KEnter    [Mod]
    | KLeft     [Mod]
    | KRight    [Mod]
    | KUp       [Mod]
    | KDown     [Mod]
    | KPrtScr   [Mod]
    | KHome     [Mod]
    | KPageUp   [Mod]
    | KDel      [Mod]
    | KEnd      [Mod]
    | KPageDown [Mod]
    | KUnknown
    deriving (Show, Eq, Typeable)
  
  -- | This represents each modifier key that could be pressed along with a key.
  data Mod
    = Ctrl
    | Alt
    | Shift
    | Meta
    deriving (Show, Eq)
  
  -- | This is triggered when text in a buffer is changed. The Event data includes the 'CrdRange' that changed and
  -- the new text which is now contined in that range.
  data BufTextChanged
    = BufTextChanged CrdRange Y.YiString
    deriving (Show, Eq, Typeable)
  