--- 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 $'
! !