WebKitView.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 10 Jun 2011 09:06:56 +0000
changeset 15 f46eba00e7cb
parent 11 9388b5fb34aa
child 18 92189b67e243
permissions -rw-r--r--
- WebKitView now uses bundled uzbl-core - Warning is shown on unsupported platforms

"{ Package: 'stx:libwebkit' }"

SimpleView subclass:#WebKitView
	instanceVariableNames:'rendererView url title progress'
	classVariableNames:''
	poolDictionaries:''
	category:'Views-WebKit'
!


!WebKitView class methodsFor:'queries'!

isAvailable

    ^WebKitRenderer isAvailable

    "Created: / 10-06-2011 / 09:58:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView class methodsFor:'startup'!

open

    |url webkitView urlView  topView|

    url := 'http://www.webkit.org' asValue.

    topView := StandardSystemView new                ;
                extent:(640 @ 480).
    topView label:'WebKit demo'.

    urlView := EditField in: topView.
    urlView layout: (LayoutFrame fractions:(0 @ 0 corner:1.0 @ 0) offsets:(0 @ 0 corner:0 @ 25)).
    urlView model: url.

    webkitView := self in:topView.
    webkitView layout: (LayoutFrame fractions:(0 @ 0 corner:1.0 @ 1.0) offsets:(0 @ 26 corner:0 @ 0)).
    webkitView url: url.

    topView open.

    ^ webkitView

    "
     WebKitView open
    "

    "Modified: / 16-05-1998 / 16:53:53 / cg"
    "Created: / 03-06-2011 / 09:40:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView methodsFor:'accessing'!

rendererView
    ^ rendererView
! !

!WebKitView methodsFor:'accessing - classes'!

rendererClass

    ^WebKitRenderer

    "Created: / 03-06-2011 / 09:38:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView methodsFor:'aspects'!

progress
    "return/create the 'progress' value holder (automatically generated)"

    progress isNil ifTrue:[
        progress := ValueHolder new.
        progress addDependent:self.
    ].
    ^ progress
!

progress:something
    "set the 'progress' value holder (automatically generated)"

    |oldValue newValue|

    progress notNil ifTrue:[
        oldValue := progress value.
        progress removeDependent:self.
    ].
    progress := something.
    progress notNil ifTrue:[
        progress addDependent:self.
    ].
    newValue := progress value.
    oldValue ~~ newValue ifTrue:[
        self update:#value with:newValue from:progress.
    ].
!

title
    "return/create the 'title' value holder (automatically generated)"

    title isNil ifTrue:[
        title := ValueHolder new.
    ].
    ^ title
!

title:something
    "set the 'title' value holder (automatically generated)"

    title := something.
!

url
    "return/create the 'url' value holder (automatically generated)"

    url isNil ifTrue:[
        url := ValueHolder new.
        url addDependent:self.
    ].
    ^ url
!

url:something
    "set the 'url' value holder (automatically generated)"

    |oldValue newValue|

    url notNil ifTrue:[
        oldValue := url value.
        url removeDependent:self.
    ].
    url := something.
    url notNil ifTrue:[
        url addDependent:self.
    ].
    newValue := url value.
    newValue ifNil:[url setValue:(newValue := 'about:blank')].
    oldValue ~~ newValue ifTrue:[
        self update:#value with:newValue from:url.
    ].

    "Modified: / 07-06-2011 / 23:03:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView methodsFor:'change & update'!

update:aspect with:param from:changedObject
    "Invoked when an object that I depend upon sends a change notification."

    "stub code automatically generated - please change as required"

    (changedObject == url and:[aspect ~~ #valueFromEvent]) ifTrue:[
        self updateUrl.
         ^ self.
    ].
    super update:aspect with:param from:changedObject

    "Modified: / 07-06-2011 / 11:43:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

updateUrl

    renderer setVariable: #uri to: self url value

    "Created: / 07-06-2011 / 10:18:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView methodsFor:'initialization & release'!

initialize
    super initialize.
    renderer := self rendererClass for:self.
    renderer isAvailable ifTrue:[
        "/JV@2011-06-10: TODO: Use different embedding container on
        "/Windows. once supported"
        rendererView := XEmbedContainerView in: self.
    ] ifFalse:[
        rendererView := Label new label:'WebKitView not (yet) available on this platform.'.
    ].
    rendererView origin: 0.0@0.0 corner: 1.0@1.0.
    rendererView useWorkaround: #uzbl.

    "Created: / 02-06-2011 / 23:46:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 10-06-2011 / 10:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView methodsFor:'realization'!

postRealize
    super postRealize.
    renderer isAvailable ifTrue:
        [renderer spawn].

    "Created: / 06-06-2011 / 10:40:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 10-06-2011 / 09:59:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!WebKitView class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !