gi-gtk-0.3.18.14: GI/Gtk/Structs/TargetPair.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)
A #GtkTargetPair is used to represent the same
information as a table of #GtkTargetEntry, but in
an efficient form.
-}
module GI.Gtk.Structs.TargetPair
(
-- * Exported types
TargetPair(..) ,
newZeroTargetPair ,
noTargetPair ,
-- * Properties
-- ** Flags
targetPairFlags ,
targetPairReadFlags ,
targetPairWriteFlags ,
-- ** Info
targetPairInfo ,
targetPairReadInfo ,
targetPairWriteInfo ,
-- ** Target
targetPairClearTarget ,
targetPairReadTarget ,
targetPairTarget ,
targetPairWriteTarget ,
) 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.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.Gdk as Gdk
newtype TargetPair = TargetPair (ForeignPtr TargetPair)
-- | Construct a `TargetPair` struct initialized to zero.
newZeroTargetPair :: MonadIO m => m TargetPair
newZeroTargetPair = liftIO $ callocBytes 16 >>= wrapPtr TargetPair
instance tag ~ 'AttrSet => Constructible TargetPair tag where
new _ attrs = do
o <- newZeroTargetPair
GI.Attributes.set o attrs
return o
noTargetPair :: Maybe TargetPair
noTargetPair = Nothing
targetPairReadTarget :: MonadIO m => TargetPair -> m (Maybe Gdk.Atom)
targetPairReadTarget s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gdk.Atom)
result <- convertIfNonNull val $ \val' -> do
-- XXX Wrapping a foreign struct/union with no known destructor, leak?
val'' <- (\x -> Gdk.Atom <$> newForeignPtr_ x) val'
return val''
return result
targetPairWriteTarget :: MonadIO m => TargetPair -> Ptr Gdk.Atom -> m ()
targetPairWriteTarget s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 0) (val :: Ptr Gdk.Atom)
targetPairClearTarget :: MonadIO m => TargetPair -> m ()
targetPairClearTarget s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 0) (nullPtr :: Ptr Gdk.Atom)
data TargetPairTargetFieldInfo
instance AttrInfo TargetPairTargetFieldInfo where
type AttrAllowedOps TargetPairTargetFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint TargetPairTargetFieldInfo = (~) (Ptr Gdk.Atom)
type AttrBaseTypeConstraint TargetPairTargetFieldInfo = (~) TargetPair
type AttrGetType TargetPairTargetFieldInfo = Maybe Gdk.Atom
type AttrLabel TargetPairTargetFieldInfo = "target"
attrGet _ = targetPairReadTarget
attrSet _ = targetPairWriteTarget
attrConstruct = undefined
attrClear _ = targetPairClearTarget
targetPairTarget :: AttrLabelProxy "target"
targetPairTarget = AttrLabelProxy
targetPairReadFlags :: MonadIO m => TargetPair -> m Word32
targetPairReadFlags s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 8) :: IO Word32
return val
targetPairWriteFlags :: MonadIO m => TargetPair -> Word32 -> m ()
targetPairWriteFlags s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 8) (val :: Word32)
data TargetPairFlagsFieldInfo
instance AttrInfo TargetPairFlagsFieldInfo where
type AttrAllowedOps TargetPairFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
type AttrSetTypeConstraint TargetPairFlagsFieldInfo = (~) Word32
type AttrBaseTypeConstraint TargetPairFlagsFieldInfo = (~) TargetPair
type AttrGetType TargetPairFlagsFieldInfo = Word32
type AttrLabel TargetPairFlagsFieldInfo = "flags"
attrGet _ = targetPairReadFlags
attrSet _ = targetPairWriteFlags
attrConstruct = undefined
attrClear _ = undefined
targetPairFlags :: AttrLabelProxy "flags"
targetPairFlags = AttrLabelProxy
targetPairReadInfo :: MonadIO m => TargetPair -> m Word32
targetPairReadInfo s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 12) :: IO Word32
return val
targetPairWriteInfo :: MonadIO m => TargetPair -> Word32 -> m ()
targetPairWriteInfo s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 12) (val :: Word32)
data TargetPairInfoFieldInfo
instance AttrInfo TargetPairInfoFieldInfo where
type AttrAllowedOps TargetPairInfoFieldInfo = '[ 'AttrSet, 'AttrGet]
type AttrSetTypeConstraint TargetPairInfoFieldInfo = (~) Word32
type AttrBaseTypeConstraint TargetPairInfoFieldInfo = (~) TargetPair
type AttrGetType TargetPairInfoFieldInfo = Word32
type AttrLabel TargetPairInfoFieldInfo = "info"
attrGet _ = targetPairReadInfo
attrSet _ = targetPairWriteInfo
attrConstruct = undefined
attrClear _ = undefined
targetPairInfo :: AttrLabelProxy "info"
targetPairInfo = AttrLabelProxy
type instance AttributeList TargetPair = TargetPairAttributeList
type TargetPairAttributeList = ('[ '("target", TargetPairTargetFieldInfo), '("flags", TargetPairFlagsFieldInfo), '("info", TargetPairInfoFieldInfo)] :: [(Symbol, *)])
type family ResolveTargetPairMethod (t :: Symbol) (o :: *) :: * where
ResolveTargetPairMethod l o = MethodResolutionFailed l o
instance (info ~ ResolveTargetPairMethod t TargetPair, MethodInfo info TargetPair p) => IsLabelProxy t (TargetPair -> p) where
fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveTargetPairMethod t TargetPair, MethodInfo info TargetPair p) => IsLabel t (TargetPair -> p) where
fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif