{- |
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.Poppler.Objects.Movie
    ( 

-- * Exported types
    Movie(..)                               ,
    IsMovie                                 ,
    toMovie                                 ,
    noMovie                                 ,


 -- * Methods
-- ** getFilename #method:getFilename#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MovieGetFilenameMethodInfo              ,
#endif
    movieGetFilename                        ,


-- ** needPoster #method:needPoster#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MovieNeedPosterMethodInfo               ,
#endif
    movieNeedPoster                         ,


-- ** showControls #method:showControls#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MovieShowControlsMethodInfo             ,
#endif
    movieShowControls                       ,




    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 GI.GObject.Objects.Object as GObject.Object

newtype Movie = Movie (ManagedPtr Movie)
foreign import ccall "poppler_movie_get_type"
    c_poppler_movie_get_type :: IO GType

instance GObject Movie where
    gobjectType _ = c_poppler_movie_get_type
    

class GObject o => IsMovie o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError Movie a) =>
    IsMovie a
#endif
instance IsMovie Movie
instance GObject.Object.IsObject Movie

toMovie :: (MonadIO m, IsMovie o) => o -> m Movie
toMovie = liftIO . unsafeCastTo Movie

noMovie :: Maybe Movie
noMovie = Nothing

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveMovieMethod (t :: Symbol) (o :: *) :: * where
    ResolveMovieMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveMovieMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveMovieMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveMovieMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveMovieMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveMovieMethod "needPoster" o = MovieNeedPosterMethodInfo
    ResolveMovieMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveMovieMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveMovieMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveMovieMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveMovieMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveMovieMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveMovieMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveMovieMethod "showControls" o = MovieShowControlsMethodInfo
    ResolveMovieMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveMovieMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveMovieMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveMovieMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveMovieMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveMovieMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveMovieMethod "getFilename" o = MovieGetFilenameMethodInfo
    ResolveMovieMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveMovieMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveMovieMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveMovieMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveMovieMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveMovieMethod t Movie, O.MethodInfo info Movie p) => O.IsLabelProxy t (Movie -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveMovieMethod t Movie, O.MethodInfo info Movie p) => O.IsLabel t (Movie -> 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

#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList Movie
type instance O.AttributeList Movie = MovieAttributeList
type MovieAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type instance O.SignalList Movie = MovieSignalList
type MovieSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method Movie::get_filename
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "poppler_movie", argType = TInterface (Name {namespace = "Poppler", name = "Movie"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerMovie", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_movie_get_filename" poppler_movie_get_filename :: 
    Ptr Movie ->                            -- poppler_movie : TInterface (Name {namespace = "Poppler", name = "Movie"})
    IO CString

{- |
Returns the local filename identifying a self-describing movie file

@since 0.14
-}
movieGetFilename ::
    (B.CallStack.HasCallStack, MonadIO m, IsMovie a) =>
    a
    {- ^ /@popplerMovie@/: a 'GI.Poppler.Objects.Movie.Movie' -}
    -> m T.Text
    {- ^ __Returns:__ a local filename, return value is owned by 'GI.Poppler.Objects.Movie.Movie' and
              should not be freed -}
movieGetFilename popplerMovie = liftIO $ do
    popplerMovie' <- unsafeManagedPtrCastPtr popplerMovie
    result <- poppler_movie_get_filename popplerMovie'
    checkUnexpectedReturnNULL "movieGetFilename" result
    result' <- cstringToText result
    touchManagedPtr popplerMovie
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MovieGetFilenameMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsMovie a) => O.MethodInfo MovieGetFilenameMethodInfo a signature where
    overloadedMethod _ = movieGetFilename

#endif

-- method Movie::need_poster
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "poppler_movie", argType = TInterface (Name {namespace = "Poppler", name = "Movie"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerMovie", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_movie_need_poster" poppler_movie_need_poster :: 
    Ptr Movie ->                            -- poppler_movie : TInterface (Name {namespace = "Poppler", name = "Movie"})
    IO CInt

{- |
Returns whether a poster image representing the Movie
shall be displayed. The poster image must be retrieved
from the movie file.

@since 0.14
-}
movieNeedPoster ::
    (B.CallStack.HasCallStack, MonadIO m, IsMovie a) =>
    a
    {- ^ /@popplerMovie@/: a 'GI.Poppler.Objects.Movie.Movie' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if move needs a poster image, 'False' otherwise -}
movieNeedPoster popplerMovie = liftIO $ do
    popplerMovie' <- unsafeManagedPtrCastPtr popplerMovie
    result <- poppler_movie_need_poster popplerMovie'
    let result' = (/= 0) result
    touchManagedPtr popplerMovie
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MovieNeedPosterMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsMovie a) => O.MethodInfo MovieNeedPosterMethodInfo a signature where
    overloadedMethod _ = movieNeedPoster

#endif

-- method Movie::show_controls
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "poppler_movie", argType = TInterface (Name {namespace = "Poppler", name = "Movie"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerMovie", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "poppler_movie_show_controls" poppler_movie_show_controls :: 
    Ptr Movie ->                            -- poppler_movie : TInterface (Name {namespace = "Poppler", name = "Movie"})
    IO CInt

{- |
Returns whether to display a movie controller bar while playing the movie

@since 0.14
-}
movieShowControls ::
    (B.CallStack.HasCallStack, MonadIO m, IsMovie a) =>
    a
    {- ^ /@popplerMovie@/: a 'GI.Poppler.Objects.Movie.Movie' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if controller bar should be displayed, 'False' otherwise -}
movieShowControls popplerMovie = liftIO $ do
    popplerMovie' <- unsafeManagedPtrCastPtr popplerMovie
    result <- poppler_movie_show_controls popplerMovie'
    let result' = (/= 0) result
    touchManagedPtr popplerMovie
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MovieShowControlsMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsMovie a) => O.MethodInfo MovieShowControlsMethodInfo a signature where
    overloadedMethod _ = movieShowControls

#endif