"
COPYRIGHT (c) 2001 by eXept Software AG
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.
"
"{ Package: 'stx:libtool' }"
MultiViewApplication subclass:#TerminalApplication
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'Interface-Smalltalk'
!
!TerminalApplication class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 2001 by eXept Software AG
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.
"
!
documentation
"
A simple wrapper around a WorkSpace-View, adding a pullDown menu.
[author:]
Claus Gittinger
"
! !
!TerminalApplication class methodsFor:'interface specs'!
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:TerminalApplication andSelector:#windowSpec
TerminalApplication new openInterface:#windowSpec
TerminalApplication open
"
<resource: #canvas>
^
#(#FullSpec
#name: #windowSpec
#window:
#(#WindowSpec
#label: 'Terminal'
#name: 'Terminal'
#min: #(#Point 10 10)
#bounds: #(#Rectangle 13 23 445 264)
#menu: #mainMenu
)
#component:
#(#SpecCollection
#collection: #(
#(#NoteBookViewSpec
#name: 'NoteBook1'
#layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#model: #selectedWorkspaceIndexHolder
#menu: #tabList
#useIndex: true
#accessTabMenuAction: #tabMenuAt:
#canvas: #workspaceHolder
#canvasInset: 0
#canvasFrameLevel: 0
#keepCanvasAlive: true
#tabLevel: 1
)
)
)
)
! !
!TerminalApplication class methodsFor:'menu specs'!
mainMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:WorkspaceApplication andSelector:#mainMenu
(Menu new fromLiteralArrayEncoding:(WorkspaceApplication mainMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'File'
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'New Shell'
#itemValue: #newWorkspace
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Playback File...'
#itemValue: #menuPlayback
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Save As...'
#itemValue: #menuSaveAs
#translateLabel: true
)
#(#MenuItem
#enabled: #hasMultipleBuffersHolder
#label: 'Save all As...'
#itemValue: #menuSaveAllAs
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Exit'
#itemValue: #closeRequest
#translateLabel: true
)
)
nil
nil
)
)
#(#MenuItem
#label: 'Buffers'
#nameKey: #Buffer
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'Add Buffer'
#itemValue: #addWorkspace
#translateLabel: true
)
#(#MenuItem
#label: 'Rename...'
#itemValue: #renameWorkspace
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#enabled: #canRemoveWorkspace
#label: 'Remove Buffer'
#itemValue: #removeWorkspace
#translateLabel: true
)
)
nil
nil
)
)
#(#MenuItem
#label: 'Edit'
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#enabled: #hasSelectionInActiveWorkspace
#label: 'Copy'
#itemValue: #copySelection
#translateLabel: true
)
#(#MenuItem
#label: 'Paste'
#itemValue: #paste
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Select All'
#itemValue: #selectAll
#translateLabel: true
)
)
nil
nil
)
)
#(#MenuItem
#label: 'Shell'
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'Interrupt'
#itemValue: #doSendInterrupt
#translateLabel: true
)
#(#MenuItem
#label: 'Kill'
#itemValue: #doSendKill
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Reset Terminal'
#itemValue: #doReset
#translateLabel: true
)
)
nil
nil
)
)
#(#MenuItem
#label: 'Help'
#translateLabel: true
#startGroup: #right
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'Documentation'
#itemValue: #openDocumentation
#translateLabel: true
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'About this Application...'
#itemValue: #openAboutThisApplication
#translateLabel: true
)
)
nil
nil
)
)
)
nil
nil
)
!
tabMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:WorkspaceApplication andSelector:#tabMenu
(Menu new fromLiteralArrayEncoding:(WorkspaceApplication tabMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'Add Buffer'
#translateLabel: true
"/ #triggerOnDown: true
#value: #addWorkspace
)
#(#MenuItem
#label: 'Rename...'
#translateLabel: true
"/ #triggerOnDown: true
#value: #renameWorkspace:
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Remove Buffer'
#translateLabel: true
"/ #triggerOnDown: true
#value: #removeWorkspace:
#enabled: #canRemoveWorkspace:
)
)
nil
nil
)
! !
!TerminalApplication class methodsFor:'special startup'!
openWith:initialText
"launch a new terminal with some initial contents"
^ self openWith:initialText selected:false
"
TerminalApplication openWith:'Transcript showCR:''hello world'''
"
!
openWith:initialText selected:selectedBoolean
"launch a new terminal with some initial contents"
|workspace|
workspace := self new.
workspace open.
workspace selectedWorkspace contents:initialText selected:selectedBoolean.
^ workspace
"
TerminalApplication openWith:'Transcript showCR:''hello world'''
"
! !
!TerminalApplication methodsFor:'menu-actions'!
addWorkspace
self addWindow:(self createWorkspace) named:'Terminal%1'
!
createWorkspace
|scr|
scr := (HVScrollableView for:VT100TerminalView).
self window realized ifTrue:[
self window sensor pushUserEvent:#startShellInSelectedWindow for:self.
].
^ scr
!
doKill
self selectedWorkspacesTextView doKill.
!
doReset
self selectedWorkspacesTextView doReset.
!
doSendInterrupt
self selectedWorkspacesTextView doSendInterrupt.
!
doSendKillSignal
self selectedWorkspacesTextView doSendKillSignal.
!
menuPlayback
|file suff|
suff := 'sh'.
OperatingSystem isMSDOSlike ifTrue:[ suff := 'bat' ].
file := Dialog requestFileName:'Playback file' default:('file.',suff) pattern:('*.',suff).
file size > 0 ifTrue:[
self playbackFile:file
]
!
openDocumentation
"opens the documentation file"
self openHTMLDocument: 'tools/misc/TOP.html#WORKSPACE'
!
playbackFile:aFileName
|file ws|
file := aFileName asFilename.
file exists ifFalse:[
Dialog warn:(resources string:'File %1 does not exist.' with:file asString).
^ self
].
ws := self selectedWorkspacesTextView.
file readingLinesDo:[:eachLine | ws sendLine:eachLine]
.
! !
!TerminalApplication methodsFor:'private'!
isModifiedWorkspace:aView
^ false
! !
!TerminalApplication methodsFor:'startup'!
postOpenWith:aBuilder
self startShellInSelectedWindow.
super postOpenWith:aBuilder
!
startShellInSelectedWindow
|vt|
vt := self selectedWorkspacesTextView.
vt superView realized ifFalse:[
self window sensor pushUserEvent:#startShellInSelectedWindow for:self.
^ self.
].
vt startShellIn:nil.
vt shellTerminateAction:[
"/ vt backgroundColor:(Color red).
vt cr; nextPutLine:('**** shell terminated ****' asText allBold colorizeAllWith:Color red).
].
! !
!TerminalApplication class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/TerminalApplication.st,v 1.1 2003-10-22 14:43:42 cg Exp $'
! !