{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- An auxiliary class used by [class/@viewStack@/].
-- 
-- See [property/@viewStack@/:pages].
-- 
-- /Since: 1.4/

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

module GI.Adw.Objects.ViewStackPages
    ( 

-- * Exported types
    ViewStackPages(..)                      ,
    IsViewStackPages                        ,
    toViewStackPages                        ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [isSelected]("GI.Gtk.Interfaces.SelectionModel#g:method:isSelected"), [itemsChanged]("GI.Gio.Interfaces.ListModel#g:method:itemsChanged"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [selectAll]("GI.Gtk.Interfaces.SelectionModel#g:method:selectAll"), [selectItem]("GI.Gtk.Interfaces.SelectionModel#g:method:selectItem"), [selectRange]("GI.Gtk.Interfaces.SelectionModel#g:method:selectRange"), [selectionChanged]("GI.Gtk.Interfaces.SelectionModel#g:method:selectionChanged"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [unselectAll]("GI.Gtk.Interfaces.SelectionModel#g:method:unselectAll"), [unselectItem]("GI.Gtk.Interfaces.SelectionModel#g:method:unselectItem"), [unselectRange]("GI.Gtk.Interfaces.SelectionModel#g:method:unselectRange"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getItem]("GI.Gio.Interfaces.ListModel#g:method:getItem"), [getItemType]("GI.Gio.Interfaces.ListModel#g:method:getItemType"), [getNItems]("GI.Gio.Interfaces.ListModel#g:method:getNItems"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getSelectedPage]("GI.Adw.Objects.ViewStackPages#g:method:getSelectedPage"), [getSelection]("GI.Gtk.Interfaces.SelectionModel#g:method:getSelection"), [getSelectionInRange]("GI.Gtk.Interfaces.SelectionModel#g:method:getSelectionInRange").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty"), [setSelectedPage]("GI.Adw.Objects.ViewStackPages#g:method:setSelectedPage"), [setSelection]("GI.Gtk.Interfaces.SelectionModel#g:method:setSelection").

#if defined(ENABLE_OVERLOADING)
    ResolveViewStackPagesMethod             ,
#endif

-- ** getSelectedPage #method:getSelectedPage#

#if defined(ENABLE_OVERLOADING)
    ViewStackPagesGetSelectedPageMethodInfo ,
#endif
    viewStackPagesGetSelectedPage           ,


-- ** setSelectedPage #method:setSelectedPage#

#if defined(ENABLE_OVERLOADING)
    ViewStackPagesSetSelectedPageMethodInfo ,
#endif
    viewStackPagesSetSelectedPage           ,




 -- * Properties


-- ** selectedPage #attr:selectedPage#
-- | The selected [class/@viewStackPage@/] within the [class/@viewStackPages@/].
-- 
-- This can be used to keep an up-to-date view of the [class/@viewStackPage@/] for
-- The visible [class/@viewStackPage@/] within the associated [class/@viewStackPages@/].
-- 
-- This can be used to keep an up-to-date view of the visible child.
-- 
-- /Since: 1.4/

#if defined(ENABLE_OVERLOADING)
    ViewStackPagesSelectedPagePropertyInfo  ,
#endif
    constructViewStackPagesSelectedPage     ,
    getViewStackPagesSelectedPage           ,
    setViewStackPagesSelectedPage           ,
#if defined(ENABLE_OVERLOADING)
    viewStackPagesSelectedPage              ,
#endif




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
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 GHC.Records as R
import qualified Data.Word as DW
import qualified Data.Int as DI
import qualified System.Posix.Types as SPT
import qualified Foreign.C.Types as FCT

-- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
#if MIN_VERSION_base(4,18,0)
import {-# SOURCE #-} qualified GI.Adw.Objects.ViewStackPage as Adw.ViewStackPage
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Interfaces.ListModel as Gio.ListModel
import qualified GI.Gtk.Interfaces.Accessible as Gtk.Accessible
import qualified GI.Gtk.Interfaces.SelectionModel as Gtk.SelectionModel
import qualified GI.Gtk.Objects.Widget as Gtk.Widget

#else
import {-# SOURCE #-} qualified GI.Adw.Objects.ViewStackPage as Adw.ViewStackPage
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Interfaces.ListModel as Gio.ListModel
import qualified GI.Gtk.Interfaces.SelectionModel as Gtk.SelectionModel

#endif

-- | Memory-managed wrapper type.
newtype ViewStackPages = ViewStackPages (SP.ManagedPtr ViewStackPages)
    deriving (ViewStackPages -> ViewStackPages -> Bool
(ViewStackPages -> ViewStackPages -> Bool)
-> (ViewStackPages -> ViewStackPages -> Bool) -> Eq ViewStackPages
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ViewStackPages -> ViewStackPages -> Bool
== :: ViewStackPages -> ViewStackPages -> Bool
$c/= :: ViewStackPages -> ViewStackPages -> Bool
/= :: ViewStackPages -> ViewStackPages -> Bool
Eq)

instance SP.ManagedPtrNewtype ViewStackPages where
    toManagedPtr :: ViewStackPages -> ManagedPtr ViewStackPages
toManagedPtr (ViewStackPages ManagedPtr ViewStackPages
p) = ManagedPtr ViewStackPages
p

foreign import ccall "adw_view_stack_pages_get_type"
    c_adw_view_stack_pages_get_type :: IO B.Types.GType

instance B.Types.TypedObject ViewStackPages where
    glibType :: IO GType
glibType = IO GType
c_adw_view_stack_pages_get_type

instance B.Types.GObject ViewStackPages

-- | Type class for types which can be safely cast to `ViewStackPages`, for instance with `toViewStackPages`.
class (SP.GObject o, O.IsDescendantOf ViewStackPages o) => IsViewStackPages o
instance (SP.GObject o, O.IsDescendantOf ViewStackPages o) => IsViewStackPages o

instance O.HasParentTypes ViewStackPages
type instance O.ParentTypes ViewStackPages = '[GObject.Object.Object, Gio.ListModel.ListModel, Gtk.SelectionModel.SelectionModel]

-- | Cast to `ViewStackPages`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toViewStackPages :: (MIO.MonadIO m, IsViewStackPages o) => o -> m ViewStackPages
toViewStackPages :: forall (m :: * -> *) o.
(MonadIO m, IsViewStackPages o) =>
o -> m ViewStackPages
toViewStackPages = IO ViewStackPages -> m ViewStackPages
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO ViewStackPages -> m ViewStackPages)
-> (o -> IO ViewStackPages) -> o -> m ViewStackPages
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr ViewStackPages -> ViewStackPages)
-> o -> IO ViewStackPages
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr ViewStackPages -> ViewStackPages
ViewStackPages

-- | Convert 'ViewStackPages' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe ViewStackPages) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_adw_view_stack_pages_get_type
    gvalueSet_ :: Ptr GValue -> Maybe ViewStackPages -> IO ()
gvalueSet_ Ptr GValue
gv Maybe ViewStackPages
P.Nothing = Ptr GValue -> Ptr ViewStackPages -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr ViewStackPages
forall a. Ptr a
FP.nullPtr :: FP.Ptr ViewStackPages)
    gvalueSet_ Ptr GValue
gv (P.Just ViewStackPages
obj) = ViewStackPages -> (Ptr ViewStackPages -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ViewStackPages
obj (Ptr GValue -> Ptr ViewStackPages -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe ViewStackPages)
gvalueGet_ Ptr GValue
gv = do
        Ptr ViewStackPages
ptr <- Ptr GValue -> IO (Ptr ViewStackPages)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr ViewStackPages)
        if Ptr ViewStackPages
ptr Ptr ViewStackPages -> Ptr ViewStackPages -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr ViewStackPages
forall a. Ptr a
FP.nullPtr
        then ViewStackPages -> Maybe ViewStackPages
forall a. a -> Maybe a
P.Just (ViewStackPages -> Maybe ViewStackPages)
-> IO ViewStackPages -> IO (Maybe ViewStackPages)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr ViewStackPages -> ViewStackPages)
-> Ptr ViewStackPages -> IO ViewStackPages
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr ViewStackPages -> ViewStackPages
ViewStackPages Ptr ViewStackPages
ptr
        else Maybe ViewStackPages -> IO (Maybe ViewStackPages)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ViewStackPages
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveViewStackPagesMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveViewStackPagesMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveViewStackPagesMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveViewStackPagesMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveViewStackPagesMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveViewStackPagesMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveViewStackPagesMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveViewStackPagesMethod "isSelected" o = Gtk.SelectionModel.SelectionModelIsSelectedMethodInfo
    ResolveViewStackPagesMethod "itemsChanged" o = Gio.ListModel.ListModelItemsChangedMethodInfo
    ResolveViewStackPagesMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveViewStackPagesMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveViewStackPagesMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveViewStackPagesMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveViewStackPagesMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveViewStackPagesMethod "selectAll" o = Gtk.SelectionModel.SelectionModelSelectAllMethodInfo
    ResolveViewStackPagesMethod "selectItem" o = Gtk.SelectionModel.SelectionModelSelectItemMethodInfo
    ResolveViewStackPagesMethod "selectRange" o = Gtk.SelectionModel.SelectionModelSelectRangeMethodInfo
    ResolveViewStackPagesMethod "selectionChanged" o = Gtk.SelectionModel.SelectionModelSelectionChangedMethodInfo
    ResolveViewStackPagesMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveViewStackPagesMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveViewStackPagesMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveViewStackPagesMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveViewStackPagesMethod "unselectAll" o = Gtk.SelectionModel.SelectionModelUnselectAllMethodInfo
    ResolveViewStackPagesMethod "unselectItem" o = Gtk.SelectionModel.SelectionModelUnselectItemMethodInfo
    ResolveViewStackPagesMethod "unselectRange" o = Gtk.SelectionModel.SelectionModelUnselectRangeMethodInfo
    ResolveViewStackPagesMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveViewStackPagesMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveViewStackPagesMethod "getItem" o = Gio.ListModel.ListModelGetItemMethodInfo
    ResolveViewStackPagesMethod "getItemType" o = Gio.ListModel.ListModelGetItemTypeMethodInfo
    ResolveViewStackPagesMethod "getNItems" o = Gio.ListModel.ListModelGetNItemsMethodInfo
    ResolveViewStackPagesMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveViewStackPagesMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveViewStackPagesMethod "getSelectedPage" o = ViewStackPagesGetSelectedPageMethodInfo
    ResolveViewStackPagesMethod "getSelection" o = Gtk.SelectionModel.SelectionModelGetSelectionMethodInfo
    ResolveViewStackPagesMethod "getSelectionInRange" o = Gtk.SelectionModel.SelectionModelGetSelectionInRangeMethodInfo
    ResolveViewStackPagesMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveViewStackPagesMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveViewStackPagesMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveViewStackPagesMethod "setSelectedPage" o = ViewStackPagesSetSelectedPageMethodInfo
    ResolveViewStackPagesMethod "setSelection" o = Gtk.SelectionModel.SelectionModelSetSelectionMethodInfo
    ResolveViewStackPagesMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveViewStackPagesMethod t ViewStackPages, O.OverloadedMethod info ViewStackPages p) => OL.IsLabel t (ViewStackPages -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveViewStackPagesMethod t ViewStackPages, O.OverloadedMethod info ViewStackPages p, R.HasField t ViewStackPages p) => R.HasField t ViewStackPages p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveViewStackPagesMethod t ViewStackPages, O.OverloadedMethodInfo info ViewStackPages) => OL.IsLabel t (O.MethodProxy info ViewStackPages) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- VVV Prop "selected-page"
   -- Type: TInterface (Name {namespace = "Adw", name = "ViewStackPage"})
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Just True,Just False)

