cleaned up the code and fixed bugs;
authorClaus Gittinger <cg@exept.de>
Sun, 10 May 2009 12:59:24 +0200
changeset 2500 3e2feb544801
parent 2499 11be77599ca9
child 2501 43386f544f3d
cleaned up the code and fixed bugs; menu reorganized, modernized; edit-menu visibility
UIPainter.st
--- a/UIPainter.st	Sun May 10 12:58:19 2009 +0200
+++ b/UIPainter.st	Sun May 10 12:59:24 2009 +0200
@@ -14,7 +14,8 @@
 ResourceSpecEditor subclass:#UIPainter
 	instanceVariableNames:'specSuperclassName treeView selectionPanel specTool layoutTool
 		helpTool painterView painter lastPort lastPage'
-	classVariableNames:'SelectionPanelClass UseViewScroller LastPort LastPage'
+	classVariableNames:'SelectionPanelClass UseViewScroller LastPort LastPage
+		DefaultEditToolBarVisible DefaultToolBarVisible'
 	poolDictionaries:''
 	category:'Interface-UIPainter'
 !
@@ -128,6 +129,16 @@
     "
 ! !
 
+!UIPainter class methodsFor:'defaults'!
+
+defaultEditToolbarVisible
+    ^ DefaultEditToolBarVisible ? true
+!
+
+defaultToolbarVisible
+    ^ DefaultToolBarVisible ? true
+! !
+
 !UIPainter class methodsFor:'help specs'!
 
 flyByHelpSpec
@@ -345,7 +356,7 @@
 'Edit this windowSpec.'
 
 #moveWidgetDown
-'Moves the selected widget one step down.'
+'Moves the selected widget down in the list (brings it to the front).'
 
 #moveWidgetInto
 'Moves the selected widget into next widget as child widget.'
@@ -354,7 +365,7 @@
 'Moves the selected widget out of its parent widget.'
 
 #moveWidgetUp
-'Moves the selected widget one step up.'
+'Moves the selected widget up in the list (brings it to the back).'
 
 #pasteBuffer
 'Pastes the widgets of the clipboard at the current mouse position.'
@@ -630,6 +641,12 @@
     ^ Icon helpIcon
 !
 
+hideToolBarIcon
+    <resource: #programImage>
+
+    ^ ToolbarIconLibrary hideToolBarIcon
+!
+
 iconAlignB
     "This resource specification was automatically generated
      by the ImageEditor of ST/X."
@@ -1336,23 +1353,73 @@
           label: 'GUI Painter'
           name: 'GUI Painter'
           min: (Point 560 460)
-          bounds: (Rectangle 12 22 620 545)
+          bounds: (Rectangle 0 0 608 523)
+          menu: menu
           icon: defaultIcon
