Tools__NewClassWizardDialog.st
changeset 16926 a5e115fc2ba2
parent 16895 463e46f35100
child 17134 c4cce8b7a95d
child 17285 f923dd150c2f
--- a/Tools__NewClassWizardDialog.st	Tue Oct 11 16:09:04 2016 +0200
+++ b/Tools__NewClassWizardDialog.st	Tue Oct 11 17:20:25 2016 +0200
@@ -21,7 +21,8 @@
 		createUpdateMethodHolder createInitializerHolder
 		createInitialGUICodeHolder classInstVarNamesHolder
 		classVarNamesHolder nameSpaceHolder categoryHolder
-		stereotypeHolder'
+		stereotypeHolder isCreatingClassHolder listOfSuperclassesHolder
+		canDisableTemplateCreationHolder'
 	classVariableNames:'LastLanguage LastSuperclass LastPackage LastNamespace
 		LastCategory'
 	poolDictionaries:''
@@ -136,7 +137,7 @@
 'Open a dialog for namespace selection'
 
 #package
-'Package into which this class should be placed.\Packages are units for deployment\(separately compiled & deployable libraries and applications)'
+'Packages are units for deployment\(separately compiled & deployable libraries and applications).\For class creation, choose the package into which this class should be placed.\For package creation, define the packageID of the new package.\ID must be of the form: "<module>:<path>", for example: "myname:demos/myFirstDemoProgram"'
 
 #project
 'Project-ID (aka package) into which this class should be placed'
@@ -314,55 +315,66 @@
              translateLabel: true
            )
           (LabelSpec
-             label: 'Class Creation Wizard'
+             label: 'Class/Package Creation Wizard'
              name: 'Label11'
              layout: (LayoutFrame 100 0 10 0 390 0 50 0)
              translateLabel: true
            )
           (LabelSpec
-             label: 'Programming Language:'
-             name: 'Label9'
-             layout: (LayoutFrame 7 0 90 0 301 0 112 0)
-             activeHelpKey: programmingLanguage
-             translateLabel: true
-             adjust: right
-           )
-          (ComboListSpec
-             name: 'ComboList1'
-             layout: (LayoutFrame 308 0 90 0 -32 1 112 0)
-             activeHelpKey: programmingLanguage
-             model: languageHolder
-             comboList: listOfLanguages
-             useIndex: true
-           )
-          (LabelSpec
              label: 'Stereotype:'
              name: 'Label13'
-             layout: (LayoutFrame 10 0 143 0 180 0 165 0)
+             layout: (LayoutFrame 10 0 91 0 180 0 113 0)
              activeHelpKey: stereotype
              translateLabel: true
              adjust: right
            )
           (ComboListSpec
              name: 'ComboList3'
-             layout: (LayoutFrame 190 0 142 0 -32 1 164 0)
+             layout: (LayoutFrame 190 0 91 0 -32 1 113 0)
              activeHelpKey: stereotype
              model: stereotypeHolder
              comboList: listOfStereotypes
              useIndex: true
            )
           (LabelSpec
+             label: 'Programming Language:'
+             name: 'Label9'
+             layout: (LayoutFrame 7 0 126 0 301 0 148 0)
+             activeHelpKey: programmingLanguage
+             visibilityChannel: isCreatingClassHolder
+             translateLabel: true
+             adjust: right
+           )
+          (ComboListSpec
+             name: 'ComboList1'
+             layout: (LayoutFrame 308 0 126 0 -32 1 148 0)
+             activeHelpKey: programmingLanguage
+             visibilityChannel: isCreatingClassHolder
+             model: languageHolder
+             comboList: listOfLanguages
+             useIndex: true
+           )
+          (LabelSpec
              label: 'Class Name:'
              name: 'Label1'
              layout: (LayoutFrame 10 0 172 0 180 0 194 0)
              activeHelpKey: className
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
+          (LabelSpec
+             label: '*'
+             name: 'Label14'
+             layout: (LayoutFrame 180 0 173 0 190 0 195 0)
+             visibilityChannel: isCreatingClassHolder
+             translateLabel: true
+           )
           (InputFieldSpec
              name: 'EntryField1'
              layout: (LayoutFrame 190 0 172 0 -32 1 194 0)
              activeHelpKey: className
+             visibilityChannel: isCreatingClassHolder
              model: classNameHolder
              acceptOnReturn: true
              acceptOnTab: true
@@ -370,16 +382,11 @@
              acceptOnPointerLeave: true
            )
           (LabelSpec
-             label: '*'
-             name: 'Label14'
-             layout: (LayoutFrame 180 0 173 0 190 0 195 0)
-             translateLabel: true
-           )
-          (LabelSpec
              label: 'Superclass:'
              name: 'Label2'
              layout: (LayoutFrame 10 0 202 0 180 0 224 0)
              activeHelpKey: superclass
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -387,15 +394,17 @@
              name: 'ComboBox1'
              layout: (LayoutFrame 190 0 202 0 -32 1 224 0)
              activeHelpKey: superclass
+             visibilityChannel: isCreatingClassHolder
              model: superclassNameHolder
              acceptOnLostFocus: true
-             comboList: listOfSuperclasses
+             comboList: listOfSuperclassesHolder
              useIndex: false
            )
           (LabelSpec
              label: '*'
              name: 'Label15'
              layout: (LayoutFrame 180 0 202 0 190 0 224 0)
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
            )
           (ActionButtonSpec
@@ -403,6 +412,7 @@
              name: 'Button1'
              layout: (LayoutFrame -22 1 202 0 -2 1 224 0)
              activeHelpKey: chooseSuperclass
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              model: openSuperClassChooser
            )
@@ -414,6 +424,13 @@
              translateLabel: true
              adjust: right
            )
