Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 20 May 2015 11:22:14 +0100
branchjv
changeset 15650 5d58a8bfb8d4
parent 15641 6561be611e3e (current diff)
parent 15649 3ad94501dd90 (diff)
child 15653 1a50d41800d9
Merge
NewLauncher.st
Tools__BreakpointService.st
Tools__ClassCategoryList.st
Tools__CodeView2.st
Tools__MethodCategoryList.st
Tools__NewSystemBrowser.st
Tools__ProjectList.st
--- a/NewLauncher.st	Sun May 17 06:38:47 2015 +0200
+++ b/NewLauncher.st	Wed May 20 11:22:14 2015 +0100
@@ -3424,7 +3424,8 @@
      TODO: make this a little app instead of an ad-hoc dialog, 
      add remote packages (central goody repository?)"    
 
-    |list masterRoot root dialog filter filterHolder v itemsByPath getItemByPath packageIdByItem packageID
+    |list masterRoot root dialog filter filterHolder v itemsByPath getItemByPath 
+     packageIdByItem packageID pathByItem
      packageIcon greyPackageIcon applicationIcon greyApplicationIcon 
      folderIcon greyFolderIcon
      browse packageDirPath 
@@ -3449,6 +3450,7 @@
     filterHolder := ValueHolder with:nil.
     itemsByPath := Dictionary new.
     packageIdByItem := IdentityDictionary new.
+    pathByItem := IdentityDictionary new.  
 
     Class withoutUpdatingChangesDo:[
         myHierarchicalItemWithLabelAndIcon := 
@@ -3482,7 +3484,9 @@
                         label:path last.
                 parent add:item.
                 itemsByPath at:path put:item.
-                packageID := path first , ':' , ((path copyFrom:2) asStringWith:$/).
+                packageID := path size > 1 
+                                ifTrue:[ path first , ':' , ((path copyFrom:2) asStringWith:$/) ]
+                                ifFalse:[ path first ].
                 packageIdByItem at:item put:packageID.
             ].
             item
