packages feed

gi-atk-0.2.18.15: GI/Atk/Structs/PropertyValues.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)

Note: @old_value field of #AtkPropertyValues will not contain a
valid value. This is a field defined with the purpose of contain
the previous value of the property, but is not used anymore.
-}

module GI.Atk.Structs.PropertyValues
    ( 

-- * Exported types
    PropertyValues(..)                      ,
    newZeroPropertyValues                   ,
    noPropertyValues                        ,


 -- * Properties
-- ** NewValue
    propertyValuesClearNewValue             ,
    propertyValuesNewValue                  ,
    propertyValuesReadNewValue              ,
    propertyValuesWriteNewValue             ,


-- ** OldValue
    propertyValuesClearOldValue             ,
    propertyValuesOldValue                  ,
    propertyValuesReadOldValue              ,
    propertyValuesWriteOldValue             ,


-- ** PropertyName
    propertyValuesClearPropertyName         ,
    propertyValuesPropertyName              ,
    propertyValuesReadPropertyName          ,
    propertyValuesWritePropertyName         ,




    ) 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.Atk.Types
import GI.Atk.Callbacks

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

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

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


noPropertyValues :: Maybe PropertyValues
noPropertyValues = Nothing

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

propertyValuesWritePropertyName :: MonadIO m => PropertyValues -> CString -> m ()
propertyValuesWritePropertyName s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: CString)

propertyValuesClearPropertyName :: MonadIO m => PropertyValues -> m ()
propertyValuesClearPropertyName s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (nullPtr :: CString)

data PropertyValuesPropertyNameFieldInfo
instance AttrInfo PropertyValuesPropertyNameFieldInfo where
    type AttrAllowedOps PropertyValuesPropertyNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint PropertyValuesPropertyNameFieldInfo = (~) CString
    type AttrBaseTypeConstraint PropertyValuesPropertyNameFieldInfo = (~) PropertyValues
    type AttrGetType PropertyValuesPropertyNameFieldInfo = Maybe T.Text
    type AttrLabel PropertyValuesPropertyNameFieldInfo = "property_name"
    attrGet _ = propertyValuesReadPropertyName
    attrSet _ = propertyValuesWritePropertyName
    attrConstruct = undefined
    attrClear _ = propertyValuesClearPropertyName

propertyValuesPropertyName :: AttrLabelProxy "propertyName"
propertyValuesPropertyName = AttrLabelProxy


propertyValuesReadOldValue :: MonadIO m => PropertyValues -> m (Maybe GValue)
propertyValuesReadOldValue s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO (Ptr GValue)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newBoxed GValue) val'
        return val''
    return result

propertyValuesWriteOldValue :: MonadIO m => PropertyValues -> Ptr GValue -> m ()
propertyValuesWriteOldValue s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Ptr GValue)

propertyValuesClearOldValue :: MonadIO m => PropertyValues -> m ()
propertyValuesClearOldValue s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (nullPtr :: Ptr GValue)

data PropertyValuesOldValueFieldInfo
instance AttrInfo PropertyValuesOldValueFieldInfo where
    type AttrAllowedOps PropertyValuesOldValueFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint PropertyValuesOldValueFieldInfo = (~) (Ptr GValue)
    type AttrBaseTypeConstraint PropertyValuesOldValueFieldInfo = (~) PropertyValues
    type AttrGetType PropertyValuesOldValueFieldInfo = Maybe GValue
    type AttrLabel PropertyValuesOldValueFieldInfo = "old_value"
    attrGet _ = propertyValuesReadOldValue
    attrSet _ = propertyValuesWriteOldValue
    attrConstruct = undefined
    attrClear _ = propertyValuesClearOldValue

propertyValuesOldValue :: AttrLabelProxy "oldValue"
propertyValuesOldValue = AttrLabelProxy


propertyValuesReadNewValue :: MonadIO m => PropertyValues -> m (Maybe GValue)
propertyValuesReadNewValue s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO (Ptr GValue)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newBoxed GValue) val'
        return val''
    return result

propertyValuesWriteNewValue :: MonadIO m => PropertyValues -> Ptr GValue -> m ()
propertyValuesWriteNewValue s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Ptr GValue)

propertyValuesClearNewValue :: MonadIO m => PropertyValues -> m ()
propertyValuesClearNewValue s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (nullPtr :: Ptr GValue)

data PropertyValuesNewValueFieldInfo
instance AttrInfo PropertyValuesNewValueFieldInfo where
    type AttrAllowedOps PropertyValuesNewValueFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint PropertyValuesNewValueFieldInfo = (~) (Ptr GValue)
    type AttrBaseTypeConstraint PropertyValuesNewValueFieldInfo = (~) PropertyValues
    type AttrGetType PropertyValuesNewValueFieldInfo = Maybe GValue
    type AttrLabel PropertyValuesNewValueFieldInfo = "new_value"
    attrGet _ = propertyValuesReadNewValue
    attrSet _ = propertyValuesWriteNewValue
    attrConstruct = undefined
    attrClear _ = propertyValuesClearNewValue

propertyValuesNewValue :: AttrLabelProxy "newValue"
propertyValuesNewValue = AttrLabelProxy



type instance AttributeList PropertyValues = PropertyValuesAttributeList
type PropertyValuesAttributeList = ('[ '("propertyName", PropertyValuesPropertyNameFieldInfo), '("oldValue", PropertyValuesOldValueFieldInfo), '("newValue", PropertyValuesNewValueFieldInfo)] :: [(Symbol, *)])

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

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

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