packages feed

gi-gdk-0.3.18.15: GI/Gdk/Structs/EventKey.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

Describes a key press or key release event.
-}

module GI.Gdk.Structs.EventKey
    ( 

-- * Exported types
    EventKey(..)                            ,
    newZeroEventKey                         ,
    noEventKey                              ,


 -- * Properties
-- ** Group
    eventKeyGroup                           ,
    eventKeyReadGroup                       ,
    eventKeyWriteGroup                      ,


-- ** HardwareKeycode
    eventKeyHardwareKeycode                 ,
    eventKeyReadHardwareKeycode             ,
    eventKeyWriteHardwareKeycode            ,


-- ** IsModifier
    eventKeyIsModifier                      ,
    eventKeyReadIsModifier                  ,
    eventKeyWriteIsModifier                 ,


-- ** Keyval
    eventKeyKeyval                          ,
    eventKeyReadKeyval                      ,
    eventKeyWriteKeyval                     ,


-- ** Length
    eventKeyLength                          ,
    eventKeyReadLength                      ,
    eventKeyWriteLength                     ,


-- ** SendEvent
    eventKeyReadSendEvent                   ,
    eventKeySendEvent                       ,
    eventKeyWriteSendEvent                  ,


-- ** State
    eventKeyReadState                       ,
    eventKeyState                           ,
    eventKeyWriteState                      ,


-- ** String
    eventKeyClearString                     ,
    eventKeyReadString                      ,
    eventKeyString                          ,
    eventKeyWriteString                     ,


-- ** Time
    eventKeyReadTime                        ,
    eventKeyTime                            ,
    eventKeyWriteTime                       ,


-- ** Type
    eventKeyReadType                        ,
    eventKeyType                            ,
    eventKeyWriteType                       ,


-- ** Window
    eventKeyClearWindow                     ,
    eventKeyReadWindow                      ,
    eventKeyWindow                          ,
    eventKeyWriteWindow                     ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gdk.Types
import GI.Gdk.Callbacks

newtype EventKey = EventKey (ForeignPtr EventKey)
instance WrappedPtr EventKey where
    wrappedPtrCalloc = callocBytes 56
    wrappedPtrCopy = copyPtr 56
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `EventKey` struct initialized to zero.
newZeroEventKey :: MonadIO m => m EventKey
newZeroEventKey = liftIO $ wrappedPtrCalloc >>= wrapPtr EventKey

instance tag ~ 'AttrSet => Constructible EventKey tag where
    new _ attrs = do
        o <- newZeroEventKey
        GI.Attributes.set o attrs
        return o


noEventKey :: Maybe EventKey
noEventKey = Nothing

eventKeyReadType :: MonadIO m => EventKey -> m EventType
eventKeyReadType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

eventKeyWriteType :: MonadIO m => EventKey -> EventType -> m ()
eventKeyWriteType s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 0) (val' :: CUInt)

data EventKeyTypeFieldInfo
instance AttrInfo EventKeyTypeFieldInfo where
    type AttrAllowedOps EventKeyTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyTypeFieldInfo = (~) EventType
    type AttrBaseTypeConstraint EventKeyTypeFieldInfo = (~) EventKey
    type AttrGetType EventKeyTypeFieldInfo = EventType
    type AttrLabel EventKeyTypeFieldInfo = "type"
    attrGet _ = eventKeyReadType
    attrSet _ = eventKeyWriteType
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyType :: AttrLabelProxy "type"
eventKeyType = AttrLabelProxy


eventKeyReadWindow :: MonadIO m => EventKey -> m (Maybe Window)
eventKeyReadWindow s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO (Ptr Window)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newObject Window) val'
        return val''
    return result

eventKeyWriteWindow :: MonadIO m => EventKey -> Ptr Window -> m ()
eventKeyWriteWindow s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Ptr Window)

eventKeyClearWindow :: MonadIO m => EventKey -> m ()
eventKeyClearWindow s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (nullPtr :: Ptr Window)

data EventKeyWindowFieldInfo
instance AttrInfo EventKeyWindowFieldInfo where
    type AttrAllowedOps EventKeyWindowFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventKeyWindowFieldInfo = (~) (Ptr Window)
    type AttrBaseTypeConstraint EventKeyWindowFieldInfo = (~) EventKey
    type AttrGetType EventKeyWindowFieldInfo = Maybe Window
    type AttrLabel EventKeyWindowFieldInfo = "window"
    attrGet _ = eventKeyReadWindow
    attrSet _ = eventKeyWriteWindow
    attrConstruct = undefined
    attrClear _ = eventKeyClearWindow

eventKeyWindow :: AttrLabelProxy "window"
eventKeyWindow = AttrLabelProxy


eventKeyReadSendEvent :: MonadIO m => EventKey -> m Int8
eventKeyReadSendEvent s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Int8
    return val

