changed: #drawLinesFrom:to:x:y:toX:
windows does not (yet) support drawing with a mask;
use linstyle-dotted to draw connecting lines
(ugly - needs fix by ca.)
--- a/HierarchicalListView.st Wed Sep 22 14:38:18 2010 +0200
+++ b/HierarchicalListView.st Wed Oct 06 16:02:35 2010 +0200
@@ -999,127 +999,137 @@
self maskOrigin:(self viewOrigin + (0 @ 1) \\ (lineMask extent)).
self paint:lineColor on:bgColor.
- self mask:lineMask.
+ OperatingSystem isMSWINDOWSlike ifTrue:[
+ self lineStyle:#dotted.
+ ] ifFalse:[
+ self mask:lineMask.
+ ].
smallestLevel := self smallestLevelBetween:start and:stop.
minVertLevel := 2.
showLeftIndicators ifTrue:[
- showLeftIdc := showIndicators.
- showRoot ifFalse:[ minVertLevel := 3 ]
+ showLeftIdc := showIndicators.
+ showRoot ifFalse:[ minVertLevel := 3 ]
] ifFalse:[
- showLeftIdc := false.
+ showLeftIdc := false.
].
showRoot ifFalse:[ minHorzLevel := 2 ]
- ifTrue:[ minHorzLevel := 1 ].
+ ifTrue:[ minHorzLevel := 1 ].
showLeftIdc ifFalse:[
- minHorzLevel := minHorzLevel + 1.
+ minHorzLevel := minHorzLevel + 1.
].
yBot := begHLnY := runHLnY := yT.
level := 1.
start to:stop do:[:anIndex|
- (item := self at:anIndex ifAbsent:nil) isNil ifTrue:[
- ^ self mask:nil "/ list changed
- ].
- yTop := yBot.
- yBot := self yVisibleOfLine:(anIndex + 1).
- yCtr := yTop + (yBot - yTop // 2).
+ (item := self at:anIndex ifAbsent:nil) isNil ifTrue:[
+ "/ list changed
+ self lineStyle:#solid.
+ self mask:nil.
+ ^ self
+ ].
+ yTop := yBot.
+ yBot := self yVisibleOfLine:(anIndex + 1).
+ yCtr := yTop + (yBot - yTop // 2).
- item parent ~~ parent ifTrue:[
- anIndex == 1 ifTrue:[ begHLnY := runHLnY := yCtr ].
- parent := item parent.
+ item parent ~~ parent ifTrue:[
+ anIndex == 1 ifTrue:[ begHLnY := runHLnY := yCtr ].
+ parent := item parent.
- prevItem == parent ifTrue:[
- level := level + 1.
- lftVrtX := rgtVrtX.
- ] ifFalse:[
- level := item level.
- lftVrtX := self xVisibleOfVerticalLineAt:level.
- ].
- showVLines := (level >= minVertLevel and:[lftVrtX >= xL]).
- rgtVrtX := self xVisibleOfVerticalLineAt:level + 1.
+ prevItem == parent ifTrue:[
+ level := level + 1.
+ lftVrtX := rgtVrtX.
+ ] ifFalse:[
+ level := item level.
+ lftVrtX := self xVisibleOfVerticalLineAt:level.
+ ].
+ showVLines := (level >= minVertLevel and:[lftVrtX >= xL]).
+ rgtVrtX := self xVisibleOfVerticalLineAt:level + 1.
- level >= minHorzLevel ifTrue:[
- xText := (self xVisibleOfTextAtLevel:level) - textStartLeft.
- showHLine := (xL < xText and:[xR > lftVrtX]).
- ] ifFalse:[
- showHLine := false
- ].
- ].
+ level >= minHorzLevel ifTrue:[
+ xText := (self xVisibleOfTextAtLevel:level) - textStartLeft.
+ showHLine := (xL < xText and:[xR > lftVrtX]).
+ ] ifFalse:[
+ showHLine := false
+ ].
+ ].
- showHLine ifTrue:[
- ( level ~~ 2
- or:[showRoot or:[(showLeftIdc and:[item hasIndicator])]]
- ) ifTrue:[
- item drawHorizontalLineUpToText ifTrue:[ x := xText ]
- ifFalse:[ x := rgtVrtX ].
+ showHLine ifTrue:[
+ ( level ~~ 2
+ or:[showRoot or:[(showLeftIdc and:[item hasIndicator])]]
+ ) ifTrue:[
+ item drawHorizontalLineUpToText ifTrue:[ x := xText ]
+ ifFalse:[ x := rgtVrtX ].
- self displayLineFromX:lftVrtX y:yCtr toX:x y:yCtr.
- ].
- ].
+ self displayLineFromX:lftVrtX y:yCtr toX:x y:yCtr.
+ ].
+ ].
- anIndex == start ifTrue:[
- (item isExpanded and:[item hasChildren]) ifTrue:[
- self displayLineFromX:rgtVrtX y:yCtr toX:rgtVrtX y:yBot.
- ]
- ].
+ anIndex == start ifTrue:[
+ (item isExpanded and:[item hasChildren]) ifTrue:[
+ self displayLineFromX:rgtVrtX y:yCtr toX:rgtVrtX y:yBot.
+ ]
+ ].
- showVLines ifTrue:[
- parent last == item ifTrue:[ y := yCtr ]
- ifFalse:[ y := yBot ].
- x := lftVrtX.
- p2 := parent.
- lv := level - 1.
+ showVLines ifTrue:[
+ parent last == item ifTrue:[ y := yCtr ]
+ ifFalse:[ y := yBot ].
+ x := lftVrtX.
+ p2 := parent.
+ lv := level - 1.
- level >= smallestLevel ifTrue:[
- self displayLineFromX:x y:runHLnY toX:x y:y.
- ].
+ level >= smallestLevel ifTrue:[
+ self displayLineFromX:x y:runHLnY toX:x y:y.
+ ].
- [ (p2 notNil and:[lv >= minVertLevel]) ] whileTrue:[
- p1 := p2 parent.
+ [ (p2 notNil and:[lv >= minVertLevel]) ] whileTrue:[
+ p1 := p2 parent.
- p1 notNil ifTrue:[
- x := self xVisibleOfVerticalLineAt:lv.
+ p1 notNil ifTrue:[
+ x := self xVisibleOfVerticalLineAt:lv.
- x < xL ifTrue:[
- p1 := nil.
- ] ifFalse:[
- p1 last ~~ p2 ifTrue:[
- lv >= smallestLevel ifTrue:[
- self displayLineFromX:x y:(yTop - 1) toX:x y:yBot
- ] ifFalse:[
- buildInArray isNil ifTrue:[buildInArray := Array new:smallestLevel].
- buildInArray at:lv put:yBot
- ]
- ].
- ].
- ].
- p2 := p1.
- lv := lv - 1.
- ].
- ].
- prevItem := item.
- runHLnY := yCtr.
+ x < xL ifTrue:[
+ p1 := nil.
+ ] ifFalse:[
+ p1 last ~~ p2 ifTrue:[
+ lv >= smallestLevel ifTrue:[
+ self displayLineFromX:x y:(yTop - 1) toX:x y:yBot
+ ] ifFalse:[
+ buildInArray isNil ifTrue:[buildInArray := Array new:smallestLevel].
+ buildInArray at:lv put:yBot
+ ]
+ ].
+ ].
+ ].
+ p2 := p1.
+ lv := lv - 1.
+ ].
+ ].
+ prevItem := item.
+ runHLnY := yCtr.
].
buildInArray notNil ifTrue:[
- y := begHLnY.
+ y := begHLnY.
- 2 to:smallestLevel do:[:i| |u yB|
- (yB := buildInArray at:i) notNil ifTrue:[
- x := self xVisibleOfVerticalLineAt:i.
+ 2 to:smallestLevel do:[:i| |u yB|
+ (yB := buildInArray at:i) notNil ifTrue:[
+ x := self xVisibleOfVerticalLineAt:i.
- x >= xL ifTrue:[
- self displayLineFromX:x y:y toX:x y:yB
- ]
- ].
- ]
+ x >= xL ifTrue:[
+ self displayLineFromX:x y:y toX:x y:yB
+ ]
+ ].
+ ]
].
+ self lineStyle:#solid.
self mask:nil.
+
+ "Modified: / 06-10-2010 / 15:58:27 / cg"
!
validateDrawableIconFor:anItem
@@ -1733,9 +1743,9 @@
!HierarchicalListView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalListView.st,v 1.119 2010-03-18 10:37:24 fm Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalListView.st,v 1.120 2010-10-06 14:02:35 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalListView.st,v 1.119 2010-03-18 10:37:24 fm Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalListView.st,v 1.120 2010-10-06 14:02:35 cg Exp $'
! !