{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)

'GI.Pango.Objects.FontsetSimple.FontsetSimple' is a implementation of the abstract
'GI.Pango.Objects.Fontset.Fontset' base class in terms of an array of fonts,
which the creator provides when constructing the
'GI.Pango.Objects.FontsetSimple.FontsetSimple'.
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.Pango.Objects.FontsetSimple
    (

-- * Exported types
    FontsetSimple(..)                       ,
    IsFontsetSimple                         ,
    toFontsetSimple                         ,
    noFontsetSimple                         ,


 -- * Methods
-- ** append #method:append#

#if ENABLE_OVERLOADING
    FontsetSimpleAppendMethodInfo           ,
#endif
    fontsetSimpleAppend                     ,


-- ** new #method:new#

    fontsetSimpleNew                        ,


-- ** size #method:size#

#if ENABLE_OVERLOADING
    FontsetSimpleSizeMethodInfo             ,
#endif
    fontsetSimpleSize                       ,




    ) 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 qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Pango.Objects.Font as Pango.Font
import {-# SOURCE #-} qualified GI.Pango.Objects.Fontset as Pango.Fontset
import {-# SOURCE #-} qualified GI.Pango.Structs.Language as Pango.Language

-- | Memory-managed wrapper type.
newtype FontsetSimple = FontsetSimple (ManagedPtr FontsetSimple)
foreign import ccall "pango_fontset_simple_get_type"
    c_pango_fontset_simple_get_type :: IO GType

instance GObject FontsetSimple where
    gobjectType = c_pango_fontset_simple_get_type


-- | Type class for types which can be safely cast to `FontsetSimple`, for instance with `toFontsetSimple`.
class (GObject o, O.IsDescendantOf FontsetSimple o) => IsFontsetSimple o
instance (GObject o, O.IsDescendantOf FontsetSimple o) => IsFontsetSimple o

instance O.HasParentTypes FontsetSimple
type instance O.ParentTypes FontsetSimple = '[Pango.Fontset.Fontset, GObject.Object.Object]

-- | Cast to `FontsetSimple`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toFontsetSimple :: (MonadIO m, IsFontsetSimple o) => o -> m FontsetSimple
toFontsetSimple = liftIO . unsafeCastTo FontsetSimple

-- | A convenience alias for `Nothing` :: `Maybe` `FontsetSimple`.
noFontsetSimple :: Maybe FontsetSimple
noFontsetSimple = Nothing

#if ENABLE_OVERLOADING
type family ResolveFontsetSimpleMethod (t :: Symbol) (o :: *) :: * where
    ResolveFontsetSimpleMethod "append" o = FontsetSimpleAppendMethodInfo
    ResolveFontsetSimpleMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveFontsetSimpleMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveFontsetSimpleMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveFontsetSimpleMethod "foreach" o = Pango.Fontset.FontsetForeachMethodInfo
    ResolveFontsetSimpleMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveFontsetSimpleMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveFontsetSimpleMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveFontsetSimpleMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveFontsetSimpleMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveFontsetSimpleMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveFontsetSimpleMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveFontsetSimpleMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveFontsetSimpleMethod "size" o = FontsetSimpleSizeMethodInfo
    ResolveFontsetSimpleMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveFontsetSimpleMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveFontsetSimpleMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveFontsetSimpleMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveFontsetSimpleMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveFontsetSimpleMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveFontsetSimpleMethod "getFont" o = Pango.Fontset.FontsetGetFontMethodInfo
    ResolveFontsetSimpleMethod "getMetrics" o = Pango.Fontset.FontsetGetMetricsMethodInfo
    ResolveFontsetSimpleMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveFontsetSimpleMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveFontsetSimpleMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveFontsetSimpleMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveFontsetSimpleMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveFontsetSimpleMethod t FontsetSimple, O.MethodInfo info FontsetSimple p) => OL.IsLabel t (FontsetSimple -> 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

#if ENABLE_OVERLOADING
instance O.HasAttributeList FontsetSimple
type instance O.AttributeList FontsetSimple = FontsetSimpleAttributeList
type FontsetSimpleAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
type instance O.SignalList FontsetSimple = FontsetSimpleSignalList
type FontsetSimpleSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method FontsetSimple::new
-- method type : Constructor
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "Pango", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoLanguage tag", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontsetSimple"}))
-- throws : False
-- Skip return : False

