packages feed

gi-gdk-0.3.18.15: GI/Gdk/Structs/EventButton.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)

Used for button press and button release events. The
@type field will be one of %GDK_BUTTON_PRESS,
%GDK_2BUTTON_PRESS, %GDK_3BUTTON_PRESS or %GDK_BUTTON_RELEASE,

Double and triple-clicks result in a sequence of events being received.
For double-clicks the order of events will be:

- %GDK_BUTTON_PRESS
- %GDK_BUTTON_RELEASE
- %GDK_BUTTON_PRESS
- %GDK_2BUTTON_PRESS
- %GDK_BUTTON_RELEASE

Note that the first click is received just like a normal
button press, while the second click results in a %GDK_2BUTTON_PRESS
being received just after the %GDK_BUTTON_PRESS.

Triple-clicks are very similar to double-clicks, except that
%GDK_3BUTTON_PRESS is inserted after the third click. The order of the
events is:

- %GDK_BUTTON_PRESS
- %GDK_BUTTON_RELEASE
- %GDK_BUTTON_PRESS
- %GDK_2BUTTON_PRESS
- %GDK_BUTTON_RELEASE
- %GDK_BUTTON_PRESS
- %GDK_3BUTTON_PRESS
- %GDK_BUTTON_RELEASE

For a double click to occur, the second button press must occur within
1/4 of a second of the first. For a triple click to occur, the third
button press must also occur within 1/2 second of the first button press.
-}

module GI.Gdk.Structs.EventButton
    ( 

-- * Exported types
    EventButton(..)                         ,
    newZeroEventButton                      ,
    noEventButton                           ,


 -- * Properties
-- ** Axes
    eventButtonAxes                         ,
    eventButtonReadAxes                     ,
    eventButtonWriteAxes                    ,


-- ** Button
    eventButtonButton                       ,
    eventButtonReadButton                   ,
    eventButtonWriteButton                  ,


-- ** Device
    eventButtonClearDevice                  ,
    eventButtonDevice                       ,
    eventButtonReadDevice                   ,
    eventButtonWriteDevice                  ,


-- ** SendEvent
    eventButtonReadSendEvent                ,
    eventButtonSendEvent                    ,
    eventButtonWriteSendEvent               ,


-- ** State
    eventButtonReadState                    ,
    eventButtonState                        ,
    eventButtonWriteState                   ,


-- ** Time
    eventButtonReadTime                     ,
    eventButtonTime                         ,
    eventButtonWriteTime                    ,


-- ** Type
    eventButtonReadType                     ,
    eventButtonType                         ,
    eventButtonWriteType                    ,


-- ** Window
    eventButtonClearWindow                  ,
    eventButtonReadWindow                   ,
    eventButtonWindow                       ,
    eventButtonWriteWindow                  ,


-- ** X
    eventButtonReadX                        ,
    eventButtonWriteX                       ,
    eventButtonX                            ,


-- ** XRoot
    eventButtonReadXRoot                    ,
    eventButtonWriteXRoot                   ,
    eventButtonXRoot                        ,


-- ** Y
    eventButtonReadY                        ,
    eventButtonWriteY                       ,
    eventButtonY                            ,


-- ** YRoot
    eventButtonReadYRoot                    ,
    eventButtonWriteYRoot                   ,
    eventButtonYRoot                        ,




    ) 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 EventButton = EventButton (ForeignPtr EventButton)
instance WrappedPtr EventButton where
    wrappedPtrCalloc = callocBytes 80
    wrappedPtrCopy = copyPtr 80
    wrappedPtrFree = Just ptr_to_g_free

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

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


noEventButton :: Maybe EventButton
noEventButton = Nothing

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

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

data EventButtonTypeFieldInfo
instance AttrInfo EventButtonTypeFieldInfo where
    type AttrAllowedOps EventButtonTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonTypeFieldInfo = (~) EventType
    type AttrBaseTypeConstraint EventButtonTypeFieldInfo = (~) EventButton
    type AttrGetType EventButtonTypeFieldInfo = EventType
    type AttrLabel EventButtonTypeFieldInfo = "type"
    attrGet _ = eventButtonReadType
    attrSet _ = eventButtonWriteType
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonType :: AttrLabelProxy "type"
eventButtonType = AttrLabelProxy


eventButtonReadWindow :: MonadIO m => EventButton -> m (Maybe Window)
eventButtonReadWindow 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

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

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

data EventButtonWindowFieldInfo
instance AttrInfo EventButtonWindowFieldInfo where
    type AttrAllowedOps EventButtonWindowFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventButtonWindowFieldInfo = (~) (Ptr Window)
    type AttrBaseTypeConstraint EventButtonWindowFieldInfo = (~) EventButton
    type AttrGetType EventButtonWindowFieldInfo = Maybe Window
    type AttrLabel EventButtonWindowFieldInfo = "window"
    attrGet _ = eventButtonReadWindow
    attrSet _ = eventButtonWriteWindow
    attrConstruct = undefined
    attrClear _ = eventButtonClearWindow

