NewLauncher.st
branchjv
changeset 15566 184cea584be5
parent 13672 46573a8d85b2
parent 15532 6810f6409ff5
child 15620 8f25029eb991
--- a/NewLauncher.st	Sun Jan 12 23:30:25 2014 +0000
+++ b/NewLauncher.st	Wed Apr 01 10:38:01 2015 +0100
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1997-1998 by eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -11,9 +11,12 @@
 "
 "{ Package: 'stx:libtool' }"
 
+"{ NameSpace: Smalltalk }"
+
 AbstractLauncherApplication subclass:#NewLauncher
 	instanceVariableNames:'isMainLauncher helpIsOn errorListCanvas infoLineTemplate'
-	classVariableNames:'UserAddedMenuItems UserAddedToolBarItems'
+	classVariableNames:'UserAddedMenuItems UserAddedToolBarItems
+		PreviousPackageDialogItems PreviousPackageDialogExtent'
 	poolDictionaries:''
 	category:'Interface-Smalltalk'
 !
@@ -31,7 +34,7 @@
 copyright
 "
  COPYRIGHT (c) 1997-1998 by eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -47,7 +50,7 @@
 documentation
 "
     The new launcher.
-    This one provides all of the Launchers functionality, 
+    This one provides all of the Launchers functionality,
     but has been written using the new GUI painter tools.
     (i.e. its menu and toolbar is defined by specs, which can be
      easily modified).
@@ -59,14 +62,14 @@
     methods there.
 
     [start with:]
-        NewLauncher open
+	NewLauncher open
 
     [see also:]
-        Launcher
+	Launcher
 
     [author:]
-        Thomas Zwick, eXept Software AG
-        Claus Gittinger, eXept Software AG
+	Thomas Zwick, eXept Software AG
+	Claus Gittinger, eXept Software AG
 "
 
 !
@@ -74,57 +77,57 @@
 examples
 "
     reopening a standard launcher (without any added tools)
-                                                                        [exBegin]
+									[exBegin]
      NewLauncher removeAllUserAddedTools.
      NewLauncher open.
-                                                                        [exEnd]
+									[exEnd]
 
 
 
     adding your own menu items (for user-applications)
 
     an additional item in the tools menu:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        nameKey: #foo;
-                        activeHelpKey: #Foo)
-        in:#menu
-        position:#(before workspace)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			nameKey: #foo;
+			activeHelpKey: #Foo)
+	in:#menu
+	position:#(before workspace)
+	space:true
+									[exEnd]
 
     an additional item in the tools menu:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        activeHelpKey: #Foo)
-        in:#menu
-        position:#(after guiPainter)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			activeHelpKey: #Foo)
+	in:#menu
+	position:#(after guiPainter)
+	space:true
+									[exEnd]
 
     an additional item in one of the tools sub menus:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        activeHelpKey: #Foo)
-        in:#menu
-        position:#(after Workspace)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			activeHelpKey: #Foo)
+	in:#menu
+	position:#(after Workspace)
+	space:true
+									[exEnd]
 "
 ! !
 
@@ -141,21 +144,21 @@
 
 defaultInfoLineTemplate
     "available values:
-        PACKAGE         - the current packageID
-        PACKAGEOREMPTY  - the current packageID or empty if its __NoPackage__
-        IMAGE           - the current snapshot image
-        CVS             - the CVS source repository or empty
-        DB              - the Store source repository DB or empty
-        SVN_WORKING_COPY- the SVN working copy dir or empty
-        NOREPOSITORY    - the tring 'No Repository' empty
-        NS              - the default namespace, or empty (if Smalltalk)
-        PROJECTDIR      - the default fileOut directory or empty (if current)
+	PACKAGE         - the current packageID
+	PACKAGEOREMPTY  - the current packageID or empty if its __NoPackage__
+	IMAGE           - the current snapshot image
+	CVS             - the CVS source repository or empty
+	DB              - the Store source repository DB or empty
+	SVN_WORKING_COPY- the SVN working copy dir or empty
+	NOREPOSITORY    - the tring 'No Repository' empty
+	NS              - the default namespace, or empty (if Smalltalk)
+	PROJECTDIR      - the default fileOut directory or empty (if current)
     "
 
     (SVN::RepositoryManager notNil
-    and:[ SVN::RepositoryManager isLoaded    
+    and:[ SVN::RepositoryManager isLoaded
     and:[ SVN::RepositoryManager enabled ]]) ifTrue:[
-        ^ '%(PACKAGEOREMPTY)%(IMAGE) %(CVS)%(DB)%(SVN_WORKING_COPY)'
+	^ '%(PACKAGEOREMPTY)%(IMAGE) %(CVS)%(DB)%(SVN_WORKING_COPY)'
     ].
     ^ '%(PACKAGEOREMPTY)%(IMAGE)%(CVS)%(DB)%(NOREPOSITORY)%(NS)'
 
@@ -270,6 +273,9 @@
 #aboutLicenseConditions
 'Show the license conditions of ST/X'
 
+#breakPointBrowser
+''
+
 #chickenFun
 'Watch your views'
 
@@ -327,6 +333,9 @@
 #classesStopIgnoringHalts
 'Stop ignoring Halts in the debugger'
 
+#classesStringSearch
+''
+
 #classesSystemBrowser
 'Open a System Browser'
 
@@ -615,6 +624,12 @@
 #startChangeSetBrowser
 'Open a Browser on recent changes (the ChangeSet)'
 
+#startSQLScratchpad
+'SQLScratchpad - a scratchpad for SQL statement execution (ODBC or SQLite)'
+
+#startSQLWorkspace
+'SQLWorkspace - a workspace for SQL statement execution'
+
 #system
 'System tools'
 
@@ -800,6 +815,7 @@
     "This resource specification was automatically generated
      by the UIPainter of ST/X."
 
+
     "Do not manually edit this!! If it is corrupted,
      the UIPainter may not be able to read the specification."
 
@@ -812,47 +828,49 @@
 
     ^
      #(FullSpec
-	name: #'windowSpec_new'
-	window:
+        name: #'windowSpec_new'
+        window:
        (WindowSpec
-	  label: 'ST/X Launcher'
-	  name: 'ST/X Launcher'
-	  min: (Point 374 44)
-	  bounds: (Rectangle 0 0 374 202)
-	  menu: menu
-	  icon: windowIcon
-	)
-	component:
+          label: 'ST/X Launcher'
+          name: 'ST/X Launcher'
+          min: (Point 374 44)
+          bounds: (Rectangle 0 0 374 202)
+          menu: menu
+          icon: windowIcon
+        )
+        component:
        (SpecCollection
-	  collection: (
-	   (MenuPanelSpec
-	      name: 'menuToolbarView'
-	      layout: (LayoutFrame 0 0.0 0 0 0 1.0 40 0)
-	      menu: menuToolbar
-	    )
-	   (NoteBookViewSpec
-	      name: 'NoteBook1'
-	      layout: (LayoutFrame 0 0.0 40 0.0 0 1.0 -26 1.0)
-	      level: 0
-	      model: selectedTabHolder
-	      menu: tabList
-	      direction: bottom
-	      useIndex: true
-	      translateLabel: true
-	      canvas: noteBookCanvasHolder
-	      keepCanvasAlive: true
-	    )
-	   (UISubSpecification
-	      name: 'infoBarSubSpec'
-	      layout: (LayoutFrame 0 0.0 -26 1 -16 1.0 0 1.0)
-	      majorKey: ToolApplicationModel
-	      minorKey: windowSpecForInfoBarWithClock
-	      keepSpaceForOSXResizeHandleH: true
-	    )
-	   )
-
-	)
+          collection: (
+           (MenuPanelSpec
+              name: 'menuToolbarView'
+              layout: (LayoutFrame 0 0.0 0 0 0 1.0 40 0)
+              menu: menuToolbar
+            )
+           (NoteBookViewSpec
+              name: 'NoteBook1'
+              layout: (LayoutFrame 0 0.0 40 0.0 0 1.0 -26 1.0)
+              level: 0
+              model: selectedTabHolder
+              menu: tabList
+              direction: bottom
+              useIndex: true
+              translateLabel: true
+              canvas: noteBookCanvasHolder
+              keepCanvasAlive: true
+            )
+           (UISubSpecification
+              name: 'infoBarSubSpec'
+              layout: (LayoutFrame 0 0.0 -26 1 -16 1.0 0 1.0)
+              majorKey: ToolApplicationModel
+              minorKey: windowSpecForInfoBarWithClock
+              keepSpaceForOSXResizeHandleH: true
+            )
+           )
+
+        )
       )
+
+    "Modified (format): / 24-02-2014 / 15:01:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 windowSpec_old
@@ -935,44 +953,44 @@
 
     <resource: #canvas>
 
-    ^ 
+    ^
      #(FullSpec
-        name: #'windowSpec_pda'
-        window: 
+	name: #'windowSpec_pda'
+	window:
        (WindowSpec
-          label: 'Launcher'
-          name: 'Launcher'
-          min: (Point 100 20)
-          max: (Point 240 300)
-          bounds: (Rectangle 13 23 197 224)
-          menu: #'menu_pda'
-          icon: windowIcon
-        )
-        component: 
+	  label: 'Launcher'
+	  name: 'Launcher'
+	  min: (Point 100 20)
+	  max: (Point 240 300)
+	  bounds: (Rectangle 13 23 197 224)
+	  menu: #'menu_pda'
+	  icon: windowIcon
+	)
+	component:
        (SpecCollection
-          collection: (
-           (MenuPanelSpec
-              name: 'menuToolbarView'
-              layout: (LayoutFrame 0 0.0 0 0 0 1.0 38 0)
-              menu: #'menuToolbar_pda'
-            )
-           (WorkspaceSpec
-              name: 'transcriptView'
-              layout: (LayoutFrame 0 0.0 40 0.0 0 1.0 -26 1.0)
-              hasHorizontalScrollBar: true
-              hasVerticalScrollBar: true
-              miniScrollerHorizontal: true
-              miniScrollerVertical: false
-            )
-           (UISubSpecification
-              name: 'infoBarSubSpec'
-              layout: (LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
-              majorKey: ToolApplicationModel
-              minorKey: windowSpecForInfoBarWithClock
-            )
-           )
-         
-        )
+	  collection: (
+	   (MenuPanelSpec
+	      name: 'menuToolbarView'
+	      layout: (LayoutFrame 0 0.0 0 0 0 1.0 38 0)
+	      menu: #'menuToolbar_pda'
+	    )
+	   (WorkspaceSpec
+	      name: 'transcriptView'
+	      layout: (LayoutFrame 0 0.0 40 0.0 0 1.0 -26 1.0)
+	      hasHorizontalScrollBar: true
+	      hasVerticalScrollBar: true
+	      miniScrollerHorizontal: true
+	      miniScrollerVertical: false
+	    )
+	   (UISubSpecification
+	      name: 'infoBarSubSpec'
+	      layout: (LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
+	      majorKey: ToolApplicationModel
+	      minorKey: windowSpecForInfoBarWithClock
+	    )
+	   )
+
+	)
       )
 ! !
 
@@ -981,10 +999,8 @@
 addMenuItem:newItem from:anApplicationWhichProvidesResourcesOrNil in:where position:positionSpecOrNilArg space:space
     |positionSpecOrNil itemNameOrNil before launcherApp|
 
-    (Transcript notNil 
-    and:[ Transcript isView
-    and:[ (launcherApp := Transcript application) notNil
-    and:[ launcherApp isKindOf:self]]]) ifTrue:[
+    (Transcript isView
+     and:[(launcherApp := Transcript application) isKindOf:self]) ifTrue:[
         "/ add to instance
         launcherApp addMenuItem:newItem from:anApplicationWhichProvidesResourcesOrNil in:where position:positionSpecOrNilArg space:space.
         ^ self
@@ -999,11 +1015,11 @@
     ].
     before := (positionSpecOrNil == #first) or:[positionSpecOrNil == #before].
 
-    (where isNil or: [where = 'toolbar']) ifTrue:[
+    (where isNil or: [where = #toolbar]) ifTrue:[
         UserAddedToolBarItems isNil ifTrue: [UserAddedToolBarItems := Dictionary new].
         (UserAddedToolBarItems contains:[:info | info item nameKey = newItem nameKey])
         ifTrue:[
-            Transcript show:'NewLauncher class: menu item already present:'; showCR:newItem nameKey.
+            'NewLauncher class: menu item already present:' infoPrint. newItem nameKey infoPrintCR.
         ]
         ifFalse:[
             UserAddedToolBarItems
@@ -1018,14 +1034,14 @@
                                             yourself)
         ]
     ].
-    (where isNil or:[where startsWith:'menu']) ifTrue:[
+    (where isNil or:[where startsWith:#menu]) ifTrue:[
         UserAddedMenuItems isNil ifTrue: [UserAddedMenuItems := Dictionary new].
         (UserAddedMenuItems contains:[:info | info item nameKey = newItem nameKey])
         ifTrue:[
             Transcript show:'NewLauncher class: menu item already present:'; showCR:newItem nameKey.
         ]
         ifFalse:[
-            UserAddedMenuItems 
+            UserAddedMenuItems
                 at:newItem put:(AddedToolInfo new
                                             item:newItem;
                                             resourceProvider:anApplicationWhichProvidesResourcesOrNil;
@@ -1043,11 +1059,11 @@
 
 addMenuItem:newItem in:where position:positionSpecOrNilArg space:space
     ^ self
-        addMenuItem:newItem 
-        from:nil
-        in:where 
-        position:positionSpecOrNilArg 
-        space:space
+	addMenuItem:newItem
+	from:nil
+	in:where
+	position:positionSpecOrNilArg
+	space:space
 !
 
 addToolMenuEntryNamed:aString action:aBlock
@@ -1087,7 +1103,7 @@
 
 removeUserTool:toolNameOrMenuItem
     "removes a menu item labeled toolName
-     This can be invoked by a classes #deinitialize method, 
+     This can be invoked by a classes #deinitialize method,
      to remove its item from the toolbar or menu.
     "
 
@@ -1096,11 +1112,11 @@
 
     "
      Transcript topView application
-        removeUserTool:'Bar' 
+	removeUserTool:'Bar'
     "
     "
      Transcript topView application
-        removeUserTool:'Foo' 
+	removeUserTool:'Foo'
     "
 
 
@@ -1108,7 +1124,7 @@
 
 removeUserTool:toolNameOrMenuItem from:addedToolsCollection
     "removes a menu item labeled toolName
-     This can be invoked by a classes #deinitialize method, 
+     This can be invoked by a classes #deinitialize method,
      to remove its item from the toolbar or menu.
     "
 
@@ -1117,49 +1133,49 @@
     addedToolsCollection size == 0 ifTrue: [^nil].
 
     [true] whileTrue:[
-        (toolNameOrMenuItem isString or:[toolNameOrMenuItem isSymbol]) ifTrue:[
-            info := addedToolsCollection detect:[:eachInfo | |eachItem|
-                                            eachItem := eachInfo item.
-                                            (eachItem nameKey notNil and:[ toolNameOrMenuItem = eachItem nameKey])
-                                            or:[ (eachItem activeHelpKey notNil and:[ toolNameOrMenuItem = eachItem activeHelpKey])
-                                            or:[ (eachItem label notNil and:[ toolNameOrMenuItem = eachItem label])]]
-                                          ]
-                                   ifNone:nil.
-        ] ifFalse:[
-            info := addedToolsCollection detect:[:eachInfo | |eachItem| eachItem := eachInfo item. (eachItem == toolNameOrMenuItem)] ifNone:nil.
-        ].
-        info isNil ifTrue:[^ self].
-
-        space     := info space.
-        whichMenu := info menuWithNewItem.
-        menuItemToRemove := info item.
-        before := info before.
-
-        whichMenu notNil ifTrue:[
-            menuIndex := whichMenu findFirst:[:item | 
-                                                    (item nameKey notNil and:[item nameKey == menuItemToRemove nameKey])
-                                                    or:[ (item activeHelpKey notNil and:[item activeHelpKey == menuItemToRemove activeHelpKey])
-                                                    or:[ (item label notNil and:[item label = menuItemToRemove label]) ]]
-                                             ].
-            menuIndex ~~ 0 ifTrue:[              
-                whichMenu remove: menuIndex.
-                space ifTrue: [
-                    whichMenu remove:(menuIndex - (before ifTrue:0 ifFalse:1))
-                ].
-            ].
-        ].
-        addedToolsCollection removeKey:menuItemToRemove. 
-        ^ self
+	(toolNameOrMenuItem isString or:[toolNameOrMenuItem isSymbol]) ifTrue:[
+	    info := addedToolsCollection detect:[:eachInfo | |eachItem|
+					    eachItem := eachInfo item.
+					    (eachItem nameKey notNil and:[ toolNameOrMenuItem = eachItem nameKey])
+					    or:[ (eachItem activeHelpKey notNil and:[ toolNameOrMenuItem = eachItem activeHelpKey])
+					    or:[ (eachItem label notNil and:[ toolNameOrMenuItem = eachItem label])]]
+					  ]
+				   ifNone:nil.
+	] ifFalse:[
+	    info := addedToolsCollection detect:[:eachInfo | |eachItem| eachItem := eachInfo item. (eachItem == toolNameOrMenuItem)] ifNone:nil.
+	].
+	info isNil ifTrue:[^ self].
+
+	space     := info space.
+	whichMenu := info menuWithNewItem.
+	menuItemToRemove := info item.
+	before := info before.
+
+	whichMenu notNil ifTrue:[
+	    menuIndex := whichMenu findFirst:[:item |
+						    (item nameKey notNil and:[item nameKey == menuItemToRemove nameKey])
+						    or:[ (item activeHelpKey notNil and:[item activeHelpKey == menuItemToRemove activeHelpKey])
+						    or:[ (item label notNil and:[item label = menuItemToRemove label]) ]]
+					     ].
+	    menuIndex ~~ 0 ifTrue:[
+		whichMenu remove: menuIndex.
+		space ifTrue: [
+		    whichMenu remove:(menuIndex - (before ifTrue:0 ifFalse:1))
+		].
+	    ].
+	].
+	addedToolsCollection removeKey:menuItemToRemove.
+	^ self
     ].
 
 
     "
      Transcript topView application
-        removeUserTool:'Bar' 
+	removeUserTool:'Bar'
     "
     "
      Transcript topView application
-        removeUserTool:'Foo' 
+	removeUserTool:'Foo'
     "
 ! !
 
@@ -1179,27 +1195,27 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(#Menu
-        #(
-         #(#MenuItem
-            #label: 'About Smalltalk/X...'
-            #translateLabel: true
-            #value: #openAbout
-            #activeHelpKey: #aboutSTX
-          )
-         #(#MenuItem
-            #label: '-'
-          )
-         #(#MenuItem
-            #label: 'Licence Conditions'
-            #translateLabel: true
-            #value: #openLicenseConditions
-            #activeHelpKey: #aboutLicenseConditions
-          )
-         )
-        nil
-        nil
+	#(
+	 #(#MenuItem
+	    #label: 'About Smalltalk/X...'
+	    #translateLabel: true
+	    #value: #openAbout
+	    #activeHelpKey: #aboutSTX
+	  )
+	 #(#MenuItem
+	    #label: '-'
+	  )
+	 #(#MenuItem
+	    #label: 'Licence Conditions'
+	    #translateLabel: true
+	    #value: #openLicenseConditions
+	    #activeHelpKey: #aboutLicenseConditions
+	  )
+	 )
+	nil
+	nil
       )
 !
 
