packages feed

gi-atk-0.2.18.13: GI/Atk/Objects/Relation.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)
-}

module GI.Atk.Objects.Relation
    ( 

-- * Exported types
    Relation(..)                            ,
    RelationK                               ,
    toRelation                              ,
    noRelation                              ,


 -- * Methods
-- ** relationAddTarget
    RelationAddTargetMethodInfo             ,
    relationAddTarget                       ,


-- ** relationGetRelationType
    RelationGetRelationTypeMethodInfo       ,
    relationGetRelationType                 ,


-- ** relationGetTarget
    RelationGetTargetMethodInfo             ,
    relationGetTarget                       ,


-- ** relationNew
    relationNew                             ,


-- ** relationRemoveTarget
    RelationRemoveTargetMethodInfo          ,
    relationRemoveTarget                    ,




 -- * Properties
-- ** RelationType
    RelationRelationTypePropertyInfo        ,
    constructRelationRelationType           ,
    getRelationRelationType                 ,
    setRelationRelationType                 ,


-- ** Target
    RelationTargetPropertyInfo              ,
    constructRelationTarget                 ,
    getRelationTarget                       ,
    setRelationTarget                       ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

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
import qualified GI.GObject as GObject

newtype Relation = Relation (ForeignPtr Relation)
foreign import ccall "atk_relation_get_type"
    c_atk_relation_get_type :: IO GType

type instance ParentTypes Relation = RelationParentTypes
type RelationParentTypes = '[GObject.Object]

instance GObject Relation where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_atk_relation_get_type
    

class GObject o => RelationK o
instance (GObject o, IsDescendantOf Relation o) => RelationK o

toRelation :: RelationK o => o -> IO Relation
toRelation = unsafeCastTo Relation

noRelation :: Maybe Relation
noRelation = Nothing

type family ResolveRelationMethod (t :: Symbol) (o :: *) :: * where
    ResolveRelationMethod "addTarget" o = RelationAddTargetMethodInfo
    ResolveRelationMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
    ResolveRelationMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
    ResolveRelationMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
    ResolveRelationMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
    ResolveRelationMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
    ResolveRelationMethod "notify" o = GObject.ObjectNotifyMethodInfo
    ResolveRelationMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
    ResolveRelationMethod "ref" o = GObject.ObjectRefMethodInfo
    ResolveRelationMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
    ResolveRelationMethod "removeTarget" o = RelationRemoveTargetMethodInfo
    ResolveRelationMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
    ResolveRelationMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
    ResolveRelationMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
    ResolveRelationMethod "stealData" o = GObject.ObjectStealDataMethodInfo
    ResolveRelationMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
    ResolveRelationMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
    ResolveRelationMethod "unref" o = GObject.ObjectUnrefMethodInfo
    ResolveRelationMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
    ResolveRelationMethod "getData" o = GObject.ObjectGetDataMethodInfo
    ResolveRelationMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
    ResolveRelationMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
    ResolveRelationMethod "getRelationType" o = RelationGetRelationTypeMethodInfo
    ResolveRelationMethod "getTarget" o = RelationGetTargetMethodInfo
    ResolveRelationMethod "setData" o = GObject.ObjectSetDataMethodInfo
    ResolveRelationMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
    ResolveRelationMethod l o = MethodResolutionFailed l o

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

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

-- VVV Prop "relation-type"
   -- Type: TInterface "Atk" "RelationType"
   -- Flags: [PropertyReadable,PropertyWritable]

getRelationRelationType :: (MonadIO m, RelationK o) => o -> m RelationType
getRelationRelationType obj = liftIO $ getObjectPropertyEnum obj "relation-type"

setRelationRelationType :: (MonadIO m, RelationK o) => o -> RelationType -> m ()
setRelationRelationType obj val = liftIO $ setObjectPropertyEnum obj "relation-type" val

constructRelationRelationType :: RelationType -> IO ([Char], GValue)
constructRelationRelationType val = constructObjectPropertyEnum "relation-type" val

data RelationRelationTypePropertyInfo
instance AttrInfo RelationRelationTypePropertyInfo where
    type AttrAllowedOps RelationRelationTypePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint RelationRelationTypePropertyInfo = (~) RelationType
    type AttrBaseTypeConstraint RelationRelationTypePropertyInfo = RelationK
    type AttrGetType RelationRelationTypePropertyInfo = RelationType
    type AttrLabel RelationRelationTypePropertyInfo = "relation-type"
    attrGet _ = getRelationRelationType
    attrSet _ = setRelationRelationType
    attrConstruct _ = constructRelationRelationType

-- VVV Prop "target"
   -- Type: TInterface "GObject" "ValueArray"
   -- Flags: [PropertyReadable,PropertyWritable]

getRelationTarget :: (MonadIO m, RelationK o) => o -> m GObject.ValueArray
getRelationTarget obj = liftIO $ getObjectPropertyBoxed obj "target" GObject.ValueArray

setRelationTarget :: (MonadIO m, RelationK o) => o -> GObject.ValueArray -> m ()
setRelationTarget obj val = liftIO $ setObjectPropertyBoxed obj "target" val

constructRelationTarget :: GObject.ValueArray -> IO ([Char], GValue)
constructRelationTarget val = constructObjectPropertyBoxed "target" val

data RelationTargetPropertyInfo
instance AttrInfo RelationTargetPropertyInfo where
    type AttrAllowedOps RelationTargetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint RelationTargetPropertyInfo = (~) GObject.ValueArray
    type AttrBaseTypeConstraint RelationTargetPropertyInfo = RelationK
    type AttrGetType RelationTargetPropertyInfo = GObject.ValueArray
    type AttrLabel RelationTargetPropertyInfo = "target"
    attrGet _ = getRelationTarget
    attrSet _ = setRelationTarget
    attrConstruct _ = constructRelationTarget

type instance AttributeList Relation = RelationAttributeList
type RelationAttributeList = ('[ '("relationType", RelationRelationTypePropertyInfo), '("target", RelationTargetPropertyInfo)] :: [(Symbol, *)])

type instance SignalList Relation = RelationSignalList
type RelationSignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Relation::new
-- method type : Constructor
-- Args : [Arg {argCName = "targets", argType = TCArray False (-1) 1 (TInterface "Atk" "Object"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_targets", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "relationship", argType = TInterface "Atk" "RelationType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "n_targets", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TInterface "Atk" "Relation"
-- throws : False
-- Skip return : False

foreign import ccall "atk_relation_new" atk_relation_new :: 
    Ptr (Ptr Object) ->                     -- targets : TCArray False (-1) 1 (TInterface "Atk" "Object")
    Int32 ->                                -- n_targets : TBasicType TInt32
    CUInt ->                                -- relationship : TInterface "Atk" "RelationType"
    IO (Ptr Relation)


relationNew ::
    (MonadIO m) =>
    [Object]                                -- targets
    -> RelationType                         -- relationship
    -> m Relation                           -- result
relationNew targets relationship = liftIO $ do
    let nTargets = fromIntegral $ length targets
    let targets' = map unsafeManagedPtrCastPtr targets
    targets'' <- packPtrArray targets'
    let relationship' = (fromIntegral . fromEnum) relationship
    result <- atk_relation_new targets'' nTargets relationship'
    checkUnexpectedReturnNULL "atk_relation_new" result
    result' <- (wrapObject Relation) result
    mapM_ touchManagedPtr targets
    freeMem targets''
    return result'

-- method Relation::add_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Atk" "Relation", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target", argType = TInterface "Atk" "Object", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "atk_relation_add_target" atk_relation_add_target :: 
    Ptr Relation ->                         -- _obj : TInterface "Atk" "Relation"
    Ptr Object ->                           -- target : TInterface "Atk" "Object"
    IO ()


relationAddTarget ::
    (MonadIO m, RelationK a, ObjectK b) =>
    a                                       -- _obj
    -> b                                    -- target
    -> m ()                                 -- result
relationAddTarget _obj target = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let target' = unsafeManagedPtrCastPtr target
    atk_relation_add_target _obj' target'
    touchManagedPtr _obj
    touchManagedPtr target
    return ()

data RelationAddTargetMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, RelationK a, ObjectK b) => MethodInfo RelationAddTargetMethodInfo a signature where
    overloadedMethod _ = relationAddTarget

-- method Relation::get_relation_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Atk" "Relation", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Atk" "RelationType"
-- throws : False
-- Skip return : False

foreign import ccall "atk_relation_get_relation_type" atk_relation_get_relation_type :: 
    Ptr Relation ->                         -- _obj : TInterface "Atk" "Relation"
    IO CUInt


relationGetRelationType ::
    (MonadIO m, RelationK a) =>
    a                                       -- _obj
    -> m RelationType                       -- result
relationGetRelationType _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_relation_get_relation_type _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

data RelationGetRelationTypeMethodInfo
instance (signature ~ (m RelationType), MonadIO m, RelationK a) => MethodInfo RelationGetRelationTypeMethodInfo a signature where
    overloadedMethod _ = relationGetRelationType

-- method Relation::get_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Atk" "Relation", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TPtrArray (TInterface "Atk" "Object")
-- throws : False
-- Skip return : False

foreign import ccall "atk_relation_get_target" atk_relation_get_target :: 
    Ptr Relation ->                         -- _obj : TInterface "Atk" "Relation"
    IO (Ptr (GPtrArray (Ptr Object)))


relationGetTarget ::
    (MonadIO m, RelationK a) =>
    a                                       -- _obj
    -> m [Object]                           -- result
relationGetTarget _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- atk_relation_get_target _obj'
    checkUnexpectedReturnNULL "atk_relation_get_target" result
    result' <- unpackGPtrArray result
    result'' <- mapM (newObject Object) result'
    touchManagedPtr _obj
    return result''

data RelationGetTargetMethodInfo
instance (signature ~ (m [Object]), MonadIO m, RelationK a) => MethodInfo RelationGetTargetMethodInfo a signature where
    overloadedMethod _ = relationGetTarget

-- method Relation::remove_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Atk" "Relation", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target", argType = TInterface "Atk" "Object", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "atk_relation_remove_target" atk_relation_remove_target :: 
    Ptr Relation ->                         -- _obj : TInterface "Atk" "Relation"
    Ptr Object ->                           -- target : TInterface "Atk" "Object"
    IO CInt


relationRemoveTarget ::
    (MonadIO m, RelationK a, ObjectK b) =>
    a                                       -- _obj
    -> b                                    -- target
    -> m Bool                               -- result
relationRemoveTarget _obj target = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let target' = unsafeManagedPtrCastPtr target
    result <- atk_relation_remove_target _obj' target'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr target
    return result'

data RelationRemoveTargetMethodInfo
instance (signature ~ (b -> m Bool), MonadIO m, RelationK a, ObjectK b) => MethodInfo RelationRemoveTargetMethodInfo a signature where
    overloadedMethod _ = relationRemoveTarget