totally revised version; create icons will be changed next days
authortz
Sat, 17 Jan 1998 18:22:09 +0100
changeset 423 ea6880a0e024
parent 422 f85de4fc2a2c
child 424 2137dff405f0
totally revised version; create icons will be changed next days
HierarchicalListEditor.st
--- a/HierarchicalListEditor.st	Sat Jan 17 18:16:05 1998 +0100
+++ b/HierarchicalListEditor.st	Sat Jan 17 18:22:09 1998 +0100
@@ -13,9 +13,9 @@
 
 
 
-ApplicationModel subclass:#HierarchicalListEditor
-	instanceVariableNames:'didInstall treeView specClass specSelector'
-	classVariableNames:'CopyBuffer IconCreateChild IconCreateSister'
+ToolApplicationModel subclass:#HierarchicalListEditor
+	instanceVariableNames:'isModified didInstall treeView specClass specSelector'
+	classVariableNames:'CopyBuffer'
 	poolDictionaries:''
 	category:'Interface-UIPainter'
 !
@@ -58,36 +58,6 @@
 
 ! !
 
-!HierarchicalListEditor class methodsFor:'icons'!
-
-iconCreateChild
-
-    <resource: #fileImage>
-
-    IconCreateChild isNil ifTrue:[
-        IconCreateChild := Image fromFile:'bitmaps/ui_hierListChild.xpm'.
-    ].
-  ^ IconCreateChild.
-
-"
-IconCreateChild := nil
-"
-!
-
-iconCreateSister
-
-    <resource: #fileImage>
-
-    IconCreateSister isNil ifTrue:[
-        IconCreateSister := Image fromFile:'bitmaps/ui_hierListSister.xpm'.
-    ].
-  ^ IconCreateSister.
-
-"
-IconCreateSister := nil
-"
-! !
-
 !HierarchicalListEditor class methodsFor:'interface specs'!
 
 classAndMethodSpec
@@ -109,11 +79,12 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'Painter'
-              #'layout:' #(#LayoutFrame 199 0 167 0 589 0 336 0)
+              #'layout:' #(#LayoutFrame 202 0 207 0 502 0 335 0)
               #'label:' 'Painter'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1160 870)
-              #'bounds:' #(#Rectangle 199 167 590 337)
+              #'bounds:' #(#Rectangle 202 207 503 336)
+              #'usePreferredExtent:' false
           )
           #'component:' 
            #(#SpecCollection
@@ -122,14 +93,14 @@
                  #(#LabelSpec
                     #'name:' 'boxLabel'
                     #'layout:' #(#Point 5 10)
-                    #'label:' 'class & method for code:'
+                    #'label:' 'Class and selector for code:'
                     #'adjust:' #left
                     #'resizeForLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'classLabel'
                     #'layout:' #(#AlignmentOrigin 45 0.11 51 0 1 0.5)
-                    #'label:' 'class:'
+                    #'label:' 'Class:'
                     #'adjust:' #right
                     #'resizeForLabel:' true
                 )
@@ -142,7 +113,7 @@
                  #(#LabelSpec
                     #'name:' 'methodLabel'
                     #'layout:' #(#AlignmentOrigin 45 0.11 74 0 1 0.5)
-                    #'label:' 'method:'
+                    #'label:' 'Selector:'
                     #'adjust:' #right
                     #'resizeForLabel:' true
                 )
@@ -162,18 +133,18 @@
                          #(
                            #(#ActionButtonSpec
                               #'name:' 'cancel'
-                              #'label:' 'cancel'
+                              #'label:' 'Cancel'
                               #'tabable:' true
                               #'model:' #cancel
-                              #'extent:' #(#Point 191 24)
+                              #'extent:' #(#Point 146 24)
                           )
                            #(#ActionButtonSpec
                               #'name:' 'accept'
-                              #'label:' 'ok'
+                              #'label:' 'OK'
                               #'tabable:' true
+                              #'model:' #accept
                               #'isDefault:' true
-                              #'model:' #accept
-                              #'extent:' #(#Point 191 24)
+                              #'extent:' #(#Point 146 24)
                           )
                         )
                     )
@@ -187,95 +158,15 @@
       )
 !
 
-menuButtons
+menu
     "this window spec was automatically generated by the ST/X MenuEditor"
 
     "do not manually edit this - the builder may not be able to
      handle the specification if its corrupted."
 
     "
-     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menuButtons
-     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuButtons)) startUp
-    "
-
-    <resource: #menu>
-
-    ^
-     
-       #(#Menu
-          
-           #(
-             #(#MenuItem
-                #'label:' 'createChild'
-                #'value:' #doCreateChild
-                #'enabled:' #canCreateChildChannel
-                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #iconCreateChild)
-            )
-             #(#MenuItem
-                #'label:' 'createSister'
-                #'value:' #doCreateSister
-                #'enabled:' #canCreateSisterChannel
-                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #iconCreateSister)
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-             #(#MenuItem
-                #'label:' ''
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-             #(#MenuItem
-                #'label:' 'stepUp'
-                #'value:' #doStepUp
-                #'enabled:' #canStepOverChannel
-                #'labelImage:' #(#ResourceRetriever #UIPainter #iconStepUp)
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-             #(#MenuItem
-                #'label:' 'stepDown'
-                #'value:' #doStepDown
-                #'enabled:' #canStepOverChannel
-                #'labelImage:' #(#ResourceRetriever #UIPainter #iconStepDown)
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-             #(#MenuItem
-                #'label:' 'stepIn'
-                #'value:' #doStepIn
-                #'enabled:' #canStepInChannel
-                #'labelImage:' #(#ResourceRetriever #UIPainter #iconStepIn)
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-             #(#MenuItem
-                #'label:' 'stepOut'
-                #'value:' #doStepOut
-                #'enabled:' #canStepOutChannel
-                #'labelImage:' #(#ResourceRetriever #UIPainter #iconStepOut)
-            )
-             #(#MenuItem
-                #'label:' '-'
-            )
-          ) nil
-          nil
-      )
-!
-
-menuMain
-    "this window spec was automatically generated by the ST/X MenuEditor"
-
-    "do not manually edit this - the builder may not be able to
-     handle the specification if its corrupted."
-
-    "
-     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menuMain
-     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuMain)) startUp
+     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menu
+     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menu)) startUp
     "
 
     <resource: #menu>