-          menu: menu
         )
         component: 
        (SpecCollection
           collection: (
-           (MenuPanelSpec
-              name: 'menuToolbarView'
-              layout: (LayoutFrame 0 0.0 0 0 0 1.0 32 0)
-              level: 1
-              tabable: true
-              menu: menuToolbar
+            (ViewSpec
+              name: 'ToolBar'
+              layout: (LayoutFrame 0 0 0 0 0 1 32 0)
+              visibilityChannel: toolBarVisibleHolder
+              component: 
+             (SpecCollection
+                collection: (
+                 (ActionButtonSpec
+                    label: 'hideToolBarIcon'
+                    name: 'HideToolBarButton'
+                    layout: (LayoutFrame 0 0 0 0 13 0 0 1)
+                    activeHelpKey: hideToolBar
+                    hasCharacterOrientedLabel: false
+                    translateLabel: true
+                    model: hideToolbar
+                    postBuildCallback: hideToolBarButtonCreated:
+                  )
+                 (MenuPanelSpec
+                    name: 'menuToolbarView'
+                    layout: (LayoutFrame 13 0.0 0 0.0 0 1.0 0 1.0)
+                    visibilityChannel: toolBarVisibleHolder
+                    menu: menuToolbar
+                    textDefault: true
+                  )
+                 )
+              )
+            ) 
+
+            (ViewSpec
+              name: 'EditToolBar'
+              layout: (LayoutFrame 0 0 32 0 0 1 64 0)
+              visibilityChannel: editToolBarVisibleHolder
+              component: 
+             (SpecCollection
+                collection: (
+                 (ActionButtonSpec
+                    label: 'hideToolBarIcon'
+                    name: 'HideEditToolBarButton'
+                    layout: (LayoutFrame 0 0 0 0 13 0 0 1)
+                    activeHelpKey: hideToolBar
+                    hasCharacterOrientedLabel: false
+                    translateLabel: true
+                    model: hideEditToolbar
+                    postBuildCallback: hideToolBarButtonCreated:
+                  )
+                 (MenuPanelSpec
+                    name: 'EditToolBar1'
+                    layout: (LayoutFrame 13 0.0 0 0.0 0 1.0 0 1.0)
+                    visibilityChannel: editToolBarVisibleHolder
+                    menu: editToolbar
+                    textDefault: true
+                  )
+                 )
+
+              )
             )
+
            (VariableHorizontalPanelSpec
-              name: 'mainPanel'
-              layout: (LayoutFrame 0 0.0 32 0.0 0 1.0 -24 1.0)
+              name: 'Painter'
+              layout: (LayoutFrame 0 0.0 64 0.0 0 1.0 -24 1.0)
               level: 1
               component: 
              (SpecCollection
@@ -1445,14 +1512,159 @@
             )
            )
          
-        )
       )
-
-    "Modified: / 10-02-2007 / 14:45:31 / cg"
+      )
 ! !
 
 !UIPainter class methodsFor:'menu specs'!
 