+          (LabelSpec
+             label: '*'
+             name: 'Label16'
+             layout: (LayoutFrame 180 0 245 0 190 0 267 0)
+             visibilityChannel: isCreatingPackageHolder
+             translateLabel: true
+           )
           (ComboBoxSpec
              name: 'ComboBox2'
              layout: (LayoutFrame 190 0 242 0 -32 1 264 0)
@@ -438,6 +455,7 @@
              name: 'Label4'
              layout: (LayoutFrame 10 0 272 0 180 0 294 0)
              activeHelpKey: namespace
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -445,6 +463,7 @@
              name: 'ComboList2'
              layout: (LayoutFrame 190 0 272 0 -32 1 294 0)
              activeHelpKey: namespace
+             visibilityChannel: isCreatingClassHolder
              model: nameSpaceHolder
              comboList: listOfNamespaces
            )
@@ -453,6 +472,7 @@
              name: 'Button5'
              layout: (LayoutFrame -22 1 272 0 -2 1 294 0)
              activeHelpKey: namespaceChooser
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              model: openNamespaceChooser
            )
@@ -461,6 +481,7 @@
              name: 'Label12'
              layout: (LayoutFrame 10 0 302 0 180 0 324 0)
              activeHelpKey: category
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -468,6 +489,7 @@
              name: 'ComboBox3'
              layout: (LayoutFrame 190 0 302 0 -32 1 324 0)
              activeHelpKey: category
+             visibilityChannel: isCreatingClassHolder
              model: categoryHolder
              acceptOnLostFocus: true
              comboList: listOfCategories
@@ -477,6 +499,7 @@
              name: 'Button6'
              layout: (LayoutFrame -22 1 302 0 -2 1 324 0)
              activeHelpKey: categoryChooser
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              model: openCategoryChooser
            )
@@ -485,6 +508,7 @@
              name: 'Label5'
              layout: (LayoutFrame 10 0 342 0 180 0 364 0)
              activeHelpKey: instanceVariableNames
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -492,6 +516,7 @@
              name: 'EntryField4'
              layout: (LayoutFrame 190 0 342 0 -32 1 364 0)
              activeHelpKey: instanceVariableNames
