--- a/CharacterSetView.st Thu Feb 12 13:11:07 2004 +0100
+++ b/CharacterSetView.st Thu Feb 12 15:42:29 2004 +0100
@@ -1,7 +1,7 @@
"{ Package: 'stx:goodies' }"
View subclass:#CharacterSetView
- instanceVariableNames:'codePage'
+ instanceVariableNames:'codePageHolder selectedCodePointHolder'
classVariableNames:''
poolDictionaries:''
category:'Collections-Text-Encodings'
@@ -10,9 +10,17 @@
!CharacterSetView class methodsFor:'startup'!
+open
+ self openOn:View defaultFont
+
+ "
+ self open
+ "
+!
+
openOn:aFont
- |top panel v bNext bPrev l
- next prev enable update|
+ |top panel v bNext bPrev bFirst bLast rangeLabel codePointLabel
+ first last next prev enable update updateCodePoint|
top := StandardSystemView new.
top label:(aFont printString).
@@ -27,26 +35,43 @@
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|
+ |uOffs selectedCodePoint|
uOffs := v codePage * 16r0100.
- l label:('u%1 ... u%2'
+ rangeLabel label:('u%1 ... u%2'
bindWith:((uOffs printStringRadix:16) leftPaddedTo:4 with:$0)
with:(((uOffs + 16rFF) printStringRadix:16) leftPaddedTo:4 with:$0)).
- l repairDamage.
+ rangeLabel repairDamage.
].
enable := [
v codePage > 0 ifTrue:[
- bPrev enable
+ bPrev enable.
+ bFirst enable.
] ifFalse:[
- bPrev disable
+ bPrev disable.
+ bFirst disable.
].
v codePage < 16rFF ifTrue:[
- bNext enable
+ bNext enable.
+ bLast enable.
] ifFalse:[
- bNext disable
+ bNext disable.
+ bLast disable.
].
].
@@ -62,22 +87,44 @@
update value.
].
+ first := [
+ v codePage:0.
+ enable value.
+ update value.
+ ].
- bNext := Button label:'+' in:panel.
- bNext controller beTriggerOnDown.
- bNext action:next.
- bNext autoRepeat:true.
+ last := [
+ v codePage:16rFF.
+ enable value.
+ update value.
+ ].
- bPrev := Button label:'-' in:panel.
+
+ 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.
- l := Label label:'' in:panel.
+ 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).
@@ -87,16 +134,23 @@
!CharacterSetView methodsFor:'accessing'!
codePage
- ^ codePage
+ ^ codePageHolder value
!
codePage:pageNr
- codePage := pageNr.
+ codePageHolder value:pageNr.
+!
+
+codePageHolder
+ ^ codePageHolder
+!
- realized ifTrue:[
- self clear.
- self redraw.
- ].
+selectedCodePoint
+ ^ selectedCodePointHolder value
+!
+
+selectedCodePointHolder
+ ^ selectedCodePointHolder
! !
!CharacterSetView methodsFor:'drawing'!
@@ -123,23 +177,31 @@
0 to:15 do:[:row |
- |y rowBase|
+ |y0 y rowBase|
rowBase := row * 16r10.
- y := row * hRow.
+ y := y0 := row * hRow.
y := y + (hRow / 2).
y := y rounded asInteger.
0 to:15 do:[:col |
- |x codePoint s|
+ |x0 x codePoint s|
codePoint := rowBase + col.
- s := (Character value:(codePage * 16r100) + codePoint) asString.
+ s := (Character value:(self codePage * 16r100) + codePoint) asString.
- x := (col * wCol) rounded asInteger.
+ x := x0 := (col * wCol) rounded asInteger.
x := x + (wCol / 2).
x := x - ((font widthOf:s) / 2).
x := x rounded asInteger.
- self displayString:s x:x y:y.
+
+ 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.
+ ].
].
].
@@ -153,15 +215,48 @@
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.
- codePage := 0.
+ 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.2 2004-02-12 12:11:07 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/CharacterSetView.st,v 1.3 2004-02-12 14:42:29 cg Exp $'
! !