CodeView.st
author claus
Fri, 03 Jun 1994 16:51:20 +0200
changeset 32 b6c23dfd5663
parent 27 a7dd7c7528a9
child 38 4b9b70b2cc87
permissions -rw-r--r--
*** empty log message ***

"
 COPYRIGHT (c) 1989 by Claus Gittinger
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"

Workspace subclass:#CodeView
       instanceVariableNames:'acceptAction explainAction'
       classVariableNames:''
       poolDictionaries:''
       category:'Interface-Workspace'
!

CodeView comment:'

COPYRIGHT (c) 1989 by Claus Gittinger
            All Rights Reserved

$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.8 1994-06-03 14:51:20 claus Exp $
written winter-89 by claus
'!

!CodeView class methodsFor:'documentation'!

documentation
"
    a view for code which can recompile its contents. It adds accept and explain
    to the menu, and defines two actions: acceptAction to be performed for accept
    and explainAction to be performed for explain.

    These actions are to be defined by the user of this view (i.e. the surrounding browser)
"
! !

!CodeView methodsFor:'initialization'!

initializeMiddleButtonMenu
    self middleButtonMenu:(PopUpMenu
                                labels: (resources array:#(
"
                                         'undo'
"
                                         'again'
                                         '-'
                                         'copy'
                                         'cut'
                                         'paste'
                                         '-'
                                         'doIt'
                                         'printIt'
                                         'inspectIt'
                                         '-'
                                         'accept'
                                         '-'
                                         'others'
                                        ))
                             selectors:#(
"
                                         undo
"
                                         again
                                         nil
                                         copySelection
                                         cut
                                         paste
                                         nil
                                         doIt
                                         printIt
                                         inspectIt
                                         nil
                                         accept
                                         nil
                                         others
                                        )
                                receiver:self
                                     for:self).

    middleButtonMenu subMenuAt:#others put:(PopUpMenu
                                labels:(resources array:#(
                                         'search ...'
                                         'goto ...'
                                         '-'
                                         'explain'
                                         '-'
                                         'font ...'
                                         '-'
                                         'indent'
                                         '-'
                                         'save as ...'
                                         'print'
                                        ))
                              selectors:#(
                                          search
                                          gotoLine
                                          nil
                                          explain
                                          nil
                                          changeFont
                                          nil
                                          indent
                                          nil
                                          save
                                          print
                                         )
                                receiver:self
                                     for:self).

    self enableOrDisableSelectionMenuEntries
! !

!CodeView methodsFor:'accessing'!

acceptAction:aBlock
    "set the action to be performed on accept"

    acceptAction := aBlock
!

acceptAction
    "return the action to be performed on accept (or nil)"

    ^ acceptAction
!

explainAction:aBlock
    "set the action to be performed on explain"

    explainAction := aBlock
! !

!CodeView methodsFor:'selections'!

disableSelectionMenuEntries
    "disable relevant menu entries for a selection"

    super disableSelectionMenuEntries.
    middleButtonMenu disable:#explain
!

enableSelectionMenuEntries
    "enable relevant menu entries for a selection"

    super enableSelectionMenuEntries.
    middleButtonMenu enable:#explain
! !

!CodeView methodsFor:'user actions'!

accept
    "accept action;
     save cursor and selection; then execute the accept-action
     and finally restore cursor and selection"

    acceptAction notNil ifTrue:[
        codeStartPosition := 1.

        abortBlock := [
            self cursor:Cursor normal.
            "redraw selection in normal color"
            self selectFromLine:selectionStartLine col:selectionStartCol 
                         toLine:selectionEndLine col:selectionEndCol.
            abortBlock := nil.
            ^ nil
        ].
        [
            Object abortSignal catch:[
                acceptAction value:(self list "contents")
            ]
        ] valueNowOrOnUnwindDo:[
            self unselect.
            abortBlock := nil
        ]
    ]
!

explain
    "explain action;
     evaluate the explainBlock passing whole contents and 
     selection as arguments."

    |text|

    explainAction notNil ifTrue:[
        text := self selection.
        text notNil ifTrue:[
            explainAction value:(self contents)
                          value:(text asString)
        ]
    ]
! !

!CodeView methodsFor:'events'!

keyPress:key x:x y:y
    "catch keyboard shortcuts"

    (key == #Accept)  ifTrue:[^ self accept].
    (key == #Explain) ifTrue:[^ self explain].
    (key == #Help)    ifTrue:[^ self explain].
    super keyPress:key x:x y:y
! !