awesomium-0.1.0.0: src/Graphics/UI/Awesomium/WebView/Callbacks.hs
----------------------------------------------------------------------
-- |
-- Module : Graphics.UI.Awesomium.WebView.Callbacks
-- Copyright : (c) 2012 Maksymilian Owsianny
-- License : LGPL-3 (see the file LICENSE)
--
-- Maintainer : Maksymilian.Owsianny+Awesomium@gmail.com
-- Stability : Experimental
-- Portability : Portable? (needs FFI)
--
----------------------------------------------------------------------
module Graphics.UI.Awesomium.WebView.Callbacks
( BeginNavigationCallbackHandler , setCallbackBeginNavigation
, BeginLoadingCallbackHandler , setCallbackBeginLoading
, FinishLoadingCallbackHandler , setCallbackFinishLoading
, JSCallbackHandler , setCallbackJS
, ReceiveTitleCallbackHandler , setCallbackReceiveTitle
, ChangeTooltipCallbackHandler , setCallbackChangeTooltip
, CursorType (..)
, ChangeCursorCallbackHandler , setCallbackChangeCursor
, ChangeKeyboardFocusCallbackHandler , setCallbackChangeKeyboardFocus
, ChangeTargetUrlCallbackHandler , setCallbackChangeTargetUrl
, OpenExternalLinkCallbackHandler , setCallbackOpenExternalLink
, RequestDownloadCallbackHandler , setCallbackRequestDownload
, WebViewCrashedCallbackHandler , setCallbackWebViewCrashed
, PluginCrashedCallbackHandler , setCallbackPluginCrashed
, RequestMoveCallbackHandler , setCallbackRequestMove
, GetPageContentsCallbackHandler , setCallbackGetPageContents
, DomReadyCallbackHandler , setCallbackDomReady
, RequestFileChooserCallbackHandler , setCallbackRequestFileChooser
, GetScrollDataCallbackHandler , setCallbackGetScrollData
, JsConsoleMessageCallbackHandler , setCallbackJsConsoleMessage
, GetFindResultsCallbackHandler , setCallbackGetFindResults
, ImeState (..)
, UpdateImeCallbackHandler , setCallbackUpdateIme
, MediaType (..)
, ShowContextMenuCallbackHandler , setCallbackShowContextMenu
, RequestLoginCallbackHandler , setCallbackRequestLogin
, ChangeHistoryCallbackHandler , setCallbackChangeHistory
, FinishResizeCallbackHandler , setCallbackFinishResize
, ShowJavascriptDialogCallbackHandler , setCallbackShowJavascriptDialog
) where
import Graphics.UI.Awesomium.Raw
import Graphics.UI.Awesomium.Javascript
import Foreign (peek)
import Foreign.Ptr (FunPtr)
import Foreign.Marshal.Utils (toBool)
import Data.Aeson
(>>=>) :: Monad m => m a -> (a -> m b) -> m a
(>>=>) a f = a >>= \r -> f r >> return r
type BeginNavigationCallbackHandler = WebView -> String -> String -> IO()
defBeginNavigationCallback :: BeginNavigationCallbackHandler -> BeginNavigationCallback
defBeginNavigationCallback convcb wv a1 a0 = do
ar1 <- fromAweString a1
ar0 <- fromAweString a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified when a WebView begins
-- navigation to a certain URL.
setCallbackBeginNavigation :: WebView -> BeginNavigationCallbackHandler -> IO (FunPtr BeginNavigationCallback)
setCallbackBeginNavigation wv ah =
mkBeginNavigationCallback (defBeginNavigationCallback ah) >>=>
awe_webview_set_callback_begin_navigation wv
type BeginLoadingCallbackHandler = WebView -> String -> String -> Int -> String -> IO()
defBeginLoadingCallback :: BeginLoadingCallbackHandler -> BeginLoadingCallback
defBeginLoadingCallback convcb wv a1 a2 a3 a0 = do
ar1 <- fromAweString a1
ar2 <- fromAweString a2
let ar3 = fromIntegral a3
ar0 <- fromAweString a0
convcb wv ar1 ar2 ar3 ar0
-- | Assign a callback function to be notified when a WebView begins
-- to actually receive data from a server.
setCallbackBeginLoading :: WebView -> BeginLoadingCallbackHandler -> IO (FunPtr BeginLoadingCallback)
setCallbackBeginLoading wv ah =
mkBeginLoadingCallback (defBeginLoadingCallback ah) >>=>
awe_webview_set_callback_begin_loading wv
type FinishLoadingCallbackHandler = WebView -> IO()
defFinishLoadingCallback :: FinishLoadingCallbackHandler -> FinishLoadingCallback
defFinishLoadingCallback convcb wv = do
convcb wv
-- | Assign a callback function to be notified when a WebView has
-- finished all loads.
setCallbackFinishLoading :: WebView -> FinishLoadingCallbackHandler -> IO (FunPtr FinishLoadingCallback)
setCallbackFinishLoading wv ah =
mkFinishLoadingCallback (defFinishLoadingCallback ah) >>=>
awe_webview_set_callback_finish_loading wv
type JSCallbackHandler = WebView -> String -> String -> [Value] -> IO()
defJSCallback :: JSCallbackHandler -> JSCallback
defJSCallback convcb wv a1 a2 a0 = do
ar1 <- fromAweString a1
ar2 <- fromAweString a2
ar0 <- jsarrayToJSONValues a0
convcb wv ar1 ar2 ar0
-- | Assign a callback function to be notified when a Javascript
-- object callback has been invoked on a page.
setCallbackJS :: WebView -> JSCallbackHandler -> IO (FunPtr JSCallback)
setCallbackJS wv ah =
mkJSCallback (defJSCallback ah) >>=>
awe_webview_set_callback_js_callback wv
type ReceiveTitleCallbackHandler = WebView -> String -> String -> IO()
defReceiveTitleCallback :: ReceiveTitleCallbackHandler -> ReceiveTitleCallback
defReceiveTitleCallback convcb wv a1 a0 = do
ar1 <- fromAweString a1
ar0 <- fromAweString a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified when a page title is
-- received.
setCallbackReceiveTitle :: WebView -> ReceiveTitleCallbackHandler -> IO (FunPtr ReceiveTitleCallback)
setCallbackReceiveTitle wv ah =
mkReceiveTitleCallback (defReceiveTitleCallback ah) >>=>
awe_webview_set_callback_receive_title wv
type ChangeTooltipCallbackHandler = WebView -> String -> IO()
defChangeTooltipCallback :: ChangeTooltipCallbackHandler -> ChangeTooltipCallback
defChangeTooltipCallback convcb wv a0 = do
ar0 <- fromAweString a0
convcb wv ar0
-- | Assign a callback function to be notified when a tooltip has
-- changed state.
setCallbackChangeTooltip :: WebView -> ChangeTooltipCallbackHandler -> IO (FunPtr ChangeTooltipCallback)
setCallbackChangeTooltip wv ah =
mkChangeTooltipCallback (defChangeTooltipCallback ah) >>=>
awe_webview_set_callback_change_tooltip wv
type ChangeCursorCallbackHandler = WebView -> CursorType -> IO()
defChangeCursorCallback :: ChangeCursorCallbackHandler -> ChangeCursorCallback
defChangeCursorCallback convcb wv a0 = do
let ar0 = toEnum . fromIntegral $ a0
convcb wv ar0
-- | Assign a callback function to be notified when a cursor has
-- changed state.
setCallbackChangeCursor :: WebView -> ChangeCursorCallbackHandler -> IO (FunPtr ChangeCursorCallback)
setCallbackChangeCursor wv ah =
mkChangeCursorCallback (defChangeCursorCallback ah) >>=>
awe_webview_set_callback_change_cursor wv
type ChangeKeyboardFocusCallbackHandler = WebView -> Bool -> IO()
defChangeKeyboardFocusCallback :: ChangeKeyboardFocusCallbackHandler -> ChangeKeyboardFocusCallback
defChangeKeyboardFocusCallback convcb wv a0 = do
let ar0 = toBool a0
convcb wv ar0
-- | Assign a callback function to be notified when keyboard focus has
-- changed.
setCallbackChangeKeyboardFocus :: WebView -> ChangeKeyboardFocusCallbackHandler -> IO (FunPtr ChangeKeyboardFocusCallback)
setCallbackChangeKeyboardFocus wv ah =
mkChangeKeyboardFocusCallback (defChangeKeyboardFocusCallback ah) >>=>
awe_webview_set_callback_change_keyboard_focus wv
type ChangeTargetUrlCallbackHandler = WebView -> String -> IO()
defChangeTargetUrlCallback :: ChangeTargetUrlCallbackHandler -> ChangeTargetUrlCallback
defChangeTargetUrlCallback convcb wv a0 = do
ar0 <- fromAweString a0
convcb wv ar0
-- | Assign a callback function to be notified when the target URL has
-- changed. This is usually the result of hovering over a link on the
-- page.
setCallbackChangeTargetUrl :: WebView -> ChangeTargetUrlCallbackHandler -> IO (FunPtr ChangeTargetUrlCallback)
setCallbackChangeTargetUrl wv ah =
mkChangeTargetUrlCallback (defChangeTargetUrlCallback ah) >>=>
awe_webview_set_callback_change_target_url wv
type OpenExternalLinkCallbackHandler = WebView -> String -> String -> IO()
defOpenExternalLinkCallback :: OpenExternalLinkCallbackHandler -> OpenExternalLinkCallback
defOpenExternalLinkCallback convcb wv a1 a0 = do
ar1 <- fromAweString a1
ar0 <- fromAweString a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified when an external link
-- is attempted to be opened. An external link is any link that
-- normally opens in a new window in a standard browser (for example,
-- links with @target=\"_blank\"@, calls to @window.open(url)@, and
-- URL open events from Flash plugins).
setCallbackOpenExternalLink :: WebView -> OpenExternalLinkCallbackHandler -> IO (FunPtr OpenExternalLinkCallback)
setCallbackOpenExternalLink wv ah =
mkOpenExternalLinkCallback (defOpenExternalLinkCallback ah) >>=>
awe_webview_set_callback_open_external_link wv
type RequestDownloadCallbackHandler = WebView -> String -> IO()
defRequestDownloadCallback :: RequestDownloadCallbackHandler -> RequestDownloadCallback
defRequestDownloadCallback convcb wv a0 = do
ar0 <- fromAweString a0
convcb wv ar0
-- | Assign a callback function to be notified when a page requests
-- for a certain URL to be downloaded by the user.
setCallbackRequestDownload :: WebView -> RequestDownloadCallbackHandler -> IO (FunPtr RequestDownloadCallback)
setCallbackRequestDownload wv ah =
mkRequestDownloadCallback (defRequestDownloadCallback ah) >>=>
awe_webview_set_callback_request_download wv
type WebViewCrashedCallbackHandler = WebView -> IO()
defWebViewCrashedCallback :: WebViewCrashedCallbackHandler -> WebViewCrashedCallback
defWebViewCrashedCallback convcb wv = do
convcb wv
-- | Assign a callback function to be notified when the renderer for
-- a certain WebView (which is isolated in a separate process) crashes
-- unexpectedly.
setCallbackWebViewCrashed :: WebView -> WebViewCrashedCallbackHandler -> IO (FunPtr WebViewCrashedCallback)
setCallbackWebViewCrashed wv ah =
mkWebViewCrashedCallback (defWebViewCrashedCallback ah) >>=>
awe_webview_set_callback_web_view_crashed wv
type PluginCrashedCallbackHandler = WebView -> String -> IO()
defPluginCrashedCallback :: PluginCrashedCallbackHandler -> PluginCrashedCallback
defPluginCrashedCallback convcb wv a0 = do
ar0 <- fromAweString a0
convcb wv ar0
-- | Assign a callback function to be notified when when the renderer
-- for a certain plugin (usually Flash, which is isolated in
-- a separate process) crashes unexpectedly.
setCallbackPluginCrashed :: WebView -> PluginCrashedCallbackHandler -> IO (FunPtr PluginCrashedCallback)
setCallbackPluginCrashed wv ah =
mkPluginCrashedCallback (defPluginCrashedCallback ah) >>=>
awe_webview_set_callback_plugin_crashed wv
type RequestMoveCallbackHandler = WebView -> Int -> Int -> IO()
defRequestMoveCallback :: RequestMoveCallbackHandler -> RequestMoveCallback
defRequestMoveCallback convcb wv a1 a0 = do
let ar1 = fromIntegral a1
let ar0 = fromIntegral a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified when the page requests
-- for the containing window to be moved to a certain location on the
-- screen.
setCallbackRequestMove :: WebView -> RequestMoveCallbackHandler -> IO (FunPtr RequestMoveCallback)
setCallbackRequestMove wv ah =
mkRequestMoveCallback (defRequestMoveCallback ah) >>=>
awe_webview_set_callback_request_move wv
type GetPageContentsCallbackHandler = WebView -> String -> String -> IO()
defGetPageContentsCallback :: GetPageContentsCallbackHandler -> GetPageContentsCallback
defGetPageContentsCallback convcb wv a1 a0 = do
ar1 <- fromAweString a1
ar0 <- fromAweString a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified when the contents of
-- the page has finished loading. This occurs at the end of most page
-- loads.
setCallbackGetPageContents :: WebView -> GetPageContentsCallbackHandler -> IO (FunPtr GetPageContentsCallback)
setCallbackGetPageContents wv ah =
mkGetPageContentsCallback (defGetPageContentsCallback ah) >>=>
awe_webview_set_callback_get_page_contents wv
type DomReadyCallbackHandler = WebView -> IO()
defDomReadyCallback :: DomReadyCallbackHandler -> DomReadyCallback
defDomReadyCallback convcb wv = do
convcb wv
-- | Assign a callback function to be notified once the DOM (Document
-- Object Model) for a page is ready. This is very useful for
-- executing Javascript on a page before its content has finished
-- loading.
setCallbackDomReady :: WebView -> DomReadyCallbackHandler -> IO (FunPtr DomReadyCallback)
setCallbackDomReady wv ah =
mkDomReadyCallback (defDomReadyCallback ah) >>=>
awe_webview_set_callback_dom_ready wv
type RequestFileChooserCallbackHandler = WebView -> Bool -> String -> String -> IO()
defRequestFileChooserCallback :: RequestFileChooserCallbackHandler -> RequestFileChooserCallback
defRequestFileChooserCallback convcb wv a1 a2 a0 = do
let ar1 = toBool a1
ar2 <- fromAweString a2
ar0 <- fromAweString a0
convcb wv ar1 ar2 ar0
-- | Assign a callback function to be notified whenever a page
-- requests a file chooser dialog to be displayed (usually the result
-- of an @input@ element with type @file@ being clicked by a user).
-- You will need to display your own dialog (it does not have to be
-- modal, this request does not block). Once a file has been chosen
-- by the user, 'Graphics.UI.Awesomium.WebView.chooseFile'
-- should be called.
setCallbackRequestFileChooser :: WebView -> RequestFileChooserCallbackHandler -> IO (FunPtr RequestFileChooserCallback)
setCallbackRequestFileChooser wv ah =
mkRequestFileChooserCallback (defRequestFileChooserCallback ah) >>=>
awe_webview_set_callback_request_file_chooser wv
type GetScrollDataCallbackHandler = WebView -> Int -> Int -> Int -> Int -> Int -> IO()
defGetScrollDataCallback :: GetScrollDataCallbackHandler -> GetScrollDataCallback
defGetScrollDataCallback convcb wv a1 a2 a3 a4 a0 = do
let ar1 = fromIntegral a1
let ar2 = fromIntegral a2
let ar3 = fromIntegral a3
let ar4 = fromIntegral a4
let ar0 = fromIntegral a0
convcb wv ar1 ar2 ar3 ar4 ar0
-- | Assign a callback function to be notified of a response to
-- 'Graphics.UI.Awesomium.WebView.requestScrollData'.
setCallbackGetScrollData :: WebView -> GetScrollDataCallbackHandler -> IO (FunPtr GetScrollDataCallback)
setCallbackGetScrollData wv ah =
mkGetScrollDataCallback (defGetScrollDataCallback ah) >>=>
awe_webview_set_callback_get_scroll_data wv
type JsConsoleMessageCallbackHandler = WebView -> String -> Int -> String -> IO()
defJsConsoleMessageCallback :: JsConsoleMessageCallbackHandler -> JsConsoleMessageCallback
defJsConsoleMessageCallback convcb wv a1 a2 a0 = do
ar1 <- fromAweString a1
let ar2 = fromIntegral a2
ar0 <- fromAweString a0
convcb wv ar1 ar2 ar0
-- | Assign a callback function to be notified of any Javascript
-- console messages. (Usually Javascript errors encountered in
-- scripts)
setCallbackJsConsoleMessage :: WebView -> JsConsoleMessageCallbackHandler -> IO (FunPtr JsConsoleMessageCallback)
setCallbackJsConsoleMessage wv ah =
mkJsConsoleMessageCallback (defJsConsoleMessageCallback ah) >>=>
awe_webview_set_callback_js_console_message wv
type GetFindResultsCallbackHandler = WebView -> Int -> Int -> Rect -> Int -> Bool -> IO()
defGetFindResultsCallback :: GetFindResultsCallbackHandler -> GetFindResultsCallback
defGetFindResultsCallback convcb wv a1 a2 a3 a4 a0 = do
let ar1 = fromIntegral a1
let ar2 = fromIntegral a2
ar3 <- peek a3
let ar4 = fromIntegral a4
let ar0 = toBool a0
convcb wv ar1 ar2 ar3 ar4 ar0
-- | Assign a callback function to be notified whenever we receive
-- results back from an in-page find operation
-- ('Graphics.UI.Awesomium.WebView.find').
setCallbackGetFindResults :: WebView -> GetFindResultsCallbackHandler -> IO (FunPtr GetFindResultsCallback)
setCallbackGetFindResults wv ah =
mkGetFindResultsCallback (defGetFindResultsCallback ah) >>=>
awe_webview_set_callback_get_find_results wv
type UpdateImeCallbackHandler = WebView -> ImeState -> Rect -> IO()
defUpdateImeCallback :: UpdateImeCallbackHandler -> UpdateImeCallback
defUpdateImeCallback convcb wv a1 a0 = do
let ar1 = toEnum . fromIntegral $ a1
ar0 <- peek a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified whenever the user does
-- something that may change the position or visiblity of the IME
-- Widget. This callback is only active when IME is activated (please
-- see 'Graphics.UI.Awesomium.WebView.activateIme').
setCallbackUpdateIme :: WebView -> UpdateImeCallbackHandler -> IO (FunPtr UpdateImeCallback)
setCallbackUpdateIme wv ah =
mkUpdateImeCallback (defUpdateImeCallback ah) >>=>
awe_webview_set_callback_update_ime wv
type ShowContextMenuCallbackHandler = WebView -> Int -> Int -> MediaType -> Int {-MediaState-} -> String -> String -> String -> String -> String -> Bool -> Int {-CanEditFlags-} -> IO()
defShowContextMenuCallback :: ShowContextMenuCallbackHandler -> ShowContextMenuCallback
defShowContextMenuCallback convcb wv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a0 = do
let ar1 = fromIntegral a1
let ar2 = fromIntegral a2
let ar3 = toEnum . fromIntegral $ a3
let ar4 = fromIntegral a4
ar5 <- fromAweString a5
ar6 <- fromAweString a6
ar7 <- fromAweString a7
ar8 <- fromAweString a8
ar9 <- fromAweString a9
let ar10 = toBool a10
let ar0 = fromIntegral a0
convcb wv ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 ar0
-- | Assign a callback function to be notified whenever the page
-- requests a context menu to be shown (usually the result of a user
-- right-clicking somewhere on the page). It is your responsiblity to
-- display a menu for the user to select an appropriate action.
setCallbackShowContextMenu :: WebView -> ShowContextMenuCallbackHandler -> IO (FunPtr ShowContextMenuCallback)
setCallbackShowContextMenu wv ah =
mkShowContextMenuCallback (defShowContextMenuCallback ah) >>=>
awe_webview_set_callback_show_context_menu wv
type RequestLoginCallbackHandler = WebView -> Int -> String -> Bool -> String -> String -> String -> IO()
defRequestLoginCallback :: RequestLoginCallbackHandler -> RequestLoginCallback
defRequestLoginCallback convcb wv a1 a2 a3 a4 a5 a0 = do
let ar1 = fromIntegral a1
ar2 <- fromAweString a2
let ar3 = toBool a3
ar4 <- fromAweString a4
ar5 <- fromAweString a5
ar0 <- fromAweString a0
convcb wv ar1 ar2 ar3 ar4 ar5 ar0
-- | Assign a callback function to be notified whenever a page
-- requests authentication from the user (ex, Basic HTTP Auth, NTLM
-- Auth, etc.). See 'Graphics.UI.Awesomium.WebView.login' and
-- 'Graphics.UI.Awesomium.WebView.cancelLogin'.
setCallbackRequestLogin :: WebView -> RequestLoginCallbackHandler -> IO (FunPtr RequestLoginCallback)
setCallbackRequestLogin wv ah =
mkRequestLoginCallback (defRequestLoginCallback ah) >>=>
awe_webview_set_callback_request_login wv
type ChangeHistoryCallbackHandler = WebView -> Int -> Int -> IO()
defChangeHistoryCallback :: ChangeHistoryCallbackHandler -> ChangeHistoryCallback
defChangeHistoryCallback convcb wv a1 a0 = do
let ar1 = fromIntegral a1
let ar0 = fromIntegral a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified whenever the history
-- state has changed. (eg, the state of thie back/forward buttons
-- should be updated)
setCallbackChangeHistory :: WebView -> ChangeHistoryCallbackHandler -> IO (FunPtr ChangeHistoryCallback)
setCallbackChangeHistory wv ah =
mkChangeHistoryCallback (defChangeHistoryCallback ah) >>=>
awe_webview_set_callback_change_history wv
type FinishResizeCallbackHandler = WebView -> Int -> Int -> IO()
defFinishResizeCallback :: FinishResizeCallbackHandler -> FinishResizeCallback
defFinishResizeCallback convcb wv a1 a0 = do
let ar1 = fromIntegral a1
let ar0 = fromIntegral a0
convcb wv ar1 ar0
-- | Assign a callback function to be notified whenever a WebView has
-- finished resizing to a certain size (and has finished repainting
-- the RenderBuffer).
setCallbackFinishResize :: WebView -> FinishResizeCallbackHandler -> IO (FunPtr FinishResizeCallback)
setCallbackFinishResize wv ah =
mkFinishResizeCallback (defFinishResizeCallback ah) >>=>
awe_webview_set_callback_finish_resize wv
type ShowJavascriptDialogCallbackHandler = WebView -> Int -> Int {-DialogFlags-} -> String -> String -> String -> IO()
defShowJavascriptDialogCallback :: ShowJavascriptDialogCallbackHandler -> ShowJavascriptDialogCallback
defShowJavascriptDialogCallback convcb wv a1 a2 a3 a4 a0 = do
let ar1 = fromIntegral a1
let ar2 = fromIntegral a2
ar3 <- fromAweString a3
ar4 <- fromAweString a4
ar0 <- fromAweString a0
convcb wv ar1 ar2 ar3 ar4 ar0
-- | Assign a callback function to be notified whenever a WebView
-- requests that a certain Javascript dialog be shown (eg, alert,
-- confirm, prompt). See
-- 'Graphics.UI.Awesomium.WebView.closeJavascriptDialog' for more
-- information.
setCallbackShowJavascriptDialog :: WebView -> ShowJavascriptDialogCallbackHandler -> IO (FunPtr ShowJavascriptDialogCallback)
setCallbackShowJavascriptDialog wv ah =
mkShowJavascriptDialogCallback (defShowJavascriptDialogCallback ah) >>=>
awe_webview_set_callback_show_javascript_dialog wv