@@ -286,24 +177,51 @@
           
            #(
              #(#MenuItem
-                #'label:' 'file'
+                #'label:' 'About'
+                #'labelImage:' #(#ResourceRetriever #UIPainter #icon)
+                #'submenuChannel:' #menuAbout
+            )
+             #(#MenuItem
+                #'label:' 'File'
+                #'accessCharacterPosition:' 1
                 #'submenu:' 
                  #(#Menu
                     
                      #(
                        #(#MenuItem
-                          #'label:' 'new'
+                          #'label:' 'New'
                           #'value:' #doNew
                       )
                        #(#MenuItem
-                          #'label:' 'reload'
+                          #'label:' 'Reload'
                           #'value:' #doReload
                       )
                        #(#MenuItem
-                          #'label:' '='
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Save'
+                          #'value:' #doInstall
+                          #'enabled:' #hasValidClass
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
                       )
                        #(#MenuItem
-                          #'label:' 'quit'
+                          #'label:' 'Define Selector'
+                          #'value:' #doDefineSelector
+                          #'enabled:' #hasValidClass
+                      )
+                       #(#MenuItem
+                          #'label:' 'Define Class'
+                          #'value:' #doDefineClass
+                          #'enabled:' #canChangeClassName
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Exit'
                           #'value:' #closeRequest
                       )
                     ) nil
@@ -311,62 +229,34 @@
                 )
             )
              #(#MenuItem
-                #'label:' 'code'
+                #'label:' 'Edit'
+                #'accessCharacterPosition:' 1
+                #'submenuChannel:' #menuEdit
+            )
+             #(#MenuItem
+                #'label:' 'Browse'
+                #'enabled:' #hasValidClass
+                #'accessCharacterPosition:' 1
                 #'submenu:' 
                  #(#Menu
                     
                      #(
                        #(#MenuItem
-                          #'label:' 'class && method'
-                          #'value:' #doDefineClass
-                          #'enabled:' #canChangeClassName
-                      )
-                       #(#MenuItem
-                          #'label:' 'method'
-                          #'value:' #doDefineSelector
-                          #'enabled:' #hasValidClass
-                      )
-                       #(#MenuItem
-                          #'label:' '-'
-                      )
-                       #(#MenuItem
-                          #'label:' 'install spec.'
-                          #'value:' #doInstall
-                          #'enabled:' #hasValidClass
-                      )
-                       #(#MenuItem
-                          #'label:' '-'
+                          #'label:' 'Class'
+                          #'value:' #'doBrowse:'
+                          #'argument:' #class
                       )
                        #(#MenuItem
-                          #'label:' 'browse'
-                          #'enabled:' #hasValidClass
-                          #'submenu:' 
-                           #(#Menu
-                              
-                               #(
-                                 #(#MenuItem
-                                    #'label:' 'class'
-                                    #'value:' #'doBrowse:'
-                                    #'argument:' #class
-                                )
-                                 #(#MenuItem
-                                    #'label:' '-'
-                                )
-                                 #(#MenuItem
-                                    #'label:' 'specification'
-                                    #'value:' #'doBrowse:'
-                                    #'enabled:' #hasValidSpecSelector
-                                    #'argument:' #spec
-                                )
-                                 #(#MenuItem
-                                    #'label:' 'method'
-                                    #'value:' #'doBrowse:'
-                                    #'enabled:' #hasValidMethodSelector
-                                    #'argument:' #method
-                                )
-                              ) nil
-                              nil
-                          )
+                          #'label:' 'Method'
+                          #'value:' #'doBrowse:'
+                          #'enabled:' #hasValidMethodSelector
+                          #'argument:' #method
+                      )
+                       #(#MenuItem
+                          #'label:' 'Specification'
+                          #'value:' #'doBrowse:'
+                          #'enabled:' #hasValidSpecSelector
+                          #'argument:' #spec
                       )
                     ) nil
                     nil
@@ -377,15 +267,15 @@
       )
 !
 
-menuTree
+menuEdit
     "this window spec was automatically generated by the ST/X MenuEditor"
 
     "do not manually edit this - the builder may not be able to
      handle the specification if its corrupted."
 
     "
-     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menuTree
-     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuTree)) startUp
+     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menuEdit
+     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuEdit)) startUp
     "
 
     <resource: #menu>
@@ -396,19 +286,119 @@
           
            #(
              #(#MenuItem
-                #'label:' 'copy'
+                #'label:' 'Cut'
+                #'value:' #doCut
+                #'enabled:' #canCut
+            )
+             #(#MenuItem
+                #'label:' 'Copy'
                 #'value:' #doCopy
                 #'enabled:' #canCopy
             )
              #(#MenuItem
-                #'label:' 'cut'
-                #'value:' #doCut
-                #'enabled:' #canCut
+                #'label:' 'Paste'
+                #'value:' #doPaste
+                #'enabled:' #canPaste
+            )
+             #(#MenuItem
+                #'label:' '-'
+            )
+             #(#MenuItem
+                #'label:' 'Create Child'
+                #'value:' #doCreateChild
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #iconCreateChild)
+            )
+             #(#MenuItem
+                #'label:' 'Create Sister'
+                #'value:' #doCreateSister
+                #'enabled:' #canCreateSisterChannel
+                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #iconCreateSister)
+            )
+          ) nil
+          nil
+      )
+!
+
+menuToolbar
+    "this window spec was automatically generated by the ST/X MenuEditor"
+
+    "do not manually edit this - the builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     MenuEditor new openOnClass:HierarchicalListEditor andSelector:#menuToolbar
+     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuToolbar)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'New'
+                #'isButton:' true
+                #'value:' #doNew
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever nil #newIcon)
             )
              #(#MenuItem