@@ -1232,13 +1248,40 @@
             showBusyCursorWhilePerforming: true
           )
          (MenuItem
+            label: '-'
+          )
+         (MenuItem
             activeHelpKey: findClassAndBrowse
             label: 'Find Class...'
             itemValue: findClassAndBrowse
-            nameKey: startChangeSetBrowser
+            nameKey: findClassAndBrowse
+            showBusyCursorWhilePerforming: true
+          )
+         (MenuItem
+            activeHelpKey: classesImplementors
+            label: 'Implementors Of...'
+            itemValue: browseImplementors
             showBusyCursorWhilePerforming: true
           )
          (MenuItem
+            activeHelpKey: classesSenders
+            label: 'Senders Of...'
+            itemValue: browseSenders
+            showBusyCursorWhilePerforming: true
+          )
+         (MenuItem
+            activeHelpKey: classesStringSearch
+            label: 'With String...'
+            itemValue: browseMethodsWithString
+            isVisible: false
+            showBusyCursorWhilePerforming: true
+          )
+         (MenuItem
+            activeHelpKey: classesResourceMethods
+            label: 'Find Resource Methods...'
+            itemValue: browseResources
+          )
+         (MenuItem
             label: '-'
           )
          (MenuItem
@@ -1287,26 +1330,9 @@
             label: '-'
           )
          (MenuItem
-            activeHelpKey: classesImplementors
-            label: 'Implementors Of...'
-            itemValue: browseImplementors
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            activeHelpKey: classesSenders
-            label: 'Senders Of...'
-            itemValue: browseSenders
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            label: 'Method Finder'
+            label: 'Method Finder (Semantic Search)'
             itemValue: openMethodFinder
-            labelImage: (ResourceRetriever ToolbarIconLibrary methodFinder24x24Icon 'Method Finder')
-          )
-         (MenuItem
-            activeHelpKey: classesResourceMethods
-            label: 'Find Resource Methods...'
-            itemValue: browseResources
+            labelImage: (ResourceRetriever ToolbarIconLibrary methodFinder24x24Icon 'Method Finder (Semantic Search)')
           )
          (MenuItem
             label: '-'
@@ -1359,50 +1385,50 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
-        (
-         (MenuItem
-            activeHelpKey: classesClassBrowser
-            label: 'Class Browser On...'
-            itemValue: startClassBrowser
-            nameKey: classBrowserOn
-            translateLabel: true
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            activeHelpKey: classesFullClassBrowser
-            label: 'Full Class Browser On...'
-            itemValue: startFullClassBrowser
-            translateLabel: true
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            activeHelpKey: classesClassHierarchyBrowser
-            label: 'Class Hierarchy Browser On...'
-            itemValue: startClassHierarchyBrowser
-            translateLabel: true
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            label: 'Snapshot Image Browser...'
-            itemValue: startSnapshotImageBrowser
-            translateLabel: true
-            showBusyCursorWhilePerforming: true
-          )
-         (MenuItem
-            enabled: remoteImageBrowserAvailable
-            label: 'Remote Image Browser...'
-            itemValue: startRemoteImageBrowser
-            translateLabel: true
-            showBusyCursorWhilePerforming: true
-          )
-         )
-        nil
-        nil
+	(
+	 (MenuItem
+	    activeHelpKey: classesClassBrowser
+	    label: 'Class Browser On...'
+	    itemValue: startClassBrowser
+	    nameKey: classBrowserOn
+	    translateLabel: true
+	    showBusyCursorWhilePerforming: true
+	  )
+	 (MenuItem
+	    activeHelpKey: classesFullClassBrowser
+	    label: 'Full Class Browser On...'
+	    itemValue: startFullClassBrowser
+	    translateLabel: true
+	    showBusyCursorWhilePerforming: true
+	  )
+	 (MenuItem
+	    activeHelpKey: classesClassHierarchyBrowser
+	    label: 'Class Hierarchy Browser On...'
+	    itemValue: startClassHierarchyBrowser
+	    translateLabel: true
+	    showBusyCursorWhilePerforming: true
+	  )
+	 (MenuItem
+	    label: '-'
+	  )
+	 (MenuItem
+	    label: 'Snapshot Image Browser...'
+	    itemValue: startSnapshotImageBrowser
+	    translateLabel: true
+	    showBusyCursorWhilePerforming: true
+	  )
+	 (MenuItem
+	    enabled: remoteImageBrowserAvailable
+	    label: 'Remote Image Browser...'
+	    itemValue: startRemoteImageBrowser
+	    translateLabel: true
+	    showBusyCursorWhilePerforming: true
+	  )
+	 )
+	nil
+	nil
       )
 !
 
@@ -1421,502 +1447,502 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
-        (
-         (MenuItem
-            activeHelpKey: demosGoodies
-            label: 'Goodies'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosClock
-                  label: 'Clock'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Clock'
-                )
-               (MenuItem
-                  activeHelpKey: demosDigitalClock
-                  label: 'Digital Clock'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'DigitalClockView'
-                )
-               (MenuItem
-                  activeHelpKey: demosDigitalClock
-                  label: 'QlockTwoWatch'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'QlockTwoWatch'
-                )
-               (MenuItem
-                  activeHelpKey: demosBabelFish
-                  label: 'BabelFish'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'SOAP::TranslationServiceApplication'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosGames
-            label: 'Games'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: gamesTetris
-                  label: 'Blocks (Tetris look alike)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Games::Tetris'
-                )
-               (MenuItem
-                  activeHelpKey: gamesTicTacToe
-                  label: 'Tic Tac Toe'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Games::TicTacToeGame'
-                )
-               (MenuItem
-                  activeHelpKey: gamesTicTacToe2
-                  label: 'Tic Tac Toe (2 Players)'
-                  itemValue: startTicTacToe2
-                  translateLabel: true
-                )
-               (MenuItem
-                  activeHelpKey: gamesPingPong
-                  label: 'PingPong'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Games::PingPongGame'
-                )
-               (MenuItem
-                  activeHelpKey: gamesPingPong2
-                  label: 'PingPong - (2 Players)'
-                  itemValue: startPingPong2
-                  translateLabel: true
-                )
-               (MenuItem
-                  activeHelpKey: gamesReversi
-                  label: 'Reversi (Java)'
-                  itemValue: startReversi
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: 'Towers of Hanoi (Prolog)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Prolog::TowersOfHanoiApplication'
-                )
-               (MenuItem
-                  label: 'MasterMind (Prolog)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Prolog::MasterMind'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosGeometric
-            label: 'Geometric Designs'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosPen
-                  label: 'Pen Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'PenDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demosCommander
-                  label: 'Commander Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CommanderDemo'
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: demosMandel
-                  label: 'Mandel'
-                  itemValue: openMandelbrotDemo
-                  translateLabel: true
-                )
-               (MenuItem
-                  activeHelpKey: demosFractalPlants
-                  label: 'Fractal Plants Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'FractalPlantsDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demosFractalPatterns
-                  label: 'Fractal Patterns Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'FractalPatternsDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demosLSystems
-                  label: 'Lindenmayer Patterns Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'LSystemsDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demosMoreFractalPatterns
-                  label: 'More Fractal Patterns Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'ArmchairUniverseDemo'
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  label: 'Jan''s FractalApplication'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Demos::FractalApplication'
-                )
-               (MenuItem
-                  label: 'Jan''s Superformula'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Demos::SuperFormulaApplication'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosAnimations
-            label: 'Simple Animations'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosWalkingMan
-                  label: 'Walking Man'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Animation'
-                )
-               (MenuItem
-                  activeHelpKey: demosWalkingMan
-                  label: 'Walking Girl'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'WalkingGirl'
-                )
-               (MenuItem
-                  activeHelpKey: demosGlobe
-                  label: 'Globe Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GlobeDemo'
-                )
-               (MenuItem
-                  activeHelpKey: chickenFun
-                  label: 'Chicken Fun'
-                  itemValue: startStopDemo:
-                  translateLabel: true
-                  indication: chickenFunIsRunning
-                  argument: 'ChickenFun'
-                )
-               (MenuItem
-                  activeHelpKey: chickenFun
-                  label: 'Chicks Eyes'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'ChickenEyes'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demos3D
-            label: '3D GL Graphics'
-            translateLabel: true
-            isVisible: displaySupportsGLDrawing
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demos3Dplane
-                  label: 'Plane'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLPlaneDemoView2'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Dtetra
-                  label: 'Tetra'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLTetraDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3DcubeWire
-                  label: 'Cube (Wireframe)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLWireCubeDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3DcubeSolid
-                  label: 'Cube (Solid)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLCubeDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Dsphere
-                  label: 'Sphere (Wireframe)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLWireSphereDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Ddoughnut
-                  label: 'Doughnut (Wireframe)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLDoughnutDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Dplanet
-                  label: 'Planet'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLPlanetDemoView'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Dteapot
-                  label: 'Teapot'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLTeapotDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demos3Dlogo
-                  label: 'Logo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Logo3DView1'
-                )
-               (MenuItem
-                  activeHelpKey: demosCommander
-                  label: 'Rubics Cube'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'RubicsCubeView'
-                )
-               (MenuItem
-                  label: 'X/Y Graph'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLXYGraph'
-                )
-               (MenuItem
-                  label: 'X/Y Graph Widget'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::GLXYGraph3DDemo'
-                )
-               (MenuItem
-                  label: 'X/Y Graph Animated'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::AnimatedGLXYGraph3DDemo'
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  label: 'Cube (Light)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLCubeDemoView2'
-                )
-               (MenuItem
-                  label: 'Cube (Light and Texture)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLBrickCubeDemoView'
-                )
-               (MenuItem
-                  label: 'Sphere (Light)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLSphereDemoView2'
-                )
-               (MenuItem
-                  label: 'Colored Octahedron'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'GLOctaHedronDemoView'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosGraphicEditors
-            label: 'Graphic Editors'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosGraphicEditorsDrawTool
-                  label: 'Draw Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'DrawTool'
-                )
-               (MenuItem
-                  activeHelpKey: demosGraphicEditorsLogicTool
-                  label: 'Logic Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'LogicTool'
-                )
-               (MenuItem
-                  activeHelpKey: demosGraphicEditorsPaintTool
-                  label: 'Paint Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'ColorDrawDemo3'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosGUI
-            label: 'GUI'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosGUIWidgets
-                  label: 'Widget Gallery'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::GUIDemo'
-                )
-               (MenuItem
-                  activeHelpKey: demosDrawingProtocol
-                  label: 'Drawing Protocol Demo'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::DrawingProtocolDemonstration'
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: demosGUICalculator
-                  label: 'Calculator (simple)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::GUIDemoCalculator'
-                )
-               (MenuItem
-                  activeHelpKey: demosGUICalculator
-                  label: 'Calculator (nice)'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CodingExamples_GUI::GUIDemoFoxCalculatorClone'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            activeHelpKey: demosOldStuff
-            label: 'Old Stuff'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: demosCalendar
-                  label: 'Calendar'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'Calendar'
-                )
-               (MenuItem
-                  activeHelpKey: demosCalculator
-                  label: 'Calculator'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'CalculatorView'
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: demosMail
-                  label: 'Mail Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'MailView'
-                )
-               (MenuItem
-                  activeHelpKey: demosNews
-                  label: 'News Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'NewsView'
-                )
-               (MenuItem
-                  activeHelpKey: demosFTP
-                  label: 'FTP Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'FTPTool'
-                )
-               (MenuItem
-                  activeHelpKey: demosTelnet
-                  label: 'Telnet Tool'
-                  itemValue: openDemo:
-                  translateLabel: true
-                  argument: 'TelnetTool'
-                )
-               )
-              nil
-              nil
-            )
-          )
-         )
-        nil
-        nil
+	(
+	 (MenuItem
+	    activeHelpKey: demosGoodies
+	    label: 'Goodies'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosClock
+		  label: 'Clock'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Clock'
+		)
+	       (MenuItem
+		  activeHelpKey: demosDigitalClock
+		  label: 'Digital Clock'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'DigitalClockView'
+		)
+	       (MenuItem
+		  activeHelpKey: demosDigitalClock
+		  label: 'QlockTwoWatch'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'QlockTwoWatch'
+		)
+	       (MenuItem
+		  activeHelpKey: demosBabelFish
+		  label: 'BabelFish'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'SOAP::TranslationServiceApplication'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosGames
+	    label: 'Games'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: gamesTetris
+		  label: 'Blocks (Tetris look alike)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Games::Tetris'
+		)
+	       (MenuItem
+		  activeHelpKey: gamesTicTacToe
+		  label: 'Tic Tac Toe'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Games::TicTacToeGame'
+		)
+	       (MenuItem
+		  activeHelpKey: gamesTicTacToe2
+		  label: 'Tic Tac Toe (2 Players)'
+		  itemValue: startTicTacToe2
+		  translateLabel: true
+		)
+	       (MenuItem
+		  activeHelpKey: gamesPingPong
+		  label: 'PingPong'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Games::PingPongGame'
+		)
+	       (MenuItem
+		  activeHelpKey: gamesPingPong2
+		  label: 'PingPong - (2 Players)'
+		  itemValue: startPingPong2
+		  translateLabel: true
+		)
+	       (MenuItem
+		  activeHelpKey: gamesReversi
+		  label: 'Reversi (Java)'
+		  itemValue: startReversi
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: 'Towers of Hanoi (Prolog)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Prolog::TowersOfHanoiApplication'
+		)
+	       (MenuItem
+		  label: 'MasterMind (Prolog)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Prolog::MasterMind'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosGeometric
+	    label: 'Geometric Designs'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosPen
+		  label: 'Pen Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'PenDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demosCommander
+		  label: 'Commander Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CommanderDemo'
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  activeHelpKey: demosMandel
+		  label: 'Mandel'
+		  itemValue: openMandelbrotDemo
+		  translateLabel: true
+		)
+	       (MenuItem
+		  activeHelpKey: demosFractalPlants
+		  label: 'Fractal Plants Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'FractalPlantsDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demosFractalPatterns
+		  label: 'Fractal Patterns Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'FractalPatternsDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demosLSystems
+		  label: 'Lindenmayer Patterns Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'LSystemsDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demosMoreFractalPatterns
+		  label: 'More Fractal Patterns Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'ArmchairUniverseDemo'
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  label: 'Jan''s FractalApplication'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Demos::FractalApplication'
+		)
+	       (MenuItem
+		  label: 'Jan''s Superformula'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Demos::SuperFormulaApplication'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosAnimations
+	    label: 'Simple Animations'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosWalkingMan
+		  label: 'Walking Man'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Animation'
+		)
+	       (MenuItem
+		  activeHelpKey: demosWalkingMan
+		  label: 'Walking Girl'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'WalkingGirl'
+		)
+	       (MenuItem
+		  activeHelpKey: demosGlobe
+		  label: 'Globe Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GlobeDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: chickenFun
+		  label: 'Chicken Fun'
+		  itemValue: startStopDemo:
+		  translateLabel: true
+		  indication: chickenFunIsRunning
+		  argument: 'ChickenFun'
+		)
+	       (MenuItem
+		  activeHelpKey: chickenFun
+		  label: 'Chicks Eyes'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'ChickenEyes'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demos3D
+	    label: '3D GL Graphics'
+	    translateLabel: true
+	    isVisible: displaySupportsGLDrawing
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demos3Dplane
+		  label: 'Plane'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLPlaneDemoView2'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Dtetra
+		  label: 'Tetra'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLTetraDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3DcubeWire
+		  label: 'Cube (Wireframe)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLWireCubeDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3DcubeSolid
+		  label: 'Cube (Solid)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLCubeDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Dsphere
+		  label: 'Sphere (Wireframe)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLWireSphereDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Ddoughnut
+		  label: 'Doughnut (Wireframe)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLDoughnutDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Dplanet
+		  label: 'Planet'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLPlanetDemoView'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Dteapot
+		  label: 'Teapot'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLTeapotDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demos3Dlogo
+		  label: 'Logo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Logo3DView1'
+		)
+	       (MenuItem
+		  activeHelpKey: demosCommander
+		  label: 'Rubics Cube'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'RubicsCubeView'
+		)
+	       (MenuItem
+		  label: 'X/Y Graph'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLXYGraph'
+		)
+	       (MenuItem
+		  label: 'X/Y Graph Widget'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::GLXYGraph3DDemo'
+		)
+	       (MenuItem
+		  label: 'X/Y Graph Animated'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::AnimatedGLXYGraph3DDemo'
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  label: 'Cube (Light)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLCubeDemoView2'
+		)
+	       (MenuItem
+		  label: 'Cube (Light and Texture)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLBrickCubeDemoView'
+		)
+	       (MenuItem
+		  label: 'Sphere (Light)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLSphereDemoView2'
+		)
+	       (MenuItem
+		  label: 'Colored Octahedron'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'GLOctaHedronDemoView'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosGraphicEditors
+	    label: 'Graphic Editors'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosGraphicEditorsDrawTool
+		  label: 'Draw Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'DrawTool'
+		)
+	       (MenuItem
+		  activeHelpKey: demosGraphicEditorsLogicTool
+		  label: 'Logic Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'LogicTool'
+		)
+	       (MenuItem
+		  activeHelpKey: demosGraphicEditorsPaintTool
+		  label: 'Paint Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'ColorDrawDemo3'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosGUI
+	    label: 'GUI'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosGUIWidgets
+		  label: 'Widget Gallery'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::GUIDemo'
+		)
+	       (MenuItem
+		  activeHelpKey: demosDrawingProtocol
+		  label: 'Drawing Protocol Demo'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::DrawingProtocolDemonstration'
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  activeHelpKey: demosGUICalculator
+		  label: 'Calculator (simple)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::GUIDemoCalculator'
+		)
+	       (MenuItem
+		  activeHelpKey: demosGUICalculator
+		  label: 'Calculator (nice)'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CodingExamples_GUI::GUIDemoFoxCalculatorClone'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    activeHelpKey: demosOldStuff
+	    label: 'Old Stuff'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  activeHelpKey: demosCalendar
+		  label: 'Calendar'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'Calendar'
+		)
+	       (MenuItem
+		  activeHelpKey: demosCalculator
+		  label: 'Calculator'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'CalculatorView'
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  activeHelpKey: demosMail
+		  label: 'Mail Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'MailView'
+		)
+	       (MenuItem
+		  activeHelpKey: demosNews
+		  label: 'News Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'NewsView'
+		)
+	       (MenuItem
+		  activeHelpKey: demosFTP
+		  label: 'FTP Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'FTPTool'
+		)
+	       (MenuItem
+		  activeHelpKey: demosTelnet
+		  label: 'Telnet Tool'
+		  itemValue: openDemo:
+		  translateLabel: true
+		  argument: 'TelnetTool'
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 )
+	nil
+	nil
       )
 !
 
