{-# LINE 2 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}
-- -*-haskell-*-
-----------------------------------------------------------------------------
-- Module : Graphics.UI.Gtk.WebKit.WebNavigationAction
-- Author : Andy Stewart
-- Copyright : (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
--
-- 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)
--
-- Access to the WebKit NavigationAction
-----------------------------------------------------------------------------

module Graphics.UI.Gtk.WebKit.WebNavigationAction (
-- * Description
-- | 'WebNavigationAction' is used in signals to provide details about what led the navigation to
-- happen. This includes, for instance, if the user clicked a link to start that navigation, and what
-- mouse button was used.

-- * Types
  WebNavigationAction,
  WebNavigationActionClass,

-- * Enums
  NavigationReason(..),

-- * Methods
  webNavigationActionGetButton,
  webNavigationActionGetModifierState,
  webNavigationActionGetOriginalUri,
  webNavigationActionSetOriginalUri,
  webNavigationActionGetReason,
  webNavigationActionSetReason,
  webNavigationActionGetTargetFrame,
) where

import Control.Monad (liftM)

import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.GList
import System.Glib.GError
import Graphics.UI.Gtk.Gdk.Events

import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
import Graphics.UI.Gtk.WebKit.Types
{-# LINE 59 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}
import System.Glib.GObject
{-# LINE 60 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}


{-# LINE 62 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}

-- * Enums

data NavigationReason = WebNavigationReasonLinkClicked
                      | WebNavigationReasonFormSubmitted
                      | WebNavigationReasonBackForward
                      | WebNavigationReasonReload
                      | WebNavigationReasonFormResubmitted
                      | WebNavigationReasonOther
                      deriving (Enum,Eq,Show)

{-# LINE 66 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}

-- * Methods

-- | Returns the DOM identifier for the mouse button used to click.
-- DOM button values are 1, 2 and 3 for left, middle and right buttons.
-- If the action was not initiated by a mouse click, returns -1.
webNavigationActionGetButton ::
   WebNavigationActionClass self => self
 -> IO Int
webNavigationActionGetButton action =
    liftM fromIntegral $ (\(WebNavigationAction arg1) -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_get_button argPtr1) (toWebNavigationAction action)

-- | Returns a bitmask with the the state of the modifier keys.
webNavigationActionGetModifierState ::
   WebNavigationActionClass self => self
 -> IO Int
webNavigationActionGetModifierState action =
    liftM fromIntegral $ (\(WebNavigationAction arg1) -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_get_modifier_state argPtr1) (toWebNavigationAction action)

-- | Returns the URI that was originally requested.
-- This may differ from the navigation target, for instance because of a redirect.
webNavigationActionGetOriginalUri ::
   (WebNavigationActionClass self, GlibString string) => self
 -> IO string
webNavigationActionGetOriginalUri action =
    (\(WebNavigationAction arg1) -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_get_original_uri argPtr1) (toWebNavigationAction action) >>= peekUTFString

-- | Returns the reason why WebKit is requesting a navigation.
webNavigationActionGetReason ::
   WebNavigationActionClass self => self
 -> IO NavigationReason
webNavigationActionGetReason action =
    liftM (toEnum . fromIntegral) $ (\(WebNavigationAction arg1) -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_get_reason argPtr1) (toWebNavigationAction action)

-- | Returns the target frame of the action.
webNavigationActionGetTargetFrame ::
   (WebNavigationActionClass self, GlibString string) => self
 -> IO string
webNavigationActionGetTargetFrame action =
    (\(WebNavigationAction arg1) -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_get_target_frame argPtr1) (toWebNavigationAction action) >>= peekUTFString

-- | Sets the URI that was originally requested.
-- This may differ from the navigation target, for instance because of a redirect.
webNavigationActionSetOriginalUri ::
   (WebNavigationActionClass self, GlibString string) => self
 -> string
 -> IO ()
webNavigationActionSetOriginalUri action uri =
    withUTFString uri $ \uriPtr ->
        (\(WebNavigationAction arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_set_original_uri argPtr1 arg2)
{-# LINE 116 "./Graphics/UI/Gtk/WebKit/WebNavigationAction.chs" #-}
        (toWebNavigationAction action)
        uriPtr

-- | Sets the reason why WebKit is requesting a navigation.
webNavigationActionSetReason ::
   WebNavigationActionClass self => self
 -> NavigationReason
 -> IO ()
webNavigationActionSetReason action reason =
    (\(WebNavigationAction arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->webkit_web_navigation_action_set_reason argPtr1 arg2) (toWebNavigationAction action) (fromIntegral (fromEnum reason))

foreign import ccall safe "webkit_web_navigation_action_get_button"
  webkit_web_navigation_action_get_button :: ((Ptr WebNavigationAction) -> (IO CInt))

foreign import ccall safe "webkit_web_navigation_action_get_modifier_state"
  webkit_web_navigation_action_get_modifier_state :: ((Ptr WebNavigationAction) -> (IO CInt))

foreign import ccall safe "webkit_web_navigation_action_get_original_uri"
  webkit_web_navigation_action_get_original_uri :: ((Ptr WebNavigationAction) -> (IO (Ptr CChar)))

foreign import ccall safe "webkit_web_navigation_action_get_reason"
  webkit_web_navigation_action_get_reason :: ((Ptr WebNavigationAction) -> (IO CInt))

foreign import ccall safe "webkit_web_navigation_action_get_target_frame"
  webkit_web_navigation_action_get_target_frame :: ((Ptr WebNavigationAction) -> (IO (Ptr CChar)))

foreign import ccall safe "webkit_web_navigation_action_set_original_uri"
  webkit_web_navigation_action_set_original_uri :: ((Ptr WebNavigationAction) -> ((Ptr CChar) -> (IO ())))

foreign import ccall safe "webkit_web_navigation_action_set_reason"
  webkit_web_navigation_action_set_reason :: ((Ptr WebNavigationAction) -> (CInt -> (IO ())))