checkin from browser
authorClaus Gittinger <cg@exept.de>
Tue, 30 Mar 1999 19:44:55 +0200
changeset 1096 7efff9ca044f
parent 1095 660185e02224
child 1097 c89241e215a4
checkin from browser
ProjectBrowser.st
--- a/ProjectBrowser.st	Tue Mar 30 11:58:48 1999 +0200
+++ b/ProjectBrowser.st	Tue Mar 30 19:44:55 1999 +0200
@@ -2225,6 +2225,35 @@
     self selectedProjectInPrerequisites value:nil.
 !
 
+browseClasses
+    |ns p classes nBad|
+
+    p := self currentProject.
+    classes := p classes
+                collect:[:clsOrName |
+                            |cls|
+
+                            clsOrName isSymbol ifTrue:[
+                                cls := Smalltalk at:clsOrName
+                            ] ifFalse:[
+                                cls := clsOrName
+                            ].
+                            cls
+                        ].
+    nBad := classes inject:0 into:[:sum :el | el isNil ifTrue:[sum+1] ifFalse:[sum]].
+    nBad ~~ 0 ifTrue:[
+        classes := classes select:[:cls | cls notNil].
+        self warn:('Oops - %1 classes could not be found.' bindWith:nBad).
+    ].
+
+
+    SystemBrowser
+        browseClasses:classes title:('Classes in ' , p name) sort:true.
+
+
+
+!
+
 cancel
     "reload aspects from the project"
 
@@ -2252,24 +2281,46 @@
 
     p := self currentProject.
     ns := p defaultNameSpace.
-    p classInfo do:[:clsInfo |
-        |clsName clsFileName|
-
-        clsName := clsInfo className.
-        clsFileName := clsInfo classFileName.
-        clsFileName isNil ifTrue:[clsFileName := clsName , '.st'].
-
-        clsName isSymbol ifTrue:[
-            cls := ns at:clsName.
-            cls isNil ifTrue:[
-                "/ ok - really not yet loaded.
+
+    self withReadCursorDo:[
+        "/ read once ...
+        p classInfo do:[:clsInfo |
+            |clsName clsFileName|
+
+            clsName := clsInfo className.
+            clsFileName := clsInfo classFileName.
+            clsFileName isNil ifTrue:[clsFileName := clsName , '.st'].
+
+            clsName isSymbol ifTrue:[
+                cls := ns at:clsName.
+                cls isNil ifTrue:[
+                    "/ ok - really not yet loaded.
+                    Transcript showCR:'loading ' , (p directory asFilename construct:clsFileName) pathName , ' ...'.
+                    Smalltalk fileIn:(p directory asFilename construct:clsFileName)
+                ] ifFalse:[
+                    self halt
+                ].
+            ] ifFalse:[
+                self halt
+            ].
+        ].
+
+        "/ read again; if the load order was not correct,
+        "/ this will fix things (i.e. nil superclasses ...)
+        
+        p classInfo do:[:clsInfo |
+            |clsName clsFileName|
+
+            clsName := clsInfo className.
+            clsFileName := clsInfo classFileName.
+            clsFileName isNil ifTrue:[clsFileName := clsName , '.st'].
+
+            clsName isSymbol ifTrue:[
                 Transcript showCR:'loading ' , (p directory asFilename construct:clsFileName) pathName , ' ...'.
                 Smalltalk fileIn:(p directory asFilename construct:clsFileName)
             ] ifFalse:[
                 self halt
             ].
-        ] ifFalse:[
-            self halt
         ].
     ].
 
@@ -2280,9 +2331,11 @@
 loadFromProjectFile:aFilenameString
     |newProject|
 
-    newProject := Project new loadFromProjectFile:aFilenameString.
-    newProject notNil ifTrue:[
-        self newProject:newProject
+    self withReadCursorDo:[
+        newProject := Project new loadFromProjectFile:aFilenameString.
+        newProject notNil ifTrue:[
+            self newProject:newProject
+        ]
     ]
 !