@@ -3541,7 +3545,7 @@
         root label:root label,((resources string:' (no "packages" folder found)') colorizeAllWith:Color red).
     ] ifFalse:[
         packageDirPath asFilename directoryContentsAsFilenames sort do:[:fn |
-            |item base nm path parentPath parent isLibrary isApplication isAlreadyLoaded defClass|
+            |item base nm path parentPath parent isLibrary isApplication isAlreadyLoaded defClass target|
 
             ((fn suffix = 'mcz') 
             or:[ (fn baseName startsWith:'.') ]) ifFalse:[    
@@ -3563,7 +3567,11 @@
 
                 path := nm asCollectionOfSubstringsSeparatedBy:$_.
                 "/ see if already loaded
-                packageID := path first , ':' , ((path copyFrom:2) asStringWith:$/).
+
+                packageID := (path size > 1) 
+                                ifTrue:[ path first , ':' , ((path copyFrom:2) asStringWith:$/) ]
+                                ifFalse:[ path first ].
+
                 isAlreadyLoaded := 
                     (defClass := ProjectDefinition definitionClassForPackage:packageID) notNil
                     and:[ defClass isLoaded
@@ -3571,6 +3579,11 @@
 
                 item := getItemByPath value:path.
 
+                target := fn contents first.
+                ((target startsWith:'lib ') or:[(target startsWith:'app ')]) ifTrue:[
+                    pathByItem at:item put:(target copyFrom:(target indexOfSeparator + 1)) withoutSeparators.
+                ].
+
                 "/ do not overwrite an app by a lib with the same name (happens in expecco/application)
                 (isApplication or:[ item icon isNil or:[item icon == folderIcon or:[item icon == greyFolderIcon]]]) ifTrue:[
                     isAlreadyLoaded ifTrue:[
@@ -3697,24 +3710,33 @@
             dialog withWaitCursorDo:[
                 Smalltalk onChangeSend:#value:value: to:updateAction.
                 [
-                    Smalltalk loadPackage:package
+                    [
+                        Smalltalk loadPackage:package
+                    ] on:PackageLoadError do:[:ex |
+                        |path|
+
+                        path := pathByItem at:eachSelectedItem.
+                        "/ try to load the file as is (i.e. not via package-id
+                        (Dialog information:'package ID inconsistency - loading file directly...').
+                        Smalltalk fileIn:(packageDirPath asFilename / path).
+                    ]
                 ] ensure:[
                     Smalltalk retractInterestsFor:updateAction.
-                ]
+                ].
             ].
             ((defClass := package asPackageId projectDefinitionClass) notNil
                 and:[ defClass isLoaded
                 and:[ defClass isFullyLoaded ]])
             ifFalse:[
-                defClass verbose:true.
-                defClass isLoaded.
-                defClass isFullyLoaded.
-                defClass verbose:false.
-                Dialog warn:(resources 
-                                string:
-                                    (defClass isNil 
-                                        ifTrue:['Load failed: definition class not present after package load.']
-                                        ifFalse:['Load failed: definition class not fully loaded after package load.']))
+                defClass isNil ifTrue:[
+                    Dialog warn:(resources string:'Load failed: definition class for packageID (%1) not present after package load.' with:package)
+                ] ifFalse:[
+                    defClass verbose:true.
+                    defClass isLoaded.
+                    defClass isFullyLoaded.
+                    defClass verbose:false.
+                    Dialog warn:(resources string:'Load failed: definition class /%1) not fully loaded after package load.' with:defClass name)
+                ]
             ] ifTrue:[
                 doBrowse ifTrue:[
                     Tools::NewSystemBrowser openOnPackage:package
@@ -5762,14 +5784,14 @@
 !NewLauncher class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.548 2015-05-07 18:31:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.549 2015-05-19 13:38:03 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.548 2015-05-07 18:31:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.549 2015-05-19 13:38:03 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: NewLauncher.st,v 1.548 2015-05-07 18:31:25 cg Exp $'
+    ^ '$Id: NewLauncher.st,v 1.549 2015-05-19 13:38:03 cg Exp $'
 ! !
 
--- a/Tools__BreakpointService.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__BreakpointService.st	Wed May 20 11:22:14 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
 	      All Rights Reserved
@@ -275,7 +277,7 @@
         "/ Breakpoint character positions are fixed up just before
         "/ passing a breakpoints to the compiler, see
         "/ #fixupBreakpointPositions
-        breakpoints do:[:each | each position: nil ].
+        breakpoints do:[:each | each method:aMethod. each position: nil ].
     ].
     currentMethod := aMethod.
 
@@ -556,7 +558,7 @@
                 ].
 
                 breakpoints := breakpoints species new.
-                newMethod breakpointsDo:[ :each | breakpoints add: each ].
+                newMethod breakpointsDo:[ :each | each method:newMethod. breakpoints add: each ].
 
                 "/ must update breakpoints BEFORE the following, because it leads to a change
                 "/ notification, which may clear the breakpoints collection!!
@@ -696,14 +698,14 @@
 !BreakpointService class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointService.st,v 1.60 2015-02-24 08:25:36 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointService.st,v 1.61 2015-05-18 14:49:06 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointService.st,v 1.60 2015-02-24 08:25:36 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointService.st,v 1.61 2015-05-18 14:49:06 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: Tools__BreakpointService.st,v 1.60 2015-02-24 08:25:36 vrany Exp $'
+    ^ '$Id: Tools__BreakpointService.st,v 1.61 2015-05-18 14:49:06 cg Exp $'
 ! !
 
--- a/Tools__ClassCategoryList.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__ClassCategoryList.st	Wed May 20 11:22:14 2015 +0100
@@ -666,6 +666,7 @@
     ].
     packageFilter := self packageFilter value.
     packageFilter notNil ifTrue:[
+        packageFilter := packageFilter collect:[:p | p withoutSeparators].
         (packageFilter includes:allName) ifTrue:[packageFilter := nil].
     ].
 
@@ -1198,11 +1199,11 @@
 !ClassCategoryList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ClassCategoryList.st,v 1.65 2015-03-05 12:29:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ClassCategoryList.st,v 1.66 2015-05-19 16:38:10 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ClassCategoryList.st,v 1.65 2015-03-05 12:29:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ClassCategoryList.st,v 1.66 2015-05-19 16:38:10 cg Exp $'
 !
 
 version_HG
--- a/Tools__CodeView2.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__CodeView2.st	Wed May 20 11:22:14 2015 +0100
@@ -2673,21 +2673,22 @@
             "/ Transcript showCR:servicesWithAnnotations.
         ].
     ].
-
-    "/ if there is either ONLY a breakpoint service which has an annotation
-    "/ or none has an annotation, return the breakpoint service's message
-    (servicesWithAnnotations isEmptyOrNil
-    or:[ servicesWithAnnotations size == 1 and:[servicesWithAnnotations first == bpntService]]) ifTrue:[
-        (bpntService notNil and:[ bpntService isEnabled ]) ifTrue:[
-            serviceToShowHelpFor := bpntService
-        ].
-    ] ifFalse:[
-        serviceToShowHelpFor := servicesWithAnnotations detect:[:service | service ~= bpntService] ifNone:nil.
-        serviceToShowHelpFor := serviceToShowHelpFor ? servicesWithAnnotations first.
-    ].
-    serviceToShowHelpFor notNil ifTrue:[
-        ^ serviceToShowHelpFor flyByHelpTextAtLine:lineNr
-    ].
+    servicesWithAnnotations isNil ifTrue:[ ^ nil ].
+
+"/    "/ if there is either ONLY a breakpoint service which has an annotation
+"/    "/ or none has an annotation, return the breakpoint service's message
+"/    (servicesWithAnnotations isEmptyOrNil
+"/    or:[ servicesWithAnnotations size == 1 and:[servicesWithAnnotations first == bpntService]]) ifTrue:[
+"/        (bpntService notNil and:[ bpntService isEnabled ]) ifTrue:[
+"/            serviceToShowHelpFor := bpntService
+"/        ].
+"/    ] ifFalse:[
+"/        serviceToShowHelpFor := servicesWithAnnotations detect:[:service | service ~= bpntService] ifNone:nil.
+"/        serviceToShowHelpFor := serviceToShowHelpFor ? servicesWithAnnotations first.
+"/    ].
+"/    serviceToShowHelpFor notNil ifTrue:[
+"/        ^ serviceToShowHelpFor flyByHelpTextAtLine:lineNr
+"/    ].
 
     text := servicesWithAnnotations 
                     inject:(OrderedCollection new)
@@ -4265,11 +4266,11 @@
 !CodeView2 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__CodeView2.st,v 1.189 2015-05-09 17:42:20 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__CodeView2.st,v 1.190 2015-05-18 14:49:30 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__CodeView2.st,v 1.189 2015-05-09 17:42:20 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__CodeView2.st,v 1.190 2015-05-18 14:49:30 cg Exp $'
 !
 
 version_HG
@@ -4278,7 +4279,7 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__CodeView2.st,v 1.189 2015-05-09 17:42:20 cg Exp $'
+    ^ '$Id: Tools__CodeView2.st,v 1.190 2015-05-18 14:49:30 cg Exp $'
 ! !
 
 
--- a/Tools__MethodCategoryList.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__MethodCategoryList.st	Wed May 20 11:22:14 2015 +0100
@@ -1399,7 +1399,7 @@
     classesProcessed do:[:eachClass |
         |classPackage required testOutcomes|
 
-        showSyntheticMethods value ifTrue:[
+        (showSyntheticMethods value ? true) ifTrue:[
             (eachClass isMeta not and:[eachClass isTestCaseLike and:[eachClass isAbstract not]]) ifTrue:[
                 testOutcomes := eachClass testSelectorsWithLastOutcomes.
                 numAllTestResults := numAllTestResults + testOutcomes size.
@@ -1470,7 +1470,7 @@
 
         (packageFilter isNil or:[ packageFilter includes:eachClass package ]) ifTrue:[
             (showPseudoProtocols and:[suppressPseudoProtocolsNow not]) ifTrue:[
-                showSyntheticMethods value ifTrue:[   
+                (showSyntheticMethods value ? true) ifTrue:[   
                     "/ see if there is a subclassResponsibility in a superclass
                     required := SmalltalkCodeGeneratorTool missingRequiredProtocolFor:eachClass.
                     numMissingRequired := numMissingRequired + required size.
@@ -2201,11 +2201,11 @@
 !MethodCategoryList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodCategoryList.st,v 1.111 2015-02-26 03:58:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodCategoryList.st,v 1.112 2015-05-19 16:38:42 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodCategoryList.st,v 1.111 2015-02-26 03:58:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodCategoryList.st,v 1.112 2015-05-19 16:38:42 cg Exp $'
 ! !
 
 
--- a/Tools__NewSystemBrowser.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__NewSystemBrowser.st	Wed May 20 11:22:14 2015 +0100
@@ -16,58 +16,58 @@
 "{ NameSpace: Tools }"
 
 SystemBrowser subclass:#NewSystemBrowser
-	instanceVariableNames:'environmentHolder environment navigationState bufferNameList
-		selectedBuffer buffers bufferUsageOrder browserCanvas
-		immediateUpdate showClassPackages lastMethodCategory
-		lastMethodMoveClass browserCanvasType
-		syntaxColoringProcessRunning syntaxColoringProcess
-		methodInfoProcess browsletShowHideLabelHolder browserPageCanvas
-		isEmbedded hasNonEmptyEnvironmentSelectedHolder
-		smalllintRulesOrAllHolder smalllintRulesOrDefaultHolder'
-	classVariableNames:'LastNewProtocols LastProtocolRenames LastCategoryRenames
-		LastCategoryRenameOld LastCategoryRenameNew LastProjectMoves
-		LastNameSpaceMove LastMethodMoveOrCopyTargetClass
-		LastClassFilterBlockString LastMethodFilterBlockString
-		LastBreakPointConditionString LastIndividualChecks
-		LastAcceptPackage LastVariableRenames LastVisitorClassName
-		LastTemporaryVariableName FindHistory SynchronousUpdate
-		DoubleClickIsOpenBrowser ShowMethodTemplateWhenProtocolIsSelected
-		DefaultShowMethodInheritance DefaultEmphasizeUnloadedClasses
-		DefaultImmediateSyntaxColoring DefaultImmediateExplaining
-		DefaultSyntaxColoring DefaultToolBarVisible
-		DefaultCodeInfoVisible DefaultShortNameInTabs
-		DefaultHideUnloadedClasses DefaultMarkApplications
-		DefaultAutoFormat DefaultShowMethodComplexity
-		DefaultShowMethodTypeIcon DefaultShowSpecialResourceEditors
-		DefaultShowSyntheticMethods SharedMethodCategoryCache
-		LastMethodProcessingBlockString LastLoadedPackages
-		DefaultShortAllClassesInNameSpaceOrganisation LastBaseVersionTag
-		LastTag DefaultShowPseudoProtocols DefaultShowMultitabMode
-		LastRenamedOld LastRenamedNew LastImportedPackage
-		LastLintRulesHolder NewNavigationHistory
-		LastLiteralReplacementType LastLiteralReplacementNewName
-		LastLiteralReplacementOldLiteral LastNewProjectType
-		LastClassProcessingBlockString RecentlyClosedList
-		LastClassSearchBoxShowedFullName CachedTagToRevisionMapping
-		CachedMethodsImplemented LastCypressDirectory
-		LastClassSearchBoxShowedJavaOnly LastRemoteRepository
-		LastClassDocDirectory'
-	poolDictionaries:''
-	category:'Interface-Browsers-New'
+        instanceVariableNames:'environmentHolder environment navigationState bufferNameList
+                selectedBuffer buffers bufferUsageOrder browserCanvas
+                immediateUpdate showClassPackages lastMethodCategory
+                lastMethodMoveClass browserCanvasType
+                syntaxColoringProcessRunning syntaxColoringProcess
+                methodInfoProcess browsletShowHideLabelHolder browserPageCanvas
+                isEmbedded hasNonEmptyEnvironmentSelectedHolder
+                smalllintRulesOrAllHolder smalllintRulesOrDefaultHolder'
+        classVariableNames:'LastNewProtocols LastProtocolRenames LastCategoryRenames
+                LastCategoryRenameOld LastCategoryRenameNew LastProjectMoves
+                LastNameSpaceMove LastMethodMoveOrCopyTargetClass
+                LastClassFilterBlockString LastMethodFilterBlockString
+                LastBreakPointConditionString LastIndividualChecks
+                LastAcceptPackage LastVariableRenames LastVisitorClassName
+                LastTemporaryVariableName FindHistory SynchronousUpdate
+                DoubleClickIsOpenBrowser ShowMethodTemplateWhenProtocolIsSelected
+                DefaultShowMethodInheritance DefaultEmphasizeUnloadedClasses
+                DefaultImmediateSyntaxColoring DefaultImmediateExplaining
+                DefaultSyntaxColoring DefaultToolBarVisible
+                DefaultCodeInfoVisible DefaultShortNameInTabs
+                DefaultHideUnloadedClasses DefaultMarkApplications
+                DefaultAutoFormat DefaultShowMethodComplexity
+                DefaultShowMethodTypeIcon DefaultShowSpecialResourceEditors
+                DefaultShowSyntheticMethods SharedMethodCategoryCache
+                LastMethodProcessingBlockString LastLoadedPackages
+                DefaultShortAllClassesInNameSpaceOrganisation LastBaseVersionTag
+                LastTag DefaultShowPseudoProtocols DefaultShowMultitabMode
+                LastRenamedOld LastRenamedNew LastImportedPackage
+                LastLintRulesHolder NewNavigationHistory
+                LastLiteralReplacementType LastLiteralReplacementNewName
+                LastLiteralReplacementOldLiteral LastNewProjectType
+                LastClassProcessingBlockString RecentlyClosedList
+                LastClassSearchBoxShowedFullName CachedTagToRevisionMapping
+                CachedMethodsImplemented LastCypressDirectory
+                LastClassSearchBoxShowedJavaOnly LastRemoteRepository
+                LastClassDocDirectory'
+        poolDictionaries:''
+        category:'Interface-Browsers-New'
 !
 
 ListEntry subclass:#OwnershipGraph
-	instanceVariableNames:'ownershipInfo cachedForm'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:NewSystemBrowser
+        instanceVariableNames:'ownershipInfo cachedForm'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:NewSystemBrowser
 !
 
 Object subclass:#RevisionOwnershipInfo
-	instanceVariableNames:'revision author date lineOwnership'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:NewSystemBrowser::OwnershipGraph
+        instanceVariableNames:'revision author date lineOwnership'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:NewSystemBrowser::OwnershipGraph
 !
 
 !NewSystemBrowser class methodsFor:'documentation'!
@@ -10457,7 +10457,7 @@
                 )
                (MenuItem
                   enabled: hasProjectSelectedHolder
-                  label: 'Buffer with Projects Requiring this Project'
+                  label: 'Buffer with Projects Requiring this Project (as prerequisite)'
                   itemValue: projectMenuSpawnPreRequirerBuffer
                 )
                (MenuItem
@@ -10466,6 +10466,11 @@
                   itemValue: projectMenuSpawnReferencesBuffer
                 )
                (MenuItem
+                  enabled: hasProjectSelectedHolder
+                  label: 'Buffer with Projects Required by this Project (prerequisites)'
+                  itemValue: projectMenuSpawnAllPrerequisitesBuffer
+                )
+               (MenuItem
                   label: '-'
                 )
                (MenuItem
@@ -10480,7 +10485,7 @@
                 )
                (MenuItem
                   enabled: hasProjectSelectedHolder
-                  label: 'Browser on Projects Requiring this Project'
+                  label: 'Browser on Projects Requiring this Project (as prerequisite)'
                   itemValue: projectMenuSpawnPreRequirerBrowser
                 )
                (MenuItem
@@ -10489,6 +10494,11 @@
                   itemValue: projectMenuSpawnReferencesBrowser
                 )
                (MenuItem
+                  enabled: hasProjectSelectedHolder
+                  label: 'Buffer with Projects Required by this Project (prerequisits)'
+                  itemValue: projectMenuSpawnAllPrerequisitesBrowser
+                )
+               (MenuItem
                   label: '-'
                 )
                (MenuItem
@@ -43354,6 +43364,18 @@
     "Created: / 24.2.2000 / 21:42:26 / cg"
 !
 
+projectMenuSpawnAllPrerequisitesBrowser
+    "add a browser showing projects which are prerequisite to the selected project(s)"
+
+    self spawnProjectAllPrerequisitesFor:(self selectedProjects value) in:#newBrowser
+!
+
+projectMenuSpawnAllPrerequisitesBuffer
+    "add a buffer showing projects which are prerequisite to the selected project(s)"
+
+    self spawnProjectAllPrerequisitesFor:(self selectedProjects value) in:#newBuffer
+!
+
 projectMenuSpawnBuffer
     "add a buffer showing the selected projects only"
 
@@ -43771,6 +43793,51 @@
     selectedProjects sort do:aBlock
 !
 
+spawnProjectAllPrerequisitesFor:someProjects in:how
+    "open a browser/buffer showing projects which are prerequisite of the selected project(s)"
+
+    |addPkg allPrereqs lbl already brwsr delta|
+
+    delta := 4.
+
+    allPrereqs := OrderedCollection new.
+    already := Set new.
+
+    addPkg := 
+        [:package :lvl |
+            |projectDefinition indent|
+            
+            indent := String new:lvl.
+            allPrereqs add:(indent,package).
+            already add:package.
+
+            projectDefinition := ProjectDefinition definitionClassForPackage:package string.
+            projectDefinition notNil ifTrue:[
+                (projectDefinition effectivePreRequisites) do:[:eachPrereq |
+                    (already includes:eachPrereq) ifFalse:[
+                        addPkg value:eachPrereq value:lvl+delta
+                    ] ifTrue:[
+                        indent := String new:lvl+delta.
+                        allPrereqs add:(indent,(eachPrereq withColor:Color grey)).
+                    ].
+                ].
+            ].    
+        ].
+
+    someProjects do:[:each | addPkg value:each value:0].
+
+    allPrereqs isEmpty ifTrue:[
+        Dialog warn:'No prerequisites found.'.
+        ^ self.
+    ].
+    someProjects size == 1 ifTrue:[
+        lbl := resources string:'All prerequisites of package "%1"' with:someProjects first
+    ] ifFalse:[
+        lbl := resources string:'All prerequisites any of %1 packages' with:someProjects size
+    ].
+    brwsr := self spawnProjectBrowserFor:allPrereqs label:lbl in:how sort:false.
+!
+
 spawnProjectBrowserFor:projects in:where
     "browse selected project(s);
         where is: #newBrowser - open a new browser showing the projects
@@ -43784,6 +43851,15 @@
         where is: #newBrowser - open a new browser showing the projects
         where is: #newBuffer  - add a new buffer showing the projects"
 
+    ^ self
+        spawnProjectBrowserFor:projects label:labelOrNil in:where sort:true
+!
+
+spawnProjectBrowserFor:projects label:labelOrNil in:where sort:sortItems
+    "browse selected project(s);
+        where is: #newBrowser - open a new browser showing the projects
+        where is: #newBuffer  - add a new buffer showing the projects"
+
     |spec projectList singleSelection brwsr|
 
     (singleSelection := projects size == 1) ifTrue:[
@@ -43807,6 +43883,7 @@
 
             brwsr immediateUpdate value:true.
             brwsr projectListApp slaveMode:false.
+            sortItems ifFalse:[ brwsr projectListApp sortBy value:#keep ].
             brwsr organizerMode value:#project.
             brwsr projectListGenerator value:projectList.
             brwsr packageFilter value:projectList.
@@ -43846,7 +43923,7 @@
 spawnProjectPreRequirerBrowserFor:someProjects in:how
     "open a browser/buffer showing projects which have the selected project(s) as prerequisite"
 
-    |requirer|
+    |requirer lbl|
 
     requirer := Set new.
     ProjectDefinition allSubclassesDo:[:eachProjectDefinition |
@@ -43858,7 +43935,16 @@
         Dialog warn:'Noone seems to require this package (not found in any prerequisites).'.
         ^ self.
     ].
-    self spawnProjectBrowserFor:(requirer asOrderedCollection sort) in:how
+
+    someProjects size == 1 ifTrue:[
+        lbl := resources string:'Projects which require package "%1"' with:someProjects first
+    ] ifFalse:[
+        lbl := resources string:'Projects which require any of %1 packages' with:someProjects size
+    ].
+    self 
+        spawnProjectBrowserFor:(requirer asOrderedCollection sort) 
+        label:lbl 
+        in:how
 
     "Created: / 23-01-2007 / 19:25:00 / cg"
 !
@@ -57932,11 +58018,10 @@
     l isNil ifTrue:[
         l := il := self currentWindowLabel.
     ].
-    navigationState realModifiedState == true
-    ifTrue:[
+    navigationState realModifiedState == true ifTrue:[
         l := l , ' [modified]'
     ].
-    window label:l; iconLabel:il.
+    window label:l string; iconLabel:il string.
 
     "Modified: / 18.8.2000 / 21:12:17 / cg"
 !
@@ -58122,6 +58207,7 @@
     "Created: / 04-12-2011 / 22:22:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+
 !NewSystemBrowser methodsFor:'private-semantic checks'!
 
 checkAcceptedMethod:aMethod inClass:aClass
@@ -62544,11 +62630,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2223 2015-05-16 09:52:59 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2225 2015-05-19 16:39:45 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2223 2015-05-16 09:52:59 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2225 2015-05-19 16:39:45 cg Exp $'
 !
 
 version_HG
@@ -62557,7 +62643,7 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__NewSystemBrowser.st,v 1.2223 2015-05-16 09:52:59 cg Exp $'
+    ^ '$Id: Tools__NewSystemBrowser.st,v 1.2225 2015-05-19 16:39:45 cg Exp $'
 ! !
 
 
--- a/Tools__ProjectList.st	Sun May 17 06:38:47 2015 +0200
+++ b/Tools__ProjectList.st	Wed May 20 11:22:14 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2000 by eXept Software AG
 	      All Rights Reserved
@@ -272,7 +274,7 @@
         changedObject value == 0 ifTrue:[
             self selectionIndexHolder value:#()
         ].
-        newSel := changedObject value collect:[:idx | projectList value at:idx].
+        newSel := changedObject value collect:[:idx | (projectList value at:idx) withoutSeparators].
         newSel ~= self selectedProjects value ifTrue:[
             self selectedProjects value:newSel.
         ].
@@ -418,9 +420,10 @@
 !
 
 updateSelectionIndexFromSelection
-    |newSel allIdx|
+    |newSel allIdx selection selectionIndex |
 
-    self selectionHolder value isNil ifTrue:[
+    selection := self selectionHolder value.
+    selection isNil ifTrue:[
         self selectionIndexHolder value:0.
         ^ self.
     ].
@@ -430,13 +433,14 @@
     ].
     allIdx := projectList value indexOf:(self class nameListEntryForALL).
 
-    newSel := self selectionHolder value 
+    newSel := selection 
                     collect:[:val | |i|
-                                    i := projectList value indexOf:val.
+                                    i := projectList value findFirst:[:entry | entry string withoutSeparators = val].
                                     i == 0 ifTrue:[allIdx] ifFalse:[i]]
                     thenSelect:[:idx | idx ~~ 0]. 
-    (newSel ~= self selectionIndexHolder value
-    or:[ self selectionIndexHolder value == 0]) ifTrue:[
+
+    selectionIndex := self selectionIndexHolder value.
+    (newSel ~= selectionIndex or:[ selectionIndex == 0]) ifTrue:[
         self selectionIndexHolder value:newSel
     ].
 
@@ -710,7 +714,11 @@
     hideModules := HideModules ? true.
     hideModules := HideModules ? false.
 
-    allProjects := IdentitySet new.
+    sortBy value == #keep ifTrue:[
+        allProjects := OrderedCollection new.
+    ] ifFalse:[
+        allProjects := IdentitySet new.
+    ].
     projectBag := Bag new.
 
     inGeneratorHolder isNil ifTrue:[
@@ -813,23 +821,27 @@
     |allProjects numClassesInChangeSet|
 
     allProjects := self allShownProjects copyAsOrderedCollection.
-    allProjects sort.
+    sortBy value ~~ #keep ifTrue:[ 
+        allProjects sort 
+    ].
 
     allProjects size == 1 ifTrue:[
         "/ self projectLabelHolder value:(allProjects first , ' [Project]').
         self projectLabelHolder value:(LabelAndIcon icon:(self class packageIcon) string:allProjects first).
     ].
 
-    includedPseudoEntryForChanged ifTrue:[
-        numClassesInChangeSet := ChangeSet current changedClasses size.
-        numClassesInChangeSet > 0 ifTrue:[
-            "/ don't include count - makeGenerator compares against the un-expanded nameListEntry (sigh - need two lists)
-            allProjects addFirst:((self class nameListEntryForChanged "bindWith:numClassesInChangeSet") allItalic).
+    sortBy value ~~ #keep ifTrue:[ 
+        includedPseudoEntryForChanged ifTrue:[
+            numClassesInChangeSet := ChangeSet current changedClasses size.
+            numClassesInChangeSet > 0 ifTrue:[
+                "/ don't include count - makeGenerator compares against the un-expanded nameListEntry (sigh - need two lists)
+                allProjects addFirst:((self class nameListEntryForChanged "bindWith:numClassesInChangeSet") allItalic).
+            ].
         ].
-    ].
 
-    allProjects size > 1 ifTrue:[
-        allProjects addFirst:(self class nameListEntryForALL allItalic).
+        allProjects size > 1 ifTrue:[
+            allProjects addFirst:(self class nameListEntryForALL allItalic).
+        ].
     ].
 
     ^ allProjects
@@ -1045,10 +1057,10 @@
 !ProjectList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ProjectList.st,v 1.74 2015-02-04 23:15:15 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ProjectList.st,v 1.75 2015-05-19 16:21:53 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ProjectList.st,v 1.74 2015-02-04 23:15:15 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ProjectList.st,v 1.75 2015-05-19 16:21:53 cg Exp $'
 ! !