"{ Package: 'stx:libview2' }"
PrinterStream subclass:#WinPrinterStream
instanceVariableNames:'printerContext printJobName printFileName currentLineBuffer
currentPageBuffer cX cY colNr lineNr pageCount heightOfFont
jobStarted pageStarted'
classVariableNames:'PrinterInfo'
poolDictionaries:''
category:'Interface-Printing'
!
!WinPrinterStream class methodsFor:'instance creation'!
new
| printerContext |
PrinterInfo := PrintingDialog getPrinterInfo.
PrinterInfo isNil ifTrue:[^nil].
printerContext := PrinterContext fromPrinterInfo: PrinterInfo.
^ self basicNew printerContext:printerContext.
"Modified: / 10-10-2006 / 18:47:18 / cg"
"Modified: / 12-10-2006 / 10:07:36 / User"
!
newForFile:aFileNameOrNil
"return a new stream for printing into aFileName"
|printer|
printer := self basicNew initialize.
printer setPrintFileName:aFileNameOrNil.
printer startPrint.
^ printer
"Modified: / 10-10-2006 / 19:08:52 / cg"
"Modified: / 12-10-2006 / 14:35:09 / User"
!
newNative
self halt
"Created: / 10-10-2006 / 18:41:39 / cg"
! !
!WinPrinterStream class methodsFor:'queries'!
isDrivenByCommand
"return true if this printer is driven via an OS-command
(as opposed to writing a file or using a native printing API)"
^ false
"Created: / 10-10-2006 / 18:22:13 / cg"
!
printerTypeName
"return a descriptive name"
^ 'windows printer'
"Created: / 10-10-2006 / 18:26:22 / cg"
!
supportsPrintingToFile
^ false
"Created: / 10-10-2006 / 18:27:16 / cg"
! !
!WinPrinterStream methodsFor:'accessing'!
fontWidthForTabComputing
^120
"Created: / 12-10-2006 / 11:59:33 / User"
!
hasJobStarted
^jobStarted = true
"Created: / 12-10-2006 / 14:38:00 / User"
!
hasPageStarted
^pageStarted = true
"Created: / 12-10-2006 / 14:41:39 / User"
!
heightOfFont
heightOfFont isNil ifTrue:[heightOfFont := printerContext getCharHeight].
^heightOfFont
"Created: / 12-10-2006 / 12:00:57 / User"
!
linesPerPage
^printerContext linesPerPageFor: nil
"Created: / 12-10-2006 / 11:57:53 / User"
!
printerContext:something
printerContext := something.
! !
!WinPrinterStream methodsFor:'open/close'!
endPage
printerContext endPage.
pageStarted := false.
"Created: / 12-10-2006 / 14:42:18 / User"
!
endPrint
printerContext endPrintJob.
jobStarted := false.
"Created: / 10-10-2006 / 18:50:05 / cg"
"Modified: / 12-10-2006 / 14:41:11 / User"
!
formFeed
printerContext formFeed.
self resetPage
"Created: / 12-10-2006 / 10:41:40 / User"
"Modified: / 12-10-2006 / 14:40:53 / User"
!
startPage
printerContext startPage.
pageStarted := true.
self resetPage
"Created: / 12-10-2006 / 14:39:27 / User"
!
startPrint
printerContext isNil ifTrue:[
PrinterInfo isNil ifTrue:[
PrinterInfo := PrintingDialog getPrinterInfo.
PrinterInfo isNil ifTrue:[^self].
].
printerContext := PrinterContext fromPrinterInfo: PrinterInfo.
].
printerContext foreground:(Color black) background:(Color white).
self resetPage.
printerContext startPrintJob: (printJobName ? 'ST/X PrintJob') fileName:printFileName.
pageCount := 1.
jobStarted := true.
pageStarted := true.
"Created: / 10-10-2006 / 18:49:55 / cg"
"Modified: / 12-10-2006 / 15:25:29 / User"
! !
!WinPrinterStream methodsFor:'private'!
resetPage
cX := cY := colNr := lineNr := 0.
"Created: / 12-10-2006 / 14:40:23 / User"
!
setPrintFileName:something
printFileName := something.
"Created: / 10-10-2006 / 19:07:16 / cg"
! !
!WinPrinterStream methodsFor:'writing'!
cr
colNr := 0.
lineNr := lineNr + 1.
cX := 0 "+ self leftX".
cY := cY + self heightOfFont.
lineNr >= self linesPerPage ifTrue:[
pageCount := pageCount + 1.
self endPage
].
"Modified: / 12-10-2006 / 14:42:57 / User"
!
nextPut:aCharacter
self hasJobStarted ifFalse:[self startPrint].
self hasPageStarted ifFalse:[self startPage].
aCharacter asciiValue < 16r20 ifTrue:[
aCharacter == Character cr ifTrue:[
self cr.
].
aCharacter == Character tab ifTrue:[
colNr := ((colNr + 8) // 8) * 8.
cX := "self leftX +" (colNr * self fontWidthForTabComputing).
^ self
].
aCharacter == Character newPage ifTrue:[
self endPage.
].
^ self.
].
printerContext displayString:aCharacter asString x:cX y:cY.
colNr := colNr + 1.
cX := cX + (printerContext stringWidthOf: aCharacter asString).
"Modified: / 12-10-2006 / 15:06:14 / User"
!
nextPutAll:aString
self hasJobStarted ifFalse:[self startPrint].
self hasPageStarted ifFalse:[self startPage].
(aString contains:[:char | char asciiValue < 16r20]) ifTrue:[
super nextPutAll:aString.
^ self.
].
#TODO. "/ use aString, when problem with Text-extent is fixed...
printerContext displayString: aString string x:cX y:cY.
colNr := colNr + aString size.
cX := cX + (printerContext stringWidthOf: aString string).
"Modified: / 12-10-2006 / 15:21:02 / User"
! !
!WinPrinterStream class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libview2/WinPrinterStream.st,v 1.2 2006-10-12 14:33:19 fm Exp $'
! !