--- a/CharacterSetView.st Wed Mar 30 14:33:49 2005 +0200
+++ b/CharacterSetView.st Thu Mar 31 20:49:56 2005 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 2004 by eXept Software AG
All Rights Reserved
@@ -15,7 +13,8 @@
"{ Package: 'stx:libwidg2' }"
View subclass:#CharacterSetView
- instanceVariableNames:'codePageHolder selectedCodePointHolder masterViewOrNil'
+ instanceVariableNames:'codePageHolder selectedCodePointHolder masterViewOrNil
+ encoderOrNil'
classVariableNames:''
poolDictionaries:''
category:'Views-Special'
@@ -70,7 +69,7 @@
!CharacterSetView class methodsFor:'startup'!
open
- self openOn:View defaultFont
+ self openOn:(View defaultFont)
"
self open
@@ -105,12 +104,35 @@
!
openOn:aFont label:viewLabel clickLabel:clickLabel asInputFor:aView
+ self
+ openOn:aFont
+ label:viewLabel
+ clickLabel:clickLabel
+ asInputFor:aView
+ encoder:nil
+
+ "
+ self openOn:(View defaultFont).
+ self openOn:(Font family:'courier' face:'medium' style:'roman' size:12 encoding:'iso10646-1').
+ "
+!
+
+openOn:aFont label:viewLabel clickLabel:clickLabel asInputFor:aView encoder:aCharacterEncoderOrNil
|top panel v bNext bPrev bFirst bLast rangeLabel codePointLabel
first last next prev enable update updateCodePoint w h
- minPage maxPage insertCharacter|
+ minPage maxPage insertCharacter fontMetrics minCode maxCode|
- minPage := (aFont onDevice:Screen current) getFontMetrics minCode >> 8.
- maxPage := (aFont onDevice:Screen current) getFontMetrics maxCode >> 8.
+ aCharacterEncoderOrNil isNil ifTrue:[
+ fontMetrics := (aFont onDevice:Screen current) getFontMetrics.
+ minCode := fontMetrics minCode.
+ maxCode := fontMetrics maxCode.
+ ] ifFalse:[
+ minCode := aCharacterEncoderOrNil minCode.
+ maxCode := aCharacterEncoderOrNil maxCode.
+ ].
+
+ minPage := minCode >> 8.
+ maxPage := maxCode >> 8.
top := StandardSystemView new.
top label:viewLabel.
@@ -120,6 +142,7 @@
v font:aFont.
v codePageHolder value:minPage.
v characterEncoding:(aFont encoding).
+ v encoder:aCharacterEncoderOrNil.
panel := HorizontalPanelView in:top.
panel origin:(0.0 @ 0.0) corner:(1.0 @ 0.0).
@@ -145,7 +168,8 @@
updateCodePoint := [
|selectedCodePoint selectedChar
- isLetter isDigit isUppercase isLowercase|
+ isLetter isDigit isUppercase isLowercase
+ codeString decoded decodedString|
selectedCodePoint := v selectedCodePoint.
selectedCodePoint isNil ifTrue:[
@@ -161,13 +185,22 @@
] ifFalse:[
isLetter := isDigit := isUppercase := isLowercase := false. "/ actually: unknown
].
+ aCharacterEncoderOrNil isNil ifTrue:[
+ decodedString := ''.
+ codeString := 'u' , ((selectedCodePoint printStringRadix:16) leftPaddedTo:4 with:$0)
+ ] ifFalse:[
+ decoded := aCharacterEncoderOrNil decode:selectedCodePoint.
+ decodedString := 'u' , ((decoded printStringRadix:16) leftPaddedTo:4 with:$0).
+ codeString := ((selectedCodePoint printStringRadix:16) leftPaddedTo:4 with:$0)
+ ].
codePointLabel
label:
- ('Selected: u%1 %2 %3 %4'
- bindWith:((selectedCodePoint printStringRadix:16) leftPaddedTo:4 with:$0)
+ ('Selected: %1 %2 %3 %4 %5'
+ bindWith:codeString
with:((selectedCodePoint printString) leftPaddedTo:5)
with:(isUppercase ifTrue:'Uc' ifFalse:[isLowercase ifTrue:'lc' ifFalse:''])
with:(isLetter ifTrue:'Letter' ifFalse:[(isDigit ifTrue:'Digit' ifFalse:'')])
+ with:decodedString
).
].
codePointLabel repairDamage.
@@ -181,10 +214,15 @@
].
update := [
- |uOffs selectedCodePoint|
+ |uOffs selectedCodePoint lbl|
+ aCharacterEncoderOrNil isNil ifTrue:[
+ lbl := 'u%1 ... u%2'
+ ] ifFalse:[
+ lbl := '%1 ... %2'
+ ].
uOffs := v codePage * 16r0100.
- rangeLabel label:('u%1 ... u%2'
+ rangeLabel label:(lbl
bindWith:((uOffs printStringRadix:16) leftPaddedTo:4 with:$0)
with:(((uOffs + 16rFF) printStringRadix:16) leftPaddedTo:4 with:$0)).
rangeLabel repairDamage.
@@ -294,6 +332,10 @@
^ codePageHolder
!
+encoder:aCharacterEncoder
+ encoderOrNil := aCharacterEncoder
+!
+
selectedCodePoint
^ selectedCodePointHolder value
!
@@ -338,10 +380,15 @@
y1 := y1 rounded asInteger.
0 to:15 do:[:col |
- |x0 x1 x codePoint s|
+ |x0 x1 x codePoint decodedCodePoint s|
codePoint := (self codePage * 16r100) + (rowBase + col).
- s := (Character value:codePoint) asString.
+ encoderOrNil notNil ifTrue:[
+ decodedCodePoint := encoderOrNil decode:codePoint
+ ] ifFalse:[
+ decodedCodePoint := codePoint
+ ].
+ s := (Character value:decodedCodePoint) asString.
x := x0 := (col * wCol) rounded asInteger.
x := x rounded asInteger.
@@ -484,5 +531,5 @@
!CharacterSetView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/CharacterSetView.st,v 1.19 2004-03-05 17:52:57 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/CharacterSetView.st,v 1.20 2005-03-31 18:49:56 cg Exp $'
! !