+             visibilityChannel: isCreatingClassHolder
              model: instVarNamesHolder
              acceptOnReturn: true
              acceptOnTab: true
@@ -503,6 +528,7 @@
              name: 'Label6'
              layout: (LayoutFrame 10 0 372 0 180 0 394 0)
              activeHelpKey: classVariableNames
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -510,6 +536,7 @@
              name: 'EntryField5'
              layout: (LayoutFrame 190 0 372 0 -32 1 394 0)
              activeHelpKey: classVariableNames
+             visibilityChannel: isCreatingClassHolder
              model: classVarNamesHolder
              acceptOnReturn: true
              acceptOnTab: true
@@ -521,6 +548,7 @@
              name: 'Label7'
              layout: (LayoutFrame 10 0 402 0 180 0 424 0)
              activeHelpKey: classInstVariableNames
+             visibilityChannel: isCreatingClassHolder
              translateLabel: true
              adjust: right
            )
@@ -528,6 +556,7 @@
              name: 'EntryField6'
              layout: (LayoutFrame 190 0 402 0 -32 1 424 0)
              activeHelpKey: classInstVariableNames
+             visibilityChannel: isCreatingClassHolder
              model: classInstVarNamesHolder
              acceptOnReturn: true
              acceptOnTab: true
@@ -546,6 +575,7 @@
              name: 'CheckBox1'
              layout: (LayoutFrame 120 0 442 0 280 0 464 0)
              activeHelpKey: createAccessors
+             visibilityChannel: isCreatingClassHolder
              model: createAccessorsHolder
              translateLabel: true
            )
@@ -554,6 +584,7 @@
              name: 'CheckBox6'
              layout: (LayoutFrame 310 0 442 0 -36 1 464 0)
              activeHelpKey: createInitialGUICode
+             enableChannel: canDisableTemplateCreationHolder
              model: createInitialGUICodeHolder
              translateLabel: true
            )
@@ -562,6 +593,7 @@
              name: 'CheckBox2'
              layout: (LayoutFrame 120 0 472 0 0 1 494 0)
              activeHelpKey: createInitializer
+             visibilityChannel: isCreatingClassHolder
              model: createInitializerHolder
              translateLabel: true
            )
@@ -570,6 +602,7 @@
              name: 'CheckBox5'
              layout: (LayoutFrame 120 0 502 0 0 1 524 0)
              activeHelpKey: createUpdateMethod
+             visibilityChannel: isCreatingClassHolder
              model: createUpdateMethodHolder
              translateLabel: true
            )
@@ -578,6 +611,7 @@
              name: 'CheckBox3'
              layout: (LayoutFrame 120 0 532 0 0 1 554 0)
              activeHelpKey: createRequiredMethods
+             visibilityChannel: isCreatingClassHolder
              model: createRequiredMethodsHolder
              translateLabel: true
            )
@@ -756,34 +790,43 @@
 !NewClassWizardDialog methodsFor:'actions'!
 
 doAccept