eventKeyWriteSendEvent :: MonadIO m => EventKey -> Int8 -> m ()
eventKeyWriteSendEvent s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Int8)

data EventKeySendEventFieldInfo
instance AttrInfo EventKeySendEventFieldInfo where
    type AttrAllowedOps EventKeySendEventFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeySendEventFieldInfo = (~) Int8
    type AttrBaseTypeConstraint EventKeySendEventFieldInfo = (~) EventKey
    type AttrGetType EventKeySendEventFieldInfo = Int8
    type AttrLabel EventKeySendEventFieldInfo = "send_event"
    attrGet _ = eventKeyReadSendEvent
    attrSet _ = eventKeyWriteSendEvent
    attrConstruct = undefined
    attrClear _ = undefined

eventKeySendEvent :: AttrLabelProxy "sendEvent"
eventKeySendEvent = AttrLabelProxy


eventKeyReadTime :: MonadIO m => EventKey -> m Word32
eventKeyReadTime s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 20) :: IO Word32
    return val

eventKeyWriteTime :: MonadIO m => EventKey -> Word32 -> m ()
eventKeyWriteTime s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 20) (val :: Word32)

data EventKeyTimeFieldInfo
instance AttrInfo EventKeyTimeFieldInfo where
    type AttrAllowedOps EventKeyTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyTimeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventKeyTimeFieldInfo = (~) EventKey
    type AttrGetType EventKeyTimeFieldInfo = Word32
    type AttrLabel EventKeyTimeFieldInfo = "time"
    attrGet _ = eventKeyReadTime
    attrSet _ = eventKeyWriteTime
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyTime :: AttrLabelProxy "time"
eventKeyTime = AttrLabelProxy


eventKeyReadState :: MonadIO m => EventKey -> m [ModifierType]
eventKeyReadState s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO CUInt
    let val' = wordToGFlags val
    return val'

eventKeyWriteState :: MonadIO m => EventKey -> [ModifierType] -> m ()
eventKeyWriteState s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = gflagsToWord val
    poke (ptr `plusPtr` 24) (val' :: CUInt)

data EventKeyStateFieldInfo
instance AttrInfo EventKeyStateFieldInfo where
    type AttrAllowedOps EventKeyStateFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyStateFieldInfo = (~) [ModifierType]
    type AttrBaseTypeConstraint EventKeyStateFieldInfo = (~) EventKey
    type AttrGetType EventKeyStateFieldInfo = [ModifierType]
    type AttrLabel EventKeyStateFieldInfo = "state"
    attrGet _ = eventKeyReadState
    attrSet _ = eventKeyWriteState
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyState :: AttrLabelProxy "state"
eventKeyState = AttrLabelProxy


eventKeyReadKeyval :: MonadIO m => EventKey -> m Word32
eventKeyReadKeyval s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 28) :: IO Word32
    return val

eventKeyWriteKeyval :: MonadIO m => EventKey -> Word32 -> m ()
eventKeyWriteKeyval s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 28) (val :: Word32)

data EventKeyKeyvalFieldInfo
instance AttrInfo EventKeyKeyvalFieldInfo where
    type AttrAllowedOps EventKeyKeyvalFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyKeyvalFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventKeyKeyvalFieldInfo = (~) EventKey
    type AttrGetType EventKeyKeyvalFieldInfo = Word32
    type AttrLabel EventKeyKeyvalFieldInfo = "keyval"
    attrGet _ = eventKeyReadKeyval
    attrSet _ = eventKeyWriteKeyval
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyKeyval :: AttrLabelProxy "keyval"
eventKeyKeyval = AttrLabelProxy


eventKeyReadLength :: MonadIO m => EventKey -> m Int32
eventKeyReadLength s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO Int32
    return val

eventKeyWriteLength :: MonadIO m => EventKey -> Int32 -> m ()
eventKeyWriteLength s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Int32)

data EventKeyLengthFieldInfo
instance AttrInfo EventKeyLengthFieldInfo where
    type AttrAllowedOps EventKeyLengthFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyLengthFieldInfo = (~) Int32
    type AttrBaseTypeConstraint EventKeyLengthFieldInfo = (~) EventKey
    type AttrGetType EventKeyLengthFieldInfo = Int32
    type AttrLabel EventKeyLengthFieldInfo = "length"
    attrGet _ = eventKeyReadLength
    attrSet _ = eventKeyWriteLength
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyLength :: AttrLabelProxy "length"
eventKeyLength = AttrLabelProxy


eventKeyReadString :: MonadIO m => EventKey -> m (Maybe T.Text)
eventKeyReadString s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO CString
    result <- convertIfNonNull val $ \val' -> do
        val'' <- cstringToText val'
        return val''
    return result

eventKeyWriteString :: MonadIO m => EventKey -> CString -> m ()
eventKeyWriteString s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (val :: CString)

eventKeyClearString :: MonadIO m => EventKey -> m ()
eventKeyClearString s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (nullPtr :: CString)