@@ -1949,6 +1975,17 @@
             label: '-'
           )
          (MenuItem
+            activeHelpKey: fileLoadPackage
+            enabled: enableDangerousMenuItemsInRemoteLauncher
+            label: 'Load Package...'
+            itemValue: fileLoadPackage
+            nameKey: fileLoadPackage
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
             activeHelpKey: fileSaveImage
             enabled: enableDangerousMenuItemsInRemoteLauncher
             label: 'Save Image'
@@ -2012,11 +2049,24 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
         (
          (MenuItem
             activeHelpKey: helpWhatsNewInSTX
+            label: 'Launcher Documentation'
+            itemValue: startLauncherDocumentation
+            translateLabel: true
+          )
+         (MenuItem
+            activeHelpKey: helpToolsDocumentation
+            label: 'Tool Documentation'
+            itemValue: startToolsDocumentation
+            translateLabel: true
+          )
+
+         (MenuItem
+            activeHelpKey: helpWhatsNewInSTX
             label: 'What''s New in ST/X'
             itemValue: startWhatsNewSTX
             translateLabel: true
@@ -2062,12 +2112,6 @@
             translateLabel: true
           )
          (MenuItem
-            activeHelpKey: helpToolsDocumentation
-            label: 'Tool Documentation'
-            itemValue: startToolsDocumentation
-            translateLabel: true
-          )
-         (MenuItem
             activeHelpKey: helpClassDocumentation
             label: 'Class Documentation'
             itemValue: startClassDocumentation
@@ -2077,7 +2121,7 @@
             label: 'Web-Documents'
             translateLabel: true
             isVisible: webDocumentsItemShownInHelpMenu
-            submenu: 
+            submenu:
            (Menu
               (
                (MenuItem
@@ -2160,67 +2204,67 @@
 
     ^
      #(Menu
-	(
-	 (MenuItem
-	    label: 'About'
-	    nameKey: about
-	    translateLabel: true
-	    submenuChannel: aboutMenu
-	    labelImage: (ResourceRetriever nil menuIcon)
-	  )
-	 (MenuItem
-	    label: 'File'
-	    nameKey: file
-	    translateLabel: true
-	    submenuChannel: fileMenu
-	  )
-	 (MenuItem
-	    label: 'Classes'
-	    nameKey: classes
-	    translateLabel: true
-	    submenuChannel: classesMenu
-	  )
-	 (MenuItem
-	    label: 'Tools'
-	    nameKey: tools
-	    translateLabel: true
-	    submenuChannel: toolsMenu
-	  )
-	 (MenuItem
-	    label: 'System'
-	    nameKey: system
-	    translateLabel: true
-	    submenuChannel: systemMenu
-	  )
-	 (MenuItem
-	    label: 'Settings'
-	    nameKey: settings
-	    translateLabel: true
-	    isVisible: useOldSettingsApplication
-	    submenuChannel: settingsMenu
-	  )
-	 (MenuItem
-	    label: 'Windows'
-	    nameKey: windows
-	    translateLabel: true
-	    submenuChannel: windowsMenu
-	  )
-	 (MenuItem
-	    label: 'Demos'
-	    nameKey: demos
-	    translateLabel: true
-	    submenuChannel: demosMenu
-	  )
-	 (MenuItem
-	    label: 'MENU_Help'
-	    nameKey: help
-	    translateLabel: true
-	    startGroup: conditionalRight
-	    submenuChannel: helpMenu
-	  )
-	 )
-	nil
-	nil
+        (
+         (MenuItem
+            label: 'About'
+            nameKey: about
+            translateLabel: true
+            submenuChannel: aboutMenu
+            labelImage: (ResourceRetriever nil menuIcon)
+          )
+         (MenuItem
+            label: 'File'
+            nameKey: file
+            translateLabel: true
+            submenuChannel: fileMenu
+          )
+         (MenuItem
+            label: 'Classes'
+            nameKey: classes
+            translateLabel: true
+            submenuChannel: classesMenu
+          )
+         (MenuItem
+            label: 'Tools'
+            nameKey: tools
+            translateLabel: true
+            submenuChannel: toolsMenu
+          )
+         (MenuItem
+            label: 'System'
+            nameKey: system
+            translateLabel: true
+            submenuChannel: systemMenu
+          )
+         (MenuItem
+            label: 'Settings'
+            nameKey: settings
+            translateLabel: true
+            isVisible: useOldSettingsApplication
+            submenuChannel: settingsMenu
+          )
+         (MenuItem
+            label: 'Windows'
+            nameKey: windows
+            translateLabel: true
+            submenuChannel: windowsMenu
+          )
+         (MenuItem
+            label: 'Demos'
+            nameKey: demos
+            translateLabel: true
+            submenuChannel: demosMenu
+          )
+         (MenuItem
+            label: 'MENU_Help'
+            nameKey: help
+            translateLabel: true
+            startGroup: conditionalRight
+            submenuChannel: helpMenu
+          )
+         )
+        nil
+        nil
       )
 !
 
@@ -2238,13 +2282,13 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
         (
          (MenuItem
             activeHelpKey: toolsWorkspace
             label: 'Normal'
-            itemValue: openWorkspace
+            itemValue: openRegularWorkspace
             translateLabel: true
           )
          (MenuItem
@@ -2285,133 +2329,133 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
-        (
-         (MenuItem
-            activeHelpKey: fileSaveImage
-            enabled: enableDangerousMenuItemsInRemoteLauncher
-            label: 'save image'
-            itemValue: saveImage
-            nameKey: saveImage
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary saveImageIcon)
-          )
-         (MenuItem
-            activeHelpKey: fileFileBrowser
-            label: 'open file browser'
-            itemValue: openFileBrowser
-            nameKey: fileBrowser
-            translateLabel: true
-            isButton: true
-            isVisible: fileBrowserItemVisible
-            submenuChannel: menuFileHistory
-            labelImage: (ResourceRetriever ToolbarIconLibrary startFileBrowserIcon)
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            activeHelpKey: toolsWorkspace
-            label: 'open workspace'
-            itemValue: openWorkspace
-            nameKey: workspace
-            translateLabel: true
-            isButton: true
-            submenuChannel: menuOpenWorkspaceTypes
-            labelImage: (ResourceRetriever ToolbarIconLibrary startWorkspaceIcon)
-          )
-         (MenuItem
-            activeHelpKey: classesSystemBrowser
-            label: 'open system browser'
-            itemValue: openApplication:
-            nameKey: systemBrowser
-            translateLabel: true
-            isButton: true
-            isVisible: systemBrowserItemVisible
-            submenuChannel: menuClassHistory
-            labelImage: (ResourceRetriever ToolbarIconLibrary startSystemBrowserIcon)
-            argument: 'SystemBrowser'
-          )
-         (MenuItem
-            activeHelpKey: classesSystemBrowserOnClass
-            label: 'System Browser On Class'
-            translateLabel: true
-            isButton: true
-            isVisible: false
-            submenuChannel: menuClassHistory
-            labelImage: (ResourceRetriever ToolbarIconLibrary startSystemBrowserOnHistoryClassIcon)
-          )
-         (MenuItem
-            activeHelpKey: toolsChangesBrowserOrNavigateToRecentChange
-            label: 'open changes browser'
-            itemValue: startChangesBrowser
-            nameKey: changesBrowser
-            translateLabel: true
-            isButton: true
-            submenuChannel: menuChangeHistory
-            labelImage: (ResourceRetriever ToolbarIconLibrary startChangesBrowserIcon)
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            activeHelpKey: toolsGUIPainter
-            label: 'open GUI Builder'
-            itemValue: openApplication:
-            nameKey: guiBuilder
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary startUIPainterIcon)
-            argument: 'UIPainter'
-          )
-         (MenuItem
-            activeHelpKey: toolsMenuEditor
-            label: 'open menu editor'
-            itemValue: openApplication:
-            nameKey: menuEditor
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary startMenuEditorIcon)
-            argument: 'MenuEditor'
-          )
-         (MenuItem
-            activeHelpKey: toolsImageEditor
-            label: 'open image editor'
-            itemValue: openApplication:
-            nameKey: imageEditor
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary startImageEditorIcon)
-            argument: 'ImageEditor'
-          )
-         (MenuItem
-            label: ''
-          )
-         (MenuItem
-            activeHelpKey: systemGarbageCollectAndCompress
-            label: 'garbage collect and compress'
-            itemValue: compressingGarbageCollect
-            nameKey: garbageCollect
-            translateLabel: true
-            isButton: true
-            isVisible: false
-            labelImage: (ResourceRetriever ToolbarIconLibrary garbageCollectIcon)
-          )
-         (MenuItem
-            activeHelpKey: helpSTXOnlineDocumentation
-            label: 'help'
-            itemValue: startDocumentationTool
-            nameKey: help
-            translateLabel: true
-            isButton: true
-            startGroup: right
-            labelImage: (ResourceRetriever XPToolbarIconLibrary stxHelpIcon)
-          )
-         )
-        nil
-        nil
+	(
+	 (MenuItem
+	    activeHelpKey: fileSaveImage
+	    enabled: enableDangerousMenuItemsInRemoteLauncher
+	    label: 'save image'
+	    itemValue: saveImage
+	    nameKey: saveImage
+	    translateLabel: true
+	    isButton: true
+	    labelImage: (ResourceRetriever ToolbarIconLibrary saveImageIcon)
+	  )
+	 (MenuItem
+	    activeHelpKey: fileFileBrowser
+	    label: 'open file browser'
+	    itemValue: openFileBrowser
+	    nameKey: fileBrowser
+	    translateLabel: true
+	    isButton: true
+	    isVisible: fileBrowserItemVisible
+	    submenuChannel: menuFileHistory
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startFileBrowserIcon)
+	  )
+	 (MenuItem
+	    label: '-'
+	  )
+	 (MenuItem
+	    activeHelpKey: toolsWorkspace
+	    label: 'open workspace'
+	    itemValue: openWorkspace
+	    nameKey: workspace
+	    translateLabel: true
+	    isButton: true
+	    submenuChannel: menuOpenWorkspaceTypes
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startWorkspaceIcon)
+	  )
+	 (MenuItem
+	    activeHelpKey: classesSystemBrowser
+	    label: 'open system browser'
+	    itemValue: openApplication:
+	    nameKey: systemBrowser
+	    translateLabel: true
+	    isButton: true
+	    isVisible: systemBrowserItemVisible
+	    submenuChannel: menuClassHistory
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startSystemBrowserIcon)
+	    argument: 'SystemBrowser'
+	  )
+	 (MenuItem
+	    activeHelpKey: classesSystemBrowserOnClass
+	    label: 'System Browser On Class'
+	    translateLabel: true
+	    isButton: true
+	    isVisible: false
+	    submenuChannel: menuClassHistory
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startSystemBrowserOnHistoryClassIcon)
+	  )
+	 (MenuItem
+	    activeHelpKey: toolsChangesBrowserOrNavigateToRecentChange
+	    label: 'open changes browser'
+	    itemValue: startChangesBrowser
+	    nameKey: changesBrowser
+	    translateLabel: true
+	    isButton: true
+	    submenuChannel: menuChangeHistory
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startChangesBrowserIcon)
+	  )
+	 (MenuItem
+	    label: '-'
+	  )
+	 (MenuItem
+	    activeHelpKey: toolsGUIPainter
+	    label: 'open GUI Builder'
+	    itemValue: openApplication:
+	    nameKey: guiBuilder
+	    translateLabel: true
+	    isButton: true
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startUIPainterIcon)
+	    argument: 'UIPainter'
+	  )
+	 (MenuItem
+	    activeHelpKey: toolsMenuEditor
+	    label: 'open menu editor'
+	    itemValue: openApplication:
+	    nameKey: menuEditor
+	    translateLabel: true
+	    isButton: true
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startMenuEditorIcon)
+	    argument: 'MenuEditor'
+	  )
+	 (MenuItem
+	    activeHelpKey: toolsImageEditor
+	    label: 'open image editor'
+	    itemValue: openApplication:
+	    nameKey: imageEditor
+	    translateLabel: true
+	    isButton: true
+	    labelImage: (ResourceRetriever ToolbarIconLibrary startImageEditorIcon)
+	    argument: 'ImageEditor'
+	  )
+	 (MenuItem
+	    label: ''
+	  )
+	 (MenuItem
+	    activeHelpKey: systemGarbageCollectAndCompress
+	    label: 'garbage collect and compress'
+	    itemValue: compressingGarbageCollect
+	    nameKey: garbageCollect
+	    translateLabel: true
+	    isButton: true
+	    isVisible: false
+	    labelImage: (ResourceRetriever ToolbarIconLibrary garbageCollectIcon)
+	  )
+	 (MenuItem
+	    activeHelpKey: helpSTXOnlineDocumentation
+	    label: 'help'
+	    itemValue: startDocumentationTool
+	    nameKey: help
+	    translateLabel: true
+	    isButton: true
+	    startGroup: right
+	    labelImage: (ResourceRetriever XPToolbarIconLibrary stxHelpIcon)
+	  )
+	 )
+	nil
+	nil
       )
 !
 
