From: Andy S. <And...@co...> - 2010-03-20 15:18:38
|
Sat Mar 20 11:17:26 EDT 2010 Andy Stewart <laz...@gm...> * Add WebKit demo. Ignore-this: cddf99434ea4b04a41e1f13c3b91d177 adddir ./demo/webkit addfile ./demo/webkit/Makefile hunk ./demo/webkit/Makefile 1 + +PROGS = webkit +SOURCES = Webkit.hs + +all : $(PROGS) + +webkit : Webkit.hs + $(HC) --make $< -o $@ $(HCFLAGS) + +clean: + rm -f $(SOURCES:.hs=.hi) $(SOURCES:.hs=.o) $(PROGS) + +HC=ghc addfile ./demo/webkit/Webkit.hs hunk ./demo/webkit/Webkit.hs 1 +-- | WebKit browser demo. +-- Author : Andy Stewart +-- Copyright : (c) 2010 Andy Stewart <laz...@gm...> + +-- | This simple browser base on WebKit API. +-- For simple, i just make all link open in current window. +-- Of course, you can integrate signal `createWebView` with `notebook` +-- to build multi-tab browser. +-- +-- You can click right-button for forward or backward page. +-- +-- Usage: +-- webkit [uri] +-- +module Main where + +import Graphics.UI.Gtk +import Graphics.UI.Gtk.General.Structs +import Graphics.UI.Gtk.WebKit.WebView +import Graphics.UI.Gtk.WebKit.WebFrame + +import System.Process +import System.Environment [_$_] + +-- | Main entry. +main :: IO () +main = do + -- Get program arguments. + args <- getArgs + case args of + -- Display help + ["--help"] -> do + putStrLn $ "Welcome to Gtk2hs WebKit demo. :)\n\n" ++ [_$_] + "Usage: webkit [uri]\n\n" ++ + " -- Gtk2hs Team" + -- Start program. + [arg] -> browser arg -- entry user input url + _ -> browser "http://www.google.com" -- entry default url + +-- | Internal browser fucntion. +browser :: String -> IO () +browser url = do + -- Init. + initGUI + [_$_] + -- Create window. + window <- windowNew + windowSetDefaultSize window 900 600 + windowSetPosition window WinPosCenter + windowSetOpacity window 0.8 -- this function need window-manager support Alpha channel in X11 + + -- Create WebKit view. + webView <- webViewNew + [_$_] + -- Create window box. + winBox <- vBoxNew False 0 + [_$_] + -- Create address bar. + addressBar <- entryNew + + -- Create scroll window. + scrollWin <- scrolledWindowNew Nothing Nothing + + -- Load uri. + webViewLoadUri webView url + entrySetText addressBar url + + -- Open uri when user press `return` at address bar. + onEntryActivate addressBar $ do + uri <- entryGetText addressBar -- get uri from address bar + webViewLoadUri webView uri -- load new uri + + -- Add current uri to address bar when load start. + webView `on` loadStarted $ \frame -> do + currentUri <- webFrameGetUri frame + case currentUri of + Just uri -> entrySetText addressBar uri + Nothing -> return () + + -- Open all link in current window. + webView `on` createWebView $ \frame -> do + newUri <- webFrameGetUri frame + case newUri of + Just uri -> webViewLoadUri webView uri + Nothing -> return () + return webView + + -- Connect and show. + boxPackStart winBox addressBar PackNatural 0 + boxPackStart winBox scrollWin PackGrow 0 + window `containerAdd` winBox + scrollWin `containerAdd` webView + window `onDestroy` mainQuit + widgetShowAll window + + mainGUI |