+cutCopyPasteMenuSlice
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:UIPainter andSelector:#menuToolbar
+     (Menu new fromLiteralArrayEncoding:(UIPainter menuToolbar)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            activeHelpKey: editCut
+            enabled: canCutHolder
+            label: 'Cut'
+            itemValue: deleteSelection
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary cutWidgetIcon)
+          )
+         (MenuItem
+            activeHelpKey: editCopy
+            enabled: canCopyHolder
+            label: 'Copy'
+            itemValue: copySelection
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary copyWidgetIcon)
+          )
+         (MenuItem
+            activeHelpKey: editPaste
+            enabled: canPasteKeepingLayoutHolder
+            label: 'Paste with Layout'
+            itemValue: pasteWithLayout
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary pasteWidgetIcon)
+          )
+         (MenuItem
+            activeHelpKey: editDelete
+            enabled: canCutHolder
+            label: 'Delete'
+            itemValue: deleteTotalSelection
+            translateLabel: true
+            isButton: true
+            isVisible: false
+            labelImage: (ResourceRetriever ToolbarIconLibrary deleteWidgetIcon)
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            activeHelpKey: editUndo
+            enabled: hasUndoHistoryHolder
+            label: 'Undo'
+            itemValue: undoLast
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary undoIcon)
+          )
+         )
+        nil
+        nil
+      )
+!
+
+editToolbar
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:UIPainter andSelector:#editToolbar
+     (Menu new fromLiteralArrayEncoding:(UIPainter editToolbar)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'moveItems'
+            translateLabel: true
+            submenuChannel: moveInListMenuSlice
+            isMenuSlice: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'gridItems'
+            translateLabel: true
+            submenuChannel: gridMenuSlice
+            isMenuSlice: true
+          )
+         )
+        nil
+        nil
+      )
+!
+
+gridMenuSlice
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:Workflow::WorksheetEditor andSelector:#zoomMenuSlice
+     (Menu new fromLiteralArrayEncoding:(Workflow::WorksheetEditor zoomMenuSlice)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'ShowGrid'
+            translateLabel: true
+            isButton: true
+            indication: gridShownHolder
+            labelImage: (ResourceRetriever #'Expecco::ExpeccoIconLibrary' showGridIcon)
+          )
+         (MenuItem
+            label: 'AlignToGrid'
+            translateLabel: true
+            isButton: true
+            indication: alignToGridHolder
+            labelImage: (ResourceRetriever #'Expecco::ExpeccoIconLibrary' alignToGridIcon)
+          )
+         )
+        nil
+        nil
+      )
+!
+
 menu
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
@@ -1482,6 +1694,57 @@
             submenuChannel: menuEdit
           )
          (MenuItem
+            label: 'View'
+            translateLabel: true
+            submenu: 
+           (Menu
+              (
+               (MenuItem
+                  activeHelpKey: settingsCanvas
+                  label: 'Canvas'
+                  translateLabel: true
+                  indication: painterShown
+                )
+               (MenuItem
+                  activeHelpKey: settingsGallery
+                  label: 'Gallery'
+                  translateLabel: true
+                  indication: galleryShown
+                )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
+                  label: 'Toolbar'
+                  translateLabel: true
+                  hideMenuOnActivated: false
+                  indication: toolBarVisibleHolder
+                )
+               (MenuItem
+                  label: 'Editor Toolbar'
+                  translateLabel: true
+                  hideMenuOnActivated: false
+                  indication: editToolBarVisibleHolder
+                )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
+                  label: 'Load Sketch as Background...'
+                  itemValue: useSketch
+                  translateLabel: true
+                )
+               (MenuItem
+                  label: 'Load Image as Background...'
+                  itemValue: useBackgroundImage
+                  translateLabel: true
+                )
+               )
+              nil
+              nil
+            )
+          )
+         (MenuItem
             label: 'Align'
             translateLabel: true
             submenuChannel: menuAlign
@@ -1563,21 +1826,6 @@
            (Menu
               (
                (MenuItem
-                  activeHelpKey: settingsCanvas
-                  label: 'Canvas'
-                  translateLabel: true
-                  indication: painterShown
-                )
-               (MenuItem
-                  activeHelpKey: settingsGallery
-                  label: 'Gallery'
-                  translateLabel: true
-                  indication: galleryShown
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
                   activeHelpKey: settingsAspectsAsInstances
                   label: 'Aspects as InstanceVariables'
                   translateLabel: true
@@ -1619,16 +1867,6 @@
                   itemValue: doDefineGrid
                   translateLabel: true
                 )
-               (MenuItem
-                  label: 'Load Sketch as Background...'
-                  itemValue: useSketch
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: 'Load Image as Background...'
-                  itemValue: useBackgroundImage
-                  translateLabel: true
-                )
                )
               nil
               nil
@@ -2098,7 +2336,7 @@
           )
          (MenuItem
             activeHelpKey: sortItems
-            label: 'Sort Selected Items'
+            label: 'Sort Selected Items by Position'
             itemValue: doSortItems
             translateLabel: true
           )
@@ -2449,92 +2687,10 @@
             label: '-'
           )
          (MenuItem
-            activeHelpKey: editUndo
-            enabled: hasUndoHistoryHolder
-            label: 'Undo'
-            itemValue: undoLast
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary undoIcon)
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            activeHelpKey: editCut
-            enabled: canCutHolder
-            label: 'Cut'
-            itemValue: deleteSelection
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary cutWidgetIcon)
-          )
-         (MenuItem
-            activeHelpKey: editCopy
-            enabled: canCopyHolder
-            label: 'Copy'
-            itemValue: copySelection
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary copyWidgetIcon)
-          )
-         (MenuItem
-            activeHelpKey: editPaste
-            enabled: canPasteKeepingLayoutHolder
-            label: 'Paste with Layout'
-            itemValue: pasteWithLayout
+            label: 'CutCopyPaste'
             translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary pasteWidgetIcon)
-          )
-         (MenuItem
-            activeHelpKey: editDelete
-            enabled: canCutHolder
-            label: 'Delete'
-            itemValue: deleteTotalSelection
-            translateLabel: true
-            isButton: true
-            isVisible: false
-            labelImage: (ResourceRetriever ToolbarIconLibrary deleteWidgetIcon)
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            activeHelpKey: moveWidgetUp
-            enabled: canChangeOrderInContainer
-            label: 'Move Up'
-            itemValue: doStepUp
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetUpIcon)
-          )
-         (MenuItem
-            activeHelpKey: moveWidgetDown
-            enabled: canChangeOrderInContainer
-            label: 'Move Down'
-            itemValue: doStepDown
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetDownIcon)
-          )
-         (MenuItem
-            activeHelpKey: moveWidgetInto
-            enabled: canMoveSelectionIntoContainer
-            label: 'Move Into'
-            itemValue: doStepIn
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetDownRightIcon)
-          )
-         (MenuItem
-            activeHelpKey: moveWidgetOut
-            enabled: canMoveSelectionOutOfContainer
-            label: 'Move Out'
-            itemValue: doStepOut
-            translateLabel: true
-            isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetLeftDownIcon)
+            submenuChannel: cutCopyPasteMenuSlice
+            isMenuSlice: true
           )
          (MenuItem
             label: '-'
@@ -2687,10 +2843,80 @@
         nil
         nil
       )