@@ -2429,46 +2473,46 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(#Menu
-        #(
-         #(#MenuItem
-            #label: 'open file browser'
-            #isButton: true
-            #nameKey: #fileBrowser
-            #value: #openFileBrowser
-            #activeHelpKey: #fileFileBrowser
-            #labelImage: #(#ResourceRetriever ToolbarIconLibrary #startFileBrowserIcon)
-          )
-         #(#MenuItem
-            #label: ''
-          )
-         #(#MenuItem
-            #label: 'open system browser'
-            #isButton: true
-            #nameKey: #systemBrowser
-            #value: #openApplication:
-            #activeHelpKey: #classesSystemBrowser
-            #argument: 'SystemBrowser'
-            #labelImage: #(#ResourceRetriever ToolbarIconLibrary #startSystemBrowserIcon)
-            #submenuChannel: #menuClassHistory
-          )
-         #(#MenuItem
-            #label: ''
-          )
-         #(#MenuItem
-            #label: 'help'
-            #translateLabel: true
-            #isButton: true
-            #nameKey: #help
-            #startGroup: #right
-            #value: #startDocumentationTool
-            #activeHelpKey: #helpSTXOnlineDocumentation
-            #labelImage: #(#ResourceRetriever ToolbarIconLibrary #helpIcon2)
-          )
-         )
-        nil
-        nil
+	#(
+	 #(#MenuItem
+	    #label: 'open file browser'
+	    #isButton: true
+	    #nameKey: #fileBrowser
+	    #value: #openFileBrowser
+	    #activeHelpKey: #fileFileBrowser
+	    #labelImage: #(#ResourceRetriever ToolbarIconLibrary #startFileBrowserIcon)
+	  )
+	 #(#MenuItem
+	    #label: ''
+	  )
+	 #(#MenuItem
+	    #label: 'open system browser'
+	    #isButton: true
+	    #nameKey: #systemBrowser
+	    #value: #openApplication:
+	    #activeHelpKey: #classesSystemBrowser
+	    #argument: 'SystemBrowser'
+	    #labelImage: #(#ResourceRetriever ToolbarIconLibrary #startSystemBrowserIcon)
+	    #submenuChannel: #menuClassHistory
+	  )
+	 #(#MenuItem
+	    #label: ''
+	  )
+	 #(#MenuItem
+	    #label: 'help'
+	    #translateLabel: true
+	    #isButton: true
+	    #nameKey: #help
+	    #startGroup: #right
+	    #value: #startDocumentationTool
+	    #activeHelpKey: #helpSTXOnlineDocumentation
+	    #labelImage: #(#ResourceRetriever ToolbarIconLibrary #helpIcon2)
+	  )
+	 )
+	nil
+	nil
       )
 
     "Modified: / 05-11-2007 / 11:16:57 / cg"
@@ -2488,89 +2532,89 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(#Menu
-        #(
-         #(#MenuItem
-            #label: 'About'
-            #translateLabel: true
-            #nameKey: #about
-            #activeHelpKey: #settings
-            #labelImage: #(#ResourceRetriever nil #menuIcon)
-            #submenuChannel: #aboutMenu
-            #keepLinkedMenu: true
-          )
-         #(#MenuItem
-            #label: '&File'
-            #translateLabel: true
-            #nameKey: #file
-            #activeHelpKey: #settings
-            #submenuChannel: #fileMenu
-            #keepLinkedMenu: true
-          )
-         #(#MenuItem
-            #label: 'Apps'
-            #translateLabel: true
-            #submenu: 
-           #(#Menu
-              #(
-               #(#MenuItem
-                  #label: 'Classes'
-                  #translateLabel: true
-                  #nameKey: #classes
-                  #activeHelpKey: #settings
-                  #submenuChannel: #classesMenu
-                  #keepLinkedMenu: true
-                )
-               #(#MenuItem
-                  #label: 'Tools'
-                  #translateLabel: true
-                  #nameKey: #tools
-                  #activeHelpKey: #settings
-                  #submenuChannel: #toolsMenu
-                  #keepLinkedMenu: true
-                )
-               #(#MenuItem
-                  #label: 'System'
-                  #translateLabel: true
-                  #nameKey: #system
-                  #activeHelpKey: #settings
-                  #submenuChannel: #systemMenu
-                  #keepLinkedMenu: true
-                )
-               #(#MenuItem
-                  #label: 'Demos'
-                  #translateLabel: true
-                  #nameKey: #demos
-                  #activeHelpKey: #settings
-                  #submenuChannel: #demosMenu
-                  #keepLinkedMenu: true
-                )
-               )
-              nil
-              nil
-            )
-          )
-         #(#MenuItem
-            #label: 'Windows'
-            #translateLabel: true
-            #nameKey: #windows
-            #activeHelpKey: #settings
-            #submenuChannel: #windowsMenu
-            #keepLinkedMenu: true
-          )
-         #(#MenuItem
-            #label: '&Help'
-            #translateLabel: true
-            #nameKey: #help
-            #startGroup: #right
-            #activeHelpKey: #settings
-            #submenuChannel: #helpMenu
-            #keepLinkedMenu: true
-          )
-         )
-        nil
-        nil
+	#(
+	 #(#MenuItem
+	    #label: 'About'
+	    #translateLabel: true
+	    #nameKey: #about
+	    #activeHelpKey: #settings
+	    #labelImage: #(#ResourceRetriever nil #menuIcon)
+	    #submenuChannel: #aboutMenu
+	    #keepLinkedMenu: true
+	  )
+	 #(#MenuItem
+	    #label: '&File'
+	    #translateLabel: true
+	    #nameKey: #file
+	    #activeHelpKey: #settings
+	    #submenuChannel: #fileMenu
+	    #keepLinkedMenu: true
+	  )
+	 #(#MenuItem
+	    #label: 'Apps'
+	    #translateLabel: true
+	    #submenu:
+	   #(#Menu
+	      #(
+	       #(#MenuItem
+		  #label: 'Classes'
+		  #translateLabel: true
+		  #nameKey: #classes
+		  #activeHelpKey: #settings
+		  #submenuChannel: #classesMenu
+		  #keepLinkedMenu: true
+		)
+	       #(#MenuItem
+		  #label: 'Tools'
+		  #translateLabel: true
+		  #nameKey: #tools
+		  #activeHelpKey: #settings
+		  #submenuChannel: #toolsMenu
+		  #keepLinkedMenu: true
+		)
+	       #(#MenuItem
+		  #label: 'System'
+		  #translateLabel: true
+		  #nameKey: #system
+		  #activeHelpKey: #settings
+		  #submenuChannel: #systemMenu
+		  #keepLinkedMenu: true
+		)
+	       #(#MenuItem
+		  #label: 'Demos'
+		  #translateLabel: true
+		  #nameKey: #demos
+		  #activeHelpKey: #settings
+		  #submenuChannel: #demosMenu
+		  #keepLinkedMenu: true
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 #(#MenuItem
+	    #label: 'Windows'
+	    #translateLabel: true
+	    #nameKey: #windows
+	    #activeHelpKey: #settings
+	    #submenuChannel: #windowsMenu
+	    #keepLinkedMenu: true
+	  )
+	 #(#MenuItem
+	    #label: '&Help'
+	    #translateLabel: true
+	    #nameKey: #help
+	    #startGroup: #right
+	    #activeHelpKey: #settings
+	    #submenuChannel: #helpMenu
+	    #keepLinkedMenu: true
+	  )
+	 )
+	nil
+	nil
       )
 
     "Modified: / 19-09-2006 / 20:48:22 / cg"
@@ -2731,6 +2775,10 @@
             labelImage: (ResourceRetriever ToolbarIconLibrary startWorkspaceIcon 'Workspace')
           )
          (MenuItem
+            label: 'Text Diff'
+            itemValue: openTextDiffTool
+          )
+         (MenuItem
             enabled: monticelloRepositoryAvailable
             label: 'Monticello Repository Browser'
             itemValue: startMonticelloRepositoryBrowser
@@ -2799,6 +2847,7 @@
                   activeHelpKey: breakPointBrowser
                   label: 'Breakpoint Browser'
                   itemValue: openApplication:
+                  labelImage: (ResourceRetriever ToolbarIconLibrary openBreakpointBrowserIcon 'Breakpoint Browser')
                   argument: 'Tools::BreakpointBrowser'
                 )
                (MenuItem
@@ -2806,17 +2855,17 @@
                 )
                (MenuItem
                   activeHelpKey: classesShowTracePoints
-                  label: 'Show all Break && Trace Points'
+                  label: 'Show All Break && Trace Points'
                   itemValue: browseAllBreakAndTracePoints
                 )
                (MenuItem
                   activeHelpKey: classesRemoveAllTracePoints
-                  label: 'Remove all Break && Trace Points'
+                  label: 'Remove All Break && Trace Points'
                   itemValue: removeAllBreakAndTracePoints
                 )
                (MenuItem
                   activeHelpKey: classesStopIgnoringHalts
-                  enabled: debuggerHasIgnoredHalts
+                  enabled: debuggerHasIgnoredHaltsOrSmalltalkIsIgnoringHalts
                   label: 'Stop Ignoring Halts/Breakpoints'
                   itemValue: stopIgnoringHalts
                 )