+    self isCreatingPackageHolder value ifFalse:[
+        self doAcceptForNewClass ifFalse:[^ self].
+    ] ifTrue:[
+        self doAcceptForNewPackage ifFalse:[^ self].
+    ].    
+    super doAccept.
+!
+
+doAcceptForNewClass
     |newClassName superclassName superclass package answer|
 
     newClassName := self classNameHolder value.
     newClassName isEmptyOrNil ifTrue:[
-        Dialog warn:'No Classname entered'.
-        ^ self.
+        self warn:('No Classname entered').
+        ^ false.
     ].
     newClassName isValidSmalltalkIdentifier ifFalse:[
-        Dialog warn:'No valid Classname entered (must be alphaNumeric)'.
-        ^ self.
+        self warn:'No valid Classname entered (must be alphaNumeric)'.
+        ^ false.
     ].
     newClassName first isUppercase ifFalse:[
-        Dialog warn:'No valid Classname entered (first Character must be uppercase)'.
-        ^ self.
+        self warn:'No valid Classname entered (first Character must be uppercase)'.
+        ^ false.
     ].
 
     superclassName := self superclassNameHolder value.
     superclass := Smalltalk classNamed:superclassName.
     superclass isNil ifTrue:[
         (superclassName knownAsSymbol and:[Smalltalk includesKey:superclassName asSymbol]) ifFalse:[
-            Dialog warn:'No such Superclass'.
-            ^ self.
+            self warn:'No such Superclass'.
+            ^ false.
         ].
         (Smalltalk at:superclassName asSymbol) isBehavior ifFalse:[
-            Dialog warn:('"%1" refers to a global which is not a class (%2)'
-                        bindWith:superclassName
-                        with:superclass className).
-            ^ self.
+            self warn:'"%1" refers to a global which is not a class (%2)'
+                        with:superclassName
+                        with:superclass className.
+            ^ false.
         ].
     ].
 
@@ -791,9 +834,9 @@
     package notEmptyOrNil ifTrue:[
         (package asPackageId module isEmptyOrNil
         or:[ package asPackageId directory isEmptyOrNil ]) ifTrue:[
-            Dialog warn:('The packageID "%1" must be of the form "module:directory" (for the source repository management)'
-                        bindWith:package).
-            ^ self.
+            self warn:'The packageID "%1" must be of the form "module:directory" (for the source repository management)'
+                        with:package.
+            ^ false.
         ].
 
         (ProjectDefinition definitionClassForPackage:package) isNil ifTrue:[
@@ -808,7 +851,7 @@
                         values:#(guiApplicationType #nonGuiApplicationType #libraryType)
                         lines:nil cancel:false.
 
-            answer == false ifTrue:[^ self].
+            answer == false ifTrue:[^ false].
 
             ProjectDefinition
                 definitionClassForPackage:package
@@ -834,12 +877,55 @@
     LastPackage := packageHolder value.
     LastLanguage := self listOfLanguages at:(languageHolder value).
 
-    super doAccept.
+    ^ true
 
     "Modified: / 30-01-2011 / 09:33:28 / cg"
     "Modified (comment): / 27-01-2012 / 14:53:02 / cg"
 !
 
+doAcceptForNewPackage
+    |package projectType|
+
+    package := self packageHolder value.
+    package isEmptyOrNil ifTrue:[
+        self warn:'Missing packageID'.
+        ^ false.
+    ].
+    
+    (package asPackageId module isEmptyOrNil
+    or:[ package asPackageId directory isEmptyOrNil ]) ifTrue:[
+        self warn:'The packageID "%1" must be of the form "module:directory" (for the source repository management)'
+                    with:package.
+        ^ false.
+    ].
+
+    (ProjectDefinition definitionClassForPackage:package) notNil ifTrue:[
+        self warn:'Package already exists'.
+        ^ false.
+    ].    
+    self stereotypeSymbol == #GUIProject ifTrue:[
+        projectType := ProjectDefinition guiApplicationType
+    ] ifFalse:[    
+        self stereotypeSymbol == #NonGUIProject ifTrue:[
+            projectType := ProjectDefinition nonGuiApplicationType
+        ] ifFalse:[    
+            self stereotypeSymbol == #LibraryProject ifTrue:[
+                projectType := ProjectDefinition libraryType
+            ] ifFalse:[
+                self warn:'oops - what kind of package is this'.
+                ^ false.
+            ]
+        ].    
+    ].
+    ProjectDefinition
+        definitionClassForPackage:package
+        projectType:projectType
+        createIfAbsent:true.
+            
+    self doCancel. "/ hack - for now.
+    ^ false.
+!
+
 doCancel
     self closeRequest.
 !
@@ -929,11 +1015,24 @@
 !
 
 stereotypeChanged