+!
+
+moveInListMenuSlice
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:UIPainter andSelector:#editToolbar
+     (Menu new fromLiteralArrayEncoding:(UIPainter editToolbar)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            activeHelpKey: moveWidgetUp
+            enabled: canChangeOrderInContainer
+            label: 'Move Up'
+            itemValue: doStepUp
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetUpIcon)
+          )
+         (MenuItem
+            activeHelpKey: moveWidgetDown
+            enabled: canChangeOrderInContainer
+            label: 'Move Down'
+            itemValue: doStepDown
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetDownIcon)
+          )
+         (MenuItem
+            activeHelpKey: moveWidgetInto
+            enabled: canMoveSelectionIntoContainer
+            label: 'Move Into'
+            itemValue: doStepIn
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetDownRightIcon)
+          )
+         (MenuItem
+            activeHelpKey: moveWidgetOut
+            enabled: canMoveSelectionOutOfContainer
+            label: 'Move Out'
+            itemValue: doStepOut
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary moveWidgetLeftDownIcon)
+          )
+         )
+        nil
+        nil
+      )
 ! !
 
 !UIPainter methodsFor:'aspects'!
 
+alignToGridHolder
+    |holder|
+
+    (holder := builder bindingAt:#alignToGridHolder) isNil ifTrue:[
+        holder := (self class settings at: #GridAlign ifAbsent: [painter gridAlign]) asValue.
+        builder aspectAt:#alignToGridHolder put: holder.
+        holder addDependent:self.
+    ].
+    ^ holder
+!
+
 aspectFor:aKey
     "returns the aspect for aKey or nil"
 
@@ -2778,6 +3004,17 @@
     ^ true
 !
 
+editToolBarVisibleHolder
+    |holder|
+
+    (holder := builder bindingAt:#editToolBarVisibleHolder) isNil ifTrue:[
+        holder := self class defaultEditToolbarVisible asValue.
+        builder aspectAt:#editToolBarVisibleHolder put: holder.
+        holder addDependent:self.
+    ].
+    ^ holder
+!
+
 enableChannel
     "true if modifications are allowed otherwise in test mode"
 
@@ -2803,6 +3040,17 @@
 
 !
 
+gridShownHolder
+    |holder|
+
+    (holder := builder bindingAt:#gridShownHolder) isNil ifTrue:[
+        holder := (self class settings at: #GridShown ifAbsent: [painter gridShown]) asValue.
+        builder aspectAt:#gridShownHolder put: holder.
+        holder addDependent:self.
+    ].
+    ^ holder
+!
+
 hasOneSelectionOtherThanCanvas
     "returns a value holder which is true in case that one widget is selected
      other than the root"
@@ -2881,6 +3129,17 @@
     ^ holder
 !
 
+toolBarVisibleHolder
+    |holder|
+
+    (holder := builder bindingAt:#toolBarVisibleHolder) isNil ifTrue:[
+        holder := self class defaultToolbarVisible asValue.
+        builder aspectAt:#toolBarVisibleHolder put: holder.
+        holder addDependent:self.
+    ].
+    ^ holder
+!
+
 treeView
     "returns the tree view which holds all widget"
 
@@ -3131,21 +3390,78 @@
     ]
 !
 
-update:something with:aParameter from:someObject
+toolBarVisibilityChanged
+    |toolBarVisible editToolBarVisible toolBar editToolBar noteBook topOffset|
+
+    topOffset := 0.
+
+    toolBar := self componentAt:#ToolBar.
+    toolBar notNil ifTrue:[
+        toolBarVisible := self toolBarVisibleHolder value.
+        DefaultToolBarVisible := toolBarVisible.
+        toolBarVisible ifTrue:[
+            topOffset := topOffset + toolBar height.
+        ]
+    ].
+
+    editToolBar := self componentAt:#EditToolBar.
+    editToolBar notNil ifTrue:[
+        editToolBar layout 
+            topOffset:topOffset bottomOffset:(topOffset + editToolBar height).
+        "/ force it to recompute its dimension
+        editToolBar container notNil ifTrue:[
+            editToolBar containerChangedSize.
+        ].
+        editToolBarVisible := self editToolBarVisibleHolder value.
+        DefaultEditToolBarVisible := editToolBarVisible.
+        editToolBarVisible ifTrue:[
+            topOffset := topOffset + editToolBar height.
+        ]
+    ].
+
+    noteBook := self componentAt:#Painter.
+    noteBook notNil ifTrue:[
+        noteBook layout topOffset:topOffset.
+        "/ force it to recompute its dimension
+        noteBook container notNil ifTrue:[
+            noteBook containerChangedSize.
+        ].
+    ].
+
+    "Created: / 18-02-2007 / 14:46:22 / cg"
+!
+
+update:something with:aParameter from:changedObject
     "catches change notifications"
 
     |window lbl|
 
-    someObject == treeView model ifTrue:[
+    ((changedObject == self toolBarVisibleHolder)
+    or:[ changedObject == self editToolBarVisibleHolder ]) ifTrue:[
+        self toolBarVisibilityChanged.
+        ^ self
+    ].
+    changedObject == self gridShownHolder ifTrue:[
+        self class settings at: #GridShown  put: changedObject value.
+        painter gridShown:changedObject value.
+        ^ self
+    ].
+    changedObject == self alignToGridHolder ifTrue:[
+        self class settings at: #GridAlign  put: changedObject value.
+        painter gridAlign:changedObject value.
+        ^ self
+    ].
+
+    changedObject == treeView model ifTrue:[
         (something == #selection
         or:[something == #selectionIndex]) ifTrue:[self treeSelectionChanged].
         ^ self
     ].
 
-    someObject == self galleryShown ifTrue:[
+    changedObject == self galleryShown ifTrue:[
         "/ galleryShown toggle changed
         window := selectionPanel window.
-        (someObject value) ifTrue:[
+        (changedObject value) ifTrue:[
             self raiseUIView:window
         ] ifFalse:[
             self hideUIView:window
@@ -3153,10 +3469,10 @@
         ^ self
     ].
 
-    someObject == self painterShown ifTrue:[
+    changedObject == self painterShown ifTrue:[
         "/ canvasShown toggle changed
         window := self painter topView.
-        (someObject value) ifTrue:[
+        (changedObject value) ifTrue:[
             self raiseUIView:window
         ] ifFalse:[
             self hideUIView:window
@@ -3164,8 +3480,8 @@
         ^ self
     ].
 
-    someObject == self autoAcceptOnSelectionChange ifTrue:[
-        lbl := someObject value ifTrue:['Apply'] ifFalse:['OK'].
+    changedObject == self autoAcceptOnSelectionChange ifTrue:[
+        lbl := changedObject value ifTrue:['Apply'] ifFalse:['OK'].
         (builder componentAt:'acceptButton') label:(resources string:lbl).
         ^ self
     ].
@@ -3299,12 +3615,20 @@
 
 !UIPainter methodsFor:'initialization'!
 
+hideToolBarButtonCreated:aButton
+    aButton passiveLevel:(MenuPanel defaultLevel). 
+"/    aButton passiveLevel:1.
+    aButton activeLevel:-1.
+    aButton backgroundColor:(MenuPanel defaultBackgroundColor).
+!
+
 initialize
     |name scroller viewScroller|
 
     super initialize.
 
     modified := false.
+
     aspects := IdentityDictionary new.
     aspects at:#classNameChannel put:'NewApplication' asValue.
     aspects at:#superclassNameChannel put:'ApplicationModel' asValue.
@@ -4167,6 +4491,11 @@
 postBuildWith: aBuilder
     super postBuildWith:aBuilder.
 
+    (self toolBarVisibleHolder value 
+    or:[ self editToolBarVisibleHolder value ]) ifTrue:[ self toolBarVisibilityChanged ].
+
+    "Created: / 18-02-2007 / 15:03:08 / cg"
+
     self setupPainter.
 
     "Modified: / 22.8.1998 / 17:41:34 / cg"
@@ -4369,6 +4698,7 @@
                 spec useDynamicPreferredWidth:(layoutTool aspectFor:#useDynamicPreferredWidth) value.
                 spec useDynamicPreferredHeight:(layoutTool aspectFor:#useDynamicPreferredHeight) value.
                 painter setLayout:layout.
+                spec layout:layout.
                 painter updateFromSpec:spec.
             ].
         ]
@@ -5026,8 +5356,9 @@
     self askForModification ifFalse: [^nil].
     specClass := specClassName := specSelector := nil.
     self painter removeAll.
-    treeView canvas topView name:  UIPainter defaultNameOfCanvas.
-    treeView canvas topView label: UIPainter defaultNameOfCanvas.
+    treeView canvas topView 
+        name:  UIPainter defaultNameOfCanvas;
+        label: UIPainter defaultNameOfCanvas.
     self helpTool doNew.
     self treeSelectionChanged.
     treeView selectedNode changed.
@@ -5281,6 +5612,14 @@
 
 !
 
+hideEditToolbar
+    self editToolBarVisibleHolder value:false
+!
+
+hideToolbar
+    self toolBarVisibleHolder value:false
+!
+
 replaceWidgetByClass:aSpecOrWidgetClass
     |specClass oldSpec newSpec painter|
 
@@ -5545,13 +5884,13 @@
     lastDrawnMaster := nil.
     windowSpec := nil.
 
+    self canvas components notEmptyOrNil ifTrue:[ self halt ].
     self canvas subViews copy do:[:aView|
         "/ care to not destroy the transparent input view
         (aView isInputOnly) ifFalse:[aView destroy]
     ].
     model root name: UIPainter defaultNameOfCanvas asBoldText.
     model removeAllOtherThanRoot.
-
 !
 
 removeView:aView
@@ -6089,7 +6428,7 @@
 !
 
 doSortItems
-    "moves child 'anOffset' forward or backward in list of children"
+    "sort items by their top-left position"
 
     |selectedItems parent sortedItems newChildren itemList parentView|
 
@@ -6100,7 +6439,8 @@
     parent := selectedItems first parent.
     (parent isNil or:[(selectedItems conform:[:e| e parent == parent]) not]) ifTrue:[^ self].
 
-    sortedItems := selectedItems sort:[:a :b| a contents view origin isLeftOrAbove:(b contents view origin)].
+    sortedItems := selectedItems sort:[:a :b| 
+                            a contents view origin isLeftOrAbove:(b contents view origin)].
     itemList := selectedItems asIdentitySet.
 
     newChildren := parent children collect:[:eachChild|
@@ -6122,11 +6462,12 @@
         parentView changeSequenceOrderFor:eachItem contents view to:idx.
     ].
     parentView specClass isLayoutContainer ifFalse:[
+        parentView components notEmptyOrNil ifTrue:[ self halt ].
         parentView subViews do:[:v| v raise ].
     ].
     self canvas showSelection.
 
-    self selectNodes:itemList.
+    self selectNodes:itemList asOrderedCollection.
 !
 
 doStepIn
@@ -6156,7 +6497,7 @@
 !
 
 doStepOver:anIndex
-    "moves child 'anOffset' forward or backward in list of children"
+    "moves child 'anIndex' forward or backward in list of children"
 
     |item idx size prnt spVw view canvas|
 
@@ -6188,6 +6529,7 @@
     spVw changeSequenceOrderFor:view to:idx.
 
     spVw specClass isLayoutContainer ifFalse:[
+        "/ spVw components notEmptyOrNil ifTrue:[ self halt ].
         spVw subViews do:[:v| v raise ].
     ].
     canvas showSelection.