@@ -2899,9 +2948,15 @@
             labelImage: (ResourceRetriever NewLauncher bugReporterIcon 'Bug Reporter')
           )
          (MenuItem
+            activeHelpKey: startSQLWorkspace
             label: 'SQL Workspace'
             itemValue: startSQLWorkspace
-            isVisible: sqlWorkspaceItemVisible
+            isVisible: false
+          )
+         (MenuItem
+            activeHelpKey: startSQLScratchpad
+            label: 'SQL Scratchpad'
+            itemValue: startSQLScratchpad
           )
          (MenuItem
             activeHelpKey: fileApplicationBuilder
@@ -3062,7 +3117,7 @@
            (Menu
               (
                (MenuItem
-                  label: 'Bring all Windows onto Screen'
+                  label: 'Bring All Windows onto Screen'
                   itemValue: bringAllWindowsOntoScreen
                 )
                (MenuItem
@@ -3081,6 +3136,12 @@
                   itemValue: viewMigrate
                 )
                (MenuItem
+                  activeHelpKey: windowsSelectAndMigrate
+                  enabled: windowMigrationFunctionsAreShown
+                  label: 'Select and Shrink...'
+                  itemValue: viewSelectAndShrink
+                )
+               (MenuItem
                   activeHelpKey: windowsFindAndMigrate
                   enabled: windowMigrationFunctionsAreShown
                   label: 'Find by Name and Migrate To...'
@@ -3115,7 +3176,7 @@
           )
          (MenuItem
             activeHelpKey: windowsViewTreeAllScreens
-            label: 'Window Tree (All on All Screens)'
+            label: 'Window Tree (All Windows on All Screens)'
             itemValue: startWindowTreeViewForAll
             isVisible: windowTreeViewAvailable
           )
@@ -3171,6 +3232,7 @@
             activeHelpKey: windowsGrapWindow
             label: 'Select and Grab Window...'
             itemValue: viewHardcopy
+            labelImage: (ResourceRetriever ToolbarIconLibrary snapshot24x24Icon 'Select and Grab Window...')
           )
          (MenuItem
             activeHelpKey: windowsGrapWidget
@@ -3214,151 +3276,712 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(#Menu
-        #(
-         #(#MenuItem
-            #activeHelpKey: #settingsLanguage
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Language...'
-            #itemValue: #languageSetting
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsKeyboardMappings
-            #label: 'Keyboard Mappings...'
-            #itemValue: #keyboardSetting
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsViewStyle
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'View Style...'
-            #itemValue: #viewStyleSetting
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsFonts
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Fonts...'
-            #itemValue: #fontSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #label: '-'
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsMessages
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Messages...'
-            #itemValue: #messageSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsCompilation
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Compilation...'
-            #itemValue: #compilerSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsObjectMemory
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Object Memory...'
-            #itemValue: #memorySettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsSourceAndDebugger
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Source and Debugger...'
-            #itemValue: #sourceAndDebuggerSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsTools
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Tools...'
-            #itemValue: #toolSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsJava
-            #label: 'Java...'
-            #itemValue: #javaSettings
-            #translateLabel: true
-            #isVisible: #javaSupportPresent
-          )
-         #(#MenuItem
-            #label: '-'
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsPrinter
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Printer...'
-            #itemValue: #printerSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsScreen
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Screen...'
-            #itemValue: #displaySettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #label: '-'
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsMisc
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Editing...'
-            #itemValue: #editSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsMisc
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Misc...'
-            #itemValue: #miscSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsCommunications
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Communications...'
-            #itemValue: #communicationsSettings
-            #translateLabel: true
-            #isVisible: false
-          )
-         #(#MenuItem
-            #label: '-'
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsSaveSettings
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Save Settings...'
-            #itemValue: #saveSettings
-            #translateLabel: true
-          )
-         #(#MenuItem
-            #activeHelpKey: #settingsLoadSettings
-            #enabled: #enableDangerousMenuItemsInRemoteLauncher
-            #label: 'Load Settings...'
-            #itemValue: #loadSettings
-            #translateLabel: true
-          )
-         )
-        nil
-        nil
+	#(
+	 #(#MenuItem
+	    #activeHelpKey: #settingsLanguage
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Language...'
+	    #itemValue: #languageSetting
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsKeyboardMappings
+	    #label: 'Keyboard Mappings...'
+	    #itemValue: #keyboardSetting
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsViewStyle
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'View Style...'
+	    #itemValue: #viewStyleSetting
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsFonts
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Fonts...'
+	    #itemValue: #fontSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #label: '-'
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsMessages
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Messages...'
+	    #itemValue: #messageSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsCompilation
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Compilation...'
+	    #itemValue: #compilerSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsObjectMemory
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Object Memory...'
+	    #itemValue: #memorySettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsSourceAndDebugger
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Source and Debugger...'
+	    #itemValue: #sourceAndDebuggerSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsTools
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Tools...'
+	    #itemValue: #toolSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsJava
+	    #label: 'Java...'
+	    #itemValue: #javaSettings
+	    #translateLabel: true
+	    #isVisible: #javaSupportPresent
+	  )
+	 #(#MenuItem
+	    #label: '-'
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsPrinter
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Printer...'
+	    #itemValue: #printerSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsScreen
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Screen...'
+	    #itemValue: #displaySettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #label: '-'
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsMisc
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Editing...'
+	    #itemValue: #editSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsMisc
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Misc...'
+	    #itemValue: #miscSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsCommunications
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Communications...'
+	    #itemValue: #communicationsSettings
+	    #translateLabel: true
+	    #isVisible: false
+	  )
+	 #(#MenuItem
+	    #label: '-'
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsSaveSettings
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Save Settings...'
+	    #itemValue: #saveSettings
+	    #translateLabel: true
+	  )
+	 #(#MenuItem
+	    #activeHelpKey: #settingsLoadSettings
+	    #enabled: #enableDangerousMenuItemsInRemoteLauncher
+	    #label: 'Load Settings...'
+	    #itemValue: #loadSettings
+	    #translateLabel: true
+	  )
+	 )
+	nil
+	nil
       )
 ! !
 
+!NewLauncher class methodsFor:'utilities'!
+
+openLoadPackageDialog
+    "open a dialog showing wellknown packages (listed in the packages directory)
+     and offer to load the selected one(s).
+     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
+     packageIcon greyPackageIcon applicationIcon greyApplicationIcon 
+     folderIcon greyFolderIcon
+     browse packageDirPath 
+     loadAction loadPackageAndUpdate updateAction filterChangedAction selectionChangeAction showPackageInfoAction
+     hierarchicalListView itemMenuGenerator
+     resources selectedPackageLabel selectedPackageHolder infoView infoTextHolder
+     monticelloRoot monticelloLabel myHierarchicalItemWithLabelAndIcon
+     alreadyLoadedString loadButton loadAndBrowseButton|
+
+    resources := self resources.
+    alreadyLoadedString := (resources string:' (already loaded)') allItalic.
+
+    folderIcon := ToolbarIconLibrary directoryOpen18x18Icon.
+    packageIcon := ToolbarIconLibrary packageOpen24x24Icon.
+    applicationIcon := ToolbarIconLibrary makeYellow22x22Icon1.
+    greyFolderIcon := folderIcon asGrayImageDepth:8.
+    greyPackageIcon := packageIcon asGrayImageDepth:8.
+    greyApplicationIcon := applicationIcon asGrayImageDepth:(applicationIcon depth min:8).
+
+    selectedPackageHolder := ValueHolder with:nil.
+    infoTextHolder := ValueHolder with:nil.
+    filterHolder := ValueHolder with:nil.
+    itemsByPath := Dictionary new.
+    packageIdByItem := IdentityDictionary new.
+
+    Class withoutUpdatingChangesDo:[
+        myHierarchicalItemWithLabelAndIcon := 
+            HierarchicalItemWithLabelAndIcon 
+                subclass:#myHierarchicalItemWithLabelAndIcon
+                instanceVariableNames:'type info'
+                classVariableNames:''
+                poolDictionaries:''
+                category:nil
+                inEnvironment:nil.
+            myHierarchicalItemWithLabelAndIcon compile:'type ^ type'.
+            myHierarchicalItemWithLabelAndIcon compile:'type:aSymbol type := aSymbol'.
+            myHierarchicalItemWithLabelAndIcon compile:'info ^ info'.
+            myHierarchicalItemWithLabelAndIcon compile:'info:anObject info := anObject'.
+    ].
+
+    "/ ensures an item for a path and returns it.
+    "/ if not already present, the item is created as a folder
+    getItemByPath := 
+        [:path |
+            |item parent|
+
+            item := path isEmpty   
+                    ifTrue:[root]
+                    ifFalse:[ itemsByPath at:path ifAbsent:nil ].
+            item isNil ifTrue:[
+                parent := getItemByPath value:(path copyButLast).
+                item := myHierarchicalItemWithLabelAndIcon new
+                        children:#();
+                        icon:greyFolderIcon; 
+                        label:path last.
+                parent add:item.
+                itemsByPath at:path put:item.
+                packageID := path first , ':' , ((path copyFrom:2) asStringWith:$/).
+                packageIdByItem at:item put:packageID.
+            ].
+            item
+        ].
+
+    list := HierarchicalList new.
+
+    masterRoot := myHierarchicalItemWithLabelAndIcon new.
+    masterRoot icon:(ToolbarIconLibrary stxHomeIcon).
+    masterRoot label:(resources string:'local ').
+    masterRoot type:#localRoot.
+
+    root := myHierarchicalItemWithLabelAndIcon new.
+    root icon:folderIcon.
+    root label:((resources string:'[Compiled Packages]') asText allItalic colorizeAllWith:Color grey).
+    root type:#compiledPackagesRoot.
+    masterRoot add:root.
+
+    monticelloRoot := myHierarchicalItemWithLabelAndIcon new.
+    monticelloLabel := ((resources string:'[Monticello Packages]') asText allItalic colorizeAllWith:Color grey).
+    monticelloRoot type:#monticelloRoot.
+
+    MCRepositoryGroup isNil ifTrue:[
+        monticelloRoot icon:greyFolderIcon.
+        monticelloRoot label:monticelloLabel, (' (Monticello Support not Loaded)' asText colorizeAllWith:Color grey).
+    ] ifFalse:[
+        monticelloRoot icon:folderIcon.
+        monticelloRoot label:monticelloLabel.
+        (MCRepositoryGroup default repositories 
+            asSortedCollection:[:a :b |a displayString < b displayString])
+                do:[:each |
+                    |reposItem|
+
+                    reposItem := myHierarchicalItemWithLabelAndIcon new.
+                    reposItem icon:folderIcon.
+                    reposItem label:each displayString , ((resources string:' [MC Repository]') asText allItalic colorizeAllWith:Color grey).
+                    reposItem type:#monticelloRepository.
+                    reposItem info:each.
+                    monticelloRoot add:reposItem.
+
+                    each allPackageNames asSortedCollection do:[:eachPackage |
+                        |packageItem|
+
+                        packageItem := myHierarchicalItemWithLabelAndIcon new.
+                        packageItem icon:packageIcon.
+                        packageItem label:eachPackage.
+                        packageItem type:#monticelloPackage.
+                        reposItem add:packageItem.
+                    ]
+                ].
+    ].
+    masterRoot add:monticelloRoot.
+
+    packageDirPath := Smalltalk getSystemFileName:'packages'.
+    packageDirPath isNil ifTrue:[
+        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|
+
+            ((fn suffix = 'mcz') 
+            or:[ (fn baseName startsWith:'.') ]) ifFalse:[    
+                base := fn withoutSuffix baseName.
+                (base startsWith:'lib') ifTrue:[
+                    nm := (base copyFrom:4).
+                    fn suffix notEmptyOrNil ifTrue:[
+                        isLibrary := true.
+                        isApplication := false.
+                    ] ifFalse:[
+                        isLibrary := false.
+                        isApplication := true.
+                    ]
+                ] ifFalse:[
+                    nm := base.
+                    isLibrary := false.
+                    isApplication := true.
+                ].
+
+                path := nm asCollectionOfSubstringsSeparatedBy:$_.
+                "/ see if already loaded
+                packageID := path first , ':' , ((path copyFrom:2) asStringWith:$/).
+                isAlreadyLoaded := 
+                    (defClass := ProjectDefinition definitionClassForPackage:packageID) notNil
+                    and:[ defClass isLoaded
+                    and:[ defClass isFullyLoaded ]].
+
+                item := getItemByPath value:path.
+
+                "/ 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:[
+                        item icon:(isApplication ifTrue:[greyApplicationIcon] ifFalse:[greyPackageIcon]). 
+                        item label:(item label , alreadyLoadedString)
+                    ] ifFalse:[
+                        item icon:(isApplication ifTrue:[applicationIcon] ifFalse:[packageIcon]). 
+                    ].
+                ].
+
+                "/ if it is not already loaded, make all parents non-grey
+                isAlreadyLoaded ifFalse:[
+                    path size-1 to:1 by:-1 do:[:n |
+                        |parentPath parentItem|
+
+                        parentPath := path copyTo:n.
+                        parentItem := getItemByPath value:parentPath.
+                        parentItem icon == greyFolderIcon ifTrue:[
+                            parentItem icon:folderIcon.
+"/                        ] ifFalse:[
+"/                            parentItem icon == greyApplicationIcon ifTrue:[
+"/                                parentItem icon:applicationIcon.
+"/                            ].
+                        ].
+                    ]
+                ].
+            ].
+        ].
+    ].
+
+    masterRoot expand.
+    root expand.
+    list root:masterRoot.
+
+    PreviousPackageDialogItems notNil ifTrue:[
+        PreviousPackageDialogItems keysAndValuesDo:[:path :prevItem |
+            |newItem|
+
+            newItem := itemsByPath at:path ifAbsent:nil.
+            newItem notNil ifTrue:[
+                prevItem isExpanded ifTrue:[ newItem expand ]
+            ].
+        ].
+    ].
+
+    updateAction :=
+        [:whatChanged :parameter |
+            |item isLoaded packageID|
+
+            "/ update the corresponding tree item
+            (whatChanged == #postPackageLoad or:[whatChanged == #postLoad]) ifTrue:[
+                parameter notNil ifTrue:[
+                    packageID := parameter asSymbol.
+                    item := getItemByPath value:(packageID splitByAny:':/').
+                    item notNil ifTrue:[
+                        isLoaded := (ProjectDefinition definitionClassForPackage:packageID) notNil.
+                        isLoaded ifTrue:[
+                            (item icon == applicationIcon or:[item icon == packageIcon]) ifTrue:[
+                                item icon:((item icon == applicationIcon) ifTrue:[greyApplicationIcon] ifFalse:[greyPackageIcon]). 
+                                item label:(item label , alreadyLoadedString)
+                            ].
+                        ].
+                    ].
+                ].
+            ].
+        ].
+
+    filterChangedAction :=
+        [
+            |matchingItems filterPattern isMatch firstMatchingItem|
+
+            filterPattern := filterHolder value.
+            filterPattern isEmptyOrNil ifTrue:[
+                "/ nothing
+                root recursiveDo:[:item |
+                    item label:(item label copy asText allNonBold withoutAnyColorEmphasis).
+                ].
+            ] ifFalse:[
+                filterPattern := filterPattern asLowercase.
+                isMatch := filterPattern includesMatchCharacters.
+
+                matchingItems := OrderedCollection new.
+                masterRoot recursiveDo:[:item |
+                    |itemLabel itemPackage|
+
+                    itemLabel := item label.
+                    itemPackage := packageIdByItem at:item ifAbsent:''.
+
+                    ((isMatch and:[itemLabel matches:filterPattern caseSensitive:false])
+                        or:[ (isMatch not and:[ itemLabel asLowercase includesString:filterPattern ])
+                        or:[ (isMatch and:[itemPackage matches:filterPattern caseSensitive:false])
+                        or:[ isMatch not and:[ itemPackage asLowercase includesString:filterPattern ]]]])
+                    ifTrue:[ 
+                        matchingItems add:item.
+                    ]
+                ].
+                matchingItems isEmpty ifTrue:[
+                    "/ nothing found
+                    root recursiveDo:[:item |
+                        item label:(item label copy asText allNonBold withoutAnyColorEmphasis).
+                    ].
+                    Screen current beep.
+                ] ifFalse:[
+                    "/ collapse all and fully expand all matching items
+                    masterRoot recursiveDo:[:item |
+                        item collapse.
+                        item label:(item label copy asText allNonBold colorizeAllWith:Color grey).
+                    ].
+                    firstMatchingItem := nil.
+                    matchingItems do:[:item |
+                        item label:(item label copy asText allBold withoutAnyColorEmphasis).
+                        item makeVisible.
+                        firstMatchingItem := firstMatchingItem ? item.
+                    ].
+                    v makeLineVisible:firstMatchingItem listIndex.
+                ].
+            ].
+        ].
+
+    loadPackageAndUpdate :=
+        [:package :doBrowse :eachSelectedItem|
+            |defClass|
+
+            dialog withWaitCursorDo:[
+                Smalltalk onChangeSend:#value:value: to:updateAction.
+                [
+                    Smalltalk loadPackage:package
+                ] ensure:[
+                    Smalltalk retractInterestsFor:updateAction.
+                ]
+            ].
+            ((defClass := package asPackageId projectDefinitionClass) notNil
+                and:[ defClass isLoaded
+                and:[ defClass isFullyLoaded ]])
+            ifFalse:[
+                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.']))
+            ] ifTrue:[
+                doBrowse ifTrue:[
+                    Tools::NewSystemBrowser openOnPackage:package
+                ].
+                eachSelectedItem icon == packageIcon ifTrue:[
+                    eachSelectedItem icon:greyPackageIcon.
+                    eachSelectedItem label:(eachSelectedItem label , alreadyLoadedString).
+                ] ifFalse:[
+                    eachSelectedItem icon == applicationIcon ifTrue:[
+                        eachSelectedItem icon:greyApplicationIcon.
+                        eachSelectedItem label:(eachSelectedItem label , alreadyLoadedString).
+                    ].
+                ].
+            ].
+        ].
+
+    loadAction :=
+        [:doBrowse |
+            (v scrolledView selectionValue) do:[:eachSelectedItem |
+                |package repos|
+
+                eachSelectedItem type == #monticelloRepository ifTrue:[
+                    repos := eachSelectedItem info.                    
+                    MCRepositoryBrowser openOnRepository:repos forPackage:nil.
+                ] ifFalse:[
+                    eachSelectedItem type == #monticelloPackage ifTrue:[
+                        repos := eachSelectedItem parent info.                    
+                        MCRepositoryBrowser openOnRepository:repos forPackage:eachSelectedItem label.
+                    ] ifFalse:[
+                        package := packageIdByItem at:eachSelectedItem ifAbsent:nil.
+                        package notNil ifTrue:[
+                            loadPackageAndUpdate value:package value:doBrowse value:eachSelectedItem.
+                        ].
+                    ].
+                ].
+            ].
+        ].
+
+    showPackageInfoAction :=
+        [:package |
+            |projectDef comment info dir className fileName docChange|
+
+            info := resources string:'Sorry, could not find any package documentation'.
+            projectDef := package asPackageId projectDefinitionClass.
+            projectDef notNil ifTrue:[
+                comment := projectDef commentOrDocumentationString.
+                comment isNil ifTrue:[
+                    info := info, 
+                            (resources stringWithCRs:'\\The project''s definition class (%1)\has no documentation method.' with:projectDef class name).
+                ].
+            ] ifFalse:[
+                "/ try to find the package's source
+                dir := Smalltalk packageDirectoryForPackageId:package.
+                dir notNil ifTrue:[
+                    "/ is there a project definition class's source?
+                    className := ProjectDefinition projectDefinitionClassNameForDefinitionOf:package.
+                    fileName := dir / ((Smalltalk fileNameForClass:className),'.st').
+                    fileName exists ifTrue:[
+                        fileName readingFileDo:[:s |
+                            ChangeSet 
+                                fromStream:s 
+                                while:[:change |
+                                    (change isMethodCodeChange
+                                    and:[ change selector == #documentation
+                                    and:[ change isForMeta ]]) ifTrue:[
+                                        docChange := change.
+                                        false "/ stop reading
+                                    ] ifFalse:[
+                                        true
+                                    ].
+                                ].
+                        ].
+                        docChange notNil ifTrue:[
+                            comment := Parser methodCommentFromSource:docChange source.
+                        ] ifFalse:[
+                            info := info ,
+                                    (resources stringWithCRs:'\\The project''s definition class (%1) is present,\but has no documentation method.\\In file: %2'
+                                            with:className
+                                            with:fileName pathName).
+                        ].
+                    ] ifFalse:[
+                        info := info , 
+                                (resources stringWithCRs:'\\No definition class was found in the project.\In folder: %1'
+                                        with:dir pathName).
+                    ].
+                ].
+            ].
+            comment notEmptyOrNil ifTrue:[
+                comment := comment asStringCollection.
+                [ comment size > 0 and:[comment first isEmpty]] whileTrue:[ comment removeFirst ].
+                (comment conform:[:line | line isEmpty or:[line startsWith:'    ']]) ifTrue:[
+                    comment := comment collect:[:line | 
+                                (line startsWith:'    ') ifTrue:[
+                                    line copyFrom:5
+                                ] ifFalse:[
+                                    line
+                                ]].
+                ].
+                info := comment asString.
+            ] ifFalse:[ 
+                info := info colorizeAllWith:Color red.
+            ].
+            infoTextHolder value:info.
+        ].
+
+    selectionChangeAction :=
+        [:selectionIndices |
+            |selectedItem p itemType info|
+
+            loadButton enabled:(selectionIndices notEmpty).
+            loadAndBrowseButton enabled:(selectionIndices notEmpty).
+
+            selectionIndices size == 1 ifTrue:[
+                selectedItem := hierarchicalListView selectionValue first.
+                itemType := selectedItem type.
+
+                itemType == #monticelloRepository ifTrue:[
+                    info := 'Monticello repository. Double click to browse its contents.'.
+                ] ifFalse:[
+                    itemType == #monticelloPackage ifTrue:[
+                        info := 'Monticello package. Double click to browse its contents.'.
+                    ] ifFalse:[
+                        p := packageIdByItem at:selectedItem ifAbsent:nil.
+                        p notNil ifTrue:[
+                            selectedPackageHolder value:(resources string:'Selected Package: "%1"' with:p allBold).
+                            showPackageInfoAction value:p.
+                        ] ifFalse:[
+                            selectedItem == masterRoot ifTrue:[
+                                info := 'Packages found on the local machine.'
+                            ] ifFalse:[
+                                selectedItem == monticelloRoot ifTrue:[
+                                    info := 'Monticello packages found on the local machine.'
+                                ] ifFalse:[
+                                    selectedItem == root ifTrue:[
+                                        info := 'Local class library packages as found in the "packages" folder.'
+                                    ].
+                                ].
+                            ].
+                        ].
+                    ].
+                    info notNil ifTrue:[ infoTextHolder value:(resources string:info)].
+                ].
+            ] ifFalse:[
+                selectedPackageHolder value:(resources string:'Selected %1 packages.' with:selectionIndices size).
+            ].
+         ].
+
+    itemMenuGenerator :=
+        [
+            |item m itemType package defClass|
+
+            hierarchicalListView selectionValue notEmptyOrNil ifTrue:[
+                item := hierarchicalListView selectionValue first.
+
+                itemType := item type.
+                ( 
+                    #( #localRoot #monticelloRoot #compiledPackagesRoot ) includes:itemType
+                ) ifFalse:[
+
+                    package := packageIdByItem at:item ifAbsent:nil.
+                    package notNil ifTrue:[
+                        defClass := package asPackageId projectDefinitionClass.
+                    ].
+
+                    m := Menu new.
+                    m addItem:(MenuItem 
+                                label: (resources string:'Load')
+                                itemValue: 
+                                    [
+                                        package notNil ifTrue:[
+                                            loadPackageAndUpdate value:package value:false value:item.
+                                        ].
+                                    ]
+                                enabled:package notNil).
+                    m addSeparator. 
+                    m addItem:(MenuItem 
+                                label: (resources string:'Open File Browser on Project''s Folder')
+                                itemValue: 
+                                    [
+                                        |dir|
+
+                                        package notNil ifTrue:[
+                                            dir := Smalltalk packageDirectoryForPackageId:package.
+                                            dir notNil ifTrue:[
+                                                UserPreferences current fileBrowserClass openOn:dir.
+                                            ] ifFalse:[
+                                                Dialog warn:(resources string:'Directory not present/readable: "%1"' with:dir)
+                                            ]
+                                        ].
+                                    ]
+                                enabled:package notNil).
+                    m addItem:(MenuItem 
+                                label: (resources string:'Browse Project Definition')
+                                itemValue: 
+                                    [
+                                        defClass notNil ifTrue:[
+                                            UserPreferences current systemBrowserClass openInClass:defClass class
+                                        ].
+                                    ]
+                                enabled:defClass notNil).
+
+                    item type == #monticelloPackage ifTrue:[
+                        m addItem:(MenuItem 
+                                    label: (resources string:'Browse Monticello Package')
+                                    itemValue: [
+                                        |repos|
+
+                                        repos := item parent info.                    
+                                        MCRepositoryBrowser openOnRepository:repos forPackage:item label.
+                                    ]).
+                    ].
+                ].
+            ].
+            m
+        ].
+
+    dialog := Dialog new.
+    dialog label:(resources string:'Load Package').
+    dialog addButton:(loadButton := Button label:(resources string:'Load') action:[loadAction value:false]) beReturnButton. 
+    dialog addButton:(loadAndBrowseButton := Button label:(resources string:'Load & Browse') action:[loadAction value:true]).
+    dialog addAbortButtonLabelled:(resources string:'Close').
+
+    loadButton enabled:false.
+    loadAndBrowseButton enabled:false.
+
+    filter := EditField new.
+    filter emptyFieldReplacementText:(resources string:'Filter Pattern').
+    filter immediateAccept:true.
+    filter model: filterHolder.
+    filterHolder onChangeEvaluate:filterChangedAction.
+    dialog
+        addLabelledField:filter
+        label:(resources string:'Quick Find:') 
+        adjust:#left tabable:true from:0.0 to:1.0 separateAtX:150.
+
+    "/ dialog addComponent:filter.
+
+    v := HVScrollableView for:HierarchicalListView.
+    hierarchicalListView := v scrolledView.
+    hierarchicalListView multipleSelectOk:true.
+    hierarchicalListView preferredExtent:(400 @ 300).
+    hierarchicalListView doubleClickAction:[:index | loadAction value:false. dialog okPressed].
+    hierarchicalListView list:list.
+    hierarchicalListView action:selectionChangeAction.
+    hierarchicalListView menuHolder:itemMenuGenerator.
+
+    dialog addComponent:v.
+    selectedPackageLabel := dialog addTextLabelOn:(selectedPackageHolder) adjust:#left.
+    infoView := dialog addTextBoxOn:infoTextHolder class:TextView withNumberOfLines:5 hScrollable:true vScrollable:true.
+
+    dialog stickAtBottomWithVariableHeight:v.
+    dialog stickAtBottomWithFixHeight:selectedPackageLabel.
+    dialog stickAtBottomWithFixHeight:infoView.
+
+    PreviousPackageDialogExtent notNil ifTrue:[
+        dialog extent:PreviousPackageDialogExtent
+    ].
+
+    browse := false.
+    dialog open.
+
+    "/ remember the expand/collapse status
+    PreviousPackageDialogItems := itemsByPath.
+    PreviousPackageDialogExtent := dialog extent.
+! !
+
 !NewLauncher methodsFor:'accessing'!
 
 errorListCanvas
     errorListCanvas isNil ifTrue:[
-        errorListCanvas := DataSetView new.
+	errorListCanvas := DataSetView new.
     ].
     ^ errorListCanvas
 !