-- | Get the value of the “@selected-page@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' viewStackPages #selectedPage
-- @
getViewStackPagesSelectedPage :: (MonadIO m, IsViewStackPages o) => o -> m (Maybe Adw.ViewStackPage.ViewStackPage)
getViewStackPagesSelectedPage :: forall (m :: * -> *) o.
(MonadIO m, IsViewStackPages o) =>
o -> m (Maybe ViewStackPage)
getViewStackPagesSelectedPage o
obj = IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage))
-> IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage)
forall a b. (a -> b) -> a -> b
$ o
-> String
-> (ManagedPtr ViewStackPage -> ViewStackPage)
-> IO (Maybe ViewStackPage)
forall a b.
(GObject a, GObject b) =>
a -> String -> (ManagedPtr b -> b) -> IO (Maybe b)
B.Properties.getObjectPropertyObject o
obj String
"selected-page" ManagedPtr ViewStackPage -> ViewStackPage
Adw.ViewStackPage.ViewStackPage

-- | Set the value of the “@selected-page@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' viewStackPages [ #selectedPage 'Data.GI.Base.Attributes.:=' value ]
-- @
setViewStackPagesSelectedPage :: (MonadIO m, IsViewStackPages o, Adw.ViewStackPage.IsViewStackPage a) => o -> a -> m ()
setViewStackPagesSelectedPage :: forall (m :: * -> *) o a.
(MonadIO m, IsViewStackPages o, IsViewStackPage a) =>
o -> a -> m ()
setViewStackPagesSelectedPage o
obj a
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Maybe a -> IO ()
forall a b.
(GObject a, GObject b) =>
a -> String -> Maybe b -> IO ()
B.Properties.setObjectPropertyObject o
obj String
"selected-page" (a -> Maybe a
forall a. a -> Maybe a
Just a
val)