foreign import ccall "pango_fontset_simple_new" pango_fontset_simple_new ::
    Ptr Pango.Language.Language ->          -- language : TInterface (Name {namespace = "Pango", name = "Language"})
    IO (Ptr FontsetSimple)

{- |
Creates a new 'GI.Pango.Objects.FontsetSimple.FontsetSimple' for the given language.
-}
fontsetSimpleNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Pango.Language.Language
    {- ^ /@language@/: a 'GI.Pango.Structs.Language.Language' tag -}
    -> m FontsetSimple
    {- ^ __Returns:__ the newly allocated 'GI.Pango.Objects.FontsetSimple.FontsetSimple', which should
              be freed with 'GI.GObject.Objects.Object.objectUnref'. -}
fontsetSimpleNew language = liftIO $ do
    language' <- unsafeManagedPtrGetPtr language
    result <- pango_fontset_simple_new language'
    checkUnexpectedReturnNULL "fontsetSimpleNew" result
    result' <- (wrapObject FontsetSimple) result
    touchManagedPtr language
    return result'

#if ENABLE_OVERLOADING
#endif

-- method FontsetSimple::append
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "fontset", argType = TInterface (Name {namespace = "Pango", name = "FontsetSimple"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontsetSimple.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "font", argType = TInterface (Name {namespace = "Pango", name = "Font"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFont.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "pango_fontset_simple_append" pango_fontset_simple_append ::
    Ptr FontsetSimple ->                    -- fontset : TInterface (Name {namespace = "Pango", name = "FontsetSimple"})
    Ptr Pango.Font.Font ->                  -- font : TInterface (Name {namespace = "Pango", name = "Font"})
    IO ()

{- |
Adds a font to the fontset.
-}
fontsetSimpleAppend ::
    (B.CallStack.HasCallStack, MonadIO m, IsFontsetSimple a, Pango.Font.IsFont b) =>
    a
    {- ^ /@fontset@/: a 'GI.Pango.Objects.FontsetSimple.FontsetSimple'. -}
    -> b
    {- ^ /@font@/: a 'GI.Pango.Objects.Font.Font'. -}
    -> m ()
fontsetSimpleAppend fontset font = liftIO $ do
    fontset' <- unsafeManagedPtrCastPtr fontset
    font' <- unsafeManagedPtrCastPtr font
    pango_fontset_simple_append fontset' font'
    touchManagedPtr fontset
    touchManagedPtr font
    return ()

#if ENABLE_OVERLOADING
data FontsetSimpleAppendMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsFontsetSimple a, Pango.Font.IsFont b) => O.MethodInfo FontsetSimpleAppendMethodInfo a signature where
    overloadedMethod _ = fontsetSimpleAppend

#endif

-- method FontsetSimple::size
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "fontset", argType = TInterface (Name {namespace = "Pango", name = "FontsetSimple"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontsetSimple.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False

foreign import ccall "pango_fontset_simple_size" pango_fontset_simple_size ::
    Ptr FontsetSimple ->                    -- fontset : TInterface (Name {namespace = "Pango", name = "FontsetSimple"})
    IO Int32

{- |
Returns the number of fonts in the fontset.
-}
fontsetSimpleSize ::
    (B.CallStack.HasCallStack, MonadIO m, IsFontsetSimple a) =>
    a
    {- ^ /@fontset@/: a 'GI.Pango.Objects.FontsetSimple.FontsetSimple'. -}
    -> m Int32
    {- ^ __Returns:__ the size of /@fontset@/. -}
fontsetSimpleSize fontset = liftIO $ do
    fontset' <- unsafeManagedPtrCastPtr fontset
    result <- pango_fontset_simple_size fontset'
    touchManagedPtr fontset
    return result

#if ENABLE_OVERLOADING
data FontsetSimpleSizeMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsFontsetSimple a) => O.MethodInfo FontsetSimpleSizeMethodInfo a signature where
    overloadedMethod _ = fontsetSimpleSize

#endif