# HG changeset patch # User Claus Gittinger # Date 1202127630 -3600 # Node ID f7fe85be360bd9eeb03b3fe836fec2474f424d6e # Parent 52882e077d23fb68c1e903ade123623128d7de13 *** empty log message *** diff -r 52882e077d23 -r f7fe85be360b 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 $' ! !