-- | Construct a `GValueConstruct` with valid value for the “@selected-page@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructViewStackPagesSelectedPage :: (IsViewStackPages o, MIO.MonadIO m, Adw.ViewStackPage.IsViewStackPage a) => a -> m (GValueConstruct o)
constructViewStackPagesSelectedPage :: forall o (m :: * -> *) a.
(IsViewStackPages o, MonadIO m, IsViewStackPage a) =>
a -> m (GValueConstruct o)
constructViewStackPagesSelectedPage a
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Maybe a -> IO (GValueConstruct o)
forall a o.
GObject a =>
String -> Maybe a -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyObject String
"selected-page" (a -> Maybe a
forall a. a -> Maybe a
P.Just a
val)

#if defined(ENABLE_OVERLOADING)
data ViewStackPagesSelectedPagePropertyInfo
instance AttrInfo ViewStackPagesSelectedPagePropertyInfo where
    type AttrAllowedOps ViewStackPagesSelectedPagePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrBaseTypeConstraint ViewStackPagesSelectedPagePropertyInfo = IsViewStackPages
    type AttrSetTypeConstraint ViewStackPagesSelectedPagePropertyInfo = Adw.ViewStackPage.IsViewStackPage
    type AttrTransferTypeConstraint ViewStackPagesSelectedPagePropertyInfo = Adw.ViewStackPage.IsViewStackPage
    type AttrTransferType ViewStackPagesSelectedPagePropertyInfo = Adw.ViewStackPage.ViewStackPage
    type AttrGetType ViewStackPagesSelectedPagePropertyInfo = (Maybe Adw.ViewStackPage.ViewStackPage)
    type AttrLabel ViewStackPagesSelectedPagePropertyInfo = "selected-page"
    type AttrOrigin ViewStackPagesSelectedPagePropertyInfo = ViewStackPages
    attrGet = getViewStackPagesSelectedPage
    attrSet = setViewStackPagesSelectedPage
    attrTransfer _ v = do
        unsafeCastTo Adw.ViewStackPage.ViewStackPage v
    attrConstruct = constructViewStackPagesSelectedPage
    attrClear = undefined
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Adw.Objects.ViewStackPages.selectedPage"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-adwaita-1.0.7/docs/GI-Adw-Objects-ViewStackPages.html#g:attr:selectedPage"
        })
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList ViewStackPages
type instance O.AttributeList ViewStackPages = ViewStackPagesAttributeList
type ViewStackPagesAttributeList = ('[ '("selectedPage", ViewStackPagesSelectedPagePropertyInfo)] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
viewStackPagesSelectedPage :: AttrLabelProxy "selectedPage"
viewStackPagesSelectedPage = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList ViewStackPages = ViewStackPagesSignalList
type ViewStackPagesSignalList = ('[ '("itemsChanged", Gio.ListModel.ListModelItemsChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("selectionChanged", Gtk.SelectionModel.SelectionModelSelectionChangedSignalInfo)] :: [(Symbol, DK.Type)])