@@ -3366,57 +3989,57 @@
 examples
 "
     reopening a standard launcher (without any added tools)
-                                                                        [exBegin]
+									[exBegin]
      NewLauncher removeAllUserAddedTools.
      NewLauncher open.
-                                                                        [exEnd]
+									[exEnd]
 
 
 
     adding your own menu items (for user-applications)
 
     an additional item in the tools menu:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        nameKey: #foo;
-                        activeHelpKey: #Foo)
-        in:#menu
-        position:#(before workspace)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			nameKey: #foo;
+			activeHelpKey: #Foo)
+	in:#menu
+	position:#(before workspace)
+	space:true
+									[exEnd]
 
     an additional item in the tools menu:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        activeHelpKey: #Foo)
-        in:#menu
-        position:#(after guiPainter)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			activeHelpKey: #Foo)
+	in:#menu
+	position:#(after guiPainter)
+	space:true
+									[exEnd]
 
     an additional item in one of the tools sub menus:
-                                                                        [exBegin]
+									[exBegin]
      Transcript topView application
-        addMenuItem:(MenuItem new 
-                        label: 'Foo';
-                        value: [Transcript showCR:'foo invoked'];
-                        isButton: false;
-                        labelImage: nil;
-                        activeHelpKey: #Foo)
-        in:#toolbar
-        position:#(after Workspace)
-        space:true
-                                                                        [exEnd]
+	addMenuItem:(MenuItem new
+			label: 'Foo';
+			value: [Transcript showCR:'foo invoked'];
+			isButton: false;
+			labelImage: nil;
+			activeHelpKey: #Foo)
+	in:#toolbar
+	position:#(after Workspace)
+	space:true
+									[exEnd]
 "
 !
 
@@ -3452,11 +4075,11 @@
     "provide access to my transcript view"
 
     transcript isNil ifTrue:[
-        (self componentAt: #transcriptView) notNil ifTrue:[
-            transcript := (self componentAt: #transcriptView) subViews first.
-        ] ifFalse:[
-            transcript := Workspace new.
-        ]
+	(self componentAt: #transcriptView) notNil ifTrue:[
+	    transcript := (self componentAt: #transcriptView) subViews first.
+	] ifFalse:[
+	    transcript := Workspace new.
+	]
     ].
     ^ transcript
 ! !
@@ -3467,7 +4090,7 @@
     "return a 'valueHolder', which returns true if the terminal application
      is available. For now, this is true if we run under unix"
 
-    ^ OperatingSystem isUNIXlike 
+    ^ OperatingSystem isUNIXlike
       or:[OperatingSystem isMSWINDOWSlike]
 
     "Created: / 27.7.1998 / 12:47:54 / cg"
@@ -3489,7 +4112,13 @@
 !
 
 debuggerHasIgnoredHalts
-    ^ DebugView notNil and:[ DebugView hasIgnoredHalts ]
+    ^ DebugView notNil and:[ DebugView hasIgnoredHalts or:[ Smalltalk ignoreHalt ]]
+
+    "Modified: / 10-07-2010 / 18:47:36 / cg"
+!
+
+debuggerHasIgnoredHaltsOrSmalltalkIsIgnoringHalts
+    ^ DebugView notNil and:[ DebugView hasIgnoredHalts or:[ Smalltalk ignoreHalt ]]
 
     "Modified: / 10-07-2010 / 18:47:36 / cg"
 !
@@ -3509,7 +4138,8 @@
     |holder|
 
     (holder := builder bindingAt:#enableDangerousMenuItemsInRemoteLauncher) isNil ifTrue:[
-        builder aspectAt:#enableDangerousMenuItemsInRemoteLauncher put:(holder :=  true asValue).
+        builder aspectAt:#enableDangerousMenuItemsInRemoteLauncher 
+                put:(holder := ValueHolder with:true).
     ].
     ^ holder
 !
@@ -3518,9 +4148,9 @@
     |holder|
 
     (holder := builder bindingAt:#fileBrowserItemVisible) isNil ifTrue:[
-        builder 
-            aspectAt:#fileBrowserItemVisible 
-            put:(holder := UserPreferences current useNewFileBrowser not asValue)
+        builder
+            aspectAt:#fileBrowserItemVisible
+            put:(holder := ValueHolder with:UserPreferences current useNewFileBrowser not)
     ].
     ^ holder
 !
@@ -3562,7 +4192,7 @@
     |holder|
 
     (holder := builder bindingAt:#noteBookCanvasHolder) isNil ifTrue:[
-        builder aspectAt:#noteBookCanvasHolder put:(holder := nil asValue).
+        builder aspectAt:#noteBookCanvasHolder put:(holder := ValueHolder with:nil).
         holder value:self transcriptView.
     ].
     ^ holder
@@ -3580,7 +4210,7 @@
     |holder|
 
     (holder := builder bindingAt:#selectedTabHolder) isNil ifTrue:[
-        builder aspectAt:#selectedTabHolder put:(holder := 1 asValue).
+        builder aspectAt:#selectedTabHolder put:(holder := ValueHolder with:1).
         holder addDependent:self.
     ].
     ^ holder
@@ -3612,9 +4242,9 @@
     |holder|
 
     (holder := builder bindingAt:#systemBrowserItemVisible) isNil ifTrue:[
-        builder 
-            aspectAt:#systemBrowserItemVisible 
-            put:(holder := UserPreferences current useNewSystemBrowser not asValue).
+        builder
+            aspectAt:#systemBrowserItemVisible
+            put:(holder := ValueHolder with:UserPreferences current useNewSystemBrowser not).
     ].
     ^ holder
 !
@@ -3653,11 +4283,10 @@
 updateInfo
     "update the infoLabel (at the bottom) from the current project"
 
-    |project projectName projectDir packageName packageNameOrNil defNameSpace projectInfo
+    |project projectDir packageName packageNameOrNil defNameSpace projectInfo
      cvsRepository storeDB image bindings makeInfoString svnWorkDirBaseName|
 
     (Project notNil and:[(project := Project current) notNil]) ifTrue:[
-        projectName := project name.
         projectDir := project directory.
         packageName := packageNameOrNil := project package.
         defNameSpace := project defaultNameSpace.
@@ -3765,7 +4394,7 @@
 
     text := super flyByHelpTextForKey:aKey.
     aKey == #fileSaveImage ifTrue:[
-        ^ text bindWith:(ObjectMemory nameForSnapshot)
+	^ text bindWith:(ObjectMemory nameForSnapshot)
     ].
     ^ text
 ! !
@@ -3813,7 +4442,7 @@
         "/ look if not already in the toolBar
         (self findItem:newItem inMenuPanel:menuPanel) ~~ 0 ifTrue:[
             "item already exists - do nothing"
-            Transcript show:'NewLauncher: menu item already present:'; showCR:newItem nameKey.
+            'NewLauncher: menu item already present:' infoPrint. newItem nameKey infoPrintCR.
             ^ self.
         ].
 
@@ -4055,17 +4684,17 @@
        where == #menu.<name> - menu item is added at the end of the sub menu named 'name',
 
     position may be one of:
-        #(before <someItemPath>)
-        #(after  <someItemPath>)
-        #( #first )   or #first
-        #( #last )    or #last   or nil
+	#(before <someItemPath>)
+	#(after  <someItemPath>)
+	#( #first )   or #first
+	#( #last )    or #last   or nil
 
      If space is true, some empty space is inserted.
      This can be invoked by a classes #initialize method, to add an item
      for itself to the toolbar or menu."
 
     ^ self
-        addMenuItem:newItem from:self in:where position:positionSpecOrNilArg space:space
+	addMenuItem:newItem from:self in:where position:positionSpecOrNilArg space:space
 !
 
 findItem:menuItem inMenuPanel:menuPanel
@@ -4077,13 +4706,13 @@
 
     idx := 0.
     menuItem nameKey notNil ifTrue:[
-        idx := menuPanel findFirst: [:i| i nameKey = menuItem nameKey].
+	idx := menuPanel findFirst: [:i| i nameKey = menuItem nameKey].
     ].
     idx == 0 ifTrue:[
-        idx := menuPanel findFirst: [:i| (menuItem activeHelpKey notNil 
-                                          and:[i activeHelpKey = menuItem activeHelpKey])
-                                         or:[menuItem label notNil 
-                                             and:[i label = menuItem label]]]
+	idx := menuPanel findFirst: [:i| (menuItem activeHelpKey notNil
+					  and:[i activeHelpKey = menuItem activeHelpKey])
+					 or:[menuItem label notNil
+					     and:[i label = menuItem label]]]
     ].
 
     ^ idx
@@ -4091,7 +4720,7 @@
 
 removeUserTool:toolNameOrMenuItem
     "removes a menu item labeled toolName
-     This can be invoked by a classes #deinitialize method, 
+     This can be invoked by a classes #deinitialize method,
      to remove its item from the toolbar or menu.
     "
     self class removeUserTool:toolNameOrMenuItem
@@ -4099,7 +4728,7 @@
 
 removeUserTool:toolNameOrMenuItem from:addedToolsCollection
     "removes a menu item labeled toolName
-     This can be invoked by a classes #deinitialize method, 
+     This can be invoked by a classes #deinitialize method,
      to remove its item from the toolbar or menu.
     "
 
@@ -4107,11 +4736,11 @@
 
     "
      Transcript topView application
-        removeUserTool:'Bar' 
+	removeUserTool:'Bar'
     "
     "
      Transcript topView application
-        removeUserTool:'Foo' 
+	removeUserTool:'Foo'
     "
 
 !
@@ -4150,61 +4779,50 @@
         label := assoc key.
 
         submenu := Menu new.
-        submenu addItem:(MenuItem new
-                            label: 'Raise Deiconified';
-                            itemValue: [view raiseDeiconified; setForegroundWindow];
-                            translateLabel: true).
-        submenu addItem:(item := MenuItem new
-                            label: 'Iconify';
-                            itemValue: [view collapse];
-                            translateLabel: true).
+        submenu addItem:(MenuItem 
+                            label: 'Raise Deiconified'
+                            itemValue: [view raiseDeiconified; setForegroundWindow]).
+        submenu addItem:(item := MenuItem 
+                            label: 'Iconify'
+                            itemValue: [view collapse]).
         view topView isCollapsed ifTrue:[  
             item disable
         ].
-        submenu addItem:(MenuItem new
-                            label: 'Migrate...';
-                            itemValue: [self migrateWindow:view];
-                            enabled:(view windowGroup isModal not);
-                            translateLabel: true).
-        submenu addItem:(MenuItem new
-                            label: 'Bring onto Screen...';
-                            itemValue: [self bringWindowOntoScreen:view];
-                            translateLabel: true).
+        submenu addItem:(MenuItem 
+                            label: 'Migrate...'
+                            itemValue: [self migrateWindow:view]
+                            enabled:(view windowGroup isModal not) ).
+        submenu addItem:(MenuItem 
+                            label: 'Bring onto Screen...'
+                            itemValue: [self bringWindowOntoScreen:view] ).
 
         submenu addSeparator.
-        submenu addItem:(MenuItem new
-                            label: 'Hardcopy';
-                            itemValue: [self hardcopyOfView:view];
-                            translateLabel: true).
-        submenu addItem:(MenuItem new
-                            label: 'Inspect View';
-                            itemValue: [view inspect];
-                            translateLabel: true).
-        submenu addItem:(MenuItem new
-                            label: 'Inspect Application';
-                            itemValue: [view application inspect];
-                            enabled:(view application notNil);
-                            translateLabel: true).
+        submenu addItem:(MenuItem 
+                            label: 'Hardcopy'
+                            itemValue: [self hardcopyOfView:view] ).
+        submenu addItem:(MenuItem 
+                            label: 'Inspect View'
+                            itemValue: [view inspect] ).
+        submenu addItem:(MenuItem 
+                            label: 'Inspect Application'
+                            itemValue: [view application inspect]
+                            enabled:(view application notNil) ).
         submenu addSeparator.
-        submenu addItem:(MenuItem new
-                            label: 'Browse View Class';
-                            itemValue: [view class browse];
-                            translateLabel: true).
-        submenu addItem:(MenuItem new
-                            label: 'Browse Application Class';
-                            itemValue: [view application class browse];
-                            enabled:(view application notNil);
-                            translateLabel: true).
-        submenu addItem:(MenuItem new
-                            label: 'Debug Application';
-                            itemValue: [Debugger openOn:view windowGroup process];
-                            translateLabel: true).
+        submenu addItem:(MenuItem 
+                            label: 'Browse View Class'
+                            itemValue: [view class browse] ).
+        submenu addItem:(MenuItem 
+                            label: 'Browse Application Class'
+                            itemValue: [view application class browse]
+                            enabled:(view application notNil) ).
+        submenu addItem:(MenuItem 
+                            label: 'Debug Application'
+                            itemValue: [Debugger openOn:view windowGroup process] ).
 
         submenu addSeparator.
-        submenu addItem:(MenuItem new
-                            label: 'Close';
-                            itemValue: [view destroy];
-                            translateLabel: true).
+        submenu addItem:(MenuItem 
+                            label: 'Close'
+                            itemValue: [view destroy] ).
 
         likeThis :=
             allViewsAndLabels
@@ -4227,29 +4845,30 @@
         ].
 
         submenu addItem:(MenuItem new
-                            label: (resources string:'Close All like This%1' with:info);
+                            label: (resources string:'Close all like This%1' with:info);
                             itemValue: [likeThis do:[:eachView | eachView destroy]];
-                            translateLabel: true;
+                            translateLabel: false;
                             enabled:(likeThis size > 1)).
 
         submenu addItem:(MenuItem new
-                            label: (resources string:'Iconify All like This%1' with:info);
+                            label: (resources string:'Iconify all like This%1' with:info);
                             itemValue: [likeThis do:[:eachView | eachView collapse]];
-                            translateLabel: true;
+                            translateLabel: false;
                             enabled:(likeThis size > 1)).
 
         submenu addItem:(MenuItem new
-                            label: (resources string:'Deiconify All like This%1' with:info);
+                            label: (resources string:'Deiconify all like This%1' with:info);
                             itemValue: [likeThis do:[:eachView | eachView raiseDeiconified]];
-                            translateLabel: true;
+                            translateLabel: false;
                             enabled:(likeThis size > 1)).
 
 
         menu addItem:(MenuItem new
-                            label: label;
-                            submenu: submenu;
-                            itemValue: [view raiseDeiconified; setForegroundWindow];
-                            translateLabel: false).
+                            label: label
+                            itemValue: [view raiseDeiconified; setForegroundWindow]
+                            translateLabel: false;
+                            submenu: submenu
+                            ).
     ].
 
     menu findGuiResourcesIn:self.
@@ -4293,9 +4912,9 @@
         menu addItemGroup:
             (changeHistory collect:[:change|
                 MenuItem new
+                    label: (change className , ' ' , (change selector ? '???'))
+                    itemValue: [UserPreferences systemBrowserClass openInClass:change changeClass selector:change selector]
                     translateLabel: false;
-                    label: (change className , ' ' , (change selector ? '???'));
-                    value: [UserPreferences systemBrowserClass openInClass:change changeClass selector:change selector];
                     activeHelpKey: #classBrowserOnChangedMethod
             ]).
     ].