data EventKeyStringFieldInfo
instance AttrInfo EventKeyStringFieldInfo where
    type AttrAllowedOps EventKeyStringFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventKeyStringFieldInfo = (~) CString
    type AttrBaseTypeConstraint EventKeyStringFieldInfo = (~) EventKey
    type AttrGetType EventKeyStringFieldInfo = Maybe T.Text
    type AttrLabel EventKeyStringFieldInfo = "string"
    attrGet _ = eventKeyReadString
    attrSet _ = eventKeyWriteString
    attrConstruct = undefined
    attrClear _ = eventKeyClearString

eventKeyString :: AttrLabelProxy "string"
eventKeyString = AttrLabelProxy


eventKeyReadHardwareKeycode :: MonadIO m => EventKey -> m Word16
eventKeyReadHardwareKeycode s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO Word16
    return val

eventKeyWriteHardwareKeycode :: MonadIO m => EventKey -> Word16 -> m ()
eventKeyWriteHardwareKeycode s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (val :: Word16)

data EventKeyHardwareKeycodeFieldInfo
instance AttrInfo EventKeyHardwareKeycodeFieldInfo where
    type AttrAllowedOps EventKeyHardwareKeycodeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyHardwareKeycodeFieldInfo = (~) Word16
    type AttrBaseTypeConstraint EventKeyHardwareKeycodeFieldInfo = (~) EventKey
    type AttrGetType EventKeyHardwareKeycodeFieldInfo = Word16
    type AttrLabel EventKeyHardwareKeycodeFieldInfo = "hardware_keycode"
    attrGet _ = eventKeyReadHardwareKeycode
    attrSet _ = eventKeyWriteHardwareKeycode
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyHardwareKeycode :: AttrLabelProxy "hardwareKeycode"
eventKeyHardwareKeycode = AttrLabelProxy


eventKeyReadGroup :: MonadIO m => EventKey -> m Word8
eventKeyReadGroup s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 50) :: IO Word8
    return val

eventKeyWriteGroup :: MonadIO m => EventKey -> Word8 -> m ()
eventKeyWriteGroup s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 50) (val :: Word8)

data EventKeyGroupFieldInfo
instance AttrInfo EventKeyGroupFieldInfo where
    type AttrAllowedOps EventKeyGroupFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyGroupFieldInfo = (~) Word8
    type AttrBaseTypeConstraint EventKeyGroupFieldInfo = (~) EventKey
    type AttrGetType EventKeyGroupFieldInfo = Word8
    type AttrLabel EventKeyGroupFieldInfo = "group"
    attrGet _ = eventKeyReadGroup
    attrSet _ = eventKeyWriteGroup
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyGroup :: AttrLabelProxy "group"
eventKeyGroup = AttrLabelProxy


eventKeyReadIsModifier :: MonadIO m => EventKey -> m Word32
eventKeyReadIsModifier s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 52) :: IO Word32
    return val

eventKeyWriteIsModifier :: MonadIO m => EventKey -> Word32 -> m ()
eventKeyWriteIsModifier s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 52) (val :: Word32)

data EventKeyIsModifierFieldInfo
instance AttrInfo EventKeyIsModifierFieldInfo where
    type AttrAllowedOps EventKeyIsModifierFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventKeyIsModifierFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventKeyIsModifierFieldInfo = (~) EventKey
    type AttrGetType EventKeyIsModifierFieldInfo = Word32
    type AttrLabel EventKeyIsModifierFieldInfo = "is_modifier"
    attrGet _ = eventKeyReadIsModifier
    attrSet _ = eventKeyWriteIsModifier
    attrConstruct = undefined
    attrClear _ = undefined

eventKeyIsModifier :: AttrLabelProxy "isModifier"
eventKeyIsModifier = AttrLabelProxy



type instance AttributeList EventKey = EventKeyAttributeList
type EventKeyAttributeList = ('[ '("type", EventKeyTypeFieldInfo), '("window", EventKeyWindowFieldInfo), '("sendEvent", EventKeySendEventFieldInfo), '("time", EventKeyTimeFieldInfo), '("state", EventKeyStateFieldInfo), '("keyval", EventKeyKeyvalFieldInfo), '("length", EventKeyLengthFieldInfo), '("string", EventKeyStringFieldInfo), '("hardwareKeycode", EventKeyHardwareKeycodeFieldInfo), '("group", EventKeyGroupFieldInfo), '("isModifier", EventKeyIsModifierFieldInfo)] :: [(Symbol, *)])

type family ResolveEventKeyMethod (t :: Symbol) (o :: *) :: * where
    ResolveEventKeyMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveEventKeyMethod t EventKey, MethodInfo info EventKey p) => IsLabelProxy t (EventKey -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveEventKeyMethod t EventKey, MethodInfo info EventKey p) => IsLabel t (EventKey -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif