    {-# LINE 2 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}
    -- GIMP Toolkit (GTK) Binding for Haskell: binding to gstreamer -*-haskell-*-
    --
    -- Author : Peter Gavin
    -- Created: 1-Apr-2007
    --
    -- Copyright (c) 2007 Peter Gavin
    --
    -- This library is free software: you can redistribute it and/or
    -- modify it under the terms of the GNU Lesser General Public License
    -- as published by the Free Software Foundation, either version 3 of
    -- the License, or (at your option) any later version.
    --
    -- This library is distributed in the hope that it will be useful,
    -- but WITHOUT ANY WARRANTY; without even the implied warranty of
    -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -- Lesser General Public License for more details.
    --
    -- You should have received a copy of the GNU Lesser General Public
    -- License along with this program. If not, see
    -- <http:
    --
    -- GStreamer, the C library which this Haskell library depends on, is
    -- available under LGPL Version 2. The documentation included with
    -- this library is based on the original GStreamer documentation.
    --
    -- | Maintainer : gtk2hs-devel@lists.sourceforge.net
    -- Stability : alpha
    -- Portability : portable (depends on GHC)
    module Media.Streaming.GStreamer.Core.PadTemplate (

      PadTemplate,
      PadTemplateClass,
      castToPadTemplate,
      gTypePadTemplate,

      PadPresence(..),

      padTemplateNew,
      padTemplateGetCaps,
      padTemplateGetNameTemplate,
      padTemplateGetDirection,
      padTemplateGetPresence,

      onPadTemplatePadCreated,
      afterPadTemplatePadCreated

      ) where

    import Control.Monad (liftM)
    import Media.Streaming.GStreamer.Core.Types
    {-# LINE 52 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}
    import Media.Streaming.GStreamer.Core.Signals
    {-# LINE 53 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}
    import System.Glib.FFI
    import System.Glib.UTFString
    import System.Glib.Signals

    {-# LINE 58 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}

    padTemplateNew :: String
                   -> PadDirection
                   -> PadPresence
                   -> Caps
                   -> IO PadTemplate
    padTemplateNew nameTemplate direction presence caps =
        withUTFString nameTemplate $ \cNameTemplate ->
        giveCaps caps $ \caps' ->
            (\arg1 arg2 arg3 (Caps arg4) -> withForeignPtr arg4 $ \argPtr4 ->gst_pad_template_new arg1 arg2 arg3 argPtr4) cNameTemplate
                                        (fromIntegral $ fromEnum direction)
                                        (fromIntegral $ fromEnum presence)
                                        caps' >>=
                takeObject

    padTemplateGetCaps :: PadTemplateClass padTemplate
                       => padTemplate
                       -> IO Caps
    padTemplateGetCaps padTemplate =
        (\(PadTemplate arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_pad_template_get_caps argPtr1) (toPadTemplate padTemplate) >>=
            peekCaps

    padTemplateGetNameTemplate :: PadTemplateClass padTemplate
                               => padTemplate
                               -> IO String
    padTemplateGetNameTemplate padTemplate =
        withObject (toPadTemplate padTemplate) (\ptr -> do {peekByteOff ptr 40 ::IO (Ptr CChar)}) >>=
            peekUTFString

    padTemplateGetDirection :: PadTemplateClass padTemplate
                            => padTemplate
                            -> IO PadDirection
    padTemplateGetDirection padTemplate =
        liftM (toEnum . fromIntegral) $
            withObject (toPadTemplate padTemplate) (\ptr -> do {peekByteOff ptr 44 ::IO CInt})
    {-# LINE 93 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}

    padTemplateGetPresence :: PadTemplateClass padTemplate
                           => padTemplate
                           -> IO PadPresence
    padTemplateGetPresence padTemplate =
        liftM (toEnum . fromIntegral) $
            withObject (toPadTemplate padTemplate) (\ptr -> do {peekByteOff ptr 48 ::IO CInt})
    {-# LINE 100 "./Media/Streaming/GStreamer/Core/PadTemplate.chs" #-}

    onPadTemplatePadCreated, afterPadTemplatePadCreated :: PadTemplateClass padTemplateT
                                                        => padTemplateT
                                                        -> (Pad -> IO ())
                                                        -> IO (ConnectId padTemplateT)
    onPadTemplatePadCreated =
        connect_OBJECT__NONE "pad-created" False
    afterPadTemplatePadCreated =
        connect_OBJECT__NONE "pad-created" True

    foreign import ccall safe "gst_pad_template_new"
      gst_pad_template_new :: ((Ptr CChar) -> (CInt -> (CInt -> ((Ptr Caps) -> (IO (Ptr PadTemplate))))))

    foreign import ccall safe "gst_pad_template_get_caps"
      gst_pad_template_get_caps :: ((Ptr PadTemplate) -> (IO (Ptr Caps)))