eventButtonWindow :: AttrLabelProxy "window"
eventButtonWindow = AttrLabelProxy


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

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

data EventButtonSendEventFieldInfo
instance AttrInfo EventButtonSendEventFieldInfo where
    type AttrAllowedOps EventButtonSendEventFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonSendEventFieldInfo = (~) Int8
    type AttrBaseTypeConstraint EventButtonSendEventFieldInfo = (~) EventButton
    type AttrGetType EventButtonSendEventFieldInfo = Int8
    type AttrLabel EventButtonSendEventFieldInfo = "send_event"
    attrGet _ = eventButtonReadSendEvent
    attrSet _ = eventButtonWriteSendEvent
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonSendEvent :: AttrLabelProxy "sendEvent"
eventButtonSendEvent = AttrLabelProxy


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

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

data EventButtonTimeFieldInfo
instance AttrInfo EventButtonTimeFieldInfo where
    type AttrAllowedOps EventButtonTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonTimeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventButtonTimeFieldInfo = (~) EventButton
    type AttrGetType EventButtonTimeFieldInfo = Word32
    type AttrLabel EventButtonTimeFieldInfo = "time"
    attrGet _ = eventButtonReadTime
    attrSet _ = eventButtonWriteTime
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonTime :: AttrLabelProxy "time"
eventButtonTime = AttrLabelProxy


eventButtonReadX :: MonadIO m => EventButton -> m Double
eventButtonReadX s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO CDouble
    let val' = realToFrac val
    return val'

eventButtonWriteX :: MonadIO m => EventButton -> Double -> m ()
eventButtonWriteX s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 24) (val' :: CDouble)

data EventButtonXFieldInfo
instance AttrInfo EventButtonXFieldInfo where
    type AttrAllowedOps EventButtonXFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonXFieldInfo = (~) Double
    type AttrBaseTypeConstraint EventButtonXFieldInfo = (~) EventButton
    type AttrGetType EventButtonXFieldInfo = Double
    type AttrLabel EventButtonXFieldInfo = "x"
    attrGet _ = eventButtonReadX
    attrSet _ = eventButtonWriteX
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonX :: AttrLabelProxy "x"
eventButtonX = AttrLabelProxy


eventButtonReadY :: MonadIO m => EventButton -> m Double
eventButtonReadY s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO CDouble
    let val' = realToFrac val
    return val'

eventButtonWriteY :: MonadIO m => EventButton -> Double -> m ()
eventButtonWriteY s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 32) (val' :: CDouble)

data EventButtonYFieldInfo
instance AttrInfo EventButtonYFieldInfo where
    type AttrAllowedOps EventButtonYFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonYFieldInfo = (~) Double
    type AttrBaseTypeConstraint EventButtonYFieldInfo = (~) EventButton
    type AttrGetType EventButtonYFieldInfo = Double
    type AttrLabel EventButtonYFieldInfo = "y"
    attrGet _ = eventButtonReadY
    attrSet _ = eventButtonWriteY
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonY :: AttrLabelProxy "y"
eventButtonY = AttrLabelProxy


eventButtonReadAxes :: MonadIO m => EventButton -> m Double
eventButtonReadAxes s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO CDouble
    let val' = realToFrac val
    return val'

eventButtonWriteAxes :: MonadIO m => EventButton -> Double -> m ()
eventButtonWriteAxes s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 40) (val' :: CDouble)

data EventButtonAxesFieldInfo
instance AttrInfo EventButtonAxesFieldInfo where
    type AttrAllowedOps EventButtonAxesFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonAxesFieldInfo = (~) Double
    type AttrBaseTypeConstraint EventButtonAxesFieldInfo = (~) EventButton
    type AttrGetType EventButtonAxesFieldInfo = Double
    type AttrLabel EventButtonAxesFieldInfo = "axes"
    attrGet _ = eventButtonReadAxes
    attrSet _ = eventButtonWriteAxes
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonAxes :: AttrLabelProxy "axes"
eventButtonAxes = AttrLabelProxy


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

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

data EventButtonStateFieldInfo
instance AttrInfo EventButtonStateFieldInfo where
    type AttrAllowedOps EventButtonStateFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonStateFieldInfo = (~) [ModifierType]
    type AttrBaseTypeConstraint EventButtonStateFieldInfo = (~) EventButton
    type AttrGetType EventButtonStateFieldInfo = [ModifierType]
    type AttrLabel EventButtonStateFieldInfo = "state"
    attrGet _ = eventButtonReadState
    attrSet _ = eventButtonWriteState
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonState :: AttrLabelProxy "state"
eventButtonState = AttrLabelProxy


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

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

data EventButtonButtonFieldInfo
instance AttrInfo EventButtonButtonFieldInfo where
    type AttrAllowedOps EventButtonButtonFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonButtonFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventButtonButtonFieldInfo = (~) EventButton
    type AttrGetType EventButtonButtonFieldInfo = Word32
    type AttrLabel EventButtonButtonFieldInfo = "button"
    attrGet _ = eventButtonReadButton
    attrSet _ = eventButtonWriteButton
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonButton :: AttrLabelProxy "button"
eventButtonButton = AttrLabelProxy


eventButtonReadDevice :: MonadIO m => EventButton -> m (Maybe Device)
eventButtonReadDevice s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 56) :: IO (Ptr Device)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newObject Device) val'
        return val''
    return result

