initial checkin
authorClaus Gittinger <cg@exept.de>
Wed, 22 Oct 2003 16:43:42 +0200
changeset 5296 b3edac46b1b6
parent 5295 e3c5a7b20d9d
child 5297 8408fbaf5555
initial checkin
TerminalApplication.st
--- /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 $'
+! !