-    |stereoType|
+    |stereoTypeSymbol|
 
-    stereoType := self listOfStereotypes at:(self stereotypeHolder value).
-
-    stereoType = '<none>' ifTrue:[
+    self listOfSuperclassesHolder value:self listOfSuperclasses.
+    
+    stereoTypeSymbol := self stereotypeSymbol.
+    
+    (stereoTypeSymbol = #'GUIProject'
+    or:[ stereoTypeSymbol = #'NonGUIProject'
+    or:[ stereoTypeSymbol = #'LibraryProject' ]]) ifTrue:[
+        self isCreatingClassHolder value:false. 
+        self canDisableTemplateCreationHolder value:false.
+        self createInitialGUICodeHolder value:true.
+    ] ifFalse:[
+        self isCreatingClassHolder value:true.    
+        self canDisableTemplateCreationHolder value:true.
+    ].    
+    
+    stereoTypeSymbol = nil ifTrue:[
         self createInitializerHolder value:true.
         self createPrintMethodHolder value:false.
         self createAccessorsHolder value:true.
@@ -941,26 +1040,26 @@
         self createUpdateMethodHolder value:false.
     ].
 
-    stereoType = 'Data Object' ifTrue:[
+    stereoTypeSymbol = #'DataObject' ifTrue:[
         self superclassNameHolder value:'Model'.
         self createAccessorsHolder value:true.
         self createInitialGUICodeHolder value:false.
         self createUpdateMethodHolder value:false.
     ].
-"/    stereoType = 'Enumeration' ifTrue:[
+"/    stereoTypeSymbol = #'Enumeration' ifTrue:[
 "/        self superclassNameHolder value:'Enumeration'.
 "/        self createInitializerHolder value:true.
 "/        self createAccessorsHolder value:false.
 "/        self createInitialGUICodeHolder value:false.
 "/    ].
-    stereoType = 'GUIApplication' ifTrue:[
+    stereoTypeSymbol = #'GUIApplication' ifTrue:[
         self superclassNameHolder value:'ApplicationModel'.
         self createInitializerHolder value:false.
         self createPrintMethodHolder value:false.
         self createInitialGUICodeHolder value:true.
         self createUpdateMethodHolder value:true.
     ].
-    stereoType = 'SharedPool' ifTrue:[
+    stereoTypeSymbol = #'SharedPool' ifTrue:[
         self superclassNameHolder value:'SharedPool'.
         self createAccessorsHolder value:false.
         self createInitializerHolder value:true.
@@ -968,7 +1067,7 @@
         self createInitialGUICodeHolder value:false.
         self createUpdateMethodHolder value:false.
     ].
-    (stereoType startsWith: 'Startup') ifTrue:[
+    (stereoTypeSymbol = #'StartupClass') ifTrue:[
         self superclassNameHolder value:'StandaloneStartup'.
         self createAccessorsHolder value:false.
         self createInitializerHolder value:true.
@@ -976,7 +1075,7 @@
         self createInitialGUICodeHolder value:true.
         self createUpdateMethodHolder value:false.
     ].
-    stereoType = 'TestCase' ifTrue:[
+    stereoTypeSymbol = #'TestCase' ifTrue:[
         self superclassNameHolder value:'TestCase'.
         self createAccessorsHolder value:false.
         self createInitializerHolder value:false.
@@ -984,7 +1083,7 @@
         self createInitialGUICodeHolder value:true.
         self createUpdateMethodHolder value:false.
     ].
-    stereoType = 'WebService' ifTrue:[
+    stereoTypeSymbol = #'WebService' ifTrue:[
         self superclassNameHolder value:'HTTPService'.
         self createAccessorsHolder value:false.
         self createInitializerHolder value:false.
@@ -992,7 +1091,7 @@
         self createInitialGUICodeHolder value:true.
         self createUpdateMethodHolder value:false.
     ].
-    stereoType = 'Widget' ifTrue:[
+    stereoTypeSymbol = #'Widget' ifTrue:[
         self superclassNameHolder value:'View'.
         self createInitializerHolder value:false.
         self createPrintMethodHolder value:false.
@@ -1001,10 +1100,30 @@
     ].
 
     "Modified: / 27-01-2012 / 14:47:20 / cg"
+!
+
+stereotypeSymbol
+    |stereoTypeIndex stereoTypeSpec stereoTypeSymbol|
+
+    stereoTypeIndex := self stereotypeHolder value.
+    stereoTypeIndex isNil ifTrue:[^ nil].
+    
+    stereoTypeSpec := self stereotypeSpec at:stereoTypeIndex.
+    stereoTypeSymbol := stereoTypeSpec first.
+    ^ stereoTypeSymbol
 ! !
 
 !NewClassWizardDialog methodsFor:'aspects'!
 
+canDisableTemplateCreationHolder
+    <resource: #uiAspect>
+
+    canDisableTemplateCreationHolder isNil ifTrue:[
+        canDisableTemplateCreationHolder := true asValue.
+    ].
+    ^ canDisableTemplateCreationHolder.
+!
+
 categoryHolder
     <resource: #uiAspect>
 
@@ -1032,6 +1151,12 @@
     ^ classNameHolder.
 !
 
+classNameVisibleHolder
+    <resource: #uiAspect>
+
+    ^ self isCreatingClassHolder
+!
+
 classVarNamesHolder
     <resource: #uiAspect>
 
@@ -1128,6 +1253,19 @@
     ^ instVarNamesHolder.
 !
 
+isCreatingClassHolder
+    <resource: #uiAspect>
+
+    isCreatingClassHolder isNil ifTrue:[
+        isCreatingClassHolder := true asValue
+    ].
+    ^ isCreatingClassHolder.
+!
+
+isCreatingPackageHolder
+    ^ BlockValue forLogicalNot:self isCreatingClassHolder.
+!
+
 languageHolder
     <resource: #uiAspect>
 
@@ -1164,51 +1302,101 @@
     ^ Smalltalk allPackageIDs copy sort
 !
 
+listOfStereotypeSymbols
+    "program readable list"
+    ^ self stereotypeSpec collect:[:each | each isNil ifTrue:[nil] ifFalse:[each first]].
+!
+
 listOfStereotypes
-    ^ #(
-        '<none>'
-"/        ConsoleApplication
-        'Data Object'
-"/        Enumeration
-        GUIApplication
-        SharedPool
-        TestCase
-        'StartupClass (main entry for standalone apps)'
-        WebService
-        Widget
-    )
-
-    "Modified: / 27-01-2012 / 14:46:39 / cg"
+    "human readable list"
+    ^ self stereotypeSpec collect:[:each | each isNil ifTrue:[nil] ifFalse:[each second]].
 !
 
 listOfSuperclasses
     <resource: #uiAspect>
 
-    |l superClassName|
+    |l superClassName
+     stereoTypeSymbol more
+     includeObject includeModel includeApplicationModel includeView
+     includeStandaloneStartup|
 
+    stereoTypeSymbol := self stereotypeSymbol.
+    
+    includeObject := includeModel := includeApplicationModel := includeView := true.
+    includeStandaloneStartup := false.
+    
+    stereoTypeSymbol = #'DataObject' ifTrue:[
+        includeApplicationModel := includeView := false.
+    ].
+    stereoTypeSymbol = #'Enumeration' ifTrue:[
+        includeModel := includeApplicationModel := includeView := false.
+    ].
+    stereoTypeSymbol = #'GUIApplication' ifTrue:[
+        includeModel := includeView := includeObject := false.
+    ].
+    stereoTypeSymbol = #'ConsoleProgram' ifTrue:[
+        includeModel := includeApplicationModel := includeView := includeObject := false.
+        includeStandaloneStartup := true.
+    ].
+    stereoTypeSymbol = #'SharedPool' ifTrue:[
+        includeModel := includeApplicationModel := includeView := includeObject := false.
+    ].
+    (stereoTypeSymbol = #'StartupClass') ifTrue:[
+        includeModel := includeApplicationModel := includeView := includeObject := false.
+        includeStandaloneStartup := true.
+    ].
+    stereoTypeSymbol = #'TestCase' ifTrue:[
+        includeModel := includeApplicationModel := includeView := includeObject := false.
+    ].
+    stereoTypeSymbol = #'WebService' ifTrue:[
+        includeModel := includeApplicationModel := includeView := includeObject := false.
+    ].
+    stereoTypeSymbol = #'Widget' ifTrue:[
+        includeModel := includeApplicationModel := includeObject := false.
+    ].
+    
     l := OrderedCollection new.
