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