packages/PackageDetails.st
changeset 1241 3a977bf0d483
parent 1227 ab88e78f027c
child 1268 9dc8d1b8ce9b
--- a/packages/PackageDetails.st	Thu Apr 10 12:02:49 2003 +0200
+++ b/packages/PackageDetails.st	Thu Apr 10 14:28:55 2003 +0200
@@ -17,6 +17,13 @@
 	privateIn:PackageDetails
 !
 
+LabelAndIcon subclass:#ClassLabelAndIcon
+	instanceVariableNames:'class'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:PackageDetails::Class
+!
+
 AbstractPackageDetails subclass:#Comment
 	instanceVariableNames:'commentTextHolder commentTextModifiedChannel
 		commentTextAcceptChannel editTextView'
@@ -408,25 +415,24 @@
               #component: 
              #(#SpecCollection
                 #collection: #(
-                 #(#SelectionInListModelViewSpec
-                    #name: 'SelectionInListModelView1'
+                 #(#SequenceViewSpec
+                    #name: 'SelectionInListModelView2'
                     #model: #selectedCategoryHolder
                     #hasHorizontalScrollBar: true
                     #hasVerticalScrollBar: true
-                    #listModel: #categoryList
-                    #multipleSelectOk: true
+                    #isMultiSelect: true
                     #useIndex: false
-                    #highlightMode: #line
+                    #sequenceList: #categoryList
                   )
-                 #(#SelectionInListModelViewSpec
-                    #name: 'SelectedClassView'
+                 #(#SequenceViewSpec
+                    #name: 'SelectedClassView1'
                     #model: #selectedClassHolder
                     #hasHorizontalScrollBar: true
                     #hasVerticalScrollBar: true
-                    #listModel: #classList
-                    #multipleSelectOk: true
+                    #isMultiSelect: true
+                    #doubleClickSelector: #browseClass:
                     #useIndex: false
-                    #highlightMode: #line
+                    #sequenceList: #classList
                   )
                  )
                
@@ -548,6 +554,14 @@
 
 ! !
 
+!PackageDetails::Class methodsFor:'* As yet uncategorized *'!
+
+browseClass:aCollection
+    | theClass |
+    theClass := aCollection first classModel.
+    theClass browse
+! !
+
 !PackageDetails::Class methodsFor:'accessing'!
 
 declareDependents
@@ -562,6 +576,37 @@
     ^ (privateProcesses at:aSymbol put:aProcess).
 ! !
 
+!PackageDetails::Class methodsFor:'adding'!
+
+addPrivateClassLabelAndIconForClass:aClass toClassList:aClassList level:aNumber
+    aClass privateClasses do:[:aPrivateClass |
+        aClassList add:(self newClassLabelAndIconWithClass:aPrivateClass).
+        self addPrivateClassLabelAndIconForClass:aPrivateClass toClassList:aClassList level:(aNumber + 1).
+    ].
+!
+
+putClassesNamesIn:aClassList fromPackages:collectionOfPackages inCategories:collectionOfCategoryNames 
+    | classesWithoutPrivateClasses|
+    classesWithoutPrivateClasses := OrderedCollection new.
+    collectionOfCategoryNames do:[:aCategoryName |
+        collectionOfPackages do:[:aPackage |
+            (aPackage classesInCategory:aCategoryName) 
+                do:[:aClass |  aClass isPrivate ifFalse:[
+                                        classesWithoutPrivateClasses add:(self newClassLabelAndIconWithClass:aClass).
+                                ].
+            ].
+        ].
+    ].
+    classesWithoutPrivateClasses sort:[:x :y |
+        x asString < y asString
+    ].
+    classesWithoutPrivateClasses do:[:aLableAndIcon | | aClass |
+        aClass := aLableAndIcon classModel.
+        aClassList add:aLableAndIcon.
+        self addPrivateClassLabelAndIconForClass:aClass toClassList:aClassList level:1
+    ].
+! !
+
 !PackageDetails::Class methodsFor:'aspects'!
 
 categoryList
@@ -669,27 +714,15 @@
 !PackageDetails::Class methodsFor:'change & update'!
 
 selectedCategoryChanged:aCollectionOfCategories 