@@ -4303,9 +4922,14 @@
     menu addItemGroup:
         {
             MenuItem new
+                label: (resources string:'Open Change Set Browser on all Changes')
+                itemValue:#startChangeSetBrowser
                 translateLabel: false;
-                label: 'Open Changes Browser on File...';
-                value: 
+                activeHelpKey: #startChangeSetBrowser
+            .
+            MenuItem new
+                label: (resources string:'Open Change Browser on File...')
+                itemValue: 
                     [ 
                         |file|
 
@@ -4313,7 +4937,8 @@
                         file notEmptyOrNil ifTrue:[
                             UserPreferences current changesBrowserClass openOn:file
                         ]
-                    ];
+                    ]
+                translateLabel: false;
                 activeHelpKey: #changeBrowserOnFile
         }.
 
@@ -4339,28 +4964,48 @@
     whichBrowserClass checkClassHistory.
 
     classHistory := whichBrowserClass classHistory.
-    classHistory isEmpty ifTrue:[
-        menu addItem:(MenuItem new
+    classHistory isEmptyOrNil ifTrue:[
+        menu addItemGroup:{
+                (MenuItem new
                         label:'>> no visited history yet <<';
                         enabled:false).
-        ^ menu
+             }
+    ] ifFalse:[
+        menu addItemGroup:
+            (classHistory collect:[:histEntry|
+                MenuItem new
+                    label: (histEntry className)
+                    itemValue: [whichBrowserClass openInClass:histEntry theClass selector:histEntry selector]
+                    translateLabel: false;
+                    activeHelpKey: #classesSystemBrowserOnClass
+            ]
+        ).
     ].
 
-    menu addItemGroup:
-        (classHistory collect:[:histEntry|
-            MenuItem new
-                translateLabel: false;
-                label: (histEntry className);
-                itemValue: [whichBrowserClass openInClass:histEntry theClass selector:histEntry selector];
-                activeHelpKey: #classesSystemBrowserOnClass
-        ]
-    ).
+    menu addItem: (MenuItem new
+                        label: 'Find Class...'
+                        itemValue: [self findClassAndBrowse];
+                        activeHelpKey: #findClassAndBrowse).
+    menu addItem: (MenuItem new
+                        label: 'Implementors Of...'
+                        itemValue: [self browseImplementors];
+                        activeHelpKey: #browseImplementors).
     menu addItem: (MenuItem new
-                        label: 'Clear History';
-                        itemValue: [classHistory removeAll];
-                        translateLabel: true;
-                        enabled:(classHistory notEmpty);
-                        activeHelpKey: #historyEmptyMenu).
+                        label: 'Senders Of...'
+                        itemValue: [self browseSenders];
+                        activeHelpKey: #browseSenders).
+    menu addItem: (MenuItem new
+                        label: 'References to Class...'
+                        itemValue: [self browseReferencesToClass];
+                        activeHelpKey: #browseReferencesToClass).
+    classHistory notEmptyOrNil ifTrue:[
+        menu addSeparator.
+        menu addItem: (MenuItem new
+                            label: 'Clear History'
+                            itemValue: [classHistory removeAll]
+                            enabled:(classHistory notEmpty);
+                            activeHelpKey: #historyEmptyMenu).
+    ].
 
     menu findGuiResourcesIn:self.
     ^ menu
@@ -4394,16 +5039,15 @@
             |dirNameString|
             dirNameString := item path.
             MenuItem new
+                label: dirNameString
+                itemValue: [UserPreferences fileBrowserClass openOn:dirNameString]
                 translateLabel: false;
-                label: dirNameString;
-                itemValue: [UserPreferences fileBrowserClass openOn:dirNameString];
                 activeHelpKey: #FileBrowserOnDirectory
         ]
     ).
     menu addItem: (MenuItem new
-                        label: 'Clear History';
-                        itemValue: [dirHistory removeAll];
-                        translateLabel: true;
+                        label: 'Clear History'
+                        itemValue: [dirHistory removeAll]
                         enabled:(dirHistory notEmpty);
                         activeHelpKey: #historyEmptyMenu).
 
@@ -4420,7 +5064,7 @@
     appHistory isEmpty ifTrue:[^nil].
 
     menu := Menu new receiver: self.
-    menu addItemGroup: 
+    menu addItemGroup:
         (appHistory collect:[:appClassName|
             |item appClass label|
 
@@ -4430,9 +5074,9 @@
             ] ifFalse:[
                 label := appClass nameWithoutPrefix
             ].
-            item := MenuItem new 
-                label: label; 
-                itemValue: #openApplication: argument: appClassName. 
+            item := MenuItem 
+                label: label
+                itemValue: #openApplication: argument: appClassName.
 
             appClass isNil ifTrue:[
                 item enabled:false.
@@ -4441,10 +5085,9 @@
             item
         ]
     ).
-    menu addItem: (MenuItem new 
-                        label: 'Clear History'; 
-                        itemValue: [ ApplicationModel forgetRecentlyOpenedApplications ]; 
-                        translateLabel: true;
+    menu addItem: (MenuItem new
+                        label: 'Clear History'
+                        itemValue: [ ApplicationModel forgetRecentlyOpenedApplications ]
                         enabled:(appHistory notEmpty);
                         activeHelpKey: #historyEmptyMenu).
 
@@ -4460,20 +5103,20 @@
     <resource: #programMenu >
 
     ^ [
-        |m anyItem hosts|
-
-        m := Menu new.
-
-        hosts := SmallTeam hostsWithChanges asSortedCollection.
-        hosts do:[:eachHost |
-            |item|
-
-            item := MenuItem label:eachHost.
-            item itemValue:#'startBrowserOnChangesOnSmallTeamHost:' argument:eachHost.
-            m addItem:item.
-            anyItem := true.
-        ].
-        hosts isEmptyOrNil ifTrue:[ nil ] ifFalse:[ m ]
+	|m anyItem hosts|
+
+	m := Menu new.
+
+	hosts := SmallTeam hostsWithChanges asSortedCollection.
+	hosts do:[:eachHost |
+	    |item|
+
+	    item := MenuItem label:eachHost.
+	    item itemValue:#'startBrowserOnChangesOnSmallTeamHost:' argument:eachHost.
+	    m addItem:item.
+	    anyItem := true.
+	].
+	hosts isEmptyOrNil ifTrue:[ nil ] ifFalse:[ m ]
     ].
 
     "Created: / 12-11-2006 / 16:06:06 / cg"
@@ -4536,7 +5179,7 @@
 
     super allButOpenInterface:anInterface.
 
-    self setupTranscript; updateInfo.
+    self setupTranscript.
     Project notNil ifTrue: [Project addDependent:self].
     ObjectMemory addDependent:self.
     self class openLaunchers add: self.
@@ -4560,10 +5203,10 @@
 "/
 
     hMin := (aBuilder window margin * 2)
-            + aBuilder menuBar preferredHeight
-            + (aBuilder componentAt:#infoBarSubSpec) height
-            + (aBuilder componentAt:#menuToolbarView) preferredHeight
-            -3 "+ 8".   "/ I guess this is menuToolbar level abs + textCollector level abs...
+	    + aBuilder menuBar preferredHeight
+	    + (aBuilder componentAt:#infoBarSubSpec) height
+	    + (aBuilder componentAt:#menuToolbarView) preferredHeight
+	    -3 "+ 8".   "/ I guess this is menuToolbar level abs + textCollector level abs...
 
     win minExtent:( win minExtent x @ hMin ).
 
@@ -4573,18 +5216,20 @@
 postOpenWith:aBuilder
     |toolInfo addMenuForToolInfo|
 
+    self updateInfo.
+
     "/ increase my priority"
 "/    self windowGroup process priority:(Processor userSchedulingPriority + 1).
     Processor activeProcess priority:(Processor userSchedulingPriority + 1).
 
-    addMenuForToolInfo := 
+    addMenuForToolInfo :=
         [:eachToolInfo|
             |menuItem originalLabel|
 
             menuItem := eachToolInfo item.
             originalLabel := eachToolInfo originalLabel.
             originalLabel notNil ifTrue:[ menuItem label:originalLabel ].
-            self 
+            self
                 addMenuItem:menuItem
                 from:(eachToolInfo resourceProvider)
                 in:eachToolInfo where
@@ -4635,24 +5280,24 @@
     |answer|
 
     isMainLauncher ifFalse:[
-        "/ remote launchers may not finish ST/X
-
-        answer := Dialog 
-                    confirmWithCancel:(resources string:'Really close %1 (slave)?' with:self class name)
-                    labels:(resources array:#('Cancel' 'Close'))
-                    values:#(nil true)
-                    default:1.
-        answer isNil ifTrue:[
-            "/ cancel
-            ^ false
-        ].
-        ^ true
+	"/ remote launchers may not finish ST/X
+
+	answer := Dialog
+		    confirmWithCancel:(resources string:'Really close %1 (slave)?' with:self class name)
+		    labels:(resources array:#('Cancel' 'Close'))
+		    values:#(nil true)
+		    default:1.
+	answer isNil ifTrue:[
+	    "/ cancel
+	    ^ false
+	].
+	^ true
     ].
 
     ^ super requestForWindowClose
 !
 
-setupTranscript 
+setupTranscript
     "create the transcript view"
 
     |launcher oldLauncherClass|
@@ -4661,37 +5306,37 @@
     "/ if so, do not close the real launcher.
 
     (Transcript notNil and:[Transcript ~~ Stderr]) ifTrue:[
-        isMainLauncher ifTrue:[
-            launcher := Transcript topView application
-        ] ifFalse:[
-            launcher := self class current.
-        ].
-
-        (launcher notNil and:[launcher ~~ self]) ifTrue:[
-            launcher window graphicsDevice == device ifTrue:[
-                OpenLaunchers notNil ifTrue:[
-                    OpenLaunchers remove:launcher ifAbsent:nil.
-                ].
-                ((oldLauncherClass := Smalltalk at:#Launcher) notNil 
-                and:[oldLauncherClass isLoaded]) ifTrue: [
-                    oldLauncherClass openLaunchers remove:launcher ifAbsent:nil
-                ].
-                launcher close
-            ]
-        ]
+	isMainLauncher ifTrue:[
+	    launcher := Transcript topView application
+	] ifFalse:[
+	    launcher := self class current.
+	].
+
+	(launcher notNil and:[launcher ~~ self]) ifTrue:[
+	    launcher window graphicsDevice == device ifTrue:[
+		OpenLaunchers notNil ifTrue:[
+		    OpenLaunchers remove:launcher ifAbsent:nil.
+		].
+		((oldLauncherClass := Smalltalk at:#Launcher) notNil
+		and:[oldLauncherClass isLoaded]) ifTrue: [
+		    oldLauncherClass openLaunchers remove:launcher ifAbsent:nil
+		].
+		launcher close
+	    ]
+	]
     ].
 
     transcript := self transcriptView. "/ (self componentAt: #transcriptView) subViews first.
 
     isMainLauncher ifTrue:[
-        transcript beTranscript.
+	transcript beTranscript.
     ] ifFalse:[
-        transcript showCR:'**************** Notice ***********************'.
-        transcript showCR:'**       this is NOT the Transcript          **'.
-        transcript showCR:'** The real Transcript is on the main screen **'.
-        transcript showCR:'**                                           **'.
-        transcript showCR:'** Menus affecting common state are disabled **'.
-        transcript showCR:'***********************************************'.
+	transcript showCR:'**************** Notice ***********************'.
+	transcript showCR:'**       this is NOT the Transcript          **'.
+	transcript showCR:'** The real Transcript is on the main screen **'.
+	transcript showCR:'**                                           **'.
+	transcript showCR:'** Menus affecting common state are disabled **'.
+	transcript showCR:'***********************************************'.
     ]
 
     "Modified: / 5.3.1999 / 18:00:36 / cg"
@@ -4727,7 +5372,7 @@
 
 openMethodFinder
     "open the methodFinder (ported from squeak)"
-    
+
     self openApplication:'MethodFinderWindow'
     "/ MethodFinderWindow open
 
@@ -4735,8 +5380,8 @@
 !
 
 startBrowserOnChangesOnSmallTeamHost:aHostName
-    (UserPreferences current changeSetBrowserClass) 
-        openOn:(SmallTeam changesOnHost:aHostName)
+    (UserPreferences current changeSetBrowserClass)
+	openOn:(SmallTeam changesOnHost:aHostName)
 
     "Created: / 12-11-2006 / 16:07:12 / cg"
     "Modified: / 01-07-2011 / 16:46:48 / cg"
@@ -4758,7 +5403,8 @@
 !
 
 stopIgnoringHalts
-    DebugView stopIgnoringHalts
+    DebugView stopIgnoringHalts.
+    Smalltalk ignoreHalt:false.
 ! !
 
 !NewLauncher methodsFor:'user actions-debugging'!
@@ -4766,12 +5412,12 @@
 openTranscriptDebugDialog
     |pattern|
 
-    pattern := Dialog 
+    pattern := Dialog
                 request:('Enter GLOB matchpattern for message text\(Breakpoint if matching text is sent to the Transcript)\\Empty to disable, * for any text.' withCRs)
-                initialAnswer:(Transcript class debugSendersOfMessagePattern).
+                initialAnswer:(TextCollector debugSendersOfMessagePattern).
     pattern isNil ifTrue:[^ self].
 
-    Transcript class debugSendersOfMessagePattern:pattern
+    TextCollector debugSendersOfMessagePattern:pattern
 
     "Created: / 02-02-2012 / 12:05:05 / cg"
 !
@@ -4779,24 +5425,24 @@
 openTranscriptTraceDialog
     |pattern|
 
-    pattern := Dialog 
+    pattern := Dialog
                 request:('Enter GLOB matchpattern for message text\(Trace who sends matching text to the Transcript)\\Empty to disable, * for any.' withCRs)
-                initialAnswer:(Transcript class traceSendersOfMessagePattern).
+                initialAnswer:(TextCollector traceSendersOfMessagePattern).
     pattern isNil ifTrue:[^ self].
 
-    Transcript class traceSendersOfMessagePattern:pattern
+    TextCollector traceSendersOfMessagePattern:pattern
 
     "Created: / 02-02-2012 / 12:06:10 / cg"
 !
 
 timestampTranscriptMessages
-    ^ Transcript class perform: #timestampMessages ifNotUnderstood:[false]
+    ^ TextCollector perform: #timestampMessages ifNotUnderstood:[false]
 
     "Modified: / 25-07-2013 / 12:16:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 timestampTranscriptMessages:aBoolean
-    ^ Transcript class timestampMessages:aBoolean
+    ^ TextCollector timestampMessages:aBoolean
 ! !
 
 !NewLauncher methodsFor:'user actions-demos'!
@@ -4811,7 +5457,7 @@
 !
 
 openMandelbrotDemo
-    self openDemo:#ComplexIterationView 
+    self openDemo:#ComplexIterationView
 
     "Created: / 8.7.1998 / 20:36:37 / cg"
 !
@@ -4841,19 +5487,19 @@
 
     cls := self findApplicationClass:className nameSpace:Demos.
     cls isNil ifTrue:[
-        ^ self
+	^ self
     ].
 
     Autoload autoloadFailedSignal handle:[:ex |
-        self warn:(resources string:'Sorry, the %1 class seems to be not available.' with:cls name)
+	self warn:(resources string:'Sorry, the %1 class seems to be not available.' with:cls name)
     ] do:[
-        self withWaitCursorDo:[
-            cls isRunning ifTrue:[
-                cls stop
-            ] ifFalse:[
-                cls start
-            ]
-        ]
+	self withWaitCursorDo:[
+	    cls isRunning ifTrue:[
+		cls stop
+	    ] ifFalse:[
+		cls start
+	    ]
+	]
     ]
 !
 
@@ -4871,13 +5517,23 @@
     "Modified: / 20-04-2005 / 18:59:28 / janfrog"
 !
 
+fileLoadPackage
+    "open a dialog showing wellknown packages (listed in the packages directory)
+     and offer to load the selected one(s).
+     TODO: make this a little app instead of an ad-hoc dialog, 
+     add remote packages (central goody repository?),
+     add a description text view, showing more info about the package (from where?)"    
+
+    self class openLoadPackageDialog.
+!
+
 saveImage
     "save image"
 
     [
-        self saveImageAs:ObjectMemory nameForSnapshot.
+	self saveImageAs:ObjectMemory nameForSnapshot.
     ] on:SnapshotError do:[:ex|
-        self warn:ex description.
+	self warn:ex description.
     ]
 !
 
@@ -4886,18 +5542,18 @@
 
     |imageFilename|
 
-    imageFilename := Dialog 
-                        requestFileName:(resources string:'Save Image As') 
-                        default:ObjectMemory nameForSnapshot
-                        pattern:'*.img'
-                        fromDirectory:Filename currentDirectory.
+    imageFilename := Dialog
+			requestFileName:(resources string:'Save Image As')
+			default:ObjectMemory nameForSnapshot
+			pattern:'*.img'
+			fromDirectory:Filename currentDirectory.
 
     imageFilename notNil ifTrue:[
-        [
-            self saveImageAs:imageFilename
-        ] on:SnapshotError do:[:ex|
-            self warn:ex description.
-        ].
+	[
+	    self saveImageAs:imageFilename
+	] on:SnapshotError do:[:ex|
+	    self warn:ex description.
+	].
     ].
 !
 
@@ -4905,9 +5561,7 @@
     "save the current default changeset as a patch file,
      after asking for a file name"
 
-    |dir d changesFilename|
-
-    dir := Filename currentDirectory.
+    |dir d changesFilename currentChangeSet|
 
     (d := Filename homeDirectory construct:'.smalltalk') exists ifTrue:[
         d := d construct:'userPatches'.
@@ -4915,19 +5569,28 @@
             d makeDirectory.
         ].
         dir := d.
+    ] ifFalse:[
+        dir := Filename currentDirectory.
     ].
 
     changesFilename := Timestamp now
-         printStringFormat:'changes_%(year)-%(month)-%(day)__%h-%m-%s.chg'.      
-
+         printStringFormat:'changes_%(year)-%(month)-%(day)__%h:%m:%s.chg'.
+    OperatingSystem isMSWINDOWSlike ifTrue:[ changesFilename replaceAll:$: with:$_ ].
+
+    currentChangeSet := ChangeSet current.
     changesFilename := Dialog
-                        requestFileName:(resources string:'Save Changes As')
+                        requestFileName:(resources 
+                                            string:'Save %1 Changes (for %2 Selectors in %3 Classes) As' 
+                                            with:currentChangeSet size
+                                            with:currentChangeSet changeSelectors size
+                                            with:currentChangeSet changedClasses size)
                         default:changesFilename
                         pattern:'*.chg'
                         fromDirectory:dir.
 
     changesFilename notEmptyOrNil ifTrue:[
-        self saveSessionChangesAs:changesFilename
+        self saveSessionChangesAs:changesFilename.
+        Transcript showCR:'session changes save in ',changesFilename asFilename pathName.
     ].
 !
 
@@ -4943,8 +5606,8 @@
 
     helpIsOn isNil ifTrue:[
         helpIsOn := PluggableAdaptor new
-                        getBlock:[:m | UserPreferences current flyByHelpActive] 
-                        putBlock:[:m :newValue | UserPreferences current flyByHelpActive:newValue] 
+                        getBlock:[:m | UserPreferences current flyByHelpActive and:[FlyByHelp isActive]]
+                        putBlock:[:m :newValue | UserPreferences current flyByHelpActive:newValue]
                         updateBlock:[:m :aspect :param | true].
         "/ helpIsOn addDependent:self.
     ].
@@ -4971,10 +5634,10 @@
     "open an interruptLatencyMonitor view"
 
     InterruptLatencyMonitor notNil ifTrue:[
-        Autoload autoloadFailedSignal catch:[
-            InterruptLatencyMonitor open.
-            ^ self.
-        ].
+	Autoload autoloadFailedSignal catch:[
+	    InterruptLatencyMonitor open.
+	    ^ self.
+	].
     ].
     self warn:'Sorry - the irq latency monitor is not available
 in this release'.
@@ -4984,22 +5647,36 @@
     "open an ProcessMonitor view"
 
     self openApplication:(
-        (UserPreferences current useProcessMonitorV2
-        and:[ProcessMonitorV2 notNil]) 
-            ifTrue:['ProcessMonitorV2']
-            ifFalse:['ProcessMonitor']).
+	(UserPreferences current useProcessMonitorV2
+	and:[ProcessMonitorV2 notNil])
+	    ifTrue:['ProcessMonitorV2']
+	    ifFalse:['ProcessMonitor']).
+!
+
+startSQLScratchpad
+    ((Smalltalk at:#'SQL::ODBCScratchpad') notNil 
+    and:[ (Smalltalk at:#'SQL::ODBCScratchpad') isLoaded ]) ifFalse:[
+        Smalltalk loadPackage:'stx:libdb/libodbc/applications'.
+    ].
+
+    self openApplication:'SQL::ODBCScratchpad'.
 !
 
 startSQLWorkspace
-    self openApplication:'SQL::ODBCScratchpad'.
+    ((Smalltalk at:#'SQL::WorkspacePage') notNil 
+    and:[ (Smalltalk at:#'SQL::WorkspacePage') isLoaded ]) ifFalse:[
+        Smalltalk loadPackage:'stx:libdb/devtools'.
+    ].
+
+    self openApplication:'SQL::WorkspacePage'.
 !
 
 toggleHistoryManager
     "Toggle history manager usage."
 
     HistoryManager isActive
-        ifTrue: [HistoryManager deactivate]
-        ifFalse: [HistoryManager activate]
+	ifTrue: [HistoryManager deactivate]
+	ifFalse: [HistoryManager activate]
 
     "Created: / 20-06-2004 / 16:08:09 / masca"
     "Modified: / 20-04-2005 / 18:59:28 / janfrog"
@@ -5081,19 +5758,14 @@
 !NewLauncher class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.481 2013-10-30 08:49:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.547 2015-03-25 10:52:43 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.481 2013-10-30 08:49:51 cg Exp $'
-!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
+    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.547 2015-03-25 10:52:43 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: NewLauncher.st,v 1.481 2013-10-30 08:49:51 cg Exp $'
+    ^ '$Id: NewLauncher.st,v 1.547 2015-03-25 10:52:43 cg Exp $'
 ! !