*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Thu, 12 Feb 2004 15:42:29 +0100
changeset 2623 5bed6818a793
parent 2622 c24fdc09ab2b
child 2624 379b6e9e6a2f
*** empty log message ***
CharacterSetView.st
--- 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 $'
 ! !