packages feed

gi-gobject-0.2.46.15: GI/GObject/Structs/FlagsValue.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 structure which contains a single flags value, its name, and its
nickname.
-}

module GI.GObject.Structs.FlagsValue
    ( 

-- * Exported types
    FlagsValue(..)                          ,
    newZeroFlagsValue                       ,
    noFlagsValue                            ,


 -- * Properties
-- ** Value
    flagsValueReadValue                     ,
    flagsValueValue                         ,
    flagsValueWriteValue                    ,


-- ** ValueName
    flagsValueClearValueName                ,
    flagsValueReadValueName                 ,
    flagsValueValueName                     ,
    flagsValueWriteValueName                ,


-- ** ValueNick
    flagsValueClearValueNick                ,
    flagsValueReadValueNick                 ,
    flagsValueValueNick                     ,
    flagsValueWriteValueNick                ,




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

newtype FlagsValue = FlagsValue (ForeignPtr FlagsValue)
instance WrappedPtr FlagsValue where
    wrappedPtrCalloc = callocBytes 24
    wrappedPtrCopy = copyPtr 24
    wrappedPtrFree = Just ptr_to_g_free

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

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


noFlagsValue :: Maybe FlagsValue
noFlagsValue = Nothing

flagsValueReadValue :: MonadIO m => FlagsValue -> m Word32
flagsValueReadValue s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

flagsValueWriteValue :: MonadIO m => FlagsValue -> Word32 -> m ()
flagsValueWriteValue s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Word32)

data FlagsValueValueFieldInfo
instance AttrInfo FlagsValueValueFieldInfo where
    type AttrAllowedOps FlagsValueValueFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint FlagsValueValueFieldInfo = (~) Word32
    type AttrBaseTypeConstraint FlagsValueValueFieldInfo = (~) FlagsValue
    type AttrGetType FlagsValueValueFieldInfo = Word32
    type AttrLabel FlagsValueValueFieldInfo = "value"
    attrGet _ = flagsValueReadValue
    attrSet _ = flagsValueWriteValue
    attrConstruct = undefined
    attrClear _ = undefined

flagsValueValue :: AttrLabelProxy "value"
flagsValueValue = AttrLabelProxy


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

flagsValueWriteValueName :: MonadIO m => FlagsValue -> CString -> m ()
flagsValueWriteValueName s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: CString)

flagsValueClearValueName :: MonadIO m => FlagsValue -> m ()
flagsValueClearValueName s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (nullPtr :: CString)

data FlagsValueValueNameFieldInfo
instance AttrInfo FlagsValueValueNameFieldInfo where
    type AttrAllowedOps FlagsValueValueNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FlagsValueValueNameFieldInfo = (~) CString
    type AttrBaseTypeConstraint FlagsValueValueNameFieldInfo = (~) FlagsValue
    type AttrGetType FlagsValueValueNameFieldInfo = Maybe T.Text
    type AttrLabel FlagsValueValueNameFieldInfo = "value_name"
    attrGet _ = flagsValueReadValueName
    attrSet _ = flagsValueWriteValueName
    attrConstruct = undefined
    attrClear _ = flagsValueClearValueName

flagsValueValueName :: AttrLabelProxy "valueName"
flagsValueValueName = AttrLabelProxy


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

flagsValueWriteValueNick :: MonadIO m => FlagsValue -> CString -> m ()
flagsValueWriteValueNick s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: CString)

flagsValueClearValueNick :: MonadIO m => FlagsValue -> m ()
flagsValueClearValueNick s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (nullPtr :: CString)

data FlagsValueValueNickFieldInfo
instance AttrInfo FlagsValueValueNickFieldInfo where
    type AttrAllowedOps FlagsValueValueNickFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FlagsValueValueNickFieldInfo = (~) CString
    type AttrBaseTypeConstraint FlagsValueValueNickFieldInfo = (~) FlagsValue
    type AttrGetType FlagsValueValueNickFieldInfo = Maybe T.Text
    type AttrLabel FlagsValueValueNickFieldInfo = "value_nick"
    attrGet _ = flagsValueReadValueNick
    attrSet _ = flagsValueWriteValueNick
    attrConstruct = undefined
    attrClear _ = flagsValueClearValueNick

flagsValueValueNick :: AttrLabelProxy "valueNick"
flagsValueValueNick = AttrLabelProxy



type instance AttributeList FlagsValue = FlagsValueAttributeList
type FlagsValueAttributeList = ('[ '("value", FlagsValueValueFieldInfo), '("valueName", FlagsValueValueNameFieldInfo), '("valueNick", FlagsValueValueNickFieldInfo)] :: [(Symbol, *)])

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

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

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