#endif

-- method ViewStackPages::get_selected_page
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "self"
--           , argType =
--               TInterface Name { namespace = "Adw" , name = "ViewStackPages" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a [class@ViewStackPages]"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface Name { namespace = "Adw" , name = "ViewStackPage" })
-- throws : False
-- Skip return : False

foreign import ccall "adw_view_stack_pages_get_selected_page" adw_view_stack_pages_get_selected_page :: 
    Ptr ViewStackPages ->                   -- self : TInterface (Name {namespace = "Adw", name = "ViewStackPages"})
    IO (Ptr Adw.ViewStackPage.ViewStackPage)

-- | Gets the [class/@viewStackPage@/] for the visible child of a view stack
-- 
-- Gets the [class/@viewStackPage@/] for the visible child of the associated stack.
-- 
-- Returns @NULL@ if there\'s no selected page.
-- 
-- /Since: 1.4/
viewStackPagesGetSelectedPage ::
    (B.CallStack.HasCallStack, MonadIO m, IsViewStackPages a) =>
    a
    -- ^ /@self@/: a [class/@viewStackPages@/]
    -> m (Maybe Adw.ViewStackPage.ViewStackPage)
    -- ^ __Returns:__ the stack page
viewStackPagesGetSelectedPage :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsViewStackPages a) =>
a -> m (Maybe ViewStackPage)
viewStackPagesGetSelectedPage a
self = IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage))
-> IO (Maybe ViewStackPage) -> m (Maybe ViewStackPage)
forall a b. (a -> b) -> a -> b
$ do
    Ptr ViewStackPages
