--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/TerminalApplication.st Wed Oct 22 16:43:42 2003 +0200
@@ -0,0 +1,452 @@
+"
+ 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 $'
+! !