gtk-0.13.1: Graphics/UI/Gtk/Printing/PaperSize.chs
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) Widget PaperSize
--
-- Author : Andy Stewart
--
-- Created: 28 Mar 2010
--
-- Copyright (C) 2010 Andy Stewart
--
-- 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 2.1 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.
--
-- |
-- Maintainer : gtk2hs-users@lists.sourceforge.net
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
-- Support for named paper sizes
--
module Graphics.UI.Gtk.Printing.PaperSize (
-- * Detail
--
-- | 'PaperSize' handles paper sizes. It uses the
-- standard called \"PWG 5101.1-2002 PWG: Standard for Media Standardized
-- Names\" to name the paper sizes (and to get the data for the page sizes). In
-- addition to standard paper sizes, 'PaperSize' allows
-- to construct custom paper sizes with arbitrary dimensions.
--
-- The 'PaperSize' object stores not only the
-- dimensions (width and height) of a paper size and its name, it also provides
-- default print margins.
--
-- Printing support has been added in Gtk+ 2.10.
#if GTK_CHECK_VERSION(2,10,0)
-- * Types
PaperSize(..),
mkPaperSize,
-- * Enums
Unit(..),
-- * Constructors
paperSizeNew,
paperSizeNewFromPpd,
paperSizeNewCustom,
-- * Methods
paperSizeCopy,
paperSizeIsEqual,
paperSizeGetName,
paperSizeGetDisplayName,
paperSizeGetPpdName,
paperSizeGetWidth,
paperSizeGetHeight,
paperSizeIsCustom,
paperSizeSetSize,
paperSizeGetDefaultTopMargin,
paperSizeGetDefaultBottomMargin,
paperSizeGetDefaultLeftMargin,
paperSizeGetDefaultRightMargin,
paperSizeGetDefault,
#endif
#if GTK_CHECK_VERSION(2,12,0)
paperSizeGetPaperSizes,
#endif
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.GList
{# context lib="gtk" prefix="gtk" #}
--------------------
-- Types
{#pointer *PaperSize foreign newtype#}
--------------------
-- Enums
{#enum Unit {underscoreToCase} deriving (Bounded,Eq,Show)#}
--------------------
-- Constructors
mkPaperSize :: Ptr PaperSize -> IO PaperSize
mkPaperSize pPtr = do
size <- newForeignPtr pPtr paper_size_free
return (PaperSize size)
foreign import ccall unsafe ">k_paper_size_free"
paper_size_free :: FinalizerPtr PaperSize
#if GTK_CHECK_VERSION(2,10,0)
-- | Creates a new 'PaperSize' object by parsing a PWG
-- 5101.1-2002 paper name.
--
-- If @name@ is Nothing, the default paper size is returned, see 'paperSizeGetDefault'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeNew :: GlibString string
=> Maybe string -- ^ @name@ - a paper size name, or 'Nothing'
-> IO PaperSize
paperSizeNew name =
maybeWith withUTFString name $ \namePtr ->
{# call gtk_paper_size_new #}
namePtr
>>= mkPaperSize
-- | Creates a new 'PaperSize' object by using PPD
-- information.
--
-- If @ppdName@ is not a recognized PPD paper name, @ppdDisplayName@,
-- @width@ and @height@ are used to construct a custom 'PaperSize' object.
--
-- * Available since Gtk+ version 2.10
--
paperSizeNewFromPpd :: GlibString string
=> string -- ^ @ppdName@ - a PPD paper name
-> string -- ^ @ppdDisplayName@ - the corresponding human-readable name
-> Double -- ^ @width@ - the paper width, in points
-> Double -- ^ @height@ - the paper height in points
-> IO PaperSize
paperSizeNewFromPpd ppdName ppdDisplayName width height =
withUTFString ppdDisplayName $ \ppdDisplayNamePtr ->
withUTFString ppdName $ \ppdNamePtr ->
{# call gtk_paper_size_new_from_ppd #}
ppdNamePtr
ppdDisplayNamePtr
(realToFrac width)
(realToFrac height)
>>= mkPaperSize
-- | Creates a new 'PaperSize' object with the given
-- parameters.
--
-- * Available since Gtk+ version 2.10
--
paperSizeNewCustom :: GlibString string
=> string -- ^ @name@ - the paper name
-> string -- ^ @displayName@ - the human-readable name
-> Double -- ^ @width@ - the paper width, in units of @unit@
-> Double -- ^ @height@ - the paper height, in units of @unit@
-> Unit -- ^ @unit@ - the unit for @width@ and @height@
-> IO PaperSize
paperSizeNewCustom name displayName width height unit =
withUTFString displayName $ \displayNamePtr ->
withUTFString name $ \namePtr ->
{# call gtk_paper_size_new_custom #}
namePtr
displayNamePtr
(realToFrac width)
(realToFrac height)
((fromIntegral . fromEnum) unit)
>>= mkPaperSize
--------------------
-- Methods
-- | Copies an existing 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeCopy :: PaperSize
-> IO PaperSize -- ^ returns a copy of @other@
paperSizeCopy self =
{# call gtk_paper_size_copy #} self >>= mkPaperSize
-- | Compares two 'PaperSize' objects.
--
-- * Available since Gtk+ version 2.10
--
paperSizeIsEqual :: PaperSize
-> PaperSize -- ^ @size2@ - another 'PaperSize' object
-> IO Bool -- ^ returns @True@, if @size1@ and @size2@ represent
-- the same paper size
paperSizeIsEqual self size2 =
liftM toBool $
{# call gtk_paper_size_is_equal #}
self
size2
-- | Gets the name of the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetName :: GlibString string => PaperSize
-> IO string -- ^ returns the name of @size@
paperSizeGetName self =
{# call gtk_paper_size_get_name #}
self
>>= peekUTFString
-- | Gets the human-readable name of the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDisplayName :: GlibString string => PaperSize
-> IO string -- ^ returns the human-readable name of @size@
paperSizeGetDisplayName self =
{# call gtk_paper_size_get_display_name #}
self
>>= peekUTFString
-- | Gets the PPD name of the 'PaperSize', which may be
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetPpdName :: GlibString string => PaperSize
-> IO (Maybe string) -- ^ returns the PPD name of @size@, or 'Nothing'
paperSizeGetPpdName self =
{# call gtk_paper_size_get_ppd_name #}
self
>>= maybePeekUTFString
-- | Gets the paper width of the 'PaperSize', in units
-- of @unit@.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetWidth :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the paper width
paperSizeGetWidth self unit =
liftM realToFrac $
{# call gtk_paper_size_get_width #}
self
((fromIntegral . fromEnum) unit)
-- | Gets the paper height of the 'PaperSize', in units
-- of @unit@.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetHeight :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the paper height
paperSizeGetHeight self unit =
liftM realToFrac $
{# call gtk_paper_size_get_height #}
self
((fromIntegral . fromEnum) unit)
-- | Returns @True@ if @size@ is not a standard paper size.
--
paperSizeIsCustom :: PaperSize
-> IO Bool -- ^ returns whether @size@ is a custom paper size.
paperSizeIsCustom self =
liftM toBool $
{# call gtk_paper_size_is_custom #}
self
-- | Changes the dimensions of a @size@ to @width@ x @height@.
--
-- * Available since Gtk+ version 2.10
--
paperSizeSetSize :: PaperSize
-> Double -- ^ @width@ - the new width in units of @unit@
-> Double -- ^ @height@ - the new height in units of @unit@
-> Unit -- ^ @unit@ - the unit for @width@ and @height@
-> IO ()
paperSizeSetSize self width height unit =
{# call gtk_paper_size_set_size #}
self
(realToFrac width)
(realToFrac height)
((fromIntegral . fromEnum) unit)
-- | Gets the default top margin for the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDefaultTopMargin :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the default top margin
paperSizeGetDefaultTopMargin self unit =
liftM realToFrac $
{# call gtk_paper_size_get_default_top_margin #}
self
((fromIntegral . fromEnum) unit)
-- | Gets the default bottom margin for the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDefaultBottomMargin :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the default bottom margin
paperSizeGetDefaultBottomMargin self unit =
liftM realToFrac $
{# call gtk_paper_size_get_default_bottom_margin #}
self
((fromIntegral . fromEnum) unit)
-- | Gets the default left margin for the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDefaultLeftMargin :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the default left margin
paperSizeGetDefaultLeftMargin self unit =
liftM realToFrac $
{# call gtk_paper_size_get_default_left_margin #}
self
((fromIntegral . fromEnum) unit)
-- | Gets the default right margin for the 'PaperSize'.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDefaultRightMargin :: PaperSize
-> Unit -- ^ @unit@ - the unit for the return value
-> IO Double -- ^ returns the default right margin
paperSizeGetDefaultRightMargin self unit =
liftM realToFrac $
{# call gtk_paper_size_get_default_right_margin #}
self
((fromIntegral . fromEnum) unit)
-- | Returns the name of the default paper size, which depends on the current
-- locale.
--
-- * Available since Gtk+ version 2.10
--
paperSizeGetDefault :: GlibString string
=> IO string -- ^ returns the name of the default paper size.
paperSizeGetDefault =
{# call gtk_paper_size_get_default #}
>>= peekUTFString
#endif
#if GTK_CHECK_VERSION(2,12,0)
-- | Creates a list of known paper sizes.
--
-- * Available since Gtk+ version 2.12
--
paperSizeGetPaperSizes ::
Bool -- ^ @includeCustom@ - whether to include custom
-- paper sizes as defined in the page setup dialog
-> IO [PaperSize]
paperSizeGetPaperSizes includeCustom = do
glist <- {# call gtk_paper_size_get_paper_sizes #} (fromBool includeCustom)
list <- fromGList glist
mapM mkPaperSize list
#endif