-    | addingToClassListCache count howManyBeforeUpdate |
-    (self privateProcessesAt:#selectedCategoryChanged:) terminate.
-    (self privateProcessesAt:#selectedCategoryChanged: put:[
+
+    self withProcessNamed:#selectedCategoryChanged: do:[
         classList removeAll.
-        addingToClassListCache := OrderedCollection new.
-        count := 0.
-        howManyBeforeUpdate := (self packagesSelected size / 2).
-        aCollectionOfCategories do:[:aCategoryName |
-            (self packagesNamed:self packagesSelected) do:[:aPackage |
-                addingToClassListCache addAll:((aPackage classesInCategory:aCategoryName) 
-                                                collect:[:aClass | aClass name]).
-            ].
-            count := count + 1.
-            count < howManyBeforeUpdate ifTrue:[
-                classList addAll:addingToClassListCache. 
-                addingToClassListCache removeAll. 
-                count := 0.
-            ].
-        ].
-        classList addAll:addingToClassListCache. "add the ones left over"
-        ] fork)
+        self 
+            putClassesNamesIn:classList 
+            fromPackages:(self packagesNamed:self packagesSelected) 
+            inCategories:aCollectionOfCategories.
+
+    ].
 !
 
 update:something with:aParameter from:changedObject
@@ -713,12 +746,26 @@
     ].
 
     categoryList addAll:classCategoryNames.
+    categoryList sort:[:x :y |
+        x < y
+    ].
     ] fork
 "/    packages do:[:aPackage |
 "/        categoryList addAll:aPackage classCategories   
 "/    ].
 ! !
 
+!PackageDetails::Class methodsFor:'factory'!
+
+labelAndIconClass
+    ^ ClassLabelAndIcon
+!
+
+newClassLabelAndIconWithClass:aClass
+"/    aClass isPrivate ifTrue:[self halt.].
+    ^ self labelAndIconClass class:aClass
+! !
+
 !PackageDetails::Class methodsFor:'initialization & release'!
 
 closeDownViews
@@ -841,11 +888,70 @@
     "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
 ! !
 
+!PackageDetails::Class methodsFor:'process'!
+
+withProcessNamed:aName do:aBlock 
+    "stop unconditionally the process and replace with aBlock"
+    (self privateProcessesAt:aName) terminate.
+    self privateProcessesAt:aName put:aBlock fork.
+! !
+
 !PackageDetails::Class methodsFor:'queries'!
 
 validateCanChange:arg 
 ! !
 
+!PackageDetails::Class::ClassLabelAndIcon class methodsFor:'instance'!
+
+class:aClass
+    ^ (self basicNew) classModel:aClass; initialize
+! !
+
+!PackageDetails::Class::ClassLabelAndIcon methodsFor:'accessing'!
+
+asString
+
+    | aString |
+    aString := String new.
+    class isPrivate ifTrue:[
+        aString := '    '.
+        self privateClassDepth timesRepeat:[
+            aString := aString , '  '.
+        ].
+        aString := aString , '::'. 
+    ].
+
+    aString := aString, class shortName asString. 
+
+    ^ aString
+!
+
+classModel
+    "return the value of the instance variable 'class' (automatically generated)"
+
+    ^ class
+!
+
+classModel:something
+    "set the value of the instance variable 'class' (automatically generated)"
+
+    class := something.
+    self string: self asString.
+!
+
+privateClassDepth
+    | thisClass counter |
+    thisClass := class.
+    counter := 0.
+    [thisClass isNameSpace] whileFalse:[
+        thisClass := thisClass owningClass.
+        thisClass ifNil:[thisClass := Smalltalk].
+        counter := counter + 1.
+    ].
+
+    ^ counter - 1
+! !
+
 !PackageDetails::Comment class methodsFor:'constant values'!
 
 applicationName
@@ -2127,5 +2233,5 @@
 !PackageDetails class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/packages/PackageDetails.st,v 1.1 2003-04-09 11:24:54 james Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/packages/PackageDetails.st,v 1.2 2003-04-10 12:28:55 james Exp $'
 ! !