# HG changeset patch # User Claus Gittinger # Date 930239070 -7200 # Node ID 422c8afcb0f5cfb275c569c7c2ffddcb4c4ccb67 # Parent 5645240fdc25a6d66d00e29a39074b6e6d5b059a checkin from browser diff -r 5645240fdc25 -r 422c8afcb0f5 ProjectBrowser.st --- a/ProjectBrowser.st Wed Jun 16 14:18:10 1999 +0200 +++ b/ProjectBrowser.st Thu Jun 24 17:44:30 1999 +0200 @@ -1,6 +1,6 @@ ToolApplicationModel subclass:#ProjectBrowser instanceVariableNames:'projectTree modifiedChannel' - classVariableNames:'' + classVariableNames:'AlreadCheckedExistingModulesAndPackages' poolDictionaries:'' category:'Interface-Smalltalk' ! @@ -20,6 +20,86 @@ ! +!ProjectBrowser class methodsFor:'help specs'! + +helpSpec + "This resource specification was automatically generated + by the UIHelpTool of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIHelpTool may not be able to read the specification." + + " + UIHelpTool openOnClass:ProjectBrowser + " + + + + ^super helpSpec addPairsFrom:#( + +#accept +'Accept modifications made here.' + +#appType +'An application - ie an executable program (and support files if any).' + +#cancel +'Undo modifications made here.' + +#defaultNamespace +'Namespace for new classes when created in the Browser.' + +#deliverAsGZIP +'Package delivery into a gzip archive (for unix)' + +#deliverAsTar +'Package delivery into a tar archive (for unix)' + +#deliverAsZIP +'Package delivery into a zip archive (for win32)' + +#deliverBinary +'Create and deliver a compiled binary (classLibrary) - only possible for the running systems architecture.' + +#deliverLoadAll +'Deliver a loadAll script file, which files-In the other files.' + +#deliverSource +'Include smalltalk sourceCode in the delivery.' + +#includeSource +'Include smalltalk sourceCode in the delivery.' + +#installDirMacOS +'The final install directory for MacOS deliveries.' + +#installDirUnix +'The final install directory for UNIX deliveries.' + +#installDirVMS +'The final install directory for VMS deliveries.' + +#installDirWin32 +'The final install directory for Win32 deliveries.' + +#libType +'A classLibrary addOn (and support files if any)' + +#packageID +'Package ID used to associate classes & methods to this project.' + +#projectDir +'The projects directory.' + +#repositoryDirectory +'The directory path below the module in the source-repository.' + +#repositoryModule +'The module (top directory) in the source-repository.' + +) +! ! + !ProjectBrowser class methodsFor:'image specs'! classIcon @@ -299,11 +379,11 @@ #(#WindowSpec #label: 'NewApplication' #name: 'NewApplication' - #layout: #(#LayoutFrame 216 0 173 0 515 0 472 0) + #layout: #(#LayoutFrame 40 0 71 0 392 0 413 0) #level: 0 #min: #(#Point 10 10) #max: #(#Point 1280 1024) - #bounds: #(#Rectangle 216 173 516 473) + #bounds: #(#Rectangle 40 71 393 414) #usePreferredExtent: false #returnIsOKInDialog: true #escapeIsCancelInDialog: true @@ -314,7 +394,7 @@ #(#FramedBoxSpec #label: 'Delivery' #name: 'FramedBox1' - #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 173 0) + #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 140 0) #labelPosition: #topLeft #translateLabel: true #component: @@ -323,7 +403,8 @@ #(#CheckBoxSpec #label: 'Compiled Binary' #name: 'CheckBox1' - #layout: #(#LayoutFrame 0 0.0 10 0 0 1.0 32 0) + #layout: #(#LayoutFrame 0 0.0 10 0 0 0.5 32 0) + #activeHelpKey: #deliverBinary #tabable: true #model: #deliverCompiledBinary #translateLabel: true @@ -331,7 +412,8 @@ #(#CheckBoxSpec #label: 'Zip Archive' #name: 'CheckBox2' - #layout: #(#LayoutFrame 0 0.0 38 0 0 1.0 60 0) + #layout: #(#LayoutFrame 0 0.5 10 0 0 1.0 32 0) + #activeHelpKey: #deliverAsZIP #tabable: true #model: #deliverZipArchive #translateLabel: true @@ -339,7 +421,8 @@ #(#CheckBoxSpec #label: 'GZip Archive (self extracting)' #name: 'CheckBox3' - #layout: #(#LayoutFrame 0 0.0 66 0 0 1.0 88 0) + #layout: #(#LayoutFrame 0 0.5 38 0 0 1.0 60 0) + #activeHelpKey: #deliverAsGZIP #tabable: true #model: #deliverGZipArchive #translateLabel: true @@ -347,7 +430,8 @@ #(#CheckBoxSpec #label: 'Include Sources' #name: 'CheckBox4' - #layout: #(#LayoutFrame 0 0.0 94 0 0 1.0 116 0) + #layout: #(#LayoutFrame 0 0.0 39 0 0 0.5 61 0) + #activeHelpKey: #deliverSource #tabable: true #model: #deliverSources #translateLabel: true @@ -355,7 +439,8 @@ #(#CheckBoxSpec #label: 'loadAll-File' #name: 'CheckBox5' - #layout: #(#LayoutFrame 0 0.0 122 0 0 1.0 144 0) + #layout: #(#LayoutFrame 0 0.0 67 0 0 0.5 89 0) + #activeHelpKey: #deliverLoadAll #tabable: true #model: #deliverLoadAllFile #translateLabel: true @@ -367,19 +452,81 @@ #(#FramedBoxSpec #label: 'Install Directory' #name: 'FramedBox2' - #layout: #(#LayoutFrame 0 0.0 178 0 0 1.0 243 0) + #layout: #(#LayoutFrame 0 0.0 140 0 0 1.0 293 0) #labelPosition: #topLeft #translateLabel: true #component: #(#SpecCollection #collection: #( + #(#LabelSpec + #label: 'Unix:' + #name: 'Label1' + #layout: #(#LayoutFrame 0 0.0 5 0 60 0.0 27 0) + #translateLabel: true + #adjust: #right + ) #(#InputFieldSpec #name: 'EntryField1' - #layout: #(#LayoutFrame 0 0.0 6 0 0 1.0 28 0) + #layout: #(#LayoutFrame 64 0.0 4 0 0 1.0 26 0) + #activeHelpKey: #installDirUnix + #enableChannel: #canDeliverForUnix + #tabable: true + #model: #installDirectoryUnix + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + #(#LabelSpec + #label: 'Win32:' + #name: 'Label2' + #layout: #(#LayoutFrame 0 0.0 36 0 60 0.0 58 0) + #translateLabel: true + #adjust: #right + ) + #(#InputFieldSpec + #name: 'EntryField2' + #layout: #(#LayoutFrame 64 0.0 34 0 0 1.0 56 0) + #activeHelpKey: #installDirWin32 + #enableChannel: #canDeliverForWin32 #tabable: true - #model: #installDirectory + #model: #installDirectoryWin32 + #acceptChannel: #acceptChannel #modifiedChannel: #modifiedChannel + ) + #(#LabelSpec + #label: 'VMS:' + #name: 'Label3' + #layout: #(#LayoutFrame 0 0.0 65 0 60 0.0 87 0) + #translateLabel: true + #adjust: #right + ) + #(#InputFieldSpec + #name: 'EntryField3' + #layout: #(#LayoutFrame 64 0.0 63 0 0 1.0 85 0) + #activeHelpKey: #installDirVMS + #initiallyDisabled: true + #enableChannel: #canDeliverForVMS + #tabable: true + #model: #installDirectoryVMS #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + #(#LabelSpec + #label: 'MacOS:' + #name: 'Label4' + #layout: #(#LayoutFrame 0 0.0 95 0 60 0.0 117 0) + #translateLabel: true + #adjust: #right + ) + #(#InputFieldSpec + #name: 'EntryField4' + #layout: #(#LayoutFrame 64 0.0 93 0 0 1.0 115 0) + #activeHelpKey: #installDirMacOS + #initiallyDisabled: true + #enableChannel: #canDeliverForMacOS + #tabable: true + #model: #installDirectoryMac + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel ) ) @@ -872,11 +1019,11 @@ #(#WindowSpec #label: 'NewApplication' #name: 'NewApplication' - #layout: #(#LayoutFrame 21 0 21 0 320 0 364 0) + #layout: #(#LayoutFrame 119 0 158 0 479 0 520 0) #level: 0 #min: #(#Point 10 10) #max: #(#Point 1280 1024) - #bounds: #(#Rectangle 21 21 321 365) + #bounds: #(#Rectangle 119 158 480 521) #usePreferredExtent: false #returnIsOKInDialog: true #escapeIsCancelInDialog: true @@ -884,6 +1031,146 @@ #component: #(#SpecCollection #collection: #( + #(#FramedBoxSpec + #label: 'Project Type' + #name: 'FramedBox1' + #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 61 0) + #labelPosition: #topLeft + #translateLabel: true + #component: + #(#SpecCollection + #collection: #( + #(#RadioButtonSpec + #label: 'Application' + #name: 'RadioButton1' + #layout: #(#LayoutFrame -1 0.0 5 0 0 0.5 27 0) + #activeHelpKey: #appType + #translateLabel: true + #model: #projectType + #isTriggerOnDown: true + #select: #application + ) + #(#RadioButtonSpec + #label: 'Class Library' + #name: 'RadioButton2' + #layout: #(#LayoutFrame 0 0.5 5 0 0 1.0 27 0) + #activeHelpKey: #libType + #translateLabel: true + #model: #projectType + #isTriggerOnDown: true + #select: #library + ) + ) + + ) + ) + #(#FramedBoxSpec + #label: 'Project Directory' + #name: 'FramedBox2' + #layout: #(#LayoutFrame 0 0.0 62 0.0 0 1.0 122 0) + #labelPosition: #topLeft + #translateLabel: true + #component: + #(#SpecCollection + #collection: #( + #(#InputFieldSpec + #name: 'EntryField1' + #layout: #(#LayoutFrame 0 0.0 1 0 0 1.0 23 0) + #activeHelpKey: #projectDir + #enableChannel: #currentProjectWasNotLoadedFromFile + #model: #projectDirectory + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + ) + + ) + ) + #(#FramedBoxSpec + #label: 'Projects Package ID' + #name: 'FramedBox5' + #layout: #(#LayoutFrame 0 0.0 127 0.0 0 1.0 187 0) + #labelPosition: #topLeft + #translateLabel: true + #component: + #(#SpecCollection + #collection: #( + #(#InputFieldSpec + #name: 'EntryField5' + #layout: #(#LayoutFrame 0 0.0 1 0 0 1.0 23 0) + #activeHelpKey: #packageID + #model: #projectPackage + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + ) + + ) + ) + #(#FramedBoxSpec + #label: 'Repository' + #name: 'FramedBox3' + #layout: #(#LayoutFrame 0 0.0 191 0.0 0 1.0 274 0) + #labelPosition: #topLeft + #translateLabel: true + #component: + #(#SpecCollection + #collection: #( + #(#LabelSpec + #label: 'Module:' + #name: 'Label1' + #layout: #(#LayoutFrame 0 0 0 0 86 0 22 0) + #translateLabel: true + #adjust: #right + ) + #(#InputFieldSpec + #name: 'EntryField2' + #layout: #(#LayoutFrame 92 0.0 0 0 0 1.0 22 0) + #activeHelpKey: #repositoryModule + #model: #repositoryModule + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + #(#LabelSpec + #label: 'Directory:' + #name: 'Label2' + #layout: #(#LayoutFrame 0 0 25 0 86 0 47 0) + #translateLabel: true + #adjust: #right + ) + #(#InputFieldSpec + #name: 'EntryField3' + #layout: #(#LayoutFrame 92 0.0 25 0 0 1.0 47 0) + #activeHelpKey: #repositoryDirectory + #model: #repositoryDirectory + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + ) + + ) + ) + #(#FramedBoxSpec + #label: 'Default Namespace' + #name: 'FramedBox4' + #layout: #(#LayoutFrame 0 0.0 279 0 0 1.0 337 0) + #activeHelpKey: #defaultNamespace + #labelPosition: #topLeft + #translateLabel: true + #component: + #(#SpecCollection + #collection: #( + #(#InputFieldSpec + #name: 'EntryField4' + #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 22 0) + #model: #projectNamespace + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + ) + + ) + ) #(#HorizontalPanelViewSpec #name: 'HorizontalPanel1' #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) @@ -897,6 +1184,7 @@ #(#ActionButtonSpec #label: 'Cancel' #name: 'Button1' + #activeHelpKey: #cancel #translateLabel: true #model: #cancel #enableChannel: #modifiedChannel @@ -906,6 +1194,7 @@ #(#ActionButtonSpec #label: 'OK' #name: 'Button2' + #activeHelpKey: #accept #translateLabel: true #model: #accept #enableChannel: #modifiedChannel @@ -915,119 +1204,6 @@ ) ) - #(#FramedBoxSpec - #label: 'Project Type' - #name: 'FramedBox1' - #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 89 0) - #labelPosition: #topLeft - #translateLabel: true - #component: - #(#SpecCollection - #collection: #( - #(#RadioButtonSpec - #label: 'Application' - #name: 'RadioButton1' - #layout: #(#LayoutFrame -1 0.0 10 0 135 0 32 0) - #translateLabel: true - #model: #projectType - #isTriggerOnDown: true - #select: #application - ) - #(#RadioButtonSpec - #label: 'Class Library' - #name: 'RadioButton2' - #layout: #(#LayoutFrame -1 0.0 38 0 135 0 60 0) - #translateLabel: true - #model: #projectType - #isTriggerOnDown: true - #select: #library - ) - ) - - ) - ) - #(#FramedBoxSpec - #label: 'Directory' - #name: 'FramedBox2' - #layout: #(#LayoutFrame 0 0.0 89 0.0 0 1.0 149 0) - #labelPosition: #topLeft - #translateLabel: true - #component: - #(#SpecCollection - #collection: #( - #(#InputFieldSpec - #name: 'EntryField1' - #layout: #(#LayoutFrame 0 0.0 4 0 0 1.0 26 0) - #enableChannel: #currentProjectWasNotLoadedFromFile - #model: #projectDirectory - #modifiedChannel: #modifiedChannel - #acceptChannel: #acceptChannel - ) - ) - - ) - ) - #(#FramedBoxSpec - #label: 'Repository' - #name: 'FramedBox3' - #layout: #(#LayoutFrame 0 0.0 152 0.0 0 1.0 235 0) - #labelPosition: #topLeft - #translateLabel: true - #component: - #(#SpecCollection - #collection: #( - #(#InputFieldSpec - #name: 'EntryField2' - #layout: #(#LayoutFrame 92 0.0 4 0 0 1.0 26 0) - #model: #repositoryModule - #modifiedChannel: #modifiedChannel - #acceptChannel: #acceptChannel - ) - #(#InputFieldSpec - #name: 'EntryField3' - #layout: #(#LayoutFrame 92 0.0 29 0 0 1.0 51 0) - #model: #repositoryDirectory - #modifiedChannel: #modifiedChannel - #acceptChannel: #acceptChannel - ) - #(#LabelSpec - #label: 'Module:' - #name: 'Label1' - #layout: #(#LayoutFrame 7 0 4 0 86 0 26 0) - #translateLabel: true - #adjust: #right - ) - #(#LabelSpec - #label: 'Directory:' - #name: 'Label2' - #layout: #(#LayoutFrame 7 0 29 0 86 0 51 0) - #translateLabel: true - #adjust: #right - ) - ) - - ) - ) - #(#FramedBoxSpec - #label: 'Default Namespace' - #name: 'FramedBox4' - #layout: #(#LayoutFrame 0 0.0 236 0 0 1.0 294 0) - #labelPosition: #topLeft - #translateLabel: true - #component: - #(#SpecCollection - #collection: #( - #(#InputFieldSpec - #name: 'EntryField4' - #layout: #(#LayoutFrame 0 0.0 4 0 0 1.0 26 0) - #model: #projectNamespace - #modifiedChannel: #modifiedChannel - #acceptChannel: #acceptChannel - ) - ) - - ) - ) ) ) @@ -1296,6 +1472,11 @@ #(#Menu #( #(#MenuItem + #label: 'New' + #translateLabel: true + #value: #newProject + ) + #(#MenuItem #label: 'Load From...' #translateLabel: true #value: #openProject @@ -1307,6 +1488,12 @@ #label: 'Save' #translateLabel: true #value: #saveProject + #enabled: #hasProjectSelectedAndProjectFilenameHolder + ) + #(#MenuItem + #label: 'Save As...' + #translateLabel: true + #value: #saveProjectAs #enabled: #hasProjectSelectedHolder ) #(#MenuItem @@ -1733,6 +1920,79 @@ "Created: / 23.3.1999 / 14:18:05 / cg" ! +canDeliverBinaryForMacOS + ^ OperatingSystem platformName == #macOS +! + +canDeliverBinaryForUnix + ^ OperatingSystem platformName == #unix +! + +canDeliverBinaryForVMS + ^ OperatingSystem platformName == #vms + +! + +canDeliverBinaryForWin32 + ^ OperatingSystem platformName == #win32 +! + +canDeliverForMacOS + |holder| + + (holder := builder bindingAt:#canDeliverForMacOS) isNil ifTrue:[ + holder := BlockValue + with:[:a1 :a2 | a1 or:[a2 not]] + arguments:(Array + with:self canDeliverBinaryForMacOS + with:self deliverCompiledBinary). + builder aspectAt:#canDeliverForMacOS put:holder. + ]. + ^ holder. +! + +canDeliverForUnix + |holder| + + (holder := builder bindingAt:#canDeliverForUnix) isNil ifTrue:[ + holder := BlockValue + with:[:a1 :a2 | a1 or:[a2 not]] + arguments:(Array + with:self canDeliverBinaryForUnix + with:self deliverCompiledBinary). + builder aspectAt:#canDeliverForUnix put:holder. + ]. + ^ holder. +! + +canDeliverForVMS + |holder| + + (holder := builder bindingAt:#canDeliverForVMS) isNil ifTrue:[ + holder := BlockValue + with:[:a1 :a2 | a1 or:[a2 not]] + arguments:(Array + with:self canDeliverBinaryForVMS + with:self deliverCompiledBinary). + builder aspectAt:#canDeliverForVMS put:holder. + ]. + ^ holder. +! + +canDeliverForWin32 + |holder| + + (holder := builder bindingAt:#canDeliverForWin32) isNil ifTrue:[ + holder := BlockValue + with:[:a1 :a2 | a1 or:[a2 not]] + arguments:(Array + with:self canDeliverBinaryForWin32 + with:self deliverCompiledBinary). + builder aspectAt:#canDeliverForWin32 put:holder. + ]. + ^ holder. +! + canRemoveSelectedClassFromPrerequisites |holder| @@ -1870,6 +2130,18 @@ "Created: / 23.3.1999 / 14:18:05 / cg" ! +hasProjectSelectedAndProjectFilenameHolder + ^ [ |dir| + + dir := self projectDirectory value asFilename. + (dir exists and:[dir isDirectory]) ifTrue:[ + self hasProjectSelectedHolder value + ] ifFalse:[ + false + ] + ]. +! + hasProjectSelectedHolder |holder| @@ -1899,13 +2171,27 @@ ^ holder. ! -installDirectory +installDirectoryUnix "automatically generated by UIPainter ..." |holder| - (holder := builder bindingAt:#installDirectory) isNil ifTrue:[ - builder aspectAt:#installDirectory put:(holder := '/opt' asValue). + (holder := builder bindingAt:#installDirectoryUnix) isNil ifTrue:[ + builder aspectAt:#installDirectoryUnix put:(holder := '/opt/smalltalk' asValue). + holder onChangeSend:#value to:[modifiedChannel value:true]. + ]. + ^ holder. + + "Created: / 23.3.1999 / 14:18:05 / cg" +! + +installDirectoryWin32 + "automatically generated by UIPainter ..." + + |holder| + + (holder := builder bindingAt:#installDirectoryWin32) isNil ifTrue:[ + builder aspectAt:#installDirectoryWin32 put:(holder := '\Programme\SmalltalkX' asValue). holder onChangeSend:#value to:[modifiedChannel value:true]. ]. ^ holder. @@ -2052,6 +2338,24 @@ "Created: / 23.3.1999 / 14:18:05 / cg" ! +projectPackage + |holder dir module| + + (holder := builder bindingAt:#projectPackage) isNil ifTrue:[ + builder aspectAt:#projectPackage put:(holder := '' asValue). + ]. + holder value size == 0 ifTrue:[ + (module := self repositoryModule value) notNil ifTrue:[ + (dir := self repositoryDirectory value) notNil ifTrue:[ + holder value:(module , ':' , dir) + ] + ] + ]. + ^ holder. + + "Created: / 23.3.1999 / 14:18:05 / cg" +! + projectTreeHolder "automatically generated by UIPainter ..." @@ -2295,9 +2599,22 @@ (manager := Smalltalk at:#SourceCodeManager) isNil ifTrue:[^ false]. "/ does the repository contain the module/package ? + "/ since this is a slow operation (involving the CVS manager, + "/ remember checked modules here in a classVar + AlreadCheckedExistingModulesAndPackages isNil ifTrue:[ + AlreadCheckedExistingModulesAndPackages := OrderedCollection new + ]. + AlreadCheckedExistingModulesAndPackages do:[:entry | + (entry at:1) = moduleDir ifTrue:[ + (entry at:2) = packageDir ifTrue:[ + ^ true + ] + ] + ]. (manager checkForExistingModule:moduleDir package:packageDir) ifFalse:[^ false]. + AlreadCheckedExistingModulesAndPackages add:(Array with:moduleDir with:packageDir). ^ true ! @@ -2536,7 +2853,12 @@ self deliverSources value:(p propertyAt:#deliverSources) ? false. self deliverLoadAllFile value:(p propertyAt:#deliverLoadAllFile) ? false. - self installDirectory value:(p propertyAt:#installDirectory) ? '/opt'. + self installDirectoryUnix + value:(p propertyAt:#installDirectoryUnix) ? + ((p propertyAt:#installDirectory) ? '/opt/smalltalk'). + self installDirectoryWin32 + value:(p propertyAt:#installDirectoryWin32) ? + ((p propertyAt:#installDirectory) ? '\Programme\SmalltalkX'). l := p prerequisitePackages collect:[:entry | |pName| @@ -2563,7 +2885,7 @@ ! saveAspectsIntoProject - |p s ns| + |p s ns dir| p := self currentProject. p notNil ifTrue:[ @@ -2573,7 +2895,13 @@ "/ self currentProjectWasNotLoadedFromFile value:p wasLoadedFromFile not. p type:self projectType value. -"/ p directory:self projectDirectory value. + + dir := self projectDirectory value asFilename. + (dir exists and:[dir isDirectory]) ifFalse:[ + self warn:'Invalid project directory: ' , dir pathName + ]. + + p directory:self projectDirectory value. p repositoryModule:self repositoryModule value. p repositoryDirectory:self repositoryDirectory value. @@ -2592,7 +2920,8 @@ p propertyAt:#deliverGZipArchive put:self deliverGZipArchive value. p propertyAt:#deliverLoadAllFile put:self deliverLoadAllFile value. - p propertyAt:#installDirectory put:self installDirectory value. + p propertyAt:#installDirectoryUnix put:self installDirectoryUnix value. + p propertyAt:#installDirectoryWin32 put:self installDirectoryWin32 value. p prerequisiteClasses:(self listOfRequiredClassesInPrerequisites value collect:[:entry | entry string asSymbol]). @@ -2678,19 +3007,27 @@ ! addClassesFromFilesInDirectoryWithFilter:aFilterBlockOrNil - |project existingClasses prjDirectory anyChange| + |project existingClasses prjDirectory anyChange numSTFilesFound| project := self currentProject. existingClasses := project classInfo. anyChange := false. + numSTFilesFound := 0. prjDirectory := project directory asFilename. + (prjDirectory exists and:[prjDirectory isDirectory]) ifFalse:[ + self warn:'Invalid project directory: ' , prjDirectory pathName. + ^ self + ]. + prjDirectory directoryContents do:[:fn | |f oldInfo cls| f := prjDirectory construct:fn. (f hasSuffix:'st') ifTrue:[ + numSTFilesFound := numSTFilesFound + 1. + oldInfo := existingClasses detect:[:clsInfo | clsInfo classFileName = fn @@ -2717,8 +3054,13 @@ ] ] ]. + anyChange ifTrue:[ self updateClassListForProject:project + ] ifFalse:[ + numSTFilesFound == 0 ifTrue:[ + self information:'No st-sourcefiles found in ' , prjDirectory pathName. + ] ] ! @@ -3061,7 +3403,7 @@ w1Nm := w1 methodClass name. w2Nm := w2 methodClass name. - w1Nm < w2Nm methodClass name ifTrue:[ + w1Nm < w2Nm ifTrue:[ true ] ifFalse:[ w1Nm = w2Nm ifFalse:[