{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) Acts as a lightweight registry for possible valid file attributes. The registry stores Key-Value pair formats as @/GFileAttributeInfos/@. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gio.Structs.FileAttributeInfoList ( -- * Exported types FileAttributeInfoList(..) , newZeroFileAttributeInfoList , noFileAttributeInfoList , -- * Methods -- ** add #method:add# #if ENABLE_OVERLOADING FileAttributeInfoListAddMethodInfo , #endif fileAttributeInfoListAdd , -- ** dup #method:dup# #if ENABLE_OVERLOADING FileAttributeInfoListDupMethodInfo , #endif fileAttributeInfoListDup , -- ** lookup #method:lookup# #if ENABLE_OVERLOADING FileAttributeInfoListLookupMethodInfo , #endif fileAttributeInfoListLookup , -- ** new #method:new# fileAttributeInfoListNew , -- ** ref #method:ref# #if ENABLE_OVERLOADING FileAttributeInfoListRefMethodInfo , #endif fileAttributeInfoListRef , -- ** unref #method:unref# #if ENABLE_OVERLOADING FileAttributeInfoListUnrefMethodInfo , #endif fileAttributeInfoListUnref , -- * Properties -- ** infos #attr:infos# {- | an array of @/GFileAttributeInfos/@. -} clearFileAttributeInfoListInfos , #if ENABLE_OVERLOADING fileAttributeInfoList_infos , #endif getFileAttributeInfoListInfos , setFileAttributeInfoListInfos , -- ** nInfos #attr:nInfos# {- | the number of values in the array. -} #if ENABLE_OVERLOADING fileAttributeInfoList_nInfos , #endif getFileAttributeInfoListNInfos , setFileAttributeInfoListNInfos , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import {-# SOURCE #-} qualified GI.Gio.Enums as Gio.Enums import {-# SOURCE #-} qualified GI.Gio.Flags as Gio.Flags import {-# SOURCE #-} qualified GI.Gio.Structs.FileAttributeInfo as Gio.FileAttributeInfo -- | Memory-managed wrapper type. newtype FileAttributeInfoList = FileAttributeInfoList (ManagedPtr FileAttributeInfoList) foreign import ccall "g_file_attribute_info_list_get_type" c_g_file_attribute_info_list_get_type :: IO GType instance BoxedObject FileAttributeInfoList where boxedType _ = c_g_file_attribute_info_list_get_type -- | Construct a `FileAttributeInfoList` struct initialized to zero. newZeroFileAttributeInfoList :: MonadIO m => m FileAttributeInfoList newZeroFileAttributeInfoList = liftIO $ callocBoxedBytes 16 >>= wrapBoxed FileAttributeInfoList instance tag ~ 'AttrSet => Constructible FileAttributeInfoList tag where new _ attrs = do o <- newZeroFileAttributeInfoList GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `FileAttributeInfoList`. noFileAttributeInfoList :: Maybe FileAttributeInfoList noFileAttributeInfoList = Nothing {- | Get the value of the “@infos@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' fileAttributeInfoList #infos @ -} getFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> m (Maybe Gio.FileAttributeInfo.FileAttributeInfo) getFileAttributeInfoListInfos s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gio.FileAttributeInfo.FileAttributeInfo) result <- SP.convertIfNonNull val $ \val' -> do val'' <- (newPtr Gio.FileAttributeInfo.FileAttributeInfo) val' return val'' return result {- | Set the value of the “@infos@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' fileAttributeInfoList [ #infos 'Data.GI.Base.Attributes.:=' value ] @ -} setFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> Ptr Gio.FileAttributeInfo.FileAttributeInfo -> m () setFileAttributeInfoListInfos s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Ptr Gio.FileAttributeInfo.FileAttributeInfo) {- | Set the value of the “@infos@” field to `Nothing`. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.clear' #infos @ -} clearFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> m () clearFileAttributeInfoListInfos s = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr Gio.FileAttributeInfo.FileAttributeInfo) #if ENABLE_OVERLOADING data FileAttributeInfoListInfosFieldInfo instance AttrInfo FileAttributeInfoListInfosFieldInfo where type AttrAllowedOps FileAttributeInfoListInfosFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear] type AttrSetTypeConstraint FileAttributeInfoListInfosFieldInfo = (~) (Ptr Gio.FileAttributeInfo.FileAttributeInfo) type AttrBaseTypeConstraint FileAttributeInfoListInfosFieldInfo = (~) FileAttributeInfoList type AttrGetType FileAttributeInfoListInfosFieldInfo = Maybe Gio.FileAttributeInfo.FileAttributeInfo type AttrLabel FileAttributeInfoListInfosFieldInfo = "infos" type AttrOrigin FileAttributeInfoListInfosFieldInfo = FileAttributeInfoList attrGet _ = getFileAttributeInfoListInfos attrSet _ = setFileAttributeInfoListInfos attrConstruct = undefined attrClear _ = clearFileAttributeInfoListInfos fileAttributeInfoList_infos :: AttrLabelProxy "infos" fileAttributeInfoList_infos = AttrLabelProxy #endif {- | Get the value of the “@n_infos@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' fileAttributeInfoList #nInfos @ -} getFileAttributeInfoListNInfos :: MonadIO m => FileAttributeInfoList -> m Int32 getFileAttributeInfoListNInfos s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO Int32 return val {- | Set the value of the “@n_infos@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' fileAttributeInfoList [ #nInfos 'Data.GI.Base.Attributes.:=' value ] @ -} setFileAttributeInfoListNInfos :: MonadIO m => FileAttributeInfoList -> Int32 -> m () setFileAttributeInfoListNInfos s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: Int32) #if ENABLE_OVERLOADING data FileAttributeInfoListNInfosFieldInfo instance AttrInfo FileAttributeInfoListNInfosFieldInfo where type AttrAllowedOps FileAttributeInfoListNInfosFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint FileAttributeInfoListNInfosFieldInfo = (~) Int32 type AttrBaseTypeConstraint FileAttributeInfoListNInfosFieldInfo = (~) FileAttributeInfoList type AttrGetType FileAttributeInfoListNInfosFieldInfo = Int32 type AttrLabel FileAttributeInfoListNInfosFieldInfo = "n_infos" type AttrOrigin FileAttributeInfoListNInfosFieldInfo = FileAttributeInfoList attrGet _ = getFileAttributeInfoListNInfos attrSet _ = setFileAttributeInfoListNInfos attrConstruct = undefined attrClear _ = undefined fileAttributeInfoList_nInfos :: AttrLabelProxy "nInfos" fileAttributeInfoList_nInfos = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList FileAttributeInfoList type instance O.AttributeList FileAttributeInfoList = FileAttributeInfoListAttributeList type FileAttributeInfoListAttributeList = ('[ '("infos", FileAttributeInfoListInfosFieldInfo), '("nInfos", FileAttributeInfoListNInfosFieldInfo)] :: [(Symbol, *)]) #endif -- method FileAttributeInfoList::new -- method type : Constructor -- Args : [] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})) -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_new" g_file_attribute_info_list_new :: IO (Ptr FileAttributeInfoList) {- | Creates a new file attribute info list. -} fileAttributeInfoListNew :: (B.CallStack.HasCallStack, MonadIO m) => m FileAttributeInfoList {- ^ __Returns:__ a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -} fileAttributeInfoListNew = liftIO $ do result <- g_file_attribute_info_list_new checkUnexpectedReturnNULL "fileAttributeInfoListNew" result result' <- (wrapBoxed FileAttributeInfoList) result return result' #if ENABLE_OVERLOADING #endif -- method FileAttributeInfoList::add -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the attribute to add.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "type", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GFileAttributeType for the attribute.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GFileAttributeInfoFlags for the attribute.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_add" g_file_attribute_info_list_add :: Ptr FileAttributeInfoList -> -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}) CString -> -- name : TBasicType TUTF8 CUInt -> -- type : TInterface (Name {namespace = "Gio", name = "FileAttributeType"}) CUInt -> -- flags : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoFlags"}) IO () {- | Adds a new attribute with /@name@/ to the /@list@/, setting its /@type@/ and /@flags@/. -} fileAttributeInfoListAdd :: (B.CallStack.HasCallStack, MonadIO m) => FileAttributeInfoList {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -} -> T.Text {- ^ /@name@/: the name of the attribute to add. -} -> Gio.Enums.FileAttributeType {- ^ /@type@/: the 'GI.Gio.Enums.FileAttributeType' for the attribute. -} -> [Gio.Flags.FileAttributeInfoFlags] {- ^ /@flags@/: 'GI.Gio.Flags.FileAttributeInfoFlags' for the attribute. -} -> m () fileAttributeInfoListAdd list name type_ flags = liftIO $ do list' <- unsafeManagedPtrGetPtr list name' <- textToCString name let type_' = (fromIntegral . fromEnum) type_ let flags' = gflagsToWord flags g_file_attribute_info_list_add list' name' type_' flags' touchManagedPtr list freeMem name' return () #if ENABLE_OVERLOADING data FileAttributeInfoListAddMethodInfo instance (signature ~ (T.Text -> Gio.Enums.FileAttributeType -> [Gio.Flags.FileAttributeInfoFlags] -> m ()), MonadIO m) => O.MethodInfo FileAttributeInfoListAddMethodInfo FileAttributeInfoList signature where overloadedMethod _ = fileAttributeInfoListAdd #endif -- method FileAttributeInfoList::dup -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList to duplicate.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})) -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_dup" g_file_attribute_info_list_dup :: Ptr FileAttributeInfoList -> -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}) IO (Ptr FileAttributeInfoList) {- | Makes a duplicate of a file attribute info list. -} fileAttributeInfoListDup :: (B.CallStack.HasCallStack, MonadIO m) => FileAttributeInfoList {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to duplicate. -} -> m FileAttributeInfoList {- ^ __Returns:__ a copy of the given /@list@/. -} fileAttributeInfoListDup list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- g_file_attribute_info_list_dup list' checkUnexpectedReturnNULL "fileAttributeInfoListDup" result result' <- (wrapBoxed FileAttributeInfoList) result touchManagedPtr list return result' #if ENABLE_OVERLOADING data FileAttributeInfoListDupMethodInfo instance (signature ~ (m FileAttributeInfoList), MonadIO m) => O.MethodInfo FileAttributeInfoListDupMethodInfo FileAttributeInfoList signature where overloadedMethod _ = fileAttributeInfoListDup #endif -- method FileAttributeInfoList::lookup -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the attribute to lookup.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfo"})) -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_lookup" g_file_attribute_info_list_lookup :: Ptr FileAttributeInfoList -> -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}) CString -> -- name : TBasicType TUTF8 IO (Ptr Gio.FileAttributeInfo.FileAttributeInfo) {- | Gets the file attribute with the name /@name@/ from /@list@/. -} fileAttributeInfoListLookup :: (B.CallStack.HasCallStack, MonadIO m) => FileAttributeInfoList {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -} -> T.Text {- ^ /@name@/: the name of the attribute to lookup. -} -> m Gio.FileAttributeInfo.FileAttributeInfo {- ^ __Returns:__ a 'GI.Gio.Structs.FileAttributeInfo.FileAttributeInfo' for the /@name@/, or 'Nothing' if an attribute isn\'t found. -} fileAttributeInfoListLookup list name = liftIO $ do list' <- unsafeManagedPtrGetPtr list name' <- textToCString name result <- g_file_attribute_info_list_lookup list' name' checkUnexpectedReturnNULL "fileAttributeInfoListLookup" result result' <- (newPtr Gio.FileAttributeInfo.FileAttributeInfo) result touchManagedPtr list freeMem name' return result' #if ENABLE_OVERLOADING data FileAttributeInfoListLookupMethodInfo instance (signature ~ (T.Text -> m Gio.FileAttributeInfo.FileAttributeInfo), MonadIO m) => O.MethodInfo FileAttributeInfoListLookupMethodInfo FileAttributeInfoList signature where overloadedMethod _ = fileAttributeInfoListLookup #endif -- method FileAttributeInfoList::ref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList to reference.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})) -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_ref" g_file_attribute_info_list_ref :: Ptr FileAttributeInfoList -> -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}) IO (Ptr FileAttributeInfoList) {- | References a file attribute info list. -} fileAttributeInfoListRef :: (B.CallStack.HasCallStack, MonadIO m) => FileAttributeInfoList {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to reference. -} -> m FileAttributeInfoList {- ^ __Returns:__ 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' or 'Nothing' on error. -} fileAttributeInfoListRef list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- g_file_attribute_info_list_ref list' checkUnexpectedReturnNULL "fileAttributeInfoListRef" result result' <- (wrapBoxed FileAttributeInfoList) result touchManagedPtr list return result' #if ENABLE_OVERLOADING data FileAttributeInfoListRefMethodInfo instance (signature ~ (m FileAttributeInfoList), MonadIO m) => O.MethodInfo FileAttributeInfoListRefMethodInfo FileAttributeInfoList signature where overloadedMethod _ = fileAttributeInfoListRef #endif -- method FileAttributeInfoList::unref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The #GFileAttributeInfoList to unreference.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_file_attribute_info_list_unref" g_file_attribute_info_list_unref :: Ptr FileAttributeInfoList -> -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}) IO () {- | Removes a reference from the given /@list@/. If the reference count falls to zero, the /@list@/ is deleted. -} fileAttributeInfoListUnref :: (B.CallStack.HasCallStack, MonadIO m) => FileAttributeInfoList {- ^ /@list@/: The 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to unreference. -} -> m () fileAttributeInfoListUnref list = liftIO $ do list' <- unsafeManagedPtrGetPtr list g_file_attribute_info_list_unref list' touchManagedPtr list return () #if ENABLE_OVERLOADING data FileAttributeInfoListUnrefMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo FileAttributeInfoListUnrefMethodInfo FileAttributeInfoList signature where overloadedMethod _ = fileAttributeInfoListUnref #endif #if ENABLE_OVERLOADING type family ResolveFileAttributeInfoListMethod (t :: Symbol) (o :: *) :: * where ResolveFileAttributeInfoListMethod "add" o = FileAttributeInfoListAddMethodInfo ResolveFileAttributeInfoListMethod "dup" o = FileAttributeInfoListDupMethodInfo ResolveFileAttributeInfoListMethod "lookup" o = FileAttributeInfoListLookupMethodInfo ResolveFileAttributeInfoListMethod "ref" o = FileAttributeInfoListRefMethodInfo ResolveFileAttributeInfoListMethod "unref" o = FileAttributeInfoListUnrefMethodInfo ResolveFileAttributeInfoListMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveFileAttributeInfoListMethod t FileAttributeInfoList, O.MethodInfo info FileAttributeInfoList p) => OL.IsLabel t (FileAttributeInfoList -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif