changed: #drawLinesFrom:to:x:y:toX:
authorClaus Gittinger <cg@exept.de>
Wed, 06 Oct 2010 16:02:35 +0200
changeset 3936 4c42f502f55c
parent 3935 852001cc6bd5
child 3937 d705c5da9d20
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.)
HierarchicalListView.st
--- 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 $'
 ! !