-    (superClassName := self superclassNameHolder value) notNil ifTrue:[
-        l add:superClassName.
-    ].
-    superClassName ~= 'Object' ifTrue:[
+    (includeObject and:[superClassName ~= 'Object']) ifTrue:[
         l add:'Object'
     ].
-    superClassName ~= 'Model' ifTrue:[
+    (includeModel and:[superClassName ~= 'Model']) ifTrue:[
         l add:'Model'
     ].
-    superClassName ~= 'View' ifTrue:[
+    (includeView and:[superClassName ~= 'View']) ifTrue:[
         l add:'View'
     ].
-    superClassName ~= 'ApplicationModel' ifTrue:[
+    (includeApplicationModel and:[superClassName ~= 'ApplicationModel']) ifTrue:[
         l add:'ApplicationModel'
     ].
-    l add:'-'.
-    l addAll:(SystemBrowser visitedClassNamesHistory).
+    
+    includeStandaloneStartup ifTrue:[
+        superClassName ~= 'StandaloneStartup' ifTrue:[
+            l add:'StandaloneStartup'
+        ].
+        superClassName ~= 'StandaloneStartupHeadless' ifTrue:[
+            l add:'StandaloneStartupHeadless'
+        ].
+    ].
+    
+    more := UserPreferences systemBrowserClass visitedClassNamesHistory.
+    more notEmptyOrNil ifTrue:[
+        l add:'-'.
+        l addAll:more.
+    ].
     ^ l
 
     "Created: / 30-01-2011 / 10:34:44 / cg"
 !
 
+listOfSuperclassesHolder
+    <resource: #uiAspect>
+
+    listOfSuperclassesHolder isNil ifTrue:[
+        listOfSuperclassesHolder := self listOfSuperclasses asValue.
+    ].
+    ^ listOfSuperclassesHolder.
+!
+
 nameSpaceHolder
     <resource: #uiAspect>
 
@@ -1245,11 +1433,32 @@
     ^ stereotypeHolder.
 !
 
+stereotypeSpec
+    ^ #(
+        ( nil '<none>' )
+        ( DataObject 'Data Object' )
+"/      ( Enumeration Enumeration )
+        ( GUIApplication 'GUI Application')
+        ( ConsoleProgram 'Console Program')
+        ( SharedPool 'Shared Pool')
+        ( TestCase TestCase )
+        ( WebService 'Web Service' )
+        ( Widget Widget)
+        ( StartupClass 'Startup Class (main entry for standalone apps)' )
+        nil
+        ( GUIProject 'GUI Project')
+        ( NonGUIProject 'Non-GUI Project')
+        ( LibraryProject 'Library Project')
+    )
+
+    "Modified: / 27-01-2012 / 14:46:39 / cg"
+!
+
 superclassNameHolder
     <resource: #uiAspect>
 
     superclassNameHolder isNil ifTrue:[
-        superclassNameHolder := (LastSuperclass ? 'Object') asValue.
+        superclassNameHolder := (LastSuperclass ? ''"'Object'") asValue.
     ].
     ^ superclassNameHolder.