-                #'label:' 'paste'
-                #'value:' #doPaste
-                #'enabled:' #canPaste
+                #'label:' 'Save'
+                #'isButton:' true
+                #'value:' #doInstall
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever nil #saveIcon)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'Create Child'
+                #'isButton:' true
+                #'value:' #doCreateChild
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever #MenuEditor #submenuImage)
+            )
+             #(#MenuItem
+                #'label:' 'Create Sister'
+                #'isButton:' true
+                #'value:' #doCreateSister
+                #'enabled:' #canCreateSisterChannel
+                #'labelImage:' #(#ResourceRetriever #MenuEditor #menuItemImage)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'Step Up'
+                #'isButton:' true
+                #'value:' #doStepUp
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever nil #upIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Step Down'
+                #'isButton:' true
+                #'value:' #doStepDown
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever nil #downIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Step In'
+                #'isButton:' true
+                #'value:' #doStepIn
+                #'enabled:' #canStepInChannel
+                #'labelImage:' #(#ResourceRetriever nil #downRightIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Step Out'
+                #'isButton:' true
+                #'value:' #doStepOut
+                #'enabled:' #canStepOutChannel
+                #'labelImage:' #(#ResourceRetriever nil #leftDownIcon)
             )
           ) nil
           nil
@@ -434,11 +424,12 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'Painter'
-              #'layout:' #(#LayoutFrame 275 0 381 0 665 0 550 0)
+              #'layout:' #(#LayoutFrame 153 0 206 0 433 0 284 0)
               #'label:' 'Painter'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1160 870)
-              #'bounds:' #(#Rectangle 275 381 666 551)
+              #'bounds:' #(#Rectangle 153 206 434 285)
+              #'usePreferredExtent:' false
           )
           #'component:' 
            #(#SpecCollection
@@ -446,21 +437,14 @@
                #(
                  #(#LabelSpec
                     #'name:' 'boxLabel'
-                    #'layout:' #(#Point 5 10)
-                    #'label:' 'class & method for code:'
+                    #'layout:' #(#LayoutFrame 0 0.0 3 0 0 1.0 20 0)
+                    #'label:' 'Selector for code:'
                     #'adjust:' #left
                     #'resizeForLabel:' true
                 )
-                 #(#LabelSpec
-                    #'name:' 'methodLabel'
-                    #'layout:' #(#AlignmentOrigin 45 0.11 74 0 1 0.5)
-                    #'label:' 'method:'
-                    #'adjust:' #right
-                    #'resizeForLabel:' true
-                )
                  #(#InputFieldSpec
                     #'name:' 'methodField'
-                    #'layout:' #(#LayoutFrame 47 0.11 64 0 -2 1.0 86 0)
+                    #'layout:' #(#LayoutFrame 0 0.0 22 0 0 1.0 44 0)
                     #'tabable:' true
                     #'model:' #specSelectorChannel
                     #'type:' #string
@@ -474,18 +458,18 @@
                          #(
                            #(#ActionButtonSpec
                               #'name:' 'cancel'
-                              #'label:' 'cancel'
+                              #'label:' 'Cancel'
                               #'tabable:' true
                               #'model:' #cancel
-                              #'extent:' #(#Point 191 24)
+                              #'extent:' #(#Point 136 24)
                           )
                            #(#ActionButtonSpec
                               #'name:' 'accept'
-                              #'label:' 'ok'
+                              #'label:' 'OK'
                               #'tabable:' true
+                              #'model:' #accept
                               #'isDefault:' true
-                              #'model:' #accept
-                              #'extent:' #(#Point 191 24)
+                              #'extent:' #(#Point 136 24)
                           )
                         )
                     )
@@ -518,128 +502,97 @@
        #(#FullSpec
           #'window:' 
            #(#WindowSpec
-              #'name:' 'HierarchicalListEditor'
-              #'layout:' #(#LayoutFrame 437 0 260 0 1004 0 554 0)
+              #'name:' 'Hierarchical List Editor'
+              #'layout:' #(#LayoutFrame 67 0 325 0 541 0 637 0)
               #'label:' 'Hierarchical List Editor'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1160 870)
-              #'bounds:' #(#Rectangle 437 260 1005 555)
+              #'bounds:' #(#Rectangle 67 325 542 638)
+              #'menu:' #menu
+              #'usePreferredExtent:' false
           )
           #'component:' 
            #(#SpecCollection
               #'collection:' 
                #(
                  #(#MenuPanelSpec
-                    #'name:' 'menuMain'
-                    #'layout:' #(#LayoutFrame 0 0.0 0 0 0 1.0 25 0)
-                    #'menu:' #menuMain
+                    #'name:' 'menuToolbarView'
+                    #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 32 0)
+                    #'menu:' #menuToolbar
                 )
                  #(#VariableHorizontalPanelSpec
-                    #'name:' 'variableHorizontalPanel1'
-                    #'layout:' #(#LayoutFrame 0 0.0 26 0.0 0 1.0 0 1.0)
+                    #'name:' 'variableHorizontalPanel'
+                    #'layout:' #(#LayoutFrame 0 0.0 34 0.0 0 1.0 -22 1.0)
                     #'component:' 
                      #(#SpecCollection
                         #'collection:' 
                          #(
