PrinterContext.st
author Claus Gittinger <cg@exept.de>
Fri, 15 Sep 2006 20:03:41 +0200
changeset 2225 790ec79e3441
parent 2184 c108f1291023
child 2235 0df6bda4b353
permissions -rw-r--r--
automatically generated by browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2184
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     1
"
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     3
              All Rights Reserved
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     4
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     5
 This software is furnished under a license and may be used
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     6
 only in accordance with the terms of that license and with the
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
     9
 other person.  No title to or ownership of the software is
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    10
 hereby transferred.
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    11
"
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    12
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
    13
"{ Package: 'stx:libview2' }"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    14
8f5996be6907 initial checkin
fm
parents:
diff changeset
    15
GraphicsMedium subclass:#PrinterContext
8f5996be6907 initial checkin
fm
parents:
diff changeset
    16
	instanceVariableNames:'name abort jobid printerInfo'
8f5996be6907 initial checkin
fm
parents:
diff changeset
    17
	classVariableNames:''
8f5996be6907 initial checkin
fm
parents:
diff changeset
    18
	poolDictionaries:''
8f5996be6907 initial checkin
fm
parents:
diff changeset
    19
	category:'Interface-Printing'
8f5996be6907 initial checkin
fm
parents:
diff changeset
    20
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    21
2184
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    22
!PrinterContext class methodsFor:'documentation'!
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    23
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    24
copyright
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    25
"
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    26
 COPYRIGHT (c) 2006 by eXept Software AG
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    27
              All Rights Reserved
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    28
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    29
 This software is furnished under a license and may be used
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    30
 only in accordance with the terms of that license and with the
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    32
 be provided or otherwise made available to, or used by, any
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    33
 other person.  No title to or ownership of the software is
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    34
 hereby transferred.
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    35
"
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
    36
! !
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
    37
8f5996be6907 initial checkin
fm
parents:
diff changeset
    38
!PrinterContext class methodsFor:'instance creation'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    39
8f5996be6907 initial checkin
fm
parents:
diff changeset
    40
fromPrinterInfo: aPrinterInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
    41
        "Private - Answer a Printer object given an hDC"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    42
    | aPrinter hDC|     
8f5996be6907 initial checkin
fm
parents:
diff changeset
    43
