PrinterContext.st
author fm
Wed, 16 Aug 2006 13:00:12 +0200
changeset 2147 10c893aa772a
parent 2146 61291b6cc0f7
child 2184 c108f1291023
permissions -rw-r--r--
*** empty log message ***
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
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   305
printStrings: stringAndPositionsArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   306
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   307
        "Opens a print dialog and prints the given strings"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   308
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   309
    | printerInfo printer |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   310
    printerInfo := PrintingDialog getPrinterInfo.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   311
    printerInfo isNil ifTrue:[^self].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   312
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   313
    printer := self fromPrinterInfo: printerInfo.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   314
    [ 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   315
    printer startPrintJob: 'Strings with Position'.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   316
    printer foreground:Color black background:Color white.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   317
    stringAndPositionsArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   318
        do:[:pairOfPointsAndPosition |                 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   319
             printer displayString:(pairOfPointsAndPosition at: 1) 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   320
                        x:(pairOfPointsAndPosition at: 2) x
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   321
                        y:(pairOfPointsAndPosition at: 2) y
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   322
        ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   323
    printer endPrintJob.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   324
    ] forkAt: 3
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   325
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   326
"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   327
    PrinterContext printStrings:  
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   328
        (Array with: (Array with:'Testing printing with standart method' with:10@10)
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   329
               with: (Array with:'Another test string to print' with:80@200))
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   330
"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   331
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   332
    "Created: / 07-08-2006 / 12:09:48 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   333
    "Modified: / 07-08-2006 / 14:11:17 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   334
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   335
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   336
printingTestString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   337
8f5996be6907 initial checkin
fm
parents:
diff changeset
   338
^'GetTextExtentPoint Note  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   339
8f5996be6907 initial checkin
fm
parents:
diff changeset
   340
The GetTextExtentPoint function computes the width and height of the specified string of text.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   341
8f5996be6907 initial checkin
fm
parents:
diff changeset
   342
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
   343
8f5996be6907 initial checkin
fm
parents:
diff changeset
   344
BOOL GetTextExtentPoint(
8f5996be6907 initial checkin
fm
parents:
diff changeset
   345
  HDC hdc,           // handle to DC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   346
  LPCTSTR lpString,  // text string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   347
  int cbString,      // number of characters in string
8f5996be6907 initial checkin
fm
parents:
diff changeset
   348
  LPSIZE lpSize      // string size
8f5996be6907 initial checkin
fm
parents:
diff changeset
   349
);
8f5996be6907 initial checkin
fm
parents:
diff changeset
   350
8f5996be6907 initial checkin
fm
parents:
diff changeset
   351
Parameters
8f5996be6907 initial checkin
fm
parents:
diff changeset
   352
8f5996be6907 initial checkin
fm
parents:
diff changeset
   353
hdc
8f5996be6907 initial checkin
fm
parents:
diff changeset
   354
    [in] Handle to the device context. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   355
lpString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   356
    [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
   357
cbString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   358
    [in] Specifies the length of the string pointed to by lpString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   359
8f5996be6907 initial checkin
fm
parents:
diff changeset
   360
    Windows 95/98/Me: This value may not exceed 8192. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   361
lpSize
8f5996be6907 initial checkin
fm
parents:
diff changeset
   362
    [out] Pointer to a SIZE structure that receives the dimensions of the string, in logical units. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   363
8f5996be6907 initial checkin
fm
parents:
diff changeset
   364
Return Values
8f5996be6907 initial checkin
fm
parents:
diff changeset
   365
8f5996be6907 initial checkin
fm
parents:
diff changeset
   366
If the function succeeds, the return value is nonzero.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   367
8f5996be6907 initial checkin
fm
parents:
diff changeset
   368
If the function fails, the return value is zero.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   369
8f5996be6907 initial checkin
fm
parents:
diff changeset
   370
Windows NT/2000/XP: To get extended error information, call GetLastError.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   371
Remarks
8f5996be6907 initial checkin
fm
parents:
diff changeset
   372
8f5996be6907 initial checkin
fm
parents:
diff changeset
   373
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
   374
8f5996be6907 initial checkin
fm
parents:
diff changeset
   375
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
   376
8f5996be6907 initial checkin
fm
parents:
diff changeset
   377
The calculated string width takes into account the intercharacter spacing set by the SetTextCharacterExtra function.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   378
8f5996be6907 initial checkin
fm
parents:
diff changeset
   379
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
   380
8f5996be6907 initial checkin
fm
parents:
diff changeset
   381
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
   382
Requirements
8f5996be6907 initial checkin
fm
parents:
diff changeset
   383
8f5996be6907 initial checkin
fm
parents:
diff changeset
   384
  Windows NT/2000/XP/Vista: Included in Windows NT 3.1 and later.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   385
  Windows 95/98/Me: Included in Windows 95 and later.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   386
  Header: Declared in Wingdi.h; include Windows.h.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   387
  Library: Use Gdi32.lib.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   388
  Unicode: Implemented as Unicode and ANSI versions on all platforms. Also supported by Microsoft Layer for Unicode.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   389
See Also'
8f5996be6907 initial checkin
fm
parents:
diff changeset
   390
8f5996be6907 initial checkin
fm
parents:
diff changeset
   391
    "Created: / 03-08-2006 / 13:22:14 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   392
    "Modified: / 07-08-2006 / 14:28:16 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   393
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   394
8f5996be6907 initial checkin
fm
parents:
diff changeset
   395
!PrinterContext methodsFor:'abort handling'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   396
8f5996be6907 initial checkin
fm
parents:
diff changeset
   397
abortPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   398
        "Abort the current print job."  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   399
8f5996be6907 initial checkin
fm
parents:
diff changeset
   400
    abort := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   401
    jobid := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   402
8f5996be6907 initial checkin
fm
parents:
diff changeset
   403
    "Modified: / 02-08-2006 / 15:40:26 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   404
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   405
8f5996be6907 initial checkin
fm
parents:
diff changeset
   406
aborted
8f5996be6907 initial checkin
fm
parents:
diff changeset
   407
        "Answer whether the user aborted from PrintAbortDialog."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   408
    ^abort
8f5996be6907 initial checkin
fm
parents:
diff changeset
   409
8f5996be6907 initial checkin
fm
parents:
diff changeset
   410
    "Created: / 27-07-2006 / 10:20:10 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   411
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   412
8f5996be6907 initial checkin
fm
parents:
diff changeset
   413
!PrinterContext methodsFor:'accessing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   414
8f5996be6907 initial checkin
fm
parents:
diff changeset
   415
getCharHeight
8f5996be6907 initial checkin
fm
parents:
diff changeset
   416
        "Private - answer the height of the font selected in the receiver's
8f5996be6907 initial checkin
fm
parents:
diff changeset
   417
        device context."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   418
8f5996be6907 initial checkin
fm
parents:
diff changeset
   419
    | textMetrics |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   420
    textMetrics := Win32OperatingSystem::TextMetricsStructure new.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   421
    ( OperatingSystem 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   422
        getTextMetrics: gcId "deviceContext" 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   423
        lpMetrics: textMetrics "asParameter" )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   424
            ifFalse: [ ^self error ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   425
    ^textMetrics tmHeight + textMetrics tmExternalLeading
8f5996be6907 initial checkin
fm
parents:
diff changeset
   426
8f5996be6907 initial checkin
fm
parents:
diff changeset
   427
    "Created: / 02-08-2006 / 17:47:20 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   428
    "Modified: / 03-08-2006 / 10:09:01 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   429
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   430
8f5996be6907 initial checkin
fm
parents:
diff changeset
   431
name                                   
8f5996be6907 initial checkin
fm
parents:
diff changeset
   432
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   433
8f5996be6907 initial checkin
fm
parents:
diff changeset
   434
    ^self printerInfo printerName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   435
8f5996be6907 initial checkin
fm
parents:
diff changeset
   436
    "Modified: / 02-08-2006 / 16:55:03 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   437
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   438
8f5996be6907 initial checkin
fm
parents:
diff changeset
   439
name: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   440
        "Set the receiver's printer name to aName."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   441
8f5996be6907 initial checkin
fm
parents:
diff changeset
   442
    self printerInfo: (self class getPrinterInformation: aName)
8f5996be6907 initial checkin
fm
parents:
diff changeset
   443
8f5996be6907 initial checkin
fm
parents:
diff changeset
   444
    "Created: / 27-07-2006 / 10:33:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   445
    "Modified: / 02-08-2006 / 16:54:46 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   446
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   447
8f5996be6907 initial checkin
fm
parents:
diff changeset
   448
numberOfColorBitsPerPixel
8f5996be6907 initial checkin
fm
parents:
diff changeset
   449
8f5996be6907 initial checkin
fm
parents:
diff changeset
   450
    ^ OperatingSystem getDeviceCaps:gcId index:12 "Bitspixel"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   451
8f5996be6907 initial checkin
fm
parents:
diff changeset
   452
    "Created: / 03-08-2006 / 09:58:18 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   453
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   454
8f5996be6907 initial checkin
fm
parents:
diff changeset
   455
pixelsPerInchOfScreenHeight
8f5996be6907 initial checkin
fm
parents:
diff changeset
   456
    ^ OperatingSystem getDeviceCaps:gcId index:90 "Logpixelsy"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   457
8f5996be6907 initial checkin
fm
parents:
diff changeset
   458
    "Created: / 01-08-2006 / 16:29:16 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   459
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   460
8f5996be6907 initial checkin
fm
parents:
diff changeset
   461
pixelsPerInchOfScreenWidth
8f5996be6907 initial checkin
fm
parents:
diff changeset
   462
    ^ OperatingSystem getDeviceCaps:gcId index:88 "Logpixelsx"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   463
8f5996be6907 initial checkin
fm
parents:
diff changeset
   464
    "Created: / 01-08-2006 / 16:28:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   465
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   466
8f5996be6907 initial checkin
fm
parents:
diff changeset
   467
printerInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   468
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   469
8f5996be6907 initial checkin
fm
parents:
diff changeset
   470
    ^printerInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   471
8f5996be6907 initial checkin
fm
parents:
diff changeset
   472
    "Created: / 02-08-2006 / 16:55:17 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   473
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   474
8f5996be6907 initial checkin
fm
parents:
diff changeset
   475
printerInfo: aPrinterInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   476
        "Sets the receiver's printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   477
8f5996be6907 initial checkin
fm
parents:
diff changeset
   478
    printerInfo := aPrinterInfo
8f5996be6907 initial checkin
fm
parents:
diff changeset
   479
8f5996be6907 initial checkin
fm
parents:
diff changeset
   480
    "Created: / 02-08-2006 / 16:55:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   481
    "Modified: / 03-08-2006 / 13:11:19 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   482
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   483
8f5996be6907 initial checkin
fm
parents:
diff changeset
   484
printerInfoWithName: aName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   485
        "Set the receiver's printer name to aName."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   486
8f5996be6907 initial checkin
fm
parents:
diff changeset
   487
    self printerInfo: (self class getPrinterInformation: aName).
8f5996be6907 initial checkin
fm
parents:
diff changeset
   488
    ^self
8f5996be6907 initial checkin
fm
parents:
diff changeset
   489
8f5996be6907 initial checkin
fm
parents:
diff changeset
   490
    "Created: / 02-08-2006 / 16:55:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   491
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   492
8f5996be6907 initial checkin
fm
parents:
diff changeset
   493
printerUserFriendlyName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   494
        "Answer the receiver's name from the current printerInfo."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   495
8f5996be6907 initial checkin
fm
parents:
diff changeset
   496
    ^self printerInfo userFriendlyName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   497
8f5996be6907 initial checkin
fm
parents:
diff changeset
   498
    "Created: / 03-08-2006 / 12:55:57 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   499
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   500
8f5996be6907 initial checkin
fm
parents:
diff changeset
   501
!PrinterContext methodsFor:'initialization & release'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   502
8f5996be6907 initial checkin
fm
parents:
diff changeset
   503
buildPrinter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   504
        "Private - create all the operating system resources needed."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   505
    self 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   506
        createDC;       
8f5996be6907 initial checkin
fm
parents:
diff changeset
   507
        initExtent
8f5996be6907 initial checkin
fm
parents:
diff changeset
   508
8f5996be6907 initial checkin
fm
parents:
diff changeset
   509
    "Created: / 27-07-2006 / 10:20:36 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   510
    "Modified: / 01-08-2006 / 15:57:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   511
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   512
8f5996be6907 initial checkin
fm
parents:
diff changeset
   513
createDC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   514
        "Private - Create a device context for the receiver"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   515
8f5996be6907 initial checkin
fm
parents:
diff changeset
   516
 gcId := printerInfo createDC
8f5996be6907 initial checkin
fm
parents:
diff changeset
   517
8f5996be6907 initial checkin
fm
parents:
diff changeset
   518
"/    | printerInfo driverNm mediumNm deviceNm hPrinter driverData|
8f5996be6907 initial checkin
fm
parents:
diff changeset
   519
"/    printerInfo := self class getPrinterInformation: self name.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   520
"/     driverNm := printerInfo driverName.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   521
"/     mediumNm := printerInfo medium.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   522
"/     deviceNm := printerInfo printerName.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   523
"/
8f5996be6907 initial checkin
fm
parents:
diff changeset
   524
"/     hPrinter := OperatingSystem openPrinter:deviceNm.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   525
"/     driverData := OperatingSystem getDocumentProperties:nil hPrinter:hPrinter pDeviceName:deviceNm.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   526
"/     Win32OperatingSystem primClosePrinter:hPrinter.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   527
"/
8f5996be6907 initial checkin
fm
parents:
diff changeset
   528
"/     "deviceContext" gcId := OperatingSystem createPrinterDC:driverNm device:deviceNm output:mediumNm initData:driverData.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   529
8f5996be6907 initial checkin
fm
parents:
diff changeset
   530
"/    ( deviceContext := GDILibrary
8f5996be6907 initial checkin
fm
parents:
diff changeset
   531
"/        createDC: driverName asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   532
"/        deviceName: deviceName asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   533
"/        output: printerPort asParameter
8f5996be6907 initial checkin
fm
parents:
diff changeset
   534
"/        initData: nil ) = 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   535
"/            ifTrue: [ ^self osError ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   536
8f5996be6907 initial checkin
fm
parents:
diff changeset
   537
    "Created: / 27-07-2006 / 10:21:05 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   538
    "Modified: / 02-08-2006 / 17:30:47 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   539
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   540
8f5996be6907 initial checkin
fm
parents:
diff changeset
   541
initExtent
8f5996be6907 initial checkin
fm
parents:
diff changeset
   542
    "Private - init the width and height of GraphicsTool for the receiver."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   543
    
8f5996be6907 initial checkin
fm
parents:
diff changeset
   544
    device
8f5996be6907 initial checkin
fm
parents:
diff changeset
   545
        width:self printerWidthArea;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   546
        height:self printerHeightArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   547
8f5996be6907 initial checkin
fm
parents:
diff changeset
   548
    "Modified: / 01-08-2006 / 16:14:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   549
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   550
8f5996be6907 initial checkin
fm
parents:
diff changeset
   551
printerHeightArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   552
    ^ (OperatingSystem getDeviceCaps:gcId index:10 "Vertres")
8f5996be6907 initial checkin
fm
parents:
diff changeset
   553
8f5996be6907 initial checkin
fm
parents:
diff changeset
   554
    "Created: / 01-08-2006 / 16:14:49 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   555
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   556
8f5996be6907 initial checkin
fm
parents:
diff changeset
   557
printerWidthArea
8f5996be6907 initial checkin
fm
parents:
diff changeset
   558
    ^ OperatingSystem getDeviceCaps:gcId "deviceContext" index:8 "Horzres"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   559
8f5996be6907 initial checkin
fm
parents:
diff changeset
   560
    "Created: / 01-08-2006 / 16:14:08 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   561
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   562
8f5996be6907 initial checkin
fm
parents:
diff changeset
   563
!PrinterContext methodsFor:'printing'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   564
8f5996be6907 initial checkin
fm
parents:
diff changeset
   565
print: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   566
    font: aFont
8f5996be6907 initial checkin
fm
parents:
diff changeset
   567
    title: aTitle  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   568
    wordWrap: wordWrapBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   569
    marginsRect: aMarginsRect
8f5996be6907 initial checkin
fm
parents:
diff changeset
   570
        "Answer the receiver.  Output the receiver string to
8f5996be6907 initial checkin
fm
parents:
diff changeset
   571
        the printer using aFont.  A Print abort dialog box will be opened
8f5996be6907 initial checkin
fm
parents:
diff changeset
   572
        with aTitle.  If collateBoolean is true, collate output, otherwise
8f5996be6907 initial checkin
fm
parents:
diff changeset
   573
        do not.  Print copiesInteger copies of the specified string.  If
8f5996be6907 initial checkin
fm
parents:
diff changeset
   574
        wordWrapBoolean is true, word wrap the lines, otherwise do not.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   575
        Left, top, right & bottom margins are specified in inches in
8f5996be6907 initial checkin
fm
parents:
diff changeset
   576
        aMarginsRect."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   577
    | lines linesPerPage totalPage marginsRect firstPage charHeight abortDialog |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   578
8f5996be6907 initial checkin
fm
parents:
diff changeset
   579
    jobid isNil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   580
        ifTrue: [ self startPrintJob: aTitle ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   581
    abortDialog := PrintAbortDialog new open: aTitle printer: self.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   582
    self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   583
    marginsRect := self marginsRectangleFor: aMarginsRect.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   584
    lines := self asArrayOfStringLines: aString in: marginsRect wordWrap: wordWrapBoolean.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   585
    charHeight := self getCharHeight. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   586
    linesPerPage := marginsRect bottom - marginsRect top // charHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   587
    totalPage := lines size + linesPerPage - 1 // linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   588
    firstPage := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   589
8f5996be6907 initial checkin
fm
parents:
diff changeset
   590
"/    collateBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   591
"/        ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   592
"/            copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   593
    1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   594
        abort ifTrue: [^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   595
        firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   596
        abortDialog updatePrintingPageInfo: 'Page ', page printString, '/', totalPage printString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   597
"/      self device font: printerFont.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   598
        self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   599
        self printPage: page in: marginsRect lines: lines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   600
        firstPage := false ]. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   601
8f5996be6907 initial checkin
fm
parents:
diff changeset
   602
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   603
"/        ] ifFalse: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   604
"/            1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   605
"/                copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   606
"/                    abort ifTrue: [ ^self endPrintJob ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   607
"/                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   608
"/                    self device font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   609
"/                    self printPage: page in: marginsRect lines: lines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   610
"/                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   611
"/                 ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   612
"/            ]   
8f5996be6907 initial checkin
fm
parents:
diff changeset
   613
"/        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   614
8f5996be6907 initial checkin
fm
parents:
diff changeset
   615
    jobid notNil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   616
        ifTrue: [ self endPrintJob.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   617
                  abortDialog close.].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   618
8f5996be6907 initial checkin
fm
parents:
diff changeset
   619
"/    abort ifFalse: [ abortDialog close ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   620
8f5996be6907 initial checkin
fm
parents:
diff changeset
   621
    "Created: / 03-08-2006 / 16:13:33 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   622
    "Modified: / 04-08-2006 / 13:40:02 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   623
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   624
8f5996be6907 initial checkin
fm
parents:
diff changeset
   625
print: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   626
    pageHeader: aString2
8f5996be6907 initial checkin
fm
parents:
diff changeset
   627
    font: aFont
8f5996be6907 initial checkin
fm
parents:
diff changeset
   628
    title: aTitle 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   629
    wordWrap: wordWrapBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   630
    marginsRect: aMarginsRect
8f5996be6907 initial checkin
fm
parents:
diff changeset
   631
8f5996be6907 initial checkin
fm
parents:
diff changeset
   632
        "Private - Answer the receiver.  Output the receiver string to
8f5996be6907 initial checkin
fm
parents:
diff changeset
   633
        the printer using aFont.  A Print abort dialog box will be opened
8f5996be6907 initial checkin
fm
parents:
diff changeset
   634
        with aTitle.  If collateBoolean is true, collate output, otherwise
8f5996be6907 initial checkin
fm
parents:
diff changeset
   635
        do not.  Print copiesInteger copies of the specified string.  If
8f5996be6907 initial checkin
fm
parents:
diff changeset
   636
        wordWrapBoolean is true, word wrap the lines, otherwise do not.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   637
        Left, top, right & bottom margins are specified in inches in
8f5996be6907 initial checkin
fm
parents:
diff changeset
   638
        aMarginsRect.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   639
        Mg: Erweitert um pageHeader"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   640
       "Changed by K3/EES5-Mg, 08.01.96"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   641
8f5996be6907 initial checkin
fm
parents:
diff changeset
   642
    | lines linesPerPage totalPage marginsRect firstPage charHeight  printerFont headerLines|
8f5996be6907 initial checkin
fm
parents:
diff changeset
   643
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   644
    self font: aFont.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   645
    charHeight := self getCharHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   646
    marginsRect := self marginsRectangleFor: aMarginsRect.
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   647
    lines := self asArrayOfStringLines: aString in: marginsRect wordWrap: wordWrapBoolean.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   648
    headerLines := self asArrayOfStringLines: aString2 in: marginsRect wordWrap: wordWrapBoolean.
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   649
    linesPerPage := marginsRect bottom - marginsRect top // charHeight.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   650
8f5996be6907 initial checkin
fm
parents:
diff changeset
   651
    linesPerPage > headerLines size
8f5996be6907 initial checkin
fm
parents:
diff changeset
   652
        ifFalse:
8f5996be6907 initial checkin
fm
parents:
diff changeset
   653
          [Dialog information: 'Der Dokumentenkopf ist zu groß; wird ignoriert!!'.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   654
           headerLines := #().
8f5996be6907 initial checkin
fm
parents:
diff changeset
   655
          ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   656
        ifTrue: [linesPerPage := linesPerPage - headerLines size].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   657
    totalPage := lines size + linesPerPage - 1 // linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   658
    firstPage := true.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   659
8f5996be6907 initial checkin
fm
parents:
diff changeset
   660
"/    collateBoolean
8f5996be6907 initial checkin
fm
parents:
diff changeset
   661
"/        ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   662
"/            copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   663
8f5996be6907 initial checkin
fm
parents:
diff changeset
   664
     1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   665
                    abort ifTrue: [ ^self].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   666
                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   667
                    self font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   668
                    self printPage: page in: marginsRect lines: lines headerLines: headerLines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   669
                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   670
     ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   671
8f5996be6907 initial checkin
fm
parents:
diff changeset
   672
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   673
"/        ] ifFalse: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   674
"/            1 to: totalPage do: [ :page |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   675
"/                copiesInteger timesRepeat: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
   676
"/                    abort ifTrue: [ ^self endPrintJob ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   677
"/                    firstPage ifFalse: [ self formFeed ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   678
"/                    self device font: printerFont.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   679
"/                    self printPage: page in: marginsRect lines: lines headerLines: headerLines linesPerPage: linesPerPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   680
"/                    firstPage := false 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   681
"/                ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   682
"/            ] 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   683
"/        ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   684
8f5996be6907 initial checkin
fm
parents:
diff changeset
   685
    "Created: / 03-08-2006 / 16:14:10 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   686
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
   687
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   688
!PrinterContext methodsFor:'printing process'!
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
   689
8f5996be6907 initial checkin
fm
parents:
diff changeset
   690
endPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   691
        "Informs device that we are finished writing to a page."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   692
    ( OperatingSystem endPage: gcId ) > 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   693
        ifFalse: [ self error ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   694
8f5996be6907 initial checkin
fm
parents:
diff changeset
   695
    "Created: / 27-07-2006 / 18:20:48 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   696
    "Modified: / 01-08-2006 / 16:01:34 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   697
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   698
8f5996be6907 initial checkin
fm
parents:
diff changeset
   699
endPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   700
8f5996be6907 initial checkin
fm
parents:
diff changeset
   701
        "End the print job.  Everything drawn between startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   702
         and endPrintJob will become one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   703
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   704
8f5996be6907 initial checkin
fm
parents:
diff changeset
   705
    | result |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   706
    self endPage.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   707
    result := OperatingSystem endDoc: gcId "deviceContext".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   708
    "graphicsTool" device close "deleteDC".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   709
    "deviceContext" gcId := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   710
    jobid := nil.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   711
    result  >= 0        "> geändert in >=: Mg 22.6.95"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   712
        ifFalse: [ ^self error "osError" ]
8f5996be6907 initial checkin
fm
parents:
diff changeset
   713
8f5996be6907 initial checkin
fm
parents:
diff changeset
   714
    "Created: / 27-07-2006 / 18:21:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   715
    "Modified: / 01-08-2006 / 16:01:38 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   716
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   717
8f5996be6907 initial checkin
fm
parents:
diff changeset
   718
formFeed
8f5996be6907 initial checkin
fm
parents:
diff changeset
   719
        "Send a form feed to the printer."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   720
    self
8f5996be6907 initial checkin
fm
parents:
diff changeset
   721
        endPage;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   722
        startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   723
8f5996be6907 initial checkin
fm
parents:
diff changeset
   724
    "Created: / 27-07-2006 / 18:25:40 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   725
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   726
8f5996be6907 initial checkin
fm
parents:
diff changeset
   727
startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   728
        "Starts a page."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   729
    ( OperatingSystem startPage: gcId ) > 0
8f5996be6907 initial checkin
fm
parents:
diff changeset
   730
        ifFalse: [ ^self error "osError" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   731
8f5996be6907 initial checkin
fm
parents:
diff changeset
   732
    "Created: / 27-07-2006 / 18:25:55 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   733
    "Modified: / 28-07-2006 / 18:19:04 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   734
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   735
8f5996be6907 initial checkin
fm
parents:
diff changeset
   736
startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   737
        "Start a print job.  Everything drawn between startPrintJob
8f5996be6907 initial checkin
fm
parents:
diff changeset
   738
         and endPrintJob will become one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   739
    self startPrintJob: nil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   740
8f5996be6907 initial checkin
fm
parents:
diff changeset
   741
    "Created: / 27-07-2006 / 18:18:52 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   742
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   743
8f5996be6907 initial checkin
fm
parents:
diff changeset
   744
startPrintJob: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
   745
8f5996be6907 initial checkin
fm
parents:
diff changeset
   746
        "Start a print job, using aString as the job title; everything
8f5996be6907 initial checkin
fm
parents:
diff changeset
   747
         drawn between startPrintJob and endPrintJob will become
8f5996be6907 initial checkin
fm
parents:
diff changeset
   748
         one entry in the print queue.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   749
8f5996be6907 initial checkin
fm
parents:
diff changeset
   750
         Mg: Bei SpUserabort (bei Drucken in Datei) wird abort auf true gesetzt
8f5996be6907 initial checkin
fm
parents:
diff changeset
   751
         und SpUserabort zurückgegeben.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   752
        "
8f5996be6907 initial checkin
fm
parents:
diff changeset
   753
       "Changed by K3/EES5-Mg, 21.07.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   754
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   755
8f5996be6907 initial checkin
fm
parents:
diff changeset
   756
    ^self startPrintJob: aString fileName: nil
8f5996be6907 initial checkin
fm
parents:
diff changeset
   757
8f5996be6907 initial checkin
fm
parents:
diff changeset
   758
    "Created: / 27-07-2006 / 18:19:09 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   759
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
   760
8f5996be6907 initial checkin
fm
parents:
diff changeset
   761
startPrintJob: aString fileName: aFileName
8f5996be6907 initial checkin
fm
parents:
diff changeset
   762
8f5996be6907 initial checkin
fm
parents:
diff changeset
   763
        "Start a print job, using aString as the job title; everything
8f5996be6907 initial checkin
fm
parents:
diff changeset
   764
         drawn between startPrintJob and endPrintJob will become
8f5996be6907 initial checkin
fm
parents:
diff changeset
   765
         one entry in the print queue."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   766
       "Changed by K3/EES5-Mg, 21.07.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   767
       "Changed by K3EES5-Mg, 19.09.97"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   768
       "Changed by GS/EEZ3-Vr, 15.03.02"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   769
8f5996be6907 initial checkin
fm
parents:
diff changeset
   770
    | docInfoStruct nameAddress title fileNameAddress |
8f5996be6907 initial checkin
fm
parents:
diff changeset
   771
8f5996be6907 initial checkin
fm
parents:
diff changeset
   772
    gcId "deviceContext" isNil ifTrue: [ self buildPrinter ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   773
    abort := false.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   774
    "self setAbortProc."
8f5996be6907 initial checkin
fm
parents:
diff changeset
   775
    title := aString isNil ifTrue: [ 'Smalltalk/X' "WindowLabelPrefix" ] ifFalse: [ aString ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   776
8f5996be6907 initial checkin
fm
parents:
diff changeset
   777
    nameAddress := title asExternalBytes unprotectFromGC.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   778
"/    nameAddress := ExternalAddress copyToNonSmalltalkMemory: title.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   779
    aFileName isNil ifFalse: [fileNameAddress := aFileName pathName asExternalBytes unprotectFromGC].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   780
"/    aFileName isNil ifFalse: [fileNameAddress := ExternalAddress copyToNonSmalltalkMemory: aFileName].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   781
8f5996be6907 initial checkin
fm
parents:
diff changeset
   782
    docInfoStruct := Win32OperatingSystem::DocInfoStructure new "some value". 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   783
    docInfoStruct cbSize: docInfoStruct sizeInBytes;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   784
                  lpszDocName: nameAddress address.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   785
"/    ( docInfoStruct := SelfDefinedStructure named: 'DOCINFO' )
8f5996be6907 initial checkin
fm
parents:
diff changeset
   786
"/        cbSize: docInfoStruct sizeInBytes;
8f5996be6907 initial checkin
fm
parents:
diff changeset
   787
"/        lpszDocName: nameAddress "asParameter".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   788
8f5996be6907 initial checkin
fm
parents:
diff changeset
   789
    fileNameAddress isNil ifFalse:[docInfoStruct lpszOutput: fileNameAddress address"asParameter"].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   790
8f5996be6907 initial checkin
fm
parents:
diff changeset
   791
    jobid := OperatingSystem startDoc: gcId "deviceContext"  
8f5996be6907 initial checkin
fm
parents:
diff changeset
   792
                             docInfo: docInfoStruct "asParameter".
8f5996be6907 initial checkin
fm
parents:
diff changeset
   793
"/    nameAddress free.
8f5996be6907 initial checkin
fm
parents:
diff changeset
   794
"/    fileNameAddress isNil ifFalse: [fileNameAddress free].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   795
8f5996be6907 initial checkin
fm
parents:
diff changeset
   796
    jobid  > 0 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   797
        ifFalse: [jobid = -1 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   798
                    ifTrue: [abort := true. ^nil]. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
   799
                  ^self error "osError" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
   800
    self startPage
8f5996be6907 initial checkin
fm
parents:
diff changeset
   801
8f5996be6907 initial checkin
fm
parents:
diff changeset
   802
    "Created: / 27-07-2006 / 18:19:31 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
   803
    "Modified: / 03-08-2006 / 15:11:19 / fm"
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   804
! !
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   805
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   806
!PrinterContext methodsFor:'queries'!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   807
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   808
supportsColor
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   809
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   810
       "Changed by K3/EES5-Vo, 11.03.98"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   811
       "Changed by GS-EC/EES3-Vo, 06.10.05"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   812
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   813
"/    | retVal info |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   814
"/
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   815
"/    info := (self class getPrinterInformation: self name) asUppercase.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   816
"/    (info includesSubstring: ',PSCRIPT,')
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   817
"/    ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   818
"/        retVal := (DAPASX::DapasSystemInfo getYesNoInfoApp: 'Printer' profile: 'PostScriptBlackWhite') not.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   819
"/    ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   820
"/    ifFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   821
"/        retVal := (info includesSubstring: 'PDF')
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   822
"/            ifTrue: [true]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   823
"/            ifFalse: [self numberOfColorBitsPerPixel > 1].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   824
"/    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   825
"/
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   826
"/    ^retVal
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   827
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   828
    "Created: / 03-08-2006 / 09:55:26 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   829
    "Modified: / 04-08-2006 / 13:20:40 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   830
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   831
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   832
supportsGraphics
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   833
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   834
       "Private & DEFAULT!!."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   835
       "Changed by K3/EES5-Mg, 26.01.96"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   836
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   837
    ^(OperatingSystem getDeviceCaps: gcId asParameter index: 2 "Technology") ~= 4
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   838
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   839
    "Created: / 03-08-2006 / 10:07:43 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   840
! !
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   841
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   842
!PrinterContext methodsFor:'text printing'!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   843
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   844
asArrayOfStringLines: aString in: aRectangle wordWrap: wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   845
        "Private - convert aString into an array of lines; if wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   846
        is true, also perform word wrapping on the lines, within aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   847
    | line lines stream x0 x1 partialLine leftMargin rightMargin partialLineWidth index |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   848
    stream := ReadStream on: aString.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   849
    lines := OrderedCollection new.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   850
    wordWrapBoolean ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   851
        leftMargin := aRectangle left.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   852
        rightMargin := aRectangle right ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   853
    [ stream atEnd ] whileFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   854
        line := stream nextLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   855
        wordWrapBoolean
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   856
            ifFalse: [ lines add: line ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   857
            ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   858
                x0 := x1 := 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   859
                1 to: line size do: [ :i | 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   860
                     ( ( line at: i ) = Character space "32"  and: [ (partialLine := line copyFrom: x0 to: i) trimBlanks notEmpty ] ) 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   861
                        ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   862
                            partialLineWidth := self stringWidthOf: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   863
                            ( leftMargin + partialLineWidth ) > rightMargin
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   864
                                ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   865
                                    partialLine := line copyFrom: x0 to: x1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   866
                                    lines add: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   867
                                    x0 := x1 + 1 ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   868
                                ifFalse: [ x1 := i ] ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   869
                            index := i 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   870
                        ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   871
                line isEmpty
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   872
                    ifTrue: [ lines add: line ]
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   873
                    ifFalse: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   874
                        partialLine := line copyFrom: x0 to: index.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   875
                        partialLineWidth := self stringWidthOf: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   876
                        ( leftMargin + partialLineWidth ) > rightMargin 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   877
                                ifTrue: [
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   878
                                    partialLine := line copyFrom: x0 to: x1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   879
                                    lines add: partialLine.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   880
                                    partialLine := line copyFrom: x1 + 1 to: index 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   881
                                ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   882
                        lines add: partialLine 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   883
                    ] 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   884
            ] 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   885
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   886
    ^lines asArray
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   887
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   888
    "Created: / 02-08-2006 / 17:56:51 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   889
    "Modified: / 04-08-2006 / 13:39:50 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   890
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   891
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   892
displayStringLines: anIndexedCollection from: startIndex to: endIndex in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   893
        "Private - display Strings in anIndexedCollection starting at startIndex and
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   894
        ending at endIndex, clipped within the bounds of aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   895
    | charHeight ta region ascent|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   896
    charHeight := self getCharHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   897
    ascent := self font ascentOn: self device.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   898
    startIndex to: endIndex do: [ :i |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   899
        |lineToPrint|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   900
        lineToPrint := ( anIndexedCollection at: i ).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   901
        self device
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   902
            displayString: lineToPrint 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   903
            from:1 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   904
            to: lineToPrint size 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   905
            x: aRectangle left 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   906
            y: (aRectangle top + ( i - startIndex * charHeight ) )
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   907
            in:nil 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   908
            with: gcId 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   909
            opaque:false 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   910
            fontAscent: ascent.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   911
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   912
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   913
"/    region := self setClipRect: aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   914
"/    ta := self getTextAlign.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   915
"/    self setTextAlign: TaTop.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   916
"/    startIndex to: endIndex do: [ :i |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   917
"/        self
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   918
"/            displayText: ( anIndexedCollection at: i )
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   919
"/            at: aRectangle left @ ( aRectangle top + ( i - startIndex * charHeight ) ) ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   920
"/    self setTextAlign: ta.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   921
"/    self destroyRegion: region
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   922
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   923
    "Created: / 03-08-2006 / 11:37:52 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   924
    "Modified: / 03-08-2006 / 12:38:43 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   925
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   926
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   927
displayStringLines: anIndexedCollection in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   928
        "Private - display anIndexedCollection of Strings clipped within
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   929
        the bounds of aRectangle."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   930
    self
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   931
        displayStringLines: anIndexedCollection
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   932
        from: 1
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   933
        to: anIndexedCollection size
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   934
        in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   935
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   936
    "Created: / 03-08-2006 / 16:03:07 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   937
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   938
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   939
marginsRectangleFor:aRectangle 
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   940
    "Private - Answer a Rectangle defining margins based on aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   941
     Units for aRectangle are in inches, returned margins rectangle is
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   942
     in device units (pixels)."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   943
    
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   944
    |left top right bottom pixelsPerInchX pixelsPerInchY horzRes vertRes inset rectangle|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   945
    pixelsPerInchX := self pixelsPerInchOfScreenWidth.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   946
    pixelsPerInchY := self pixelsPerInchOfScreenHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   947
    aRectangle isNil ifTrue:[
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   948
        horzRes := self printerWidthArea.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   949
        vertRes := self printerHeightArea.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   950
        inset := self class defaultMargins.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   951
        left := (inset x * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   952
        top := (inset y * pixelsPerInchY) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   953
        right := horzRes - (inset x * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   954
        bottom := vertRes - (inset y * pixelsPerInchY) asInteger
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   955
    ] ifFalse:[
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   956
        left := (aRectangle left * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   957
        top := (aRectangle top * pixelsPerInchY) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   958
        right := (aRectangle right * pixelsPerInchX) asInteger.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   959
        bottom := (aRectangle bottom * pixelsPerInchY) asInteger
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   960
    ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   961
    rectangle := left @ top extent: right @ bottom.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   962
    ^ rectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   963
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   964
    "Created: / 27-07-2006 / 18:22:57 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   965
    "Modified: / 04-08-2006 / 13:39:45 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   966
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   967
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   968
printPage: pageIndex in: aRectangle lines: lines headerLines: headerLines linesPerPage: linesPerPage
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   969
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   970
        "Private - print page # pageIndex from lines, assuming
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   971
        the given number of linesPerPage."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   972
       "Changed by K3/EES5-Mg, 30.07.97"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   973
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   974
    | firstLine lastLine l indexString p cHeight rect hLines|
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   975
    firstLine := ( pageIndex - 1 ) * linesPerPage + 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   976
    lastLine := ( firstLine + linesPerPage - 1 ) min: lines size.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   977
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   978
    rect := aRectangle deepCopy.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   979
    hLines := headerLines deepCopy.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   980
    headerLines size > 0 ifTrue:
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   981
      [l := hLines first.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   982
       (p := l indexOfString: '#P') = 0 ifFalse:
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   983
          [indexString := pageIndex printString,' '.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   984
           "l replaceFrom: p to: p + indexString size - 1 with: indexString startingAt: 1."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   985
           l := (l copyFrom: 1 to: p - 1),indexString,(l copyFrom: p + 2 to: l size).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   986
           hLines at: 1 put: l.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   987
          ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   988
       cHeight := self getCharHeight.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   989
       rect top: rect top + (hLines size * cHeight).
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   990
      ].
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   991
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   992
    self displayStringLines: hLines in: aRectangle.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   993
    self displayStringLines: lines from: firstLine to: lastLine in: rect.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   994
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   995
    "Created: / 27-07-2006 / 18:28:00 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   996
    "Modified: / 03-08-2006 / 16:03:15 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   997
!
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   998
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
   999
printPage: pageIndex in: aRectangle lines: lines linesPerPage: linesPerPage
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1000
        "Private - print page # pageIndex from lines, assuming
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1001
        the given number of linesPerPage."
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1002
    | firstLine lastLine |
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1003
    firstLine := ( pageIndex - 1 ) * linesPerPage + 1.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1004
    lastLine := ( firstLine + linesPerPage - 1 ) min: lines size.
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1005
    self displayStringLines: lines from: firstLine to: lastLine in: aRectangle
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1006
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1007
    "Created: / 27-07-2006 / 18:24:59 / fm"
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1008
    "Modified: / 03-08-2006 / 12:47:24 / fm"
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1009
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1010
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1011
stringWidthOf: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1012
        "Return the width of aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1013
         when written using the current font."
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1014
    ^self
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1015
        stringWidthOf: aString
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1016
        at: aString size.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1017
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1018
    "Modified: / 03-08-2006 / 10:18:23 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1019
!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1020
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1021
stringWidthOf: aString at: index
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1022
        "Return the width of aString up to index
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1023
         when written using the current font; expand tabs out
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1024
         to 4 spaces for calculations"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1025
    | answer str size spaceWidth|
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1026
    index <= 0 ifTrue: [^0].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1027
    str :=  index >= aString size
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1028
        ifTrue:[aString]
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1029
        ifFalse:[aString copyFrom: 1 to: index].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1030
    true "self font isNil"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1031
        ifTrue: [  "if font not set yet, calculate based on default font"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1032
"/            extString := str asExternalString.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1033
            size := Win32OperatingSystem::WinPointStructure new.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1034
            ( OperatingSystem
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1035
                getTextExtentPoint: gcId "self handle"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1036
                string: str 
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1037
                size: size)                  
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1038
                    ifFalse: [ ^self error ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1039
            answer := size x.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1040
#TODO.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1041
        ] ifFalse: [ answer := self font widthOf: str on: self device "self handle" ].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1042
    index > aString size ifTrue: [
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1043
        spaceWidth:=  self font widthOf: Character space on: self device. 
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1044
        answer := answer + (index - aString size * spaceWidth)].
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1045
    ^answer.
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1046
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1047
    "Created: / 03-08-2006 / 10:27:20 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1048
    "Modified: / 04-08-2006 / 12:27:26 / fm"
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1049
! !
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1050
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1051
!PrinterContext class methodsFor:'documentation'!
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1052
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1053
version
2147
10c893aa772a *** empty log message ***
fm
parents: 2146
diff changeset
  1054
    ^ '$Header: /cvs/stx/stx/libview2/PrinterContext.st,v 1.3 2006-08-16 11:00:12 fm Exp $'
2143
8f5996be6907 initial checkin
fm
parents:
diff changeset
  1055
! !