ProjectBrowser.st
changeset 1210 30bd57bbe9ce
parent 1207 9a14f97ee279
child 1218 8e2fa160357f
--- a/ProjectBrowser.st	Fri Sep 03 11:58:44 1999 +0200
+++ b/ProjectBrowser.st	Mon Sep 06 16:57:03 1999 +0200
@@ -1,5 +1,5 @@
 ToolApplicationModel subclass:#ProjectBrowser
-	instanceVariableNames:'projectTree modifiedChannel'
+	instanceVariableNames:'projectTree modifiedChannel selectedTreeNodeHolder'
 	classVariableNames:'AlreadCheckedExistingModulesAndPackages'
 	poolDictionaries:''
 	category:'Interface-Smalltalk'
@@ -2540,12 +2540,10 @@
 selectedTreeNodeHolder
     "automatically generated by UIPainter ..."
 
-    |holder|
-
-    (holder := builder bindingAt:#selectedTreeNodeHolder) isNil ifTrue:[
-        builder aspectAt:#selectedTreeNodeHolder put:(holder :=  ValueHolder new).
+    selectedTreeNodeHolder isNil ifTrue:[
+        selectedTreeNodeHolder :=  ValueHolder new.
     ].
-    ^ holder.
+    ^ selectedTreeNodeHolder.
 !
 
 showWhat
@@ -3013,12 +3011,14 @@
 !
 
 updateProjectTree
-    |tree root showWhat|
+    |tree moduleRoots root showWhat|
 
     showWhat := self showWhat value.
 
+    moduleRoots := Dictionary new.
+
     tree := SelectionInTree new.
-    tree root:(root := TreeItem name:'invisibleRoot').
+    tree root:(root := ProjectTreeItem name:'invisibleRoot').
     root hide:false.
 
     showWhat == #current ifTrue:[
@@ -3027,13 +3027,28 @@
         (Project knownProjects asOrderedCollection
             sort:[:a :b | a packageName < b packageName]) 
         do:[:aProject |
-            |doShow|
+            |newNode nodeToAdd doShow childNode path|
 
             (doShow := showWhat == #all) ifFalse:[
                 doShow := (aProject package startsWith:'stx:') not
             ].
+
             doShow ifTrue:[
-                root add:(self nodeFor:aProject).
+                newNode := self nodeFor:aProject.
+
+                "/ insert into tree ...
+                nodeToAdd := root.
+
+                path := aProject package asCollectionOfSubstringsSeparatedByAny:'/\:'.
+                path from:1 to:path size-1 do:[:part |
+                    childNode := nodeToAdd children detect:[:child | child name = part] ifNone:nil.
+                    childNode isNil ifTrue:[
+                        nodeToAdd add:(childNode := ProjectTreeItem new name:part).
+                    ].
+                    nodeToAdd := childNode.
+                ].
+                newNode name:(path last).
+                nodeToAdd add:newNode.
             ]
         ].
     ].