    {-# LINE 2 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}
    -- -*-haskell-*-
    -- GIMP Toolkit (GTK) Widget Arrow
    --
    -- Author : Axel Simon
    --
    -- Created: 23 May 2001
    --
    -- Copyright (C) 1999-2005 Axel Simon
    --
    -- 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)
    --
    -- Displays an arrow
    --
    module Graphics.UI.Gtk.Misc.Arrow (
    -- * Detail
    --
    -- | 'Arrow' should be used to draw simple arrows that need to point in one of
    -- the four cardinal directions (up, down, left, or right). The style of the
    -- arrow can be one of shadow in, shadow out, etched in, or etched out. Note
    -- that these directions and style types may be amended in versions of Gtk to
    -- come.
    --
    -- 'Arrow' will fill any space allotted to it, but since it is inherited from
    -- 'Misc', it can be padded and\/or aligned, to fill exactly the space the
    -- programmer desires.
    --
    -- Arrows are created with a call to 'arrowNew'. The direction or style of
    -- an arrow can be changed after creation by using 'arrowSet'.

    -- * Class Hierarchy
    -- |
    -- @
    -- | 'GObject'
    -- | +----'Object'
    -- | +----'Widget'
    -- | +----'Misc'
    -- | +----Arrow
    -- @

    -- * Types
      Arrow,
      ArrowClass,
      castToArrow, gTypeArrow,
      toArrow,
      ArrowType(..),
      ShadowType(..),

    -- * Constructors
      arrowNew,

    -- * Methods
      arrowSet,

    -- * Attributes
      arrowArrowType,
      arrowShadowType,
      ) where

    import Control.Monad (liftM)

    import System.Glib.FFI
    import System.Glib.Attributes
    import System.Glib.Properties
    import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
    import Graphics.UI.Gtk.Types
    {-# LINE 80 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}
    import Graphics.UI.Gtk.General.Enums (ArrowType(..), ShadowType(..))

    {-# LINE 83 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}

    --------------------
    -- Constructors

    -- | Creates a new arrow widget.
    --
    arrowNew :: ArrowType -> ShadowType -> IO Arrow
    arrowNew :: ArrowType -> ShadowType -> IO Arrow
    arrowNew ArrowType
    arrowType ShadowType
    shadowType =
      (ForeignPtr Arrow -> Arrow, FinalizerPtr Arrow)
    -> IO (Ptr Arrow) -> IO Arrow
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr Arrow -> Arrow, FinalizerPtr Arrow)
    forall {a}. (ForeignPtr Arrow -> Arrow, FinalizerPtr a)
    mkArrow (IO (Ptr Arrow) -> IO Arrow) -> IO (Ptr Arrow) -> IO Arrow
    forall a b. (a -> b) -> a -> b
    $
      (Ptr Widget -> Ptr Arrow) -> IO (Ptr Widget) -> IO (Ptr Arrow)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr Widget -> Ptr Arrow
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr Widget -> Ptr Arrow) (IO (Ptr Widget) -> IO (Ptr Arrow))
    -> IO (Ptr Widget) -> IO (Ptr Arrow)
    forall a b. (a -> b) -> a -> b
    $
      CInt -> CInt -> IO (Ptr Widget)
    gtk_arrow_new
    {-# LINE 94 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}
        ((fromIntegral . fromEnum) arrowType)
        ((Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CInt) -> (ShadowType -> Int) -> ShadowType -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ShadowType -> Int
    forall a. Enum a => a -> Int
    fromEnum) ShadowType
    shadowType)

    --------------------
    -- Methods

    -- | Sets the direction and style of the 'Arrow'.
    --
    arrowSet :: ArrowClass self => self -> ArrowType -> ShadowType -> IO ()
    arrowSet :: forall self.
    ArrowClass self =>
    self -> ArrowType -> ShadowType -> IO ()
    arrowSet self
    self ArrowType
    arrowType ShadowType
    shadowType =
      (\(Arrow ForeignPtr Arrow
    arg1) CInt
    arg2 CInt
    arg3 -> ForeignPtr Arrow -> (Ptr Arrow -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr Arrow
    arg1 ((Ptr Arrow -> IO ()) -> IO ()) -> (Ptr Arrow -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr Arrow
    argPtr1 ->Ptr Arrow -> CInt -> CInt -> IO ()
    gtk_arrow_set Ptr Arrow
    argPtr1 CInt
    arg2 CInt
    arg3)
    {-# LINE 105 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}
        (toArrow self)
        ((Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CInt) -> (ArrowType -> Int) -> ArrowType -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ArrowType -> Int
    forall a. Enum a => a -> Int
    fromEnum) ArrowType
    arrowType)
        ((Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CInt) -> (ShadowType -> Int) -> ShadowType -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ShadowType -> Int
    forall a. Enum a => a -> Int
    fromEnum) ShadowType
    shadowType)

    --------------------
    -- Attributes

    -- | The direction the arrow should point.
    --
    -- Default value: 'ArrowRight'
    --
    arrowArrowType :: ArrowClass self => Attr self ArrowType
    arrowArrowType :: forall self. ArrowClass self => Attr self ArrowType
    arrowArrowType = String -> GType -> Attr self ArrowType
    forall gobj enum.
    (GObjectClass gobj, Enum enum) =>
    String -> GType -> Attr gobj enum
    newAttrFromEnumProperty String
    "arrow-type"
      GType
    gtk_arrow_type_get_type
    {-# LINE 119 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}

    -- | Appearance of the shadow surrounding the arrow.
    --
    -- Default value: 'ShadowOut'
    --
    arrowShadowType :: ArrowClass self => Attr self ShadowType
    arrowShadowType :: forall self. ArrowClass self => Attr self ShadowType
    arrowShadowType = String -> GType -> Attr self ShadowType
    forall gobj enum.
    (GObjectClass gobj, Enum enum) =>
    String -> GType -> Attr gobj enum
    newAttrFromEnumProperty String
    "shadow-type"
      GType
    gtk_shadow_type_get_type
    {-# LINE 127 "./Graphics/UI/Gtk/Misc/Arrow.chs" #-}

    foreign import ccall unsafe "gtk_arrow_new"
      gtk_arrow_new :: (CInt -> (CInt -> (IO (Ptr Widget))))

    foreign import ccall safe "gtk_arrow_set"
      gtk_arrow_set :: ((Ptr Arrow) -> (CInt -> (CInt -> (IO ()))))

    foreign import ccall unsafe "gtk_arrow_type_get_type"
      gtk_arrow_type_get_type :: CULong

    foreign import ccall unsafe "gtk_shadow_type_get_type"
      gtk_shadow_type_get_type :: CULong