*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Mon, 04 Feb 2008 13:20:30 +0100
changeset 3330 f7fe85be360b
parent 3329 52882e077d23
child 3331 b6f23827c545
*** empty log message ***
DataSetColumn.st
--- a/DataSetColumn.st	Mon Feb 04 13:20:13 2008 +0100
+++ b/DataSetColumn.st	Mon Feb 04 13:20:30 2008 +0100
@@ -420,6 +420,90 @@
 
 !DataSetColumn methodsFor:'drawing'!
 
+drawLabel:aLabelToDraw atX:xLeft y:yTop
+    "draw aLabelToDraw; handle columnAlignment"
+
+    |drawnLabel x space prevClip mustUndoClip cashedWidth
+     labelWidth leftPart leftShift indexOfFirstDigit indexOfFirstNonDigit|
+
+    cashedWidth := self width.
+    cashedWidth isNil ifTrue:[ ^ self ].
+
+    space := dataSet horizontalSpacing.
+
+    drawnLabel := aLabelToDraw.
+    labelWidth := drawnLabel widthOn:dataSet.
+
+    (longStringCompression ~~ false
+    and:[ drawnLabel isString 
+    and:[ labelWidth > cashedWidth]]) ifTrue:[
+        drawnLabel := self class shortenedStringFor:drawnLabel on:dataSet maxWidth:cashedWidth-space.
+        labelWidth := drawnLabel widthOn:dataSet.
+    ].
+
+    columnAlignment == #left ifTrue:[
+        x  := xLeft + space.
+    ] ifFalse:[
+        columnAlignment == #decimal ifTrue:[
+            drawnLabel := drawnLabel asString.
+            (drawnLabel includes:$.) ifTrue:[
+                leftPart := drawnLabel upTo:$..
+            ] ifFalse:[
+                leftPart := drawnLabel.
+
+                indexOfFirstDigit := drawnLabel findFirst:[:char | char isDigit].
+                indexOfFirstDigit ~~ 0 ifTrue:[
+                    indexOfFirstNonDigit := drawnLabel findFirst:[:char | char isDigit not] startingAt:indexOfFirstDigit+1.
+                    indexOfFirstNonDigit ~~ 0 ifTrue:[
+                        leftPart := drawnLabel copyTo:indexOfFirstNonDigit-1.
+                    ].
+                ].
+            ].
+            leftShift := leftPart widthOn:dataSet.
+            x := (cashedWidth // 2) - leftShift.
+        ] ifFalse:[
+            x := cashedWidth - labelWidth.
+
+            columnAlignment == #right ifTrue:[x := x - space]
+                                     ifFalse:[x := x // 2].
+        ].
+    "/ cg: old code (did not right-align if string is larger than width
+    "/        x := xLeft + (x max:0).
+
+        "/ new code: always right-align.
+        x := xLeft + x.
+
+        "/ must clip left, if string is too large
+        x < xLeft ifTrue:[
+            "/ must clip ...
+            prevClip := dataSet clippingRectangleOrNil.
+            mustUndoClip := true.
+            dataSet clippingRectangle:(Rectangle 
+                                left:xLeft top:yTop 
+                                width:cashedWidth height:(drawnLabel heightOn:dataSet)).
+        ].
+    ].
+
+"/    drawnLabel isImageOrForm ifTrue:[
+"/        y := yTop.
+"/    ] ifFalse:[
+"/        y := (yTop + dataSet rowFontAscent)
+"/    ].
+
+"/    drawnLabel isString ifFalse:[
+"/        y := yTop + (drawnLabel ascentOn:dataSet).
+"/    ] ifTrue:[
+"/        y := yTop + dataSet rowFontAscent
+"/    ].
+"/    drawnLabel displayOn:dataSet x:x y:y.
+
+    dataSet displayLabel:drawnLabel x:x y:yTop.
+
+    mustUndoClip == true ifTrue:[
+        dataSet clippingRectangle:prevClip    
+    ].
+!
+
 drawLabelsAtX:xLeft y:yTop h:h from:start to:stop
     "redraw labels from start to stop
     "
@@ -1148,5 +1232,5 @@
 !DataSetColumn class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/DataSetColumn.st,v 1.113 2008-02-04 10:36:17 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DataSetColumn.st,v 1.114 2008-02-04 12:20:30 cg Exp $'
 ! !