-                           #(#ViewSpec
-                              #'name:' 'view1'
-                              #'component:' 
-                               #(#SpecCollection
-                                  #'collection:' 
-                                   #(
-                                     #(#MenuPanelSpec
-                                        #'name:' 'menuButtons'
-                                        #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 28 0)
-                                        #'menu:' #menuButtons
-                                    )
-                                     #(#ArbitraryComponentSpec
-                                        #'name:' 'treeView'
-                                        #'layout:' #(#LayoutFrame 0 0.0 28 0.0 0 1.0 0 1.0)
-                                        #'menu:' #menuTree
-                                        #'hasHorizontalScrollBar:' true
-                                        #'hasVerticalScrollBar:' true
-                                        #'miniScrollerHorizontal:' true
-                                        #'miniScrollerVertical:' true
-                                        #'component:' #treeView
-                                        #'hasBorder:' false
-                                    )
-                                  )
-                              )
+                           #(#ArbitraryComponentSpec
+                              #'name:' 'treeView'
+                              #'menu:' #menuEdit
+                              #'hasHorizontalScrollBar:' true
+                              #'hasVerticalScrollBar:' true
+                              #'miniScrollerHorizontal:' true
+                              #'miniScrollerVertical:' true
+                              #'component:' #treeView
+                              #'hasBorder:' false
                           )
                            #(#ViewSpec
-                              #'name:' 'view2'
+                              #'name:' 'specView'
                               #'component:' 
                                #(#SpecCollection
                                   #'collection:' 
                                    #(
-                                     #(#ViewSpec
-                                        #'name:' 'viewSpec'
-                                        #'layout:' #(#LayoutFrame 0 0 0 0 0 0 0 0)
-                                        #'component:' 
-                                         #(#SpecCollection
-                                            #'collection:' 
-                                             #(
-                                               #(#LabelSpec
-                                                  #'name:' 'nameLabel'
-                                                  #'layout:' #(#AlignmentOrigin 75 0 36 0 1 0.5)
-                                                  #'label:' 'Name:'
-                                                  #'resizeForLabel:' true
-                                              )
-                                               #(#InputFieldSpec
-                                                  #'name:' 'nameFiled'
-                                                  #'layout:' #(#LayoutFrame 81 0 26 0 -5 1.0 48 0)
-                                                  #'model:' #itemName
-                                              )
-                                               #(#LabelSpec
-                                                  #'name:' 'valueLabel'
-                                                  #'layout:' #(#AlignmentOrigin 75 0 71 0 1 0.5)
-                                                  #'label:' 'Value:'
-                                                  #'resizeForLabel:' true
-                                              )
-                                               #(#InputFieldSpec
-                                                  #'name:' 'valueField'
-                                                  #'layout:' #(#LayoutFrame 81 0 61 0 -5 1.0 83 0)
-                                                  #'model:' #itemValue
-                                                  #'type:' #symbolOrNil
-                                              )
-                                               #(#HorizontalPanelViewSpec
-                                                  #'name:' 'commitPanel'
-                                                  #'layout:' #(#LayoutFrame 0 0.0 -30 1.0 0 1.0 0 1.0)
-                                                  #'component:' 
-                                                   #(#SpecCollection
-                                                      #'collection:' 
-                                                       #(
-                                                         #(#ActionButtonSpec
-                                                            #'name:' 'cancelButton'
-                                                            #'label:' 'cancel'
-                                                            #'model:' #cancel
-                                                            #'enableChannel:' #modifiedChannel
-                                                            #'extent:' #(#Point 1 22)
-                                                        )
-                                                         #(#ActionButtonSpec
-                                                            #'name:' 'acceptButton'
-                                                            #'label:' 'ok'
-                                                            #'model:' #accept
-                                                            #'enableChannel:' #modifiedChannel
-                                                            #'extent:' #(#Point 1 22)
-                                                        )
-                                                      )
-                                                  )
-                                                  #'horizontalLayout:' #fitSpace
-                                                  #'verticalLayout:' #center
-                                                  #'horizontalSpace:' 3
-                                                  #'verticalSpace:' 3
-                                              )
-                                            )
-                                        )
+                                     #(#LabelSpec
+                                        #'name:' 'nameLabel'
+                                        #'layout:' #(#AlignmentOrigin 107 0 25 0 1 0.5)
+                                        #'label:' 'Name:'
+                                        #'resizeForLabel:' true
+                                    )
+                                     #(#InputFieldSpec
+                                        #'name:' 'nameInputField'
+                                        #'layout:' #(#LayoutFrame 110 0 15 0 -5 1.0 37 0)
+                                        #'model:' #itemName
+                                    )
+                                     #(#LabelSpec
+                                        #'name:' 'valueLabel'
+                                        #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
+                                        #'label:' 'Value:'
+                                        #'resizeForLabel:' true
+                                    )
+                                     #(#InputFieldSpec
+                                        #'name:' 'valueInputField'
+                                        #'layout:' #(#LayoutFrame 110 0 41 0 -5 1.0 63 0)
+                                        #'model:' #itemValue
+                                        #'type:' #symbolOrNil
+                                    )
+                                     #(#UISubSpecification
+                                        #'name:' 'SubSpecification'
+                                        #'layout:' #(#LayoutFrame 2 0.0 -26 1.0 -2 1.0 -2 1.0)
+                                        #'majorKey:' #ToolApplicationModel
+                                        #'minorKey:' #windowSpecForCommit
                                     )
                                   )
                               )
-                              #'borderWidth:' 1
+                              #'level:' -1
                           )
                         )
                     )
-                    #'handles:' #(#Any 0.5 1.0)
+                    #'handles:' #(#Any 0.368421 1.0)
+                )
+                 #(#LabelSpec
+                    #'name:' 'infoLabel'
+                    #'layout:' #(#LayoutFrame 0 0.0 -22 1 -80 1.0 0 1.0)
+                    #'labelChannel:' #valueOfInfoLabel
+                    #'level:' 1
+                    #'adjust:' #left
+                )
+                 #(#LabelSpec
+                    #'name:' 'timeLabel'
+                    #'layout:' #(#LayoutFrame -80 1 -22 1 0 1.0 0 1.0)
+                    #'labelChannel:' #valueOfTimeLabel
+                    #'level:' 1
+                    #'adjust:' #right
                 )
               )
           )
