CodeView.st
author claus
Wed, 13 Oct 1993 02:01:27 +0100
changeset 2 880bbcc50207
parent 0 e6a541c1c0eb
child 4 88eb91574867
permissions -rw-r--r--
*** empty log message ***

"
 COPYRIGHT (c) 1989-93 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-93 by Claus Gittinger
            All Rights Reserved

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.

$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.2 1993-10-13 01:01:27 claus Exp $
written winter-89 by claus
'!

!CodeView methodsFor:'initialization'!

initializeMiddleButtonMenu
    |labels|

    labels := resources array:#("
                               'undo'
                               '-'
                               "
                               'copy'
                               'cut'
                               'paste'
                               'replace'
                               '-'
                               'font'
                               '-'
                               'search'
                               'goto'
                               '-'
                               'indent'
                               '-'
                               'save'
                               'print'
                            "  'filein' "
                               '-'
                               'doIt'
                               'printIt'
                               'inspectIt'
                               '-'
                               'explain'
                               '-'
                               'accept').

    self middleButtonMenu:(PopUpMenu 
                                labels:labels
                             selectors:#(copySelection
                                         cut 
                                         paste 
                                         replace
                                         nil 
                                         changeFont
                                         nil 
                                         search
                                         gotoLine
                                         nil 
                                         indent
                                         nil 
                                         save
                                         print
                                       "  fileItIn "
                                         nil 
                                         doIt 
                                         printIt 
                                         inspectIt 
                                         nil 
                                         explain
                                         nil 
                                         accept)
                                receiver:self
                                     for:self).

! !

!CodeView methodsFor:'accessing'!

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

    acceptAction := aBlock
!

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.
"
        self cursor:Cursor wait.
"
        abortBlock := [
            self cursor:Cursor normal.
            "redraw selection in normal color"
            self selectFromLine:selectionStartLine col:selectionStartCol 
                         toLine:selectionEndLine col:selectionEndCol.
            abortBlock := nil.
            ^ nil
        ].
        [
            acceptAction value:(self contents)
        ] valueNowOrOnUnwindDo:[
"
            self cursor:Cursor normal.
"
            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 shortcut: control-a for accept"

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