eventButtonWriteDevice :: MonadIO m => EventButton -> Ptr Device -> m ()
eventButtonWriteDevice s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 56) (val :: Ptr Device)

eventButtonClearDevice :: MonadIO m => EventButton -> m ()
eventButtonClearDevice s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 56) (nullPtr :: Ptr Device)

data EventButtonDeviceFieldInfo
instance AttrInfo EventButtonDeviceFieldInfo where
    type AttrAllowedOps EventButtonDeviceFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventButtonDeviceFieldInfo = (~) (Ptr Device)
    type AttrBaseTypeConstraint EventButtonDeviceFieldInfo = (~) EventButton
    type AttrGetType EventButtonDeviceFieldInfo = Maybe Device
    type AttrLabel EventButtonDeviceFieldInfo = "device"
    attrGet _ = eventButtonReadDevice
    attrSet _ = eventButtonWriteDevice
    attrConstruct = undefined
    attrClear _ = eventButtonClearDevice

eventButtonDevice :: AttrLabelProxy "device"
eventButtonDevice = AttrLabelProxy


eventButtonReadXRoot :: MonadIO m => EventButton -> m Double
eventButtonReadXRoot s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 64) :: IO CDouble
    let val' = realToFrac val
    return val'

eventButtonWriteXRoot :: MonadIO m => EventButton -> Double -> m ()
eventButtonWriteXRoot s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 64) (val' :: CDouble)

data EventButtonXRootFieldInfo
instance AttrInfo EventButtonXRootFieldInfo where
    type AttrAllowedOps EventButtonXRootFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonXRootFieldInfo = (~) Double
    type AttrBaseTypeConstraint EventButtonXRootFieldInfo = (~) EventButton
    type AttrGetType EventButtonXRootFieldInfo = Double
    type AttrLabel EventButtonXRootFieldInfo = "x_root"
    attrGet _ = eventButtonReadXRoot
    attrSet _ = eventButtonWriteXRoot
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonXRoot :: AttrLabelProxy "xRoot"
eventButtonXRoot = AttrLabelProxy


eventButtonReadYRoot :: MonadIO m => EventButton -> m Double
eventButtonReadYRoot s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 72) :: IO CDouble
    let val' = realToFrac val
    return val'

eventButtonWriteYRoot :: MonadIO m => EventButton -> Double -> m ()
eventButtonWriteYRoot s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 72) (val' :: CDouble)

data EventButtonYRootFieldInfo
instance AttrInfo EventButtonYRootFieldInfo where
    type AttrAllowedOps EventButtonYRootFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventButtonYRootFieldInfo = (~) Double
    type AttrBaseTypeConstraint EventButtonYRootFieldInfo = (~) EventButton
    type AttrGetType EventButtonYRootFieldInfo = Double
    type AttrLabel EventButtonYRootFieldInfo = "y_root"
    attrGet _ = eventButtonReadYRoot
    attrSet _ = eventButtonWriteYRoot
    attrConstruct = undefined
    attrClear _ = undefined

eventButtonYRoot :: AttrLabelProxy "yRoot"
eventButtonYRoot = AttrLabelProxy



type instance AttributeList EventButton = EventButtonAttributeList
type EventButtonAttributeList = ('[ '("type", EventButtonTypeFieldInfo), '("window", EventButtonWindowFieldInfo), '("sendEvent", EventButtonSendEventFieldInfo), '("time", EventButtonTimeFieldInfo), '("x", EventButtonXFieldInfo), '("y", EventButtonYFieldInfo), '("axes", EventButtonAxesFieldInfo), '("state", EventButtonStateFieldInfo), '("button", EventButtonButtonFieldInfo), '("device", EventButtonDeviceFieldInfo), '("xRoot", EventButtonXRootFieldInfo), '("yRoot", EventButtonYRootFieldInfo)] :: [(Symbol, *)])

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

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

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