8f5996be6907 initial checkin
fm
parents:
diff changeset
    44
    hDC := aPrinterInfo createDC.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    45
    hDC = 0 ifTrue: [ ^self error: 'Error while opening printer.' ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
    46
    aPrinter := self new.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    47
    aPrinter printerInfo: aPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    48
    aPrinter setDevice:(WinPrinter on: aPrinterInfo) id:nil gcId:hDC.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    49
    aPrinter initExtent.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    50
    ^aPrinter
8f5996be6907 initial checkin
fm
parents:
diff changeset
    51
8f5996be6907 initial checkin
fm
parents:
diff changeset
    52
    "Created: / 03-08-2006 / 12:53:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    53
    "Modified: / 04-08-2006 / 12:55:01 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    54
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    55
8f5996be6907 initial checkin
fm
parents:
diff changeset
    56
printWith: aRecordingPen
8f5996be6907 initial checkin
fm
parents:
diff changeset
    57
        "Print the contents of aRecordingPen on
8f5996be6907 initial checkin
fm
parents:
diff changeset
    58
         the system printer."
8f5996be6907 initial checkin
fm
parents:
diff changeset
    59
    self new drawUsing: aRecordingPen
8f5996be6907 initial checkin
fm
parents:
diff changeset
    60
8f5996be6907 initial checkin
fm
parents:
diff changeset
    61
    "Created: / 27-07-2006 / 17:53:59 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    62
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
    63
8f5996be6907 initial checkin
fm
parents:
diff changeset
    64
!PrinterContext class methodsFor:'accessing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    65
8f5996be6907 initial checkin
fm
parents:
diff changeset
    66
default
8f5996be6907 initial checkin
fm
parents:
diff changeset
    67
        "Answer the default Printer, or nil if none."
8f5996be6907 initial checkin
fm
parents:
diff changeset
    68
    | defaultName |
8f5996be6907 initial checkin
fm
parents:
diff changeset
    69
    ^( defaultName := self defaultPrinterName ) isNil
8f5996be6907 initial checkin
fm
parents:
diff changeset
    70
        ifTrue: [ nil ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
    71
        ifFalse: [ self named: defaultName ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
    72
8f5996be6907 initial checkin
fm
parents:
diff changeset
    73
8f5996be6907 initial checkin
fm
parents:
diff changeset
    74
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    75
        self default
8f5996be6907 initial checkin
fm
parents:
diff changeset
    76
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    77
8f5996be6907 initial checkin
fm
parents:
diff changeset
    78
    "Created: / 27-07-2006 / 17:51:43 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    79
    "Modified: / 02-08-2006 / 17:27:09 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    80
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    81
8f5996be6907 initial checkin
fm
parents:
diff changeset
    82
defaultMargins
8f5996be6907 initial checkin
fm
parents:
diff changeset
    83
        "Private - answer aPoint containing the default horizontal and vertical
8f5996be6907 initial checkin
fm
parents:
diff changeset
    84
        margins for a page (units in inches)."
8f5996be6907 initial checkin
fm
parents:
diff changeset
    85
    ^0.5@0.75
8f5996be6907 initial checkin
fm
parents:
diff changeset
    86
8f5996be6907 initial checkin
fm
parents:
diff changeset
    87
    "Created: / 01-08-2006 / 16:09:31 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
    88
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
    89
8f5996be6907 initial checkin
fm
parents:
diff changeset
    90
defaultPrinterName
8f5996be6907 initial checkin
fm
parents:
diff changeset
    91
        "Answer the name of the default printer, or nil if none."
8f5996be6907 initial checkin
fm
parents:
diff changeset
    92
    | printerInfo printerName |
8f5996be6907 initial checkin
fm
parents:
diff changeset
    93
    printerInfo := OperatingSystem getDefaultPrinterName.  " get default "
8f5996be6907 initial checkin
fm
parents:
diff changeset
    94
    printerName := ( printerInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
    95
        copyFrom: 1
8f5996be6907 initial checkin
fm
parents:
diff changeset
    96
        to: ( printerInfo indexOf: $, ) - 1 )
8f5996be6907 initial checkin
fm
parents:
diff changeset
    97
            trimBlanks.
8f5996be6907 initial checkin
fm
parents:
diff changeset
    98
    ^printerName size == 0 ifTrue: [ nil ] ifFalse: [ printerName ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
    99
8f5996be6907 initial checkin
fm
parents:
diff changeset
   100
    "
8f5996be6907 initial checkin
fm
parents:
diff changeset
   101
     PrinterContext defaultPrinterName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   102
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   103
8f5996be6907 initial checkin
fm
parents:
diff changeset
   104
    "Modified: / 02-08-2006 / 17:26:09 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   105
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   106
8f5996be6907 initial checkin
fm
parents:
diff changeset
   107
getPrinterInformation: printerNameString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   108
        " Answer the printer information for the printer named printerNameString.  If no name is specified,
8f5996be6907 initial checkin
fm
parents:
diff changeset
   109
        answer the information for the default printer. "
8f5996be6907 initial checkin
fm
parents:
diff changeset
   110
    | h |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   111
8f5996be6907 initial checkin
fm
parents:
diff changeset
   112
     h := OperatingSystem openPrinter: printerNameString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   113
     ^OperatingSystem getDocumentProperties:nil hPrinter:h pDeviceName: printerNameString .
8f5996be6907 initial checkin
fm
parents:
diff changeset
   114
8f5996be6907 initial checkin
fm
parents:
diff changeset
   115
    "Created: / 27-07-2006 / 10:22:32 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   116
    "Modified: / 01-08-2006 / 16:01:44 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   117
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   118
8f5996be6907 initial checkin
fm
parents:
diff changeset
   119
named: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   120
        "Answer a new instance of Printer which represents
8f5996be6907 initial checkin
fm
parents:
diff changeset
   121
         the printer named aName as specified in the host
8f5996be6907 initial checkin
fm
parents:
diff changeset
   122
         Control Panel."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   123
    aName isNil ifTrue: [ ^self default ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   124
    ^super new printerInfoWithName: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   125
8f5996be6907 initial checkin
fm
parents:
diff changeset
   126
    "Created: / 27-07-2006 / 17:51:27 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   127
    "Modified: / 02-08-2006 / 17:26:29 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   128
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   129
8f5996be6907 initial checkin
fm
parents:
diff changeset
   130
printerNames
8f5996be6907 initial checkin
fm
parents:
diff changeset
   131
        "Answer a collection of all known printer names."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   132
8f5996be6907 initial checkin
fm
parents:
diff changeset
   133
    ^OperatingSystem getPrintersNames
8f5996be6907 initial checkin
fm
parents:
diff changeset
   134
8f5996be6907 initial checkin
fm
parents:
diff changeset
   135
    "Created: / 27-07-2006 / 17:54:45 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   136
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   137
8f5996be6907 initial checkin
fm
parents:
diff changeset
   138
!PrinterContext class methodsFor:'printing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   139
8f5996be6907 initial checkin
fm
parents:
diff changeset
   140
print: aString font: aFont title: aTitle
8f5996be6907 initial checkin
fm
parents:
diff changeset
   141
        "Open a print dialog to allow printing of the given string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   142
        using the given title & font; answer the receiver."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   144
    self print: aString font: aFont title: aTitle wordWrap: false     
8f5996be6907 initial checkin
fm
parents:
diff changeset
   145
8f5996be6907 initial checkin
fm
parents:
diff changeset
   146
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   147
            PrinterContext print: 'Holaaaa!! (from:  PrinterContext>>print:aString font:aFont title:aTitle)' font: nil title: 'Printing Test'
8f5996be6907 initial checkin
fm
parents:
diff changeset
   148
            PrinterContext print: self printingTestString font: nil title: 'Printing Test String'
8f5996be6907 initial checkin
fm
parents:
diff changeset
   149
            PrinterContext print: self printingTestString font: (Font family:'Arial' face:'medium' size:8) title: 'Printing Test String'
8f5996be6907 initial checkin
fm
parents:
diff changeset
   150
8f5996be6907 initial checkin
fm
parents:
diff changeset
   151
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   152
8f5996be6907 initial checkin
fm
parents:
diff changeset
   153
    "Created: / 27-07-2006 / 17:52:33 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   154
    "Modified: / 03-08-2006 / 18:52:31 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   155
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   156
8f5996be6907 initial checkin
fm
parents:
diff changeset
   157
print: aString font: aFont title: aTitle wordWrap: wordWrap
8f5996be6907 initial checkin
fm
parents:
diff changeset
   158
        "Open a print dialog to allow printing of the given string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   159
        using the given title & font; answer the receiver."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   160
    | printerInfo printer |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   161
    printerInfo := PrintingDialog getPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   162
    printerInfo isNil ifTrue:[^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   163
8f5996be6907 initial checkin
fm
parents:
diff changeset
   164
"/    ( hDCPrinter := printerInfo hDCPrinter ) isNil ifTrue: [ ^self ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   165
"/    hDCPrinter := printerInfo createDC.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   166
    printer := self fromPrinterInfo: printerInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   167
    [ printer
8f5996be6907 initial checkin
fm
parents:
diff changeset
   168
        print: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   169
        font: aFont
8f5996be6907 initial checkin
fm
parents:
diff changeset
   170
        title: aTitle 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   171
        wordWrap: wordWrap
8f5996be6907 initial checkin
fm
parents:
diff changeset
   172
        marginsRect: nil ] forkAt: 3
8f5996be6907 initial checkin
fm
parents:
diff changeset
   173
8f5996be6907 initial checkin
fm
parents:
diff changeset
   174
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   175
            PrinterContext print: 'Holaaaa!! (from:  PrinterContext>>print:aString font:aFont title:aTitle)' font: nil title: 'Printing Test' wordWrap: true
8f5996be6907 initial checkin
fm
parents:
diff changeset
   176
            PrinterContext print: self printingTestString font: nil title: 'Printing Test String' wordWrap: true
8f5996be6907 initial checkin
fm
parents:
diff changeset
   177
            PrinterContext print: self printingTestString font: (Font family:'Arial' face:'medium' size:8) title: 'Printing Test String' wordWrap: true
8f5996be6907 initial checkin
fm
parents:
diff changeset
   178
8f5996be6907 initial checkin
fm
parents:
diff changeset
   179
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   180
8f5996be6907 initial checkin
fm
parents:
diff changeset
   181
    "Created: / 03-08-2006 / 18:51:53 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   182
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   183
8f5996be6907 initial checkin
fm
parents:
diff changeset
   184
!PrinterContext class methodsFor:'testing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   185
8f5996be6907 initial checkin
fm
parents:
diff changeset
   186
printCircles: arrayOfPointsAndRadius
8f5996be6907 initial checkin
fm
parents:
diff changeset
   187
8f5996be6907 initial checkin
fm
parents:
diff changeset
   188
        "Opens a print dialog and prints the given circles"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   189
8f5996be6907 initial checkin
fm
parents:
diff changeset
   190
    | printerInfo printer |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   191
    printerInfo := PrintingDialog getPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   192
    printerInfo isNil ifTrue:[^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   193
8f5996be6907 initial checkin
fm
parents:
diff changeset
   194
    printer := self fromPrinterInfo: printerInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   195
    [ 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   196
    printer startPrintJob: 'Circles'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   197
    arrayOfPointsAndRadius
8f5996be6907 initial checkin
fm
parents:
diff changeset
   198
        do:[:pointAndRadius |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   199
            printer displayCircle:(pointAndRadius at:1) 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   200
                    radius:(pointAndRadius at:2).
8f5996be6907 initial checkin
fm
parents:
diff changeset
   201
        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   202
    printer endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   203
    ] forkAt: 3
8f5996be6907 initial checkin
fm
parents:
diff changeset
   204
8f5996be6907 initial checkin
fm
parents:
diff changeset
   205
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   206
            PrinterContext printCircles:  (Array with: (Array with: 800@800 with: 600)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   207
                                                 with: (Array with: 1500@1500 with: 1000)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   208
                                                 with: (Array with: 4000@2500 with: 2000))
8f5996be6907 initial checkin
fm
parents:
diff changeset
   209
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   210
8f5996be6907 initial checkin
fm
parents:
diff changeset
   211
    "Created: / 07-08-2006 / 11:46:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   212
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   213
8f5996be6907 initial checkin
fm
parents:
diff changeset
   214
printCirclesIn: rectangles
8f5996be6907 initial checkin
fm
parents:
diff changeset
   215
8f5996be6907 initial checkin
fm
parents:
diff changeset
   216
        "Opens a print dialog and prints the given circles"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   217
8f5996be6907 initial checkin
fm
parents:
diff changeset
   218
    | printerInfo printer |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   219
    printerInfo := PrintingDialog getPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   220
    printerInfo isNil ifTrue:[^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   221
8f5996be6907 initial checkin
fm
parents:
diff changeset
   222
    printer := self fromPrinterInfo: printerInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   223
    [ 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   224
    printer startPrintJob: 'Circles In Rectangles'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   225
    rectangles
8f5996be6907 initial checkin
fm
parents:
diff changeset
   226
        do:[:rectangle |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   227
            printer displayCircleIn: rectangle.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   228
        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   229
    printer endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   230
    ] forkAt: 3
8f5996be6907 initial checkin
fm
parents:
diff changeset
   231
8f5996be6907 initial checkin
fm
parents:
diff changeset
   232
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   233
            PrinterContext printCirclesIn:  (Array with: (Rectangle left:20 top:20 width:400 height:600)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   234
                                                             with: (Rectangle left:40 top:40 width:600 height:400)    )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   235
8f5996be6907 initial checkin
fm
parents:
diff changeset
   236
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   237
8f5996be6907 initial checkin
fm
parents:
diff changeset
   238
    "Created: / 07-08-2006 / 11:48:46 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   239
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   240
2146
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   241
printLines: pairOfPointsArray
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   242
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   243
        "Opens a print dialog and prints the given lines"
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   244
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   245
    | printerInfo printer |
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   246
    printerInfo := PrintingDialog getPrinterInfo.
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   247
    printerInfo isNil ifTrue:[^self].
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   248
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   249
    printer := self fromPrinterInfo: printerInfo.
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   250
    [ 
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   251
    printer startPrintJob: 'Lines'.
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   252
    printer foreground:Color black background:Color white.
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   253
    pairOfPointsArray
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   254
        do:[:pairOfPoints |                 
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   255
             printer displayLineFrom: (pairOfPoints at:1)  to: (pairOfPoints at:2).
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   256
        ].
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   257
    printer endPrintJob.
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   258
    ] forkAt: 3
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   259
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   260
"
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   261
    PrinterContext printLines:  
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   262
        (Array with: (Array with:10@10 with:100@10)
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   263
               with: (Array with:10@10 with:35@200))
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   264
"
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   265
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   266
    "Created: / 07-08-2006 / 12:09:48 / fm"
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   267
    "Modified: / 07-08-2006 / 14:11:17 / fm"
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   268
!
61291b6cc0f7 add line printing support
fm
parents: 2143
diff changeset
   269
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   270
printPolygons: polygons
8f5996be6907 initial checkin
fm
parents:
diff changeset
   271
8f5996be6907 initial checkin
fm
parents:
diff changeset
   272
        "Opens a print dialog and prints the given polygons"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   273
8f5996be6907 initial checkin
fm
parents:
diff changeset
   274
    | printerInfo printer |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   275
    printerInfo := PrintingDialog getPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   276
    printerInfo isNil ifTrue:[^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   277
8f5996be6907 initial checkin
fm
parents:
diff changeset
   278
    printer := self fromPrinterInfo: printerInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   279
    [ 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   280
    printer startPrintJob: 'Polygons'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   281
    printer foreground:Color black background:Color white.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   282
    polygons
8f5996be6907 initial checkin
fm
parents:
diff changeset
   283
        do:[:aPolygon |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   284
             aPolygon displayStrokedOn: printer.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   285
        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   286
    printer endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   287
    ] forkAt: 3
8f5996be6907 initial checkin
fm
parents:
diff changeset
   288
8f5996be6907 initial checkin
fm
parents:
diff changeset
   289
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   290
    PrinterContext printPolygons:  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   291
        (Array with: (Polygon vertices:(
8f5996be6907 initial checkin
fm
parents:
diff changeset
   292
                                Array
8f5996be6907 initial checkin
fm
parents:
diff changeset
   293
                                    with:10@10
8f5996be6907 initial checkin
fm
parents:
diff changeset
   294
                                    with:60@10
8f5996be6907 initial checkin
fm
parents:
diff changeset
   295
                                    with:35@60)))
8f5996be6907 initial checkin
fm
parents:
diff changeset
   296
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   297
8f5996be6907 initial checkin
fm
parents:
diff changeset
   298
    "Created: / 07-08-2006 / 12:09:48 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   299
    "Modified: / 07-08-2006 / 14:11:17 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   300
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   301
8f5996be6907 initial checkin
fm
parents:
diff changeset
   302
printRectangles: rectangles
8f5996be6907 initial checkin
fm
parents:
diff changeset
   303
8f5996be6907 initial checkin
fm
parents:
diff changeset
   304
        "Opens a print dialog and prints the given rectangles"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   305
8f5996be6907 initial checkin
fm
parents:
diff changeset
   306
    | printerInfo printer |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   307
    printerInfo := PrintingDialog getPrinterInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   308
    printerInfo isNil ifTrue:[^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   309
8f5996be6907 initial checkin
fm
parents:
diff changeset
   310
    printer := self fromPrinterInfo: printerInfo.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   311
    [ 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   312
    printer startPrintJob: 'Rectangles'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   313
    rectangles 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   314
        do:[:rectangle |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   315
            printer displayRectangleX: rectangle origin x 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   316
                    y: rectangle origin y 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   317
                    width: rectangle width 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   318
                    height: rectangle height.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   319
        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   320
    printer endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   321
    ] forkAt: 3
8f5996be6907 initial checkin
fm
parents:
diff changeset
   322
8f5996be6907 initial checkin
fm
parents:
diff changeset
   323
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   324
            PrinterContext printRectangles:  (Array with: (Rectangle left:20 top:20 width:400 height:600)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   325
                                                    with: (Rectangle left:40 top:40 width:600 height:400)    )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   326
8f5996be6907 initial checkin
fm
parents:
diff changeset
   327
"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   328
8f5996be6907 initial checkin
fm
parents:
diff changeset
   329
    "Created: / 07-08-2006 / 11:40:48 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   330
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   331
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   332
printStrings: stringAndPositionsArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   333
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   334
        "Opens a print dialog and prints the given strings"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   335
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   336
    | printerInfo printer |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   337
    printerInfo := PrintingDialog getPrinterInfo.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   338
    printerInfo isNil ifTrue:[^self].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   339
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   340
    printer := self fromPrinterInfo: printerInfo.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   341
    [ 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   342
    printer startPrintJob: 'Strings with Position'.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   343
    printer foreground:Color black background:Color white.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   344
    stringAndPositionsArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   345
        do:[:pairOfPointsAndPosition |                 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   346
             printer displayString:(pairOfPointsAndPosition at: 1) 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   347
                        x:(pairOfPointsAndPosition at: 2) x
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   348
                        y:(pairOfPointsAndPosition at: 2) y
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   349
        ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   350
    printer endPrintJob.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   351
    ] forkAt: 3
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   352
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   353
"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   354
    PrinterContext printStrings:  
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   355
        (Array with: (Array with:'Testing printing with standart method' with:10@10)
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   356
               with: (Array with:'Another test string to print' with:80@200))
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   357
"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   358
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   359
    "Created: / 07-08-2006 / 12:09:48 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   360
    "Modified: / 07-08-2006 / 14:11:17 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   361
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   362
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   363
printingTestString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   364
8f5996be6907 initial checkin
fm
parents:
diff changeset
   365
^'GetTextExtentPoint Note  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   366
8f5996be6907 initial checkin
fm
parents:
diff changeset
   367
The GetTextExtentPoint function computes the width and height of the specified string of text.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   368
8f5996be6907 initial checkin
fm
parents:
diff changeset
   369
Note  This function is provided only for compatibility with 16-bit versions of Windows. Applications should call the GetTextExtentPoint32 function, which provides more accurate results.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   370
8f5996be6907 initial checkin
fm
parents:
diff changeset
   371
BOOL GetTextExtentPoint(
8f5996be6907 initial checkin
fm
parents:
diff changeset
   372
  HDC hdc,           // handle to DC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   373
  LPCTSTR lpString,  // text string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   374
  int cbString,      // number of characters in string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   375
  LPSIZE lpSize      // string size
8f5996be6907 initial checkin
fm
parents:
diff changeset
   376
);
8f5996be6907 initial checkin
fm
parents:
diff changeset
   377
8f5996be6907 initial checkin
fm
parents:
diff changeset
   378
Parameters
8f5996be6907 initial checkin
fm
parents:
diff changeset
   379
8f5996be6907 initial checkin
fm
parents:
diff changeset
   380
hdc
8f5996be6907 initial checkin
fm
parents:
diff changeset
   381
    [in] Handle to the device context. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   382
lpString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   383
    [in] Pointer to the string that specifies the text. The string does not need to be zero-terminated, since cbString specifies the length of the string. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   384
cbString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   385
    [in] Specifies the length of the string pointed to by lpString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   386
8f5996be6907 initial checkin
fm
parents:
diff changeset
   387
    Windows 95/98/Me: This value may not exceed 8192. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   388
lpSize
8f5996be6907 initial checkin
fm
parents:
diff changeset
   389
    [out] Pointer to a SIZE structure that receives the dimensions of the string, in logical units. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   390
8f5996be6907 initial checkin
fm
parents:
diff changeset
   391
Return Values
8f5996be6907 initial checkin
fm
parents:
diff changeset
   392
8f5996be6907 initial checkin
fm
parents:
diff changeset
   393
If the function succeeds, the return value is nonzero.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   394
8f5996be6907 initial checkin
fm
parents:
diff changeset
   395
If the function fails, the return value is zero.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   396
8f5996be6907 initial checkin
fm
parents:
diff changeset
   397
Windows NT/2000/XP: To get extended error information, call GetLastError.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   398
Remarks
8f5996be6907 initial checkin
fm
parents:
diff changeset
   399
8f5996be6907 initial checkin
fm
parents:
diff changeset
   400
The GetTextExtentPoint function uses the currently selected font to compute the dimensions of the string. The width and height, in logical units, are computed without considering any clipping. Also, this function assumes that the text is horizontal, that is, that the escapement is always 0. This is true for both the horizontal and vertical measurements of the text. Even if using a font specifying a nonzero escapement, this function will not use the angle while computing the text extentthe application must convert it explicitly.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   401
8f5996be6907 initial checkin
fm
parents:
diff changeset
   402
Because some devices kern characters, the sum of the extents of the characters in a string may not be equal to the extent of the string.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   403
8f5996be6907 initial checkin
fm
parents:
diff changeset
   404
The calculated string width takes into account the intercharacter spacing set by the SetTextCharacterExtra function.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   405
8f5996be6907 initial checkin
fm
parents:
diff changeset
   406
Windows 95/98/Me: For compatibility with Windows 3.1, GetTextExtentPoint adds an extra pixel for bold simulation fonts. However, the bold Tahoma font is not simulated, so it does not have any extra pixel. To correct for the extra pixel in a bold simulation font, decrease the length of every substring passed to GetTextExtentPoint by one pixel and add an extra pixel for the entire string.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   407
8f5996be6907 initial checkin
fm
parents:
diff changeset
   408
Windows 95/98/Me: Although GetTextExtentPointW exists on Windows 95/98/Me, it is supported by the Microsoft Layer for Unicode to give more consistent behavior across all Windows operating systems. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   409
Requirements
8f5996be6907 initial checkin
fm
parents:
diff changeset
   410
8f5996be6907 initial checkin
fm
parents:
diff changeset
   411
  Windows NT/2000/XP/Vista: Included in Windows NT 3.1 and later.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   412
  Windows 95/98/Me: Included in Windows 95 and later.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   413
  Header: Declared in Wingdi.h; include Windows.h.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   414
  Library: Use Gdi32.lib.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   415
  Unicode: Implemented as Unicode and ANSI versions on all platforms. Also supported by Microsoft Layer for Unicode.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   416
See Also'
8f5996be6907 initial checkin
fm
parents:
diff changeset
   417
8f5996be6907 initial checkin
fm
parents:
diff changeset
   418
    "Created: / 03-08-2006 / 13:22:14 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   419
    "Modified: / 07-08-2006 / 14:28:16 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   420
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   421
8f5996be6907 initial checkin
fm
parents:
diff changeset
   422
!PrinterContext methodsFor:'abort handling'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   423
8f5996be6907 initial checkin
fm
parents:
diff changeset
   424
abortPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   425
        "Abort the current print job."  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   426
8f5996be6907 initial checkin
fm
parents:
diff changeset
   427
    abort := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   428
    jobid := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   429
8f5996be6907 initial checkin
fm
parents:
diff changeset
   430
    "Modified: / 02-08-2006 / 15:40:26 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   431
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   432
8f5996be6907 initial checkin
fm
parents:
diff changeset
   433
aborted
8f5996be6907 initial checkin
fm
parents:
diff changeset
   434
        "Answer whether the user aborted from PrintAbortDialog."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   435
    ^abort
8f5996be6907 initial checkin
fm
parents:
diff changeset
   436
8f5996be6907 initial checkin
fm
parents:
diff changeset
   437
    "Created: / 27-07-2006 / 10:20:10 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   438
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   439
8f5996be6907 initial checkin
fm
parents:
diff changeset
   440
!PrinterContext methodsFor:'accessing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   441
8f5996be6907 initial checkin
fm
parents:
diff changeset
   442
getCharHeight
8f5996be6907 initial checkin
fm
parents:
diff changeset
   443
        "Private - answer the height of the font selected in the receiver's
8f5996be6907 initial checkin
fm
parents:
diff changeset
   444
        device context."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   445
8f5996be6907 initial checkin
fm
parents:
diff changeset
   446
    | textMetrics |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   447
    textMetrics := Win32OperatingSystem::TextMetricsStructure new.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   448
    ( OperatingSystem 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   449
        getTextMetrics: gcId "deviceContext" 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   450
        lpMetrics: textMetrics "asParameter" )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   451
            ifFalse: [ ^self error ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   452
    ^textMetrics tmHeight + textMetrics tmExternalLeading
8f5996be6907 initial checkin
fm
parents:
diff changeset
   453
8f5996be6907 initial checkin
fm
parents:
diff changeset
   454
    "Created: / 02-08-2006 / 17:47:20 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   455
    "Modified: / 03-08-2006 / 10:09:01 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   456
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   457
8f5996be6907 initial checkin
fm
parents:
diff changeset
   458
name                                   
8f5996be6907 initial checkin
fm
parents:
diff changeset
   459
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   460
8f5996be6907 initial checkin
fm
parents:
diff changeset
   461
    ^self printerInfo printerName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   462
8f5996be6907 initial checkin
fm
parents:
diff changeset
   463
    "Modified: / 02-08-2006 / 16:55:03 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   464
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   465
8f5996be6907 initial checkin
fm
parents:
diff changeset
   466
name: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   467
        "Set the receiver's printer name to aName."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   468
8f5996be6907 initial checkin
fm
parents:
diff changeset
   469
    self printerInfo: (self class getPrinterInformation: aName)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   470
8f5996be6907 initial checkin
fm
parents:
diff changeset
   471
    "Created: / 27-07-2006 / 10:33:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   472
    "Modified: / 02-08-2006 / 16:54:46 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   473
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   474
8f5996be6907 initial checkin
fm
parents:
diff changeset
   475
numberOfColorBitsPerPixel
8f5996be6907 initial checkin
fm
parents:
diff changeset
   476
8f5996be6907 initial checkin
fm
parents:
diff changeset
   477
    ^ OperatingSystem getDeviceCaps:gcId index:12 "Bitspixel"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   478
8f5996be6907 initial checkin
fm
parents:
diff changeset
   479
    "Created: / 03-08-2006 / 09:58:18 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   480
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   481
8f5996be6907 initial checkin
fm
parents:
diff changeset
   482
pixelsPerInchOfScreenHeight
8f5996be6907 initial checkin
fm
parents:
diff changeset
   483
    ^ OperatingSystem getDeviceCaps:gcId index:90 "Logpixelsy"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   484
8f5996be6907 initial checkin
fm
parents:
diff changeset
   485
    "Created: / 01-08-2006 / 16:29:16 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   486
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   487
8f5996be6907 initial checkin
fm
parents:
diff changeset
   488
pixelsPerInchOfScreenWidth
8f5996be6907 initial checkin
fm
parents:
diff changeset
   489
    ^ OperatingSystem getDeviceCaps:gcId index:88 "Logpixelsx"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   490
8f5996be6907 initial checkin
fm
parents:
diff changeset
   491
    "Created: / 01-08-2006 / 16:28:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   492
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   493
8f5996be6907 initial checkin
fm
parents:
diff changeset
   494
printerInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   495
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   496
8f5996be6907 initial checkin
fm
parents:
diff changeset
   497
    ^printerInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   498
8f5996be6907 initial checkin
fm
parents:
diff changeset
   499
    "Created: / 02-08-2006 / 16:55:17 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   500
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   501
8f5996be6907 initial checkin
fm
parents:
diff changeset
   502
printerInfo: aPrinterInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   503
        "Sets the receiver's printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   504
8f5996be6907 initial checkin
fm
parents:
diff changeset
   505
    printerInfo := aPrinterInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   506
8f5996be6907 initial checkin
fm
parents:
diff changeset
   507
    "Created: / 02-08-2006 / 16:55:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   508
    "Modified: / 03-08-2006 / 13:11:19 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   509
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   510
8f5996be6907 initial checkin
fm
parents:
diff changeset
   511
printerInfoWithName: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   512
        "Set the receiver's printer name to aName."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   513
8f5996be6907 initial checkin
fm
parents:
diff changeset
   514
    self printerInfo: (self class getPrinterInformation: aName).
8f5996be6907 initial checkin
fm
parents:
diff changeset
   515
    ^self
8f5996be6907 initial checkin
fm
parents:
diff changeset
   516
8f5996be6907 initial checkin
fm
parents:
diff changeset
   517
    "Created: / 02-08-2006 / 16:55:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   518
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   519
8f5996be6907 initial checkin
fm
parents:
diff changeset
   520
printerUserFriendlyName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   521
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   522
8f5996be6907 initial checkin
fm
parents:
diff changeset
   523
    ^self printerInfo userFriendlyName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   524
8f5996be6907 initial checkin
fm
parents:
diff changeset
   525
    "Created: / 03-08-2006 / 12:55:57 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   526
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   527
8f5996be6907 initial checkin
fm
parents:
diff changeset
   528
!PrinterContext methodsFor:'initialization & release'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   529
8f5996be6907 initial checkin
fm
parents:
diff changeset
   530
buildPrinter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   531
        "Private - create all the operating system resources needed."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   532
    self 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   533
        createDC;       
8f5996be6907 initial checkin
fm
parents:
diff changeset
   534
        initExtent
8f5996be6907 initial checkin
fm
parents:
diff changeset
   535
8f5996be6907 initial checkin
fm
parents:
diff changeset
   536
    "Created: / 27-07-2006 / 10:20:36 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   537
    "Modified: / 01-08-2006 / 15:57:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   538
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   539
8f5996be6907 initial checkin
fm
parents:
diff changeset
   540
createDC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   541
        "Private - Create a device context for the receiver"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   542
8f5996be6907 initial checkin
fm
parents:
diff changeset
   543
 gcId := printerInfo createDC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   544
8f5996be6907 initial checkin
fm
parents:
diff changeset
   545
"/    | printerInfo driverNm mediumNm deviceNm hPrinter driverData|
8f5996be6907 initial checkin
fm
parents:
diff changeset
   546
"/    printerInfo := self class getPrinterInformation: self name.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   547
"/     driverNm := printerInfo driverName.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   548
"/     mediumNm := printerInfo medium.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   549
"/     deviceNm := printerInfo printerName.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   550
"/
8f5996be6907 initial checkin
fm
parents:
diff changeset
   551
"/     hPrinter := OperatingSystem openPrinter:deviceNm.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   552
"/     driverData := OperatingSystem getDocumentProperties:nil hPrinter:hPrinter pDeviceName:deviceNm.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   553
"/     Win32OperatingSystem primClosePrinter:hPrinter.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   554
"/
8f5996be6907 initial checkin
fm
parents:
diff changeset
   555
"/     "deviceContext" gcId := OperatingSystem createPrinterDC:driverNm device:deviceNm output:mediumNm initData:driverData.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   556
8f5996be6907 initial checkin
fm
parents:
diff changeset
   557
"/    ( deviceContext := GDILibrary
8f5996be6907 initial checkin
fm
parents:
diff changeset
   558
"/        createDC: driverName asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   559
"/        deviceName: deviceName asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   560
"/        output: printerPort asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   561
"/        initData: nil ) = 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   562
"/            ifTrue: [ ^self osError ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   563
8f5996be6907 initial checkin
fm
parents:
diff changeset
   564
    "Created: / 27-07-2006 / 10:21:05 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   565
    "Modified: / 02-08-2006 / 17:30:47 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   566
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   567
8f5996be6907 initial checkin
fm
parents:
diff changeset
   568
initExtent
8f5996be6907 initial checkin
fm
parents:
diff changeset
   569
    "Private - init the width and height of GraphicsTool for the receiver."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   570
    
8f5996be6907 initial checkin
fm
parents:
diff changeset
   571
    device
8f5996be6907 initial checkin
fm
parents:
diff changeset
   572
        width:self printerWidthArea;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   573
        height:self printerHeightArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   574
8f5996be6907 initial checkin
fm
parents:
diff changeset
   575
    "Modified: / 01-08-2006 / 16:14:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   576
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   577
8f5996be6907 initial checkin
fm
parents:
diff changeset
   578
printerHeightArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   579
    ^ (OperatingSystem getDeviceCaps:gcId index:10 "Vertres")
8f5996be6907 initial checkin
fm
parents:
diff changeset
   580
8f5996be6907 initial checkin
fm
parents:
diff changeset
   581
    "Created: / 01-08-2006 / 16:14:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   582
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   583
8f5996be6907 initial checkin
fm
parents:
diff changeset
   584
printerWidthArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   585
    ^ OperatingSystem getDeviceCaps:gcId "deviceContext" index:8 "Horzres"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   586
8f5996be6907 initial checkin
fm
parents:
diff changeset
   587
    "Created: / 01-08-2006 / 16:14:08 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   588
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   589
8f5996be6907 initial checkin
fm
parents:
diff changeset
   590
!PrinterContext methodsFor:'printing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   591
8f5996be6907 initial checkin
fm
parents:
diff changeset
   592
print: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   593
    font: aFont
8f5996be6907 initial checkin
fm
parents:
diff changeset
   594
    title: aTitle  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   595
    wordWrap: wordWrapBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   596
    marginsRect: aMarginsRect
8f5996be6907 initial checkin
fm
parents:
diff changeset
   597
        "Answer the receiver.  Output the receiver string to
8f5996be6907 initial checkin
fm
parents:
diff changeset
   598
        the printer using aFont.  A Print abort dialog box will be opened
8f5996be6907 initial checkin
fm
parents:
diff changeset
   599
        with aTitle.  If collateBoolean is true, collate output, otherwise
8f5996be6907 initial checkin
fm
parents:
diff changeset
   600
        do not.  Print copiesInteger copies of the specified string.  If
8f5996be6907 initial checkin
fm
parents:
diff changeset
   601
        wordWrapBoolean is true, word wrap the lines, otherwise do not.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   602
        Left, top, right & bottom margins are specified in inches in
8f5996be6907 initial checkin
fm
parents:
diff changeset
   603
        aMarginsRect."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   604
    | lines linesPerPage totalPage marginsRect firstPage charHeight abortDialog |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   605
8f5996be6907 initial checkin
fm
parents:
diff changeset
   606
    jobid isNil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   607
        ifTrue: [ self startPrintJob: aTitle ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   608
    abortDialog := PrintAbortDialog new open: aTitle printer: self.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   609
    self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   610
    marginsRect := self marginsRectangleFor: aMarginsRect.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   611
    lines := self asArrayOfStringLines: aString in: marginsRect wordWrap: wordWrapBoolean.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   612
    charHeight := self getCharHeight. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   613
    linesPerPage := marginsRect bottom - marginsRect top // charHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   614
    totalPage := lines size + linesPerPage - 1 // linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   615
    firstPage := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   616
8f5996be6907 initial checkin
fm
parents:
diff changeset
   617
"/    collateBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   618
"/        ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   619
"/            copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   620
    1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   621
        abort ifTrue: [^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   622
        firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   623
        abortDialog updatePrintingPageInfo: 'Page ', page printString, '/', totalPage printString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   624
"/      self device font: printerFont.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   625
        self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   626
        self printPage: page in: marginsRect lines: lines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   627
        firstPage := false ]. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   628
8f5996be6907 initial checkin
fm
parents:
diff changeset
   629
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   630
"/        ] ifFalse: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   631
"/            1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   632
"/                copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   633
"/                    abort ifTrue: [ ^self endPrintJob ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   634
"/                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   635
"/                    self device font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   636
"/                    self printPage: page in: marginsRect lines: lines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   637
"/                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   638
"/                 ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   639
"/            ]   
8f5996be6907 initial checkin
fm
parents:
diff changeset
   640
"/        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   641
8f5996be6907 initial checkin
fm
parents:
diff changeset
   642
    jobid notNil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   643
        ifTrue: [ self endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   644
                  abortDialog close.].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   645
8f5996be6907 initial checkin
fm
parents:
diff changeset
   646
"/    abort ifFalse: [ abortDialog close ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   647
8f5996be6907 initial checkin
fm
parents:
diff changeset
   648
    "Created: / 03-08-2006 / 16:13:33 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   649
    "Modified: / 04-08-2006 / 13:40:02 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   650
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   651
8f5996be6907 initial checkin
fm
parents:
diff changeset
   652
print: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   653
    pageHeader: aString2
8f5996be6907 initial checkin
fm
parents:
diff changeset
   654
    font: aFont
8f5996be6907 initial checkin
fm
parents:
diff changeset
   655
    title: aTitle 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   656
    wordWrap: wordWrapBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   657
    marginsRect: aMarginsRect
8f5996be6907 initial checkin
fm
parents:
diff changeset
   658
8f5996be6907 initial checkin
fm
parents:
diff changeset
   659
        "Private - Answer the receiver.  Output the receiver string to
8f5996be6907 initial checkin
fm
parents:
diff changeset
   660
        the printer using aFont.  A Print abort dialog box will be opened
8f5996be6907 initial checkin
fm
parents:
diff changeset
   661
        with aTitle.  If collateBoolean is true, collate output, otherwise
8f5996be6907 initial checkin
fm
parents:
diff changeset
   662
        do not.  Print copiesInteger copies of the specified string.  If
8f5996be6907 initial checkin
fm
parents:
diff changeset
   663
        wordWrapBoolean is true, word wrap the lines, otherwise do not.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   664
        Left, top, right & bottom margins are specified in inches in
8f5996be6907 initial checkin
fm
parents:
diff changeset
   665
        aMarginsRect.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   666
        Mg: Erweitert um pageHeader"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   667
       "Changed by K3/EES5-Mg, 08.01.96"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   668
8f5996be6907 initial checkin
fm
parents:
diff changeset
   669
    | lines linesPerPage totalPage marginsRect firstPage charHeight  printerFont headerLines|
8f5996be6907 initial checkin
fm
parents:
diff changeset
   670
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   671
    self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   672
    charHeight := self getCharHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   673
    marginsRect := self marginsRectangleFor: aMarginsRect.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   674
    lines := self asArrayOfStringLines: aString in: marginsRect wordWrap: wordWrapBoolean.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   675
    headerLines := self asArrayOfStringLines: aString2 in: marginsRect wordWrap: wordWrapBoolean.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   676
    linesPerPage := marginsRect bottom - marginsRect top // charHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   677
8f5996be6907 initial checkin
fm
parents:
diff changeset
   678
    linesPerPage > headerLines size
8f5996be6907 initial checkin
fm
parents:
diff changeset
   679
        ifFalse:
8f5996be6907 initial checkin
fm
parents:
diff changeset
   680
          [Dialog information: 'Der Dokumentenkopf ist zu groß; wird ignoriert!!'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   681
           headerLines := #().
8f5996be6907 initial checkin
fm
parents:
diff changeset
   682
          ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   683
        ifTrue: [linesPerPage := linesPerPage - headerLines size].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   684
    totalPage := lines size + linesPerPage - 1 // linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   685
    firstPage := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   686
8f5996be6907 initial checkin
fm
parents:
diff changeset
   687
"/    collateBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   688
"/        ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   689
"/            copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   690
8f5996be6907 initial checkin
fm
parents:
diff changeset
   691
     1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   692
                    abort ifTrue: [ ^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   693
                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   694
                    self font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   695
                    self printPage: page in: marginsRect lines: lines headerLines: headerLines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   696
                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   697
     ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   698
8f5996be6907 initial checkin
fm
parents:
diff changeset
   699
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   700
"/        ] ifFalse: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   701
"/            1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   702
"/                copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   703
"/                    abort ifTrue: [ ^self endPrintJob ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   704
"/                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   705
"/                    self device font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   706
"/                    self printPage: page in: marginsRect lines: lines headerLines: headerLines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   707
"/                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   708
"/                ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   709
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   710
"/        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   711
8f5996be6907 initial checkin
fm
parents:
diff changeset
   712
    "Created: / 03-08-2006 / 16:14:10 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   713
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   714
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   715
!PrinterContext methodsFor:'printing process'!
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   716
8f5996be6907 initial checkin
fm
parents:
diff changeset
   717
endPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   718
        "Informs device that we are finished writing to a page."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   719
    ( OperatingSystem endPage: gcId ) > 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   720
        ifFalse: [ self error ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   721
8f5996be6907 initial checkin
fm
parents:
diff changeset
   722
    "Created: / 27-07-2006 / 18:20:48 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   723
    "Modified: / 01-08-2006 / 16:01:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   724
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   725
8f5996be6907 initial checkin
fm
parents:
diff changeset
   726
endPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   727
8f5996be6907 initial checkin
fm
parents:
diff changeset
   728
        "End the print job.  Everything drawn between startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   729
         and endPrintJob will become one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   730
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   731
8f5996be6907 initial checkin
fm
parents:
diff changeset
   732
    | result |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   733
    self endPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   734
    result := OperatingSystem endDoc: gcId "deviceContext".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   735
    "graphicsTool" device close "deleteDC".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   736
    "deviceContext" gcId := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   737
    jobid := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   738
    result  >= 0        "> geändert in >=: Mg 22.6.95"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   739
        ifFalse: [ ^self error "osError" ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   740
8f5996be6907 initial checkin
fm
parents:
diff changeset
   741
    "Created: / 27-07-2006 / 18:21:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   742
    "Modified: / 01-08-2006 / 16:01:38 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   743
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   744
8f5996be6907 initial checkin
fm
parents:
diff changeset
   745
formFeed
8f5996be6907 initial checkin
fm
parents:
diff changeset
   746
        "Send a form feed to the printer."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   747
    self
8f5996be6907 initial checkin
fm
parents:
diff changeset
   748
        endPage;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   749
        startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   750
8f5996be6907 initial checkin
fm
parents:
diff changeset
   751
    "Created: / 27-07-2006 / 18:25:40 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   752
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   753
8f5996be6907 initial checkin
fm
parents:
diff changeset
   754
startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   755
        "Starts a page."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   756
    ( OperatingSystem startPage: gcId ) > 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   757
        ifFalse: [ ^self error "osError" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   758
8f5996be6907 initial checkin
fm
parents:
diff changeset
   759
    "Created: / 27-07-2006 / 18:25:55 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   760
    "Modified: / 28-07-2006 / 18:19:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   761
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   762
8f5996be6907 initial checkin
fm
parents:
diff changeset
   763
startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   764
        "Start a print job.  Everything drawn between startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   765
         and endPrintJob will become one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   766
    self startPrintJob: nil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   767
8f5996be6907 initial checkin
fm
parents:
diff changeset
   768
    "Created: / 27-07-2006 / 18:18:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   769
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   770
8f5996be6907 initial checkin
fm
parents:
diff changeset
   771
startPrintJob: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   772
8f5996be6907 initial checkin
fm
parents:
diff changeset
   773
        "Start a print job, using aString as the job title; everything
8f5996be6907 initial checkin
fm
parents:
diff changeset
   774
         drawn between startPrintJob and endPrintJob will become
8f5996be6907 initial checkin
fm
parents:
diff changeset
   775
         one entry in the print queue.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   776
8f5996be6907 initial checkin
fm
parents:
diff changeset
   777
         Mg: Bei SpUserabort (bei Drucken in Datei) wird abort auf true gesetzt
8f5996be6907 initial checkin
fm
parents:
diff changeset
   778
         und SpUserabort zurückgegeben.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   779
        "
8f5996be6907 initial checkin
fm
parents:
diff changeset
   780
       "Changed by K3/EES5-Mg, 21.07.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   781
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   782
8f5996be6907 initial checkin
fm
parents:
diff changeset
   783
    ^self startPrintJob: aString fileName: nil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   784
8f5996be6907 initial checkin
fm
parents:
diff changeset
   785
    "Created: / 27-07-2006 / 18:19:09 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   786
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   787
8f5996be6907 initial checkin
fm
parents:
diff changeset
   788
startPrintJob: aString fileName: aFileName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   789
8f5996be6907 initial checkin
fm
parents:
diff changeset
   790
        "Start a print job, using aString as the job title; everything
8f5996be6907 initial checkin
fm
parents:
diff changeset
   791
         drawn between startPrintJob and endPrintJob will become
8f5996be6907 initial checkin
fm
parents:
diff changeset
   792
         one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   793
       "Changed by K3/EES5-Mg, 21.07.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   794
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   795
       "Changed by GS/EEZ3-Vr, 15.03.02"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   796
8f5996be6907 initial checkin
fm
parents:
diff changeset
   797
    | docInfoStruct nameAddress title fileNameAddress |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   798
8f5996be6907 initial checkin
fm
parents:
diff changeset
   799
    gcId "deviceContext" isNil ifTrue: [ self buildPrinter ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   800
    abort := false.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   801
    "self setAbortProc."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   802
    title := aString isNil ifTrue: [ 'Smalltalk/X' "WindowLabelPrefix" ] ifFalse: [ aString ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   803
8f5996be6907 initial checkin
fm
parents:
diff changeset
   804
    nameAddress := title asExternalBytes unprotectFromGC.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   805
"/    nameAddress := ExternalAddress copyToNonSmalltalkMemory: title.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   806
    aFileName isNil ifFalse: [fileNameAddress := aFileName pathName asExternalBytes unprotectFromGC].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   807
"/    aFileName isNil ifFalse: [fileNameAddress := ExternalAddress copyToNonSmalltalkMemory: aFileName].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   808
8f5996be6907 initial checkin
fm
parents:
diff changeset
   809
    docInfoStruct := Win32OperatingSystem::DocInfoStructure new "some value". 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   810
    docInfoStruct cbSize: docInfoStruct sizeInBytes;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   811
                  lpszDocName: nameAddress address.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   812
"/    ( docInfoStruct := SelfDefinedStructure named: 'DOCINFO' )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   813
"/        cbSize: docInfoStruct sizeInBytes;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   814
"/        lpszDocName: nameAddress "asParameter".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   815
8f5996be6907 initial checkin
fm
parents:
diff changeset
   816
    fileNameAddress isNil ifFalse:[docInfoStruct lpszOutput: fileNameAddress address"asParameter"].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   817
8f5996be6907 initial checkin
fm
parents:
diff changeset
   818
    jobid := OperatingSystem startDoc: gcId "deviceContext"  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   819
                             docInfo: docInfoStruct "asParameter".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   820
"/    nameAddress free.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   821
"/    fileNameAddress isNil ifFalse: [fileNameAddress free].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   822
8f5996be6907 initial checkin
fm
parents:
diff changeset
   823
    jobid  > 0 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   824
        ifFalse: [jobid = -1 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   825
                    ifTrue: [abort := true. ^nil]. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   826
                  ^self error "osError" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   827
    self startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   828
8f5996be6907 initial checkin
fm
parents:
diff changeset
   829
    "Created: / 27-07-2006 / 18:19:31 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   830
    "Modified: / 03-08-2006 / 15:11:19 / fm"
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   831
! !
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   832
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   833
!PrinterContext methodsFor:'queries'!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   834
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   835
supportsColor
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   836
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   837
       "Changed by K3/EES5-Vo, 11.03.98"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   838
       "Changed by GS-EC/EES3-Vo, 06.10.05"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   839
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   840
"/    | retVal info |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   841
"/
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   842
"/    info := (self class getPrinterInformation: self name) asUppercase.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   843
"/    (info includesSubstring: ',PSCRIPT,')
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   844
"/    ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   845
"/        retVal := (DAPASX::DapasSystemInfo getYesNoInfoApp: 'Printer' profile: 'PostScriptBlackWhite') not.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   846
"/    ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   847
"/    ifFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   848
"/        retVal := (info includesSubstring: 'PDF')
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   849
"/            ifTrue: [true]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   850
"/            ifFalse: [self numberOfColorBitsPerPixel > 1].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   851
"/    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   852
"/
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   853
"/    ^retVal
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   854
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   855
    "Created: / 03-08-2006 / 09:55:26 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   856
    "Modified: / 04-08-2006 / 13:20:40 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   857
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   858
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   859
supportsGraphics
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   860
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   861
       "Private & DEFAULT!!."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   862
       "Changed by K3/EES5-Mg, 26.01.96"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   863
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   864
    ^(OperatingSystem getDeviceCaps: gcId asParameter index: 2 "Technology") ~= 4
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   865
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   866
    "Created: / 03-08-2006 / 10:07:43 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   867
! !
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   868
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   869
!PrinterContext methodsFor:'text printing'!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   870
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   871
asArrayOfStringLines: aString in: aRectangle wordWrap: wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   872
        "Private - convert aString into an array of lines; if wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   873
        is true, also perform word wrapping on the lines, within aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   874
    | line lines stream x0 x1 partialLine leftMargin rightMargin partialLineWidth index |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   875
    stream := ReadStream on: aString.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   876
    lines := OrderedCollection new.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   877
    wordWrapBoolean ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   878
        leftMargin := aRectangle left.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   879
        rightMargin := aRectangle right ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   880
    [ stream atEnd ] whileFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   881
        line := stream nextLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   882
        wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   883
            ifFalse: [ lines add: line ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   884
            ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   885
                x0 := x1 := 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   886
                1 to: line size do: [ :i | 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   887
                     ( ( line at: i ) = Character space "32"  and: [ (partialLine := line copyFrom: x0 to: i) trimBlanks notEmpty ] ) 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   888
                        ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   889
                            partialLineWidth := self stringWidthOf: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   890
                            ( leftMargin + partialLineWidth ) > rightMargin
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   891
                                ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   892
                                    partialLine := line copyFrom: x0 to: x1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   893
                                    lines add: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   894
                                    x0 := x1 + 1 ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   895
                                ifFalse: [ x1 := i ] ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   896
                            index := i 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   897
                        ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   898
                line isEmpty
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   899
                    ifTrue: [ lines add: line ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   900
                    ifFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   901
                        partialLine := line copyFrom: x0 to: index.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   902
                        partialLineWidth := self stringWidthOf: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   903
                        ( leftMargin + partialLineWidth ) > rightMargin 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   904
                                ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   905
                                    partialLine := line copyFrom: x0 to: x1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   906
                                    lines add: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   907
                                    partialLine := line copyFrom: x1 + 1 to: index 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   908
                                ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   909
                        lines add: partialLine 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   910
                    ] 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   911
            ] 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   912
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   913
    ^lines asArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   914
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   915
    "Created: / 02-08-2006 / 17:56:51 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   916
    "Modified: / 04-08-2006 / 13:39:50 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   917
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   918
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   919
displayStringLines: anIndexedCollection from: startIndex to: endIndex in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   920
        "Private - display Strings in anIndexedCollection starting at startIndex and
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   921
        ending at endIndex, clipped within the bounds of aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   922
    | charHeight ta region ascent|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   923
    charHeight := self getCharHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   924
    ascent := self font ascentOn: self device.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   925
    startIndex to: endIndex do: [ :i |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   926
        |lineToPrint|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   927
        lineToPrint := ( anIndexedCollection at: i ).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   928
        self device
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   929
            displayString: lineToPrint 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   930
            from:1 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   931
            to: lineToPrint size 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   932
            x: aRectangle left 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   933
            y: (aRectangle top + ( i - startIndex * charHeight ) )
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   934
            in:nil 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   935
            with: gcId 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   936
            opaque:false 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   937
            fontAscent: ascent.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   938
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   939
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   940
"/    region := self setClipRect: aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   941
"/    ta := self getTextAlign.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   942
"/    self setTextAlign: TaTop.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   943
"/    startIndex to: endIndex do: [ :i |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   944
"/        self
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   945
"/            displayText: ( anIndexedCollection at: i )
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   946
"/            at: aRectangle left @ ( aRectangle top + ( i - startIndex * charHeight ) ) ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   947
"/    self setTextAlign: ta.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   948
"/    self destroyRegion: region
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   949
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   950
    "Created: / 03-08-2006 / 11:37:52 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   951
    "Modified: / 03-08-2006 / 12:38:43 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   952
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   953
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   954
displayStringLines: anIndexedCollection in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   955
        "Private - display anIndexedCollection of Strings clipped within
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   956
        the bounds of aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   957
    self
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   958
        displayStringLines: anIndexedCollection
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   959
        from: 1
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   960
        to: anIndexedCollection size
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   961
        in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   962
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   963
    "Created: / 03-08-2006 / 16:03:07 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   964
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   965
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   966
marginsRectangleFor:aRectangle 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   967
    "Private - Answer a Rectangle defining margins based on aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   968
     Units for aRectangle are in inches, returned margins rectangle is
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   969
     in device units (pixels)."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   970
    
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   971
    |left top right bottom pixelsPerInchX pixelsPerInchY horzRes vertRes inset rectangle|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   972
    pixelsPerInchX := self pixelsPerInchOfScreenWidth.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   973
    pixelsPerInchY := self pixelsPerInchOfScreenHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   974
    aRectangle isNil ifTrue:[
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   975
        horzRes := self printerWidthArea.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   976
        vertRes := self printerHeightArea.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   977
        inset := self class defaultMargins.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   978
        left := (inset x * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   979
        top := (inset y * pixelsPerInchY) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   980
        right := horzRes - (inset x * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   981
        bottom := vertRes - (inset y * pixelsPerInchY) asInteger
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   982
    ] ifFalse:[
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   983
        left := (aRectangle left * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   984
        top := (aRectangle top * pixelsPerInchY) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   985
        right := (aRectangle right * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   986
        bottom := (aRectangle bottom * pixelsPerInchY) asInteger
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   987
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   988
    rectangle := left @ top extent: right @ bottom.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   989
    ^ rectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   990
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   991
    "Created: / 27-07-2006 / 18:22:57 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   992
    "Modified: / 04-08-2006 / 13:39:45 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   993
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   994
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   995
printPage: pageIndex in: aRectangle lines: lines headerLines: headerLines linesPerPage: linesPerPage
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   996
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   997
        "Private - print page # pageIndex from lines, assuming
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   998
        the given number of linesPerPage."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   999
       "Changed by K3/EES5-Mg, 30.07.97"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1000
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1001
    | firstLine lastLine l indexString p cHeight rect hLines|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1002
    firstLine := ( pageIndex - 1 ) * linesPerPage + 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1003
    lastLine := ( firstLine + linesPerPage - 1 ) min: lines size.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1004
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1005
    rect := aRectangle deepCopy.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1006
    hLines := headerLines deepCopy.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1007
    headerLines size > 0 ifTrue:
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1008
      [l := hLines first.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1009
       (p := l indexOfString: '#P') = 0 ifFalse:
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1010
          [indexString := pageIndex printString,' '.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1011
           "l replaceFrom: p to: p + indexString size - 1 with: indexString startingAt: 1."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1012
           l := (l copyFrom: 1 to: p - 1),indexString,(l copyFrom: p + 2 to: l size).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1013
           hLines at: 1 put: l.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1014
          ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1015
       cHeight := self getCharHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1016
       rect top: rect top + (hLines size * cHeight).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1017
      ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1018
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1019
    self displayStringLines: hLines in: aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1020
    self displayStringLines: lines from: firstLine to: lastLine in: rect.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1021
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1022
    "Created: / 27-07-2006 / 18:28:00 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1023
    "Modified: / 03-08-2006 / 16:03:15 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1024
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1025
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1026
printPage: pageIndex in: aRectangle lines: lines linesPerPage: linesPerPage
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1027
        "Private - print page # pageIndex from lines, assuming
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1028
        the given number of linesPerPage."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1029
    | firstLine lastLine |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1030
    firstLine := ( pageIndex - 1 ) * linesPerPage + 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1031
    lastLine := ( firstLine + linesPerPage - 1 ) min: lines size.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1032
    self displayStringLines: lines from: firstLine to: lastLine in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1033
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1034
    "Created: / 27-07-2006 / 18:24:59 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1035
    "Modified: / 03-08-2006 / 12:47:24 / fm"
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1036
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1037
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1038
stringWidthOf: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1039
        "Return the width of aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1040
         when written using the current font."
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1041
    ^self
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1042
        stringWidthOf: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1043
        at: aString size.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1044
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1045
    "Modified: / 03-08-2006 / 10:18:23 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1046
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1047
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1048
stringWidthOf: aString at: index
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1049
        "Return the width of aString up to index
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1050
         when written using the current font; expand tabs out
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1051
         to 4 spaces for calculations"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1052
    | answer str size spaceWidth|
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1053
    index <= 0 ifTrue: [^0].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1054
    str :=  index >= aString size
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1055
        ifTrue:[aString]
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1056
        ifFalse:[aString copyFrom: 1 to: index].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1057
    true "self font isNil"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1058
        ifTrue: [  "if font not set yet, calculate based on default font"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1059
"/            extString := str asExternalString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1060
            size := Win32OperatingSystem::WinPointStructure new.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1061
            ( OperatingSystem
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1062
                getTextExtentPoint: gcId "self handle"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1063
                string: str 
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1064
                size: size)                  
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1065
                    ifFalse: [ ^self error ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1066
            answer := size x.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1067
#TODO.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1068
        ] ifFalse: [ answer := self font widthOf: str on: self device "self handle" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1069
    index > aString size ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1070
        spaceWidth:=  self font widthOf: Character space on: self device. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1071
        answer := answer + (index - aString size * spaceWidth)].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1072
    ^answer.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1073
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1074
    "Created: / 03-08-2006 / 10:27:20 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1075
    "Modified: / 04-08-2006 / 12:27:26 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1076
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1077
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1078
!PrinterContext class methodsFor:'documentation'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1079
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1080
version
2184
c108f1291023 copyright methods
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1081
    ^ '$Header: /cvs/stx/stx/libview2/PrinterContext.st,v 1.4 2006-08-25 10:52:49 cg Exp $'
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1082
! !