.
"
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.14 1995-05-03 00:28:53 claus Exp $
'!
!CodeView class methodsFor:'documentation'!
copyright
"
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.
"
!
version
"
$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.14 1995-05-03 00:28:53 claus Exp $
"
!
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. ususally the owning browser)
"
! !
!CodeView methodsFor:'initialization'!
editMenu
|m sub idx|
m := super editMenu.
"
codeViews do support #accept
"
idx := m indexOf:#inspectIt.
idx ~~ 0 ifTrue:[
m addLabels:(resources array:#('-' 'accept'))
selectors:#(nil accept)
after:idx.
].
"
and explain in the extra menu
"
sub := m subMenuAt:#others.
sub notNil ifTrue:[
idx := sub indexOf:#gotoLine.
sub addLabels:(resources array:#('-' 'explain'))
selectors:#(nil explain)
after:idx.
self hasSelection ifFalse:[
sub disable:#explain
].
].
^ m.
! !
!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:'user actions'!
accept
"accept action;
save cursor and selection; then execute the accept-action and/or
accept change. Finally restore cursor and selection."
codeStartPosition := 1.
[
Object abortSignal handle:[:ex |
self cursor:Cursor normal.
"redraw selection in normal color"
self selectFromLine:selectionStartLine col:selectionStartCol
toLine:selectionEndLine col:selectionEndCol.
ex return
] do:[
|n|
"/
"/ ST/X way of doing things
"/
acceptAction notNil ifTrue:[
acceptAction value:(self list "contents")
].
"/
"/ MVC way of doing it
"/
self sendChangeMessageWith:self contents
]
] valueNowOrOnUnwindDo:[
self unselect.
]
!
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:'event handling'!
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
! !