@@ -702,49 +655,15 @@
 !HierarchicalListEditor methodsFor:'accessing'!
 
 didInstall
-    "returns true if spec was installed by operator
-    "
-    ^ didInstall ? false
+    "returns true if spec was installed by operator"
+
+    ^didInstall ? false
 !
 
 selectorName
-    "returns current spec. selector
-    "
-    ^ specSelector
-! !
-
-!HierarchicalListEditor methodsFor:'actions'!
-
-accept
-    "accept changes"
-
-    |node index|
+    "returns current spec. selector"
 
-    (index := treeView selectedIndex) ~~ 0 ifTrue:[
-        node := treeView nodeAtIndex:index.
-        node name:(self itemName value).
-        node contents:(self itemValue value).
-        treeView redrawLine:index.
-    ].
-    self modifiedChannel value:false.
-
-!
-
-cancel
-    "reload selected item and update channels
-    "
-    |node|
-
-    (node := treeView selectedNode) notNil ifTrue:[
-        self itemName  value:node name.
-        self itemValue value:node contents.
-        (builder componentAt:#viewSpec) extent:1.0@1.0.
-    ] ifFalse:[
-        (builder componentAt:#viewSpec) extent:0@0.
-        self itemName  value:''.
-        self itemValue value:nil.
-    ].
-    self modifiedChannel value:false.
+    ^specSelector
 ! !
 
 !HierarchicalListEditor methodsFor:'aspects'!
@@ -752,35 +671,35 @@
 canCreateChildChannel
     "automatically generated by UIPainter ..."
 
-    ^ builder booleanValueAspectFor:#canCreateChildChannel
+    ^builder booleanValueAspectFor:#canCreateChildChannel
 
 !
 
 canCreateSisterChannel
     "automatically generated by UIPainter ..."
 
-    ^ builder booleanValueAspectFor:#canCreateSisterChannel
+    ^builder booleanValueAspectFor:#canCreateSisterChannel
 
 !
 
 canStepInChannel
     "automatically generated by UIPainter ..."
 
-    ^ builder booleanValueAspectFor:#canStepInChannel
+    ^builder booleanValueAspectFor:#canStepInChannel
 
 !
 
 canStepOutChannel
     "automatically generated by UIPainter ..."
 
-    ^ builder booleanValueAspectFor:#canStepOutChannel
+    ^builder booleanValueAspectFor:#canStepOutChannel
 
 !
 
 canStepOverChannel
     "automatically generated by UIPainter ..."
 
-    ^ builder booleanValueAspectFor:#canStepOverChannel
+    ^builder booleanValueAspectFor:#canStepOverChannel
 
 !
 
@@ -808,39 +727,297 @@
     ^ holder
 !
 
-modifiedChannel
-    "automatically generated by UIPainter ..."
-
-    ^ builder booleanValueAspectFor:#modifiedChannel
-
-!
-
 treeView
     "automatically generated by UIPainter ..."
 
-    ^ treeView
+    ^treeView
 ! !
 
 !HierarchicalListEditor methodsFor:'change & update'!
 
 update:something with:aParameter from:someObject
-    "one of my models changed
-    "
-    self modifiedChannel value:true
+    "one of my models changed"
+
+    self valueOfEnablingCommitButtons value: true
+! !
+
+!HierarchicalListEditor methodsFor:'private'!
+
+checkMenuItemModified
+    "check item modification"
+
+    self valueOfEnablingCommitButtons value
+    ifTrue:
+    [
+        ((YesNoBox title:'Item was modified!!\Save it?\' withCRs)        
+            noText:'No';
+            yesText:'Yes';
+            showAtPointer;
+            accepted) ifFalse: [self valueOfEnablingCommitButtons value: false. ^true].
+        self accept
+    ].
+    ^true
+!
+
+newItem
+    "creates and returns a new default item"
+
+    ^TreeItem name: 'Undefined' contents: nil
+!
+
+updateChannels
+    "update channels"
+
+    |node parent chnStepIn chnStepOut chnStepOvr chnChild chnSister|
+
+    chnStepIn := chnStepOut := chnStepOvr := chnChild := chnSister := false.
+
+    (node := treeView selectedNode) notNil 
+    ifTrue:
+    [
+        (builder componentAt: #specView) beVisible.
+        chnChild := true.
+        (parent := node parent) notNil 
+        ifTrue:
+        [
+            chnSister  := true.
+            chnStepOvr := parent numberOfChildren > 1.
+            chnStepOut := parent parent notNil.
+            chnStepIn  := node ~~ parent lastChild
+        ]
+    ]
+    ifFalse:
+    [
+        (builder componentAt: #specView) beInvisible
+    ].
+    self canCreateChildChannel  value:chnChild.
+    self canCreateSisterChannel value:chnSister.
+    self canStepOverChannel     value:chnStepOvr.
+    self canStepOutChannel      value:chnStepOut.
+    self canStepInChannel       value:chnStepIn
+!
+
+updateInputFields
+    "reload item value into input fields"
+
+    |node|
+
+    (node := treeView selectedNode) notNil 
+    ifTrue:
+    [
+        self itemName  value:node name.
+        self itemValue value:node contents
+    ] 
+    ifFalse:
+    [
+        self itemName  value:''.
+        self itemValue value:nil
+    ].
+    self valueOfEnablingCommitButtons value: false
 ! !
 
-!HierarchicalListEditor methodsFor:'menu buttons'!
+!HierarchicalListEditor methodsFor:'queries'!
+
+canChangeClassName
+    "returns true if current class could be changed which is dependent on
+     the mode: standalone or started by UIPainter"
+
+    ^masterApplication isNil
+!
+
+canCopy
+    "returns true if any selection exists"
+
+    ^treeView selection notNil
+!
+
+canCut
+    "returns true if any selection exists and not includes
+     the anchor (first element into list)."
+
+    treeView selection notNil ifTrue:[^(treeView isInSelection:1) not].
+    ^false
+!
+
+canPaste
+    "returns true if something to be paste exists and a
+     single selection exists"
+
+    ^CopyBuffer notNil and:[treeView selectedNode notNil]
+!
+
+hasValidClass
+    "returns true if the class defined allready exists"
+
+    ^specClass isBehavior
+!
+
+hasValidMethodSelector
+    "returns true if the class and the instance selector defined
+     allready exists."
+
+    (specSelector notNil and:[self hasValidClass]) 
+    ifTrue:
+    [
+        ^(specClass compiledMethodAt:specSelector) notNil
+    ].    
+    ^false
+!
+
+hasValidSpecSelector
+    "returns true if the class and the class selector defined
+     allready exists."
+
+    (specSelector notNil and:[self hasValidClass])
+    ifTrue:
+    [
+        ^(specClass class compiledMethodAt:specSelector) notNil
+    ].
+    ^false
+! !
+
+!HierarchicalListEditor methodsFor:'startup / release'!
+
+buildFrom:aClass andSelector:aSelector
+    "rebuild window from a class and selector"
+
+    |sel anchor|
+
+    specClass := self resolveName:aClass.
+    specSelector := nil.
+
+    aSelector size ~~ 0 
+    ifTrue:
+    [
+        sel := aSelector asString withoutSeparators.
+        sel size ~~ 0 ifTrue:[specSelector := sel asSymbol]
+    ].
+    treeView selection:nil.
+
+    (specSelector notNil and:[specClass notNil]) 
+    ifTrue:
+    [
+        (specClass respondsTo:specSelector) 
+        ifTrue:
+        [
+            anchor := specClass perform:specSelector.
+            anchor isArray ifTrue:[anchor := anchor decodeAsLiteralArray]
+        ]
+    ].
+    anchor notNil 
+        ifTrue: [anchor expand. treeView root:anchor] 
+        ifFalse:[self doNew]
+!
+
+initialize
+    "setup default values"
+
+    super initialize.
+
+    treeView := SelectionInTreeView new.
+    treeView multipleSelectOk: true.
+    treeView showDirectoryIndicator: true.
+    treeView showDirectoryIndicatorForRoot: false.
+    treeView action:[:aNr| self updateChannels. self updateInputFields].
+    treeView selectConditionBlock: [:i|self checkMenuItemModified].
+    treeView validateDoubleClickBlock: [:node| node ~~ treeView model list first].
+    self doNew.
+!
+
+openModalOnClass:aClass andSelector:aSelector
+    "open modal on class and selector"
+
+    specClass := Association key:aClass value:aSelector.
+    super openInterfaceModal.
+
+
+!
+
+openOnClass:aClass andSelector:aSelector
+    "open on class and selector"
+
+    specClass := Association key:aClass value:aSelector.
+    super openInterface.
+
+!
+
+postBuildWith:builder
+    "setup view"
+
+    |cls sel|
+
+    specClass isAssociation ifTrue:[
+        cls := specClass key.
+        sel := specClass value.
+    ].
+    self buildFrom:cls andSelector:sel.
+
+! !
+
+!HierarchicalListEditor methodsFor:'user actions'!
+
+accept
+    "invoked by button 'OK'"
+
+    |node index|
+
+    (index := treeView selectedIndex) ~~ 0 
+    ifTrue:
+    [
+        node := treeView nodeAtIndex:index.
+        node name: self itemName value.
+        node contents: self itemValue value.
+        treeView redrawLine:index.
+    ].
+    self valueOfEnablingCommitButtons value: false
+!
+
+cancel
+    "invoked by button 'Cancel'"
+
+    self updateInputFields.
+
+    self valueOfEnablingCommitButtons value: false
+!
+
+doBrowse:what
+    "open a system browser"
+
+    |cls sel|
+
+    (cls := specClass) notNil 
+    ifTrue:
+    [
+        what == #class 
+        ifFalse:
+        [
+            (sel := specSelector) isNil ifTrue:[^self].
+            what == #spec ifTrue:[cls := cls class]
+        ].
+        SystemBrowser openInClass:cls selector:sel
+    ]
+!
+
+doCopy
+    "copy current selected nodes into copy buffer"
+
+    CopyBuffer := OrderedCollection new.
+    treeView selectedNodesDo:[:aNode| CopyBuffer add: aNode copy]
+
+!
 
 doCreateChild
-    "create a child within selected parent
-    "
+    "create a child within selected parent"
+
     |node|
 
-    (node := treeView selectedNode) notNil ifTrue:[
-        treeView model add:(self newItem) beforeIndex:1 below:node.
+    (node := treeView selectedNode) notNil 
+    ifTrue:
+    [
+        treeView model add: self newItem beforeIndex:1 below:node.
         treeView selectedNodeExpand:true.
         self updateChannels.
-    ].
+    ]
 !
 
 doCreateSister
@@ -848,79 +1025,37 @@
     "
     |node|
 
-    (node := treeView selectedNode) notNil ifTrue:[
-        node parent notNil ifTrue:[
-            treeView model add:(self newItem) after:node
-        ] ifFalse:[
-            treeView model add:(self newItem) beforeIndex:1 below:node
-        ].
+    (node := treeView selectedNode) notNil 
+    ifTrue:
+    [
+        node parent notNil 
+            ifTrue: [treeView model add: self newItem after:node] 
+            ifFalse:[treeView model add: self newItem beforeIndex:1 below:node].
         self updateChannels
-    ].
-!
-
-doStepDown
-    "move selected item after next item
-    "
-    treeView selectedNodeChangeSequenceOrder:1.
-    self updateChannels.
-!
-
-doStepIn
-    "lets become the selected item a child of its next sister
-    "
-    treeView selectedNodeBecomeChildOfNext.
-    self updateChannels.
-!
-
-doStepOut
-    "let selected node become a sister of its current parent
-    "
-    treeView selectedNodeBecomeSisterOfParent.
-    self updateChannels.
+    ]
 !
 
-doStepUp
-    "move selected item before previous item
-    "
-    treeView selectedNodeChangeSequenceOrder:-1.
-    self updateChannels.
-!
-
-menuButtons
-    "this window spec was automatically generated by the ST/X MenuEditor"
-
-    ^ self class menuButtons
-
-
-! !
+doCut
+    "cut current selected nodes"
 
-!HierarchicalListEditor methodsFor:'menu main'!
-
-doBrowse:what
-    "open a system browser
-    "
-    |cls sel|
-
-    (cls := specClass) notNil ifTrue:[
-        what == #class ifFalse:[
-            (sel := specSelector) isNil ifTrue:[
-                ^ self
-            ].
-            what == #spec ifTrue:[cls := cls class]
-        ].
-
-        SystemBrowser openInClass:cls selector:sel
+    |selection|
+    treeView hasSelection 
+    ifTrue:
+    [
+        self doCopy.
+        selection := treeView selection asSortedCollection.
+        treeView selectedNodesRemove.
+        treeView selection: selection first - 1.
+        self updateChannels
     ]
 !
 
 doDefineClass
-    "define class and selector
-    "
+    "define class and selector"
+
     |sel cls bindings accepted|
 
-    masterApplication notNil ifTrue:[
-        ^ self information:'only selector could be changed.'
-    ].
+    masterApplication notNil ifTrue:[^self information:'Only selector can be changed.'].
     accepted := true.
     bindings := IdentityDictionary new.
 
@@ -930,22 +1065,24 @@
     specSelector notNil ifTrue:[sel := specSelector asString]
                        ifFalse:[sel := ''].
 
-    bindings at:#specSelectorChannel put:(sel asValue).
-    bindings at:#specClassChannel    put:(cls asValue).
-
-    [accepted] whileTrue:[
-        accepted := self openDialogInterface:#classAndMethodSpec withBindings:bindings.
+    bindings at:#specSelectorChannel put: sel asValue.
+    bindings at:#specClassChannel    put: cls asValue.
 
-        accepted ifTrue:[
-            cls := self resolveName:(bindings at:#specClassChannel) value.
-
-            cls notNil ifTrue:[
-                sel := (bindings at:#specSelectorChannel) value withoutSeparators.
-
-                sel size ~~ 0 ifTrue:[
+    [accepted] 
+    whileTrue:
+    [
+        (accepted := self openDialogInterface:#classAndMethodSpec withBindings:bindings)
+        ifTrue:
+        [
+            (cls := self resolveName:(bindings at:#specClassChannel) value) notNil 
+            ifTrue:
+            [
+                (sel := (bindings at:#specSelectorChannel) value withoutSeparators) size ~~ 0 
+                ifTrue:
+                [
                     specClass    := cls.
                     specSelector := sel asSymbol.
-                  ^ self
+                    ^self
                 ]
             ]
         ]
@@ -954,8 +1091,8 @@
 !
 
 doDefineSelector
-    "define selector only
-    "
+    "define selector only"
+
     |sel bindings accepted|
 
     accepted := true.
@@ -966,15 +1103,17 @@
 
     bindings at:#specSelectorChannel put:(sel asValue).
 
-    [accepted] whileTrue:[
-        accepted := self openDialogInterface:#methodSpec withBindings:bindings.
-
-        accepted ifTrue:[
-            sel := (bindings at:#specSelectorChannel) value withoutSeparators.
-
-            sel size ~~ 0 ifTrue:[
+    [accepted] 
+    whileTrue:
+    [
+        (accepted := self openDialogInterface:#methodSpec withBindings:bindings)
+        ifTrue:
+        [
+            (sel := (bindings at:#specSelectorChannel) value withoutSeparators) size ~~ 0 
+            ifTrue:
+            [
                 specSelector := sel asSymbol.
-              ^ self
+                ^self
             ]
         ]
     ]
@@ -982,12 +1121,14 @@
 !
 
 doInstall
-    "install code
-    "
+    "install code"
+
     |code spec category mthd stream|
 
-    (specClass notNil and:[specSelector notNil]) ifFalse:[
-        ^ self information:'no valid class & method defined'.
+    (specClass notNil and:[specSelector notNil])
+    ifFalse:
+    [
+        ^self information:'No valid class and method defined!!'
     ].
 
     spec   := (treeView nodeAtIndex:1) literalArrayEncoding.
@@ -997,8 +1138,10 @@
     category   := 'interface specs'.
     didInstall := true.
 
-    (mthd := specClass class compiledMethodAt:specSelector) notNil ifTrue:[
-        category := mthd category.
+    (mthd := specClass class compiledMethodAt:specSelector) notNil 
+    ifTrue:
+    [
+        category := mthd category
     ].
 
     code := Character excla asString 
@@ -1027,7 +1170,9 @@
     code := code withCRs.
     (ReadStream on:code) fileIn.
 
-    (specClass compiledMethodAt:specSelector) isNil ifTrue:[
+    (specClass compiledMethodAt:specSelector) isNil 
+    ifTrue:
+    [
         category := 'aspects'.
 
         code := Character excla asString 
@@ -1044,233 +1189,60 @@
                 , '\\'.
 
         code := code withCRs.
-        (ReadStream on:code) fileIn.
-    ].
+        (ReadStream on:code) fileIn
+    ]
 
 
 !
 
 doNew
-    "remove all items; restart
-    "
+    "remove all items; restart"
+
     treeView root:(TreeItem name:'Anchor' contents:#anchor).
-    treeView selection:0.
+    treeView selection:0
 
 !
 
+doPaste
+    "paste after current selected item"
+
+    treeView selectedNodeAdd:CopyBuffer.
+    self updateChannels
+!
+
 doReload
-    "reload spec from current class and selector
-    "
+    "reload spec from current class and selector"
+
     self buildFrom:specClass andSelector:specSelector
 
 !
 
-menuMain
-    "this window spec was automatically generated by the ST/X MenuEditor"
-
-    ^ self class menuMain
-
-
-! !
-
-!HierarchicalListEditor methodsFor:'menu tree'!
-
-doCopy
-    "copy current selected nodes into copy buffer
-    "
-    CopyBuffer := OrderedCollection new.
-    treeView selectedNodesDo:[:aNode| CopyBuffer add:(aNode copy)].
-
-!
-
-doCut
-    "cut current selected nodes
-    "
-    treeView hasSelection ifTrue:[
-        self doCopy.
-        treeView selectedNodesRemove.
-        self updateChannels.
-    ]
-!
-
-doPaste
-    "paste after current selected item
-    "
-    treeView selectedNodeAdd:CopyBuffer.
-    self updateChannels.
-!
-
-menuTree
-    "this window spec was automatically generated by the ST/X MenuEditor"
-
-    ^ self class menuTree
-
-
-! !
-
-!HierarchicalListEditor methodsFor:'private'!
+doStepDown
+    "move selected item after next item"
 
-newItem
-    "creates and returns a new default item
-    "
-    ^ TreeItem name:'undefined' contents:nil
-!
-
-updateChannels
-    "update channels
-    "
-    |node parent chnStepIn chnStepOut chnStepOvr chnChild chnSister|
-
-    chnStepIn := chnStepOut := chnStepOvr := chnChild := chnSister := false.
-
-    (node := treeView selectedNode) notNil ifTrue:[
-        chnChild := true.
-
-        (parent := node parent) notNil ifTrue:[
-            chnSister  := true.
-            chnStepOvr := parent numberOfChildren > 1.
-            chnStepOut := parent parent notNil.
-            chnStepIn  := node ~~ parent lastChild.
-        ]
-    ].
-    self canCreateChildChannel  value:chnChild.
-    self canCreateSisterChannel value:chnSister.
-    self canStepOverChannel     value:chnStepOvr.
-    self canStepOutChannel      value:chnStepOut.
-    self canStepInChannel       value:chnStepIn.
-! !
-
-!HierarchicalListEditor methodsFor:'queries'!
-
-canChangeClassName
-    "returns true if current class could be changed which is dependent on
-     the mode: standalone or started by UIPainter
-    "
-    ^ masterApplication isNil
-!
-
-canCopy
-    "returns true if any selection exists
-    "
-    ^ treeView selection notNil
-!
-
-canCut
-    "returns true if any selection exists and not includes
-     the anchor (first element into list).
-    "
-    treeView selection notNil ifTrue:[
-        ^ (treeView isInSelection:1) not
-    ].
-    ^ false
+    treeView selectedNodeChangeSequenceOrder:1.
+    self updateChannels
 !
 
-canPaste
-    "returns true if something to be paste exists and a
-     single selection exists
-    "
-    ^ (CopyBuffer notNil and:[treeView selectedNode notNil])
-!
+doStepIn
+    "lets become the selected item a child of its next sister"
 
-hasValidClass
-    "returns true if the class defined allready exists
-    "
-    ^ specClass isBehavior
-!
-
-hasValidMethodSelector
-    "returns true if the class and the instance selector defined
-     allready exists.
-    "
-    (specSelector notNil and:[self hasValidClass]) ifTrue:[
-        ^ (specClass compiledMethodAt:specSelector) notNil
-    ].    
-    ^ false
+    treeView selectedNodeBecomeChildOfNext.
+    self updateChannels
 !
 
-hasValidSpecSelector
-    "returns true if the class and the class selector defined
-     allready exists.
-    "
-    (specSelector notNil and:[self hasValidClass]) ifTrue:[
-        ^ (specClass class compiledMethodAt:specSelector) notNil
-    ].    
-! !
-
-!HierarchicalListEditor methodsFor:'startup/release'!
-
-buildFrom:aClass andSelector:aSelector
-    "rebuild window from a class and selector
-    "
-    |sel anchor|
-
-    specClass := self resolveName:aClass.
-    specSelector := nil.
+doStepOut
+    "let selected node become a sister of its current parent"
 
-    aSelector size ~~ 0 ifTrue:[
-        sel := aSelector asString withoutSeparators.
-        sel size ~~ 0 ifTrue:[
-            specSelector := sel asSymbol
-        ]
-    ].
-    treeView selection:nil.
-
-    (specSelector notNil and:[specClass notNil]) ifTrue:[
-        (specClass respondsTo:specSelector) ifTrue:[
-            anchor := specClass perform:specSelector.
-
-            anchor isArray ifTrue:[
-                anchor := anchor decodeAsLiteralArray.
-            ]
-        ]
-    ].
-    anchor notNil ifTrue:[
-        anchor expand.
-        treeView root:anchor.
-    ] ifFalse:[
-        self doNew
-    ].
+    treeView selectedNodeBecomeSisterOfParent.
+    self updateChannels
 !
 
-initialize
-    "setup default values
-    "
-    super initialize.
-
-    treeView := SelectionInTreeView new.
-    treeView multipleSelectOk:true.
-    treeView action:[:aNr| self updateChannels. self cancel ].
-    self doNew.
-!
-
-openModalOnClass:aClass andSelector:aSelector
-    "open modal on class and selector
-    "
-    specClass := Association key:aClass value:aSelector.
-    super openInterfaceModal.
-
-
-!
+doStepUp
+    "move selected item before previous item"
 
-openOnClass:aClass andSelector:aSelector
-    "open on class and selector
-    "
-    specClass := Association key:aClass value:aSelector.
-    super openInterface.
-
-!
-
-postBuildWith:builder
-    "setup view
-    "
-    |cls sel|
-
-    specClass isAssociation ifTrue:[
-        cls := specClass key.
-        sel := specClass value.
-    ].
-    self buildFrom:cls andSelector:sel.
-
+    treeView selectedNodeChangeSequenceOrder:-1.
+    self updateChannels
 ! !
 
 !HierarchicalListEditor class methodsFor:'documentation'!