self' <- a -> IO (Ptr ViewStackPages)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
self
    Ptr ViewStackPage
result <- Ptr ViewStackPages -> IO (Ptr ViewStackPage)
adw_view_stack_pages_get_selected_page Ptr ViewStackPages
self'
    Maybe ViewStackPage
maybeResult <- Ptr ViewStackPage
-> (Ptr ViewStackPage -> IO ViewStackPage)
-> IO (Maybe ViewStackPage)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull Ptr ViewStackPage
result ((Ptr ViewStackPage -> IO ViewStackPage)
 -> IO (Maybe ViewStackPage))
-> (Ptr ViewStackPage -> IO ViewStackPage)
-> IO (Maybe ViewStackPage)
forall a b. (a -> b) -> a -> b
$ \Ptr ViewStackPage
result' -> do
        ViewStackPage
result'' <- ((ManagedPtr ViewStackPage -> ViewStackPage)
-> Ptr ViewStackPage -> IO ViewStackPage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr ViewStackPage -> ViewStackPage
Adw.ViewStackPage.ViewStackPage) Ptr ViewStackPage
result'
        ViewStackPage -> IO ViewStackPage
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ViewStackPage
result''
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
self
    Maybe ViewStackPage -> IO (Maybe ViewStackPage)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ViewStackPage
maybeResult

#if defined(ENABLE_OVERLOADING)
data ViewStackPagesGetSelectedPageMethodInfo
instance (signature ~ (m (Maybe Adw.ViewStackPage.ViewStackPage)), MonadIO m, IsViewStackPages a) => O.OverloadedMethod ViewStackPagesGetSelectedPageMethodInfo a signature where
    overloadedMethod = viewStackPagesGetSelectedPage

instance O.OverloadedMethodInfo ViewStackPagesGetSelectedPageMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Adw.Objects.ViewStackPages.viewStackPagesGetSelectedPage",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-adwaita-1.0.7/docs/GI-Adw-Objects-ViewStackPages.html#v:viewStackPagesGetSelectedPage"
        })


#endif

-- method ViewStackPages::set_selected_page
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "self"
--           , argType =
--               TInterface Name { namespace = "Adw" , name = "ViewStackPages" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a [class@ViewStackPages]"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "page"
--           , argType =
--               TInterface Name { namespace = "Adw" , name = "ViewStackPage" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a stack page within the associated stack"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "adw_view_stack_pages_set_selected_page" adw_view_stack_pages_set_selected_page :: 
    Ptr ViewStackPages ->                   -- self : TInterface (Name {namespace = "Adw", name = "ViewStackPages"})
    Ptr Adw.ViewStackPage.ViewStackPage ->  -- page : TInterface (Name {namespace = "Adw", name = "ViewStackPage"})
    IO ()

-- | Sets the visible child in the associated [class/@viewStack@/].
-- 
-- See [property/@viewStack@/:visible-child].
-- 
-- /Since: 1.4/
viewStackPagesSetSelectedPage ::
    (B.CallStack.HasCallStack, MonadIO m, IsViewStackPages a, Adw.ViewStackPage.IsViewStackPage b) =>
    a
    -- ^ /@self@/: a [class/@viewStackPages@/]
    -> b
    -- ^ /@page@/: a stack page within the associated stack
    -> m ()
viewStackPagesSetSelectedPage :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsViewStackPages a, IsViewStackPage b) =>
a -> b -> m ()
viewStackPagesSetSelectedPage a
self b
page = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ViewStackPages
self' <- a -> IO (Ptr ViewStackPages)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
self
    Ptr ViewStackPage
page' <- b -> IO (Ptr ViewStackPage)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
page
    Ptr ViewStackPages -> Ptr ViewStackPage -> IO ()
adw_view_stack_pages_set_selected_page Ptr ViewStackPages
self' Ptr ViewStackPage
page'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
self
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
page
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ViewStackPagesSetSelectedPageMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsViewStackPages a, Adw.ViewStackPage.IsViewStackPage b) => O.OverloadedMethod ViewStackPagesSetSelectedPageMethodInfo a signature where
    overloadedMethod = viewStackPagesSetSelectedPage

instance O.OverloadedMethodInfo ViewStackPagesSetSelectedPageMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Adw.Objects.ViewStackPages.viewStackPagesSetSelectedPage",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-adwaita-1.0.7/docs/GI-Adw-Objects-ViewStackPages.html#v:viewStackPagesSetSelectedPage"
        })


#endif