Saturday, March 26, 2011

gnocl::webKit

In response to a post made to the Tcler's wiki earlier this week, todays TLC was given to the gnocl::webKit package. Ok, its all still pretty well early stuff but the core navigation controls are there. Looking at things, perhaps the name of the core command should be changed to gnocl::webView. There are no docs yet, but all the key implemented options  and commands are used in the following test script.

#---------------
# test-webkit.tcl
#---------------
# Created by William J Giddings
# 26-Mar-11
#---------------
# Description:
#
#---------------

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

package require Gnocl
package require GnoclWebKit

#--------------
#
#--------------
proc gnocl::browser { {home webkit.org} } {

    # create container
    set bx [gnocl::box -orientation vertical]

    # global $bx.tbar
    global ${bx}.wk
    global ${bx}.tbar
    global ${bx}.ent

    global ${bx}.home

    set ${bx}.home $home

    # create key components, toolbar and browser
    set tbar [gnocl::toolBar]
    set wk [gnocl::webKit -transparent 1]

    set b [$tbar add item -icon %#GoBack -tooltip "Go Back"]
    set f [$tbar add item -icon %#GoForward  -tooltip "Go Forward"]
    set r [ $tbar add item -icon %#Refresh  -tooltip "Reload"]
    set s [$tbar add item -icon %#Cancel  -tooltip "Stop"]
    set h [$tbar add item -icon %#Home -tooltip "Home"]

    set ent [gnocl::entry -widthChars 85]
    $tbar add widget $ent

    # set toolbar behaviours
    $b configure -onClicked "$wk back"
    $f configure -onClicked "$wk forward"
    $r configure -onClicked "$wk reload"
    $s configure -onClicked "$wk stop"
    #$h configure -onClicked "$wk load http://$home"

    $h configure -onClicked  { set $browser.uri [loadPage $browser.wk [set $browser.home] ] }

    $ent configure \
        -onActivate { set $browser.uri [loadPage $browser.wk %t] } \
        -variable ${bx}.uri \


    # pack major components
    $bx add $tbar
    $bx add $wk -fill {1 1} -expand 1

    # create global access
    set ${bx}.wk $wk
    set ${bx}.tbar $tbar
    set ${bx}.ent $ent

    return $bx
}

#---------------
#
#---------------
proc loadPage {viewer page} {

    # string compare ?-nocase? ?-length int? string1 string2
    if { [string compare -length 7 "http://" $page] != 0 } {
        set page "http://$page"
    }

    [set $viewer] load $page

    return $page
}


set browser [gnocl::browser]

gnocl::window \
    -child $browser \
    -setSize 0.75 \
    -title "Gnocl WebKit Demo" \
    -onDestroy { exit }

gnocl::mainLoop

No comments: