{- |
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.Gtk.Interfaces.PrintOperationPreview
    ( 

-- * Exported types
    PrintOperationPreview(..)               ,
    noPrintOperationPreview                 ,
    PrintOperationPreviewK                  ,
    toPrintOperationPreview                 ,


 -- * Methods
-- ** printOperationPreviewEndPreview
    printOperationPreviewEndPreview         ,


-- ** printOperationPreviewIsSelected
    printOperationPreviewIsSelected         ,


-- ** printOperationPreviewRenderPage
    printOperationPreviewRenderPage         ,




 -- * Signals
-- ** GotPageSize
    PrintOperationPreviewGotPageSizeCallback,
    PrintOperationPreviewGotPageSizeCallbackC,
    PrintOperationPreviewGotPageSizeSignalInfo,
    afterPrintOperationPreviewGotPageSize   ,
    mkPrintOperationPreviewGotPageSizeCallback,
    noPrintOperationPreviewGotPageSizeCallback,
    onPrintOperationPreviewGotPageSize      ,
    printOperationPreviewGotPageSizeCallbackWrapper,
    printOperationPreviewGotPageSizeClosure ,


-- ** Ready
    PrintOperationPreviewReadyCallback      ,
    PrintOperationPreviewReadyCallbackC     ,
    PrintOperationPreviewReadySignalInfo    ,
    afterPrintOperationPreviewReady         ,
    mkPrintOperationPreviewReadyCallback    ,
    noPrintOperationPreviewReadyCallback    ,
    onPrintOperationPreviewReady            ,
    printOperationPreviewReadyCallbackWrapper,
    printOperationPreviewReadyClosure       ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.GObject as GObject

-- interface PrintOperationPreview 

newtype PrintOperationPreview = PrintOperationPreview (ForeignPtr PrintOperationPreview)
noPrintOperationPreview :: Maybe PrintOperationPreview
noPrintOperationPreview = Nothing

-- signal PrintOperationPreview::got-page-size
type PrintOperationPreviewGotPageSizeCallback =
    PrintContext ->
    PageSetup ->
    IO ()

noPrintOperationPreviewGotPageSizeCallback :: Maybe PrintOperationPreviewGotPageSizeCallback
noPrintOperationPreviewGotPageSizeCallback = Nothing

type PrintOperationPreviewGotPageSizeCallbackC =
    Ptr () ->                               -- object
    Ptr PrintContext ->
    Ptr PageSetup ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkPrintOperationPreviewGotPageSizeCallback :: PrintOperationPreviewGotPageSizeCallbackC -> IO (FunPtr PrintOperationPreviewGotPageSizeCallbackC)

printOperationPreviewGotPageSizeClosure :: PrintOperationPreviewGotPageSizeCallback -> IO Closure
printOperationPreviewGotPageSizeClosure cb = newCClosure =<< mkPrintOperationPreviewGotPageSizeCallback wrapped
    where wrapped = printOperationPreviewGotPageSizeCallbackWrapper cb

printOperationPreviewGotPageSizeCallbackWrapper ::
    PrintOperationPreviewGotPageSizeCallback ->
    Ptr () ->
    Ptr PrintContext ->
    Ptr PageSetup ->
    Ptr () ->
    IO ()
printOperationPreviewGotPageSizeCallbackWrapper _cb _ context page_setup _ = do
    context' <- (newObject PrintContext) context
    page_setup' <- (newObject PageSetup) page_setup
    _cb  context' page_setup'

onPrintOperationPreviewGotPageSize :: (GObject a, MonadIO m) => a -> PrintOperationPreviewGotPageSizeCallback -> m SignalHandlerId
onPrintOperationPreviewGotPageSize obj cb = liftIO $ connectPrintOperationPreviewGotPageSize obj cb SignalConnectBefore
afterPrintOperationPreviewGotPageSize :: (GObject a, MonadIO m) => a -> PrintOperationPreviewGotPageSizeCallback -> m SignalHandlerId
afterPrintOperationPreviewGotPageSize obj cb = connectPrintOperationPreviewGotPageSize obj cb SignalConnectAfter

connectPrintOperationPreviewGotPageSize :: (GObject a, MonadIO m) =>
                                           a -> PrintOperationPreviewGotPageSizeCallback -> SignalConnectMode -> m SignalHandlerId
connectPrintOperationPreviewGotPageSize obj cb after = liftIO $ do
    cb' <- mkPrintOperationPreviewGotPageSizeCallback (printOperationPreviewGotPageSizeCallbackWrapper cb)
    connectSignalFunPtr obj "got-page-size" cb' after

-- signal PrintOperationPreview::ready
type PrintOperationPreviewReadyCallback =
    PrintContext ->
    IO ()

noPrintOperationPreviewReadyCallback :: Maybe PrintOperationPreviewReadyCallback
noPrintOperationPreviewReadyCallback = Nothing

type PrintOperationPreviewReadyCallbackC =
    Ptr () ->                               -- object
    Ptr PrintContext ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkPrintOperationPreviewReadyCallback :: PrintOperationPreviewReadyCallbackC -> IO (FunPtr PrintOperationPreviewReadyCallbackC)

printOperationPreviewReadyClosure :: PrintOperationPreviewReadyCallback -> IO Closure
printOperationPreviewReadyClosure cb = newCClosure =<< mkPrintOperationPreviewReadyCallback wrapped
    where wrapped = printOperationPreviewReadyCallbackWrapper cb

printOperationPreviewReadyCallbackWrapper ::
    PrintOperationPreviewReadyCallback ->
    Ptr () ->
    Ptr PrintContext ->
    Ptr () ->
    IO ()
printOperationPreviewReadyCallbackWrapper _cb _ context _ = do
    context' <- (newObject PrintContext) context
    _cb  context'

onPrintOperationPreviewReady :: (GObject a, MonadIO m) => a -> PrintOperationPreviewReadyCallback -> m SignalHandlerId
onPrintOperationPreviewReady obj cb = liftIO $ connectPrintOperationPreviewReady obj cb SignalConnectBefore
afterPrintOperationPreviewReady :: (GObject a, MonadIO m) => a -> PrintOperationPreviewReadyCallback -> m SignalHandlerId
afterPrintOperationPreviewReady obj cb = connectPrintOperationPreviewReady obj cb SignalConnectAfter

connectPrintOperationPreviewReady :: (GObject a, MonadIO m) =>
                                     a -> PrintOperationPreviewReadyCallback -> SignalConnectMode -> m SignalHandlerId
connectPrintOperationPreviewReady obj cb after = liftIO $ do
    cb' <- mkPrintOperationPreviewReadyCallback (printOperationPreviewReadyCallbackWrapper cb)
    connectSignalFunPtr obj "ready" cb' after

type instance AttributeList PrintOperationPreview = PrintOperationPreviewAttributeList
type PrintOperationPreviewAttributeList = ('[ ] :: [(Symbol, *)])

data PrintOperationPreviewGotPageSizeSignalInfo
instance SignalInfo PrintOperationPreviewGotPageSizeSignalInfo where
    type HaskellCallbackType PrintOperationPreviewGotPageSizeSignalInfo = PrintOperationPreviewGotPageSizeCallback
    connectSignal _ = connectPrintOperationPreviewGotPageSize

data PrintOperationPreviewReadySignalInfo
instance SignalInfo PrintOperationPreviewReadySignalInfo where
    type HaskellCallbackType PrintOperationPreviewReadySignalInfo = PrintOperationPreviewReadyCallback
    connectSignal _ = connectPrintOperationPreviewReady

type instance SignalList PrintOperationPreview = PrintOperationPreviewSignalList
type PrintOperationPreviewSignalList = ('[ '("got-page-size", PrintOperationPreviewGotPageSizeSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("ready", PrintOperationPreviewReadySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

foreign import ccall "gtk_print_operation_preview_get_type"
    c_gtk_print_operation_preview_get_type :: IO GType

type instance ParentTypes PrintOperationPreview = PrintOperationPreviewParentTypes
type PrintOperationPreviewParentTypes = '[GObject.Object]

instance GObject PrintOperationPreview where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_gtk_print_operation_preview_get_type
    

class GObject o => PrintOperationPreviewK o
instance (GObject o, IsDescendantOf PrintOperationPreview o) => PrintOperationPreviewK o

toPrintOperationPreview :: PrintOperationPreviewK o => o -> IO PrintOperationPreview
toPrintOperationPreview = unsafeCastTo PrintOperationPreview

-- method PrintOperationPreview::end_preview
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_print_operation_preview_end_preview" gtk_print_operation_preview_end_preview :: 
    Ptr PrintOperationPreview ->            -- _obj : TInterface "Gtk" "PrintOperationPreview"
    IO ()


printOperationPreviewEndPreview ::
    (MonadIO m, PrintOperationPreviewK a) =>
    a ->                                    -- _obj
    m ()
printOperationPreviewEndPreview _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_print_operation_preview_end_preview _obj'
    touchManagedPtr _obj
    return ()

-- method PrintOperationPreview::is_selected
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "page_nr", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "page_nr", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_print_operation_preview_is_selected" gtk_print_operation_preview_is_selected :: 
    Ptr PrintOperationPreview ->            -- _obj : TInterface "Gtk" "PrintOperationPreview"
    Int32 ->                                -- page_nr : TBasicType TInt32
    IO CInt


printOperationPreviewIsSelected ::
    (MonadIO m, PrintOperationPreviewK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- page_nr
    m Bool
printOperationPreviewIsSelected _obj page_nr = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_print_operation_preview_is_selected _obj' page_nr
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method PrintOperationPreview::render_page
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "page_nr", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "PrintOperationPreview", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "page_nr", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_print_operation_preview_render_page" gtk_print_operation_preview_render_page :: 
    Ptr PrintOperationPreview ->            -- _obj : TInterface "Gtk" "PrintOperationPreview"
    Int32 ->                                -- page_nr : TBasicType TInt32
    IO ()


printOperationPreviewRenderPage ::
    (MonadIO m, PrintOperationPreviewK a) =>
    a ->                                    -- _obj
    Int32 ->                                -- page_nr
    m ()
printOperationPreviewRenderPage _obj page_nr = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_print_operation_preview_render_page _obj' page_nr
    touchManagedPtr _obj
    return ()