"{ Package: 'stx:goodies' }"
View subclass:#CharacterSetView
instanceVariableNames:'codePageHolder selectedCodePointHolder'
classVariableNames:''
poolDictionaries:''
category:'Collections-Text-Encodings'
!
!CharacterSetView class methodsFor:'startup'!
open
self openOn:View defaultFont
"
self open
"
!
openOn:aFont
|top panel v bNext bPrev bFirst bLast rangeLabel codePointLabel
first last next prev enable update updateCodePoint|
top := StandardSystemView new.
top label:(aFont printString).
v := self origin:0.0@0.0 corner:1.0@1.0 in:top.
v topInset:25.
v font:aFont.
panel := HorizontalPanelView in:top.
panel origin:(0.0 @ 0.0) corner:(1.0 @ 0.0).
panel bottomInset:-25.
panel horizontalLayout:#left.
"/ actions
updateCodePoint := [
|selectedCodePoint|
selectedCodePoint := v selectedCodePoint.
selectedCodePoint isNil ifTrue:[
codePointLabel label:'Click on glyph to see its codePoint.'
] ifFalse:[
codePointLabel label:('Selected: u%1'
bindWith:((selectedCodePoint printStringRadix:16) leftPaddedTo:4 with:$0)).
].
codePointLabel repairDamage.
].
update := [
|uOffs selectedCodePoint|
uOffs := v codePage * 16r0100.
rangeLabel label:('u%1 ... u%2'
bindWith:((uOffs printStringRadix:16) leftPaddedTo:4 with:$0)
with:(((uOffs + 16rFF) printStringRadix:16) leftPaddedTo:4 with:$0)).
rangeLabel repairDamage.
].
enable := [
v codePage > 0 ifTrue:[
bPrev enable.
bFirst enable.
] ifFalse:[
bPrev disable.
bFirst disable.
].
v codePage < 16rFF ifTrue:[
bNext enable.
bLast enable.
] ifFalse:[
bNext disable.
bLast disable.
].
].
next := [
v codePage:(v codePage + 1).
enable value.
update value.
].
prev := [
v codePage:(v codePage - 1).
enable value.
update value.
].
first := [
v codePage:0.
enable value.
update value.
].
last := [
v codePage:16rFF.
enable value.
update value.
].
bFirst := Button label:(ToolbarIconLibrary start16x16Icon) in:panel.
bFirst action:first.
bPrev := Button label:(ToolbarIconLibrary back16x16Icon) in:panel.
bPrev controller beTriggerOnDown.
bPrev action:prev.
bPrev disable.
bPrev autoRepeat:true.
bNext := Button label:(ToolbarIconLibrary forward16x16Icon) in:panel.
bNext controller beTriggerOnDown.
bNext action:next.
bNext autoRepeat:true.
bLast := Button label:(ToolbarIconLibrary finish16x16Icon) in:panel.
bLast action:last.
rangeLabel := Label label:'RangeStart .. RangeStop' in:panel.
codePointLabel := Label label:'Click on glyph to see its codePoint.' in:panel.
update value.
v selectedCodePointHolder onChangeEvaluate:updateCodePoint.
top open.
^ v
"
self openOn:(View defaultFont).
"
! !
!CharacterSetView methodsFor:'accessing'!
codePage
^ codePageHolder value
!
codePage:pageNr
codePageHolder value:pageNr.
!
codePageHolder
^ codePageHolder
!
selectedCodePoint
^ selectedCodePointHolder value
!
selectedCodePointHolder
^ selectedCodePointHolder
! !
!CharacterSetView methodsFor:'drawing'!
redraw
|wCol hRow|
wCol := width / 16.
hRow := height / 16.
0 to:16 do:[:col |
|x|
x := (col * wCol) rounded asInteger.
self displayLineFromX:x y:0 toX:x y:height-1.
].
0 to:15 do:[:row |
|y|
y := (row * hRow) rounded asInteger.
self displayLineFromX:0 y:y toX:width y:y.
].
0 to:15 do:[:row |
|y0 y rowBase|
rowBase := row * 16r10.
y := y0 := row * hRow.
y := y + (hRow / 2).
y := y rounded asInteger.
0 to:15 do:[:col |
|x0 x codePoint s|
codePoint := rowBase + col.
s := (Character value:(self codePage * 16r100) + codePoint) asString.
x := x0 := (col * wCol) rounded asInteger.
x := x + (wCol / 2).
x := x - ((font widthOf:s) / 2).
x := x rounded asInteger.
codePoint == self selectedCodePoint ifTrue:[
self paint:(Color white) on:(Color red).
self clearRectangle:((x0@y0 extent:wCol@hRow) insetBy:1).
self displayString:s x:x y:y.
self paint:(Color black).
] ifFalse:[
self displayString:s x:x y:y.
].
].
].
"
(self extent:300@600) open
"
!
sizeChanged:how
self clear.
self redraw.
! !
!CharacterSetView methodsFor:'event handling'!
buttonPress:button x:x y:y
|wCol hRow row col code|
wCol := width / 16.
hRow := height / 16.
row := y // hRow.
col := x // wCol.
code := (self codePage*16r0100) + (row * 16) + col.
selectedCodePointHolder value:code.
!
codePageChanged
realized ifTrue:[
self clear.
self redraw.
].
!
selectedCodePointChanged
realized ifTrue:[
self clear.
self redraw.
].
! !
!CharacterSetView methodsFor:'initialization'!
initialize
super initialize.
codePageHolder := 0 asValue.
codePageHolder onChangeSend:#codePageChanged to:self.
selectedCodePointHolder := ValueHolder new.
selectedCodePointHolder onChangeSend:#selectedCodePointChanged to:self.
! !
!CharacterSetView class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libwidg2/CharacterSetView.st,v 1.3 2004-02-12 14:42:29 cg Exp $'
! !