looks for modified
authortz
Wed, 28 Jan 1998 18:20:27 +0100
changeset 506 249e94fdeb94
parent 505 d9ed26eeafe9
child 507 1586e7da66bc
looks for modified
HierarchicalListEditor.st
--- a/HierarchicalListEditor.st	Wed Jan 28 16:24:22 1998 +0100
+++ b/HierarchicalListEditor.st	Wed Jan 28 18:20:27 1998 +0100
@@ -78,12 +78,12 @@
        #(#FullSpec
           #'window:' 
            #(#WindowSpec
-              #'name:' 'Painter'
-              #'layout:' #(#LayoutFrame 233 0 430 0 533 0 558 0)
-              #'label:' 'Painter'
+              #'name:' 'Hierarchical List Editor'
+              #'layout:' #(#LayoutFrame 197 0 172 0 497 0 300 0)
+              #'label:' 'Hierarchical List Editor'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1160 870)
-              #'bounds:' #(#Rectangle 233 430 534 559)
+              #'bounds:' #(#Rectangle 197 172 498 301)
               #'usePreferredExtent:' false
           )
           #'component:' 
@@ -107,6 +107,7 @@
                  #(#InputFieldSpec
                     #'name:' 'classField'
                     #'layout:' #(#LayoutFrame 47 0.11 39 0 -2 1.0 61 0)
+                    #'enableChannel:' #canChangeClassName
                     #'tabable:' true
                     #'model:' #specClassChannel
                 )
@@ -135,305 +136,6 @@
       )
 !
 
-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:#menu
-     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menu)) startUp
-    "
-
-    <resource: #menu>
-
-    ^
-     
-       #(#Menu
-          
-           #(
-             #(#MenuItem
-                #'label:' 'About'
-                #'labelImage:' #(#ResourceRetriever nil #icon)
-                #'submenuChannel:' #menuAbout
-            )
-             #(#MenuItem
-                #'label:' 'File'
-                #'submenu:' 
-                 #(#Menu
-                    
-                     #(
-                       #(#MenuItem
-                          #'label:' 'New'
-                          #'value:' #doNew
-                      )
-                       #(#MenuItem
-                          #'label:' 'Reload'
-                          #'value:' #doReload
-                      )
-                       #(#MenuItem
-                          #'label:' '-'
-                      )
-                       #(#MenuItem
-                          #'label:' 'Save'
-                          #'value:' #doInstall
-                          #'enabled:' #hasValidClass
-                      )
-                       #(#MenuItem
-                          #'label:' '-'
-                      )
-                       #(#MenuItem
-                          #'label:' 'Define Selector...'
-                          #'value:' #doDefineSelector
-                          #'enabled:' #hasValidClass
-                      )
-                       #(#MenuItem
-                          #'label:' 'Define Class...'
-                          #'value:' #doDefineClass
-                          #'enabled:' #canChangeClassName
-                      )
-                       #(#MenuItem
-                          #'label:' '-'
-                      )
-                       #(#MenuItem
-                          #'label:' 'Exit'
-                          #'value:' #closeRequest
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #'label:' 'Edit'
-                #'submenuChannel:' #menuEdit
-            )
-             #(#MenuItem
-                #'label:' 'Browse'
-                #'enabled:' #hasValidClass
-                #'submenu:' 
-                 #(#Menu
-                    
-                     #(
-                       #(#MenuItem
-                          #'label:' 'Class'
-                          #'value:' #'doBrowse:'
-                          #'argument:' #class
-                      )
-                       #(#MenuItem
-                          #'label:' 'Method'
-                          #'value:' #'doBrowse:'
-                          #'enabled:' #hasValidMethodSelector
-                          #'argument:' #method
-                      )
-                       #(#MenuItem
-                          #'label:' 'Specification'
-                          #'value:' #'doBrowse:'
-                          #'enabled:' #hasValidSpecSelector
-                          #'argument:' #spec
-                      )
-                    ) nil
-                    nil
-                )
-            )
-          ) nil
-          nil
-      )
-!
-
-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:#menuEdit
-     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuEdit)) startUp
-    "
-
-    <resource: #menu>
-
-    ^
-     
-       #(#Menu
-          
-           #(
-             #(#MenuItem
-                #'label:' 'Cut'
-                #'value:' #doCut
-                #'enabled:' #canCut
-            )
-             #(#MenuItem
-                #'label:' 'Copy'
-                #'value:' #doCopy
-                #'enabled:' #canCopy
-            )
-             #(#MenuItem
-                #'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:' '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 nil #createChildIcon)
-            )
-             #(#MenuItem
-                #'label:' 'Create Sister'
-                #'isButton:' true
-                #'value:' #doCreateSister
-                #'enabled:' #canCreateSisterChannel
-                #'labelImage:' #(#ResourceRetriever nil #createSisterIcon)
-            )
-             #(#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
-      )
-!
-
-methodSpec
-    "this window spec was automatically generated by the ST/X UIPainter"
-
-    "do not manually edit this - the painter/builder may not be able to
-     handle the specification if its corrupted."
-
-    "
-     UIPainter new openOnClass:HierarchicalListEditor andSelector:#methodSpec
-     HierarchicalListEditor new openInterface:#methodSpec
-    "
-
-    <resource: #canvas>
-
-    ^
-     
-       #(#FullSpec
-          #'window:' 
-           #(#WindowSpec
-              #'name:' 'Painter'
-              #'layout:' #(#LayoutFrame 151 0 377 0 431 0 455 0)
-              #'label:' 'Painter'
-              #'min:' #(#Point 10 10)
-              #'max:' #(#Point 1160 870)
-              #'bounds:' #(#Rectangle 151 377 432 456)
-              #'usePreferredExtent:' false
-          )
-          #'component:' 
-           #(#SpecCollection
-              #'collection:' 
-               #(
-                 #(#LabelSpec
-                    #'name:' 'boxLabel'
-                    #'layout:' #(#LayoutFrame 0 0.0 3 0 0 1.0 20 0)
-                    #'label:' 'Selector for code:'
-                    #'adjust:' #left
-                    #'resizeForLabel:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'methodField'
-                    #'layout:' #(#LayoutFrame 0 0.0 22 0 0 1.0 44 0)
-                    #'tabable:' true
-                    #'model:' #specSelectorChannel
-                    #'type:' #string
-                )
-                 #(#UISubSpecification
-                    #'name:' 'SubSpecification'
-                    #'layout:' #(#LayoutFrame 0 0.0 -29 1 0 1.0 -5 1.0)
-                    #'majorKey:' #ToolApplicationModel
-                    #'minorKey:' #windowSpecForCommitWithoutChannels
-                )
-              )
-          )
-      )
-!
-
 windowSpec
     "this window spec was automatically generated by the ST/X UIPainter"
 
@@ -544,6 +246,276 @@
       )
 ! !
 
+!HierarchicalListEditor class methodsFor:'menu specs'!
+
+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:#menu
+     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'About'
+                #'labelImage:' #(#ResourceRetriever nil #icon)
+                #'submenuChannel:' #menuAbout
+            )
+             #(#MenuItem
+                #'label:' 'File'
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'New'
+                          #'value:' #doNew
+                      )
+                       #(#MenuItem
+                          #'label:' 'Reload'
+                          #'value:' #doReload
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Save'
+                          #'value:' #doInstall
+                          #'enabled:' #hasValidClass
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Define Class And Selector...'
+                          #'value:' #doDefineClass
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Exit'
+                          #'value:' #closeRequest
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
+                #'label:' 'Edit'
+                #'submenuChannel:' #menuEdit
+            )
+             #(#MenuItem
+                #'label:' 'Browse'
+                #'enabled:' #hasValidClass
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'Class'
+                          #'value:' #'doBrowse:'
+                          #'argument:' #class
+                      )
+                       #(#MenuItem
+                          #'label:' 'Method'
+                          #'value:' #'doBrowse:'
+                          #'enabled:' #hasValidMethodSelector
+                          #'argument:' #method
+                      )
+                       #(#MenuItem
+                          #'label:' 'Specification'
+                          #'value:' #'doBrowse:'
+                          #'enabled:' #hasValidSpecSelector
+                          #'argument:' #spec
+                      )
+                    ) nil
+                    nil
+                )
+            )
+          ) nil
+          nil
+      )
+!
+
+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:#menuEdit
+     (Menu new fromLiteralArrayEncoding:(HierarchicalListEditor menuEdit)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'Cut'
+                #'value:' #doCut
+                #'enabled:' #canCut
+            )
+             #(#MenuItem
+                #'label:' 'Copy'
+                #'value:' #doCopy
+                #'enabled:' #canCopy
+            )
+             #(#MenuItem
+                #'label:' 'Paste'
+                #'value:' #doPaste
+                #'enabled:' #canPaste
+            )
+             #(#MenuItem
+                #'label:' '-'
+            )
+             #(#MenuItem
+                #'label:' 'Create Child'
+                #'value:' #doCreateChild
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #createChildIcon 'Create Child')
+            )
+             #(#MenuItem
+                #'label:' 'Create Sister'
+                #'value:' #doCreateSister
+                #'enabled:' #canCreateSisterChannel
+                #'labelImage:' #(#ResourceRetriever #HierarchicalListEditor #createSisterIcon 'Create Sister')
+            )
+             #(#MenuItem
+                #'label:' '-'
+            )
+             #(#MenuItem
+                #'label:' 'Move Up'
+                #'value:' #doStepUp
+                #'activeHelpKey:' #moveSelectionUp
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever #ToolApplicationModel #upIcon 'Move Up')
+            )
+             #(#MenuItem
+                #'label:' 'Move Down'
+                #'value:' #doStepDown
+                #'activeHelpKey:' #moveSelectionDown
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever #ToolApplicationModel #downIcon 'Move Down')
+            )
+             #(#MenuItem
+                #'label:' 'Move In'
+                #'value:' #doStepIn
+                #'activeHelpKey:' #moveSelectionRight
+                #'enabled:' #canStepInChannel
+                #'labelImage:' #(#ResourceRetriever #ToolApplicationModel #downRightIcon 'Move In')
+            )
+             #(#MenuItem
+                #'label:' 'Move Out'
+                #'value:' #doStepOut
+                #'activeHelpKey:' #moveSelectionLeft
+                #'enabled:' #canStepOutChannel
+                #'labelImage:' #(#ResourceRetriever #ToolApplicationModel #leftDownIcon 'Move Out')
+            )
+          ) 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
+                #'labelImage:' #(#ResourceRetriever nil #newIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Save'
+                #'isButton:' true
+                #'value:' #doInstall
+                #'enabled:' #hasValidClass
+                #'labelImage:' #(#ResourceRetriever nil #saveIcon)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'Create Child'
+                #'isButton:' true
+                #'value:' #doCreateChild
+                #'enabled:' #canCreateChildChannel
+                #'labelImage:' #(#ResourceRetriever nil #createChildIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Create Sister'
+                #'isButton:' true
+                #'value:' #doCreateSister
+                #'enabled:' #canCreateSisterChannel
+                #'labelImage:' #(#ResourceRetriever nil #createSisterIcon)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'Move Up'
+                #'isButton:' true
+                #'value:' #doStepUp
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever nil #upIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Move Down'
+                #'isButton:' true
+                #'value:' #doStepDown
+                #'enabled:' #canStepOverChannel
+                #'labelImage:' #(#ResourceRetriever nil #downIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Move In'
+                #'isButton:' true
+                #'value:' #doStepIn
+                #'enabled:' #canStepInChannel
+                #'labelImage:' #(#ResourceRetriever nil #downRightIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Move Out'
+                #'isButton:' true
+                #'value:' #doStepOut
+                #'enabled:' #canStepOutChannel
+                #'labelImage:' #(#ResourceRetriever nil #leftDownIcon)
+            )
+          ) nil
+          nil
+      )
+! !
+
 !HierarchicalListEditor class methodsFor:'printing'!
 
 prettyPrintArray:anArray on:aStream indent:anIndent
@@ -674,6 +646,13 @@
 
 !
 
+hasValidClass
+    "automatically generated by UIPainter ..."
+
+    ^builder booleanValueAspectFor:#hasValidClass
+
+!
+
 itemName
     "automatically generated by UIPainter ..."
 
@@ -730,6 +709,22 @@
     ^true
 !
 
+checkModified
+    "check menu modification
+    "
+    isModified
+    ifTrue:
+    [
+        ((YesNoBox title:'Hierarchical list was modified!!')        
+            noText:'Cancel';
+            yesText:'Waste it and proceed';
+            showAtPointer;
+            accepted) ifFalse: [^false].
+        isModified := false
+    ].
+    ^true
+!
+
 newItem
     "creates and returns a new default item"
 
@@ -765,7 +760,9 @@
     self canCreateSisterChannel value:chnSister.
     self canStepOverChannel     value:chnStepOvr.
     self canStepOutChannel      value:chnStepOut.
-    self canStepInChannel       value:chnStepIn
+    self canStepInChannel       value:chnStepIn.
+
+
 !
 
 updateInputFields
@@ -817,12 +814,6 @@
     ^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."
@@ -873,13 +864,22 @@
         [
             anchor := specClass perform:specSelector.
             anchor isArray ifTrue:[anchor := anchor decodeAsLiteralArray]
-        ]
+        ].
+        self hasValidClass value: true
     ].
     anchor notNil 
         ifTrue: [anchor expand. treeView root:anchor] 
         ifFalse:[self doNew]
 !
 
+closeRequest
+    "close request"
+
+    (self checkMenuItemModified and: [self checkModified]) ifTrue: [super closeRequest]
+
+
+!
+
 initialize
     "setup default values"
 
@@ -892,7 +892,6 @@
     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
@@ -923,6 +922,8 @@
     ].
     self buildFrom:cls andSelector:sel.
 
+    isModified := false
+
 ! !
 
 !HierarchicalListEditor methodsFor:'user actions'!
@@ -940,6 +941,7 @@
         node contents: self itemValue value.
         treeView redrawLine:index.
     ].
+    isModified := true.
     self valueOfEnablingCommitButtons value: false
 !
 
@@ -948,6 +950,7 @@
 
     self updateInputFields.
 
+    isModified := false.
     self valueOfEnablingCommitButtons value: false
 !
 
@@ -988,6 +991,7 @@
         treeView model add: self newItem beforeIndex:1 below:node.
         treeView selectedNodeExpand:true.
         self updateChannels.
+        isModified := true
     ]
 !
 
@@ -1002,7 +1006,8 @@
         node parent notNil 
             ifTrue: [treeView model add: self newItem after:node] 
             ifFalse:[treeView model add: self newItem beforeIndex:1 below:node].
-        self updateChannels
+        self updateChannels.
+        isModified := true
     ]
 !
 
@@ -1017,7 +1022,8 @@
         selection := treeView selection asSortedCollection.
         treeView selectedNodesRemove.
         treeView selection: selection first - 1.
-        self updateChannels
+        self updateChannels.
+        isModified := true
     ]
 !
 
@@ -1026,7 +1032,6 @@
 
     |sel cls bindings accepted|
 
-    masterApplication notNil ifTrue:[^self information:'Only selector can be changed.'].
     accepted := true.
     bindings := IdentityDictionary new.
 
@@ -1053,6 +1058,8 @@
                 [
                     specClass    := cls.
                     specSelector := sel asSymbol.
+                    self hasValidClass value: true.
+                    isModified := true.
                     ^self
                 ]
             ]
@@ -1061,36 +1068,6 @@
 
 !
 
-doDefineSelector
-    "define selector only"
-
-    |sel bindings accepted|
-
-    accepted := true.
-    bindings := IdentityDictionary new.
-
-    specSelector notNil ifTrue:[sel := specSelector asString]
-                       ifFalse:[sel := ''].
-
-    bindings at:#specSelectorChannel put:(sel asValue).
-
-    [accepted] 
-    whileTrue:
-    [
-        (accepted := self openDialogInterface:#methodSpec withBindings:bindings)
-        ifTrue:
-        [
-            (sel := (bindings at:#specSelectorChannel) value withoutSeparators) size ~~ 0 
-            ifTrue:
-            [
-                specSelector := sel asSymbol.
-                ^self
-            ]
-        ]
-    ]
-
-!
-
 doInstall
     "install code"
 
@@ -1108,6 +1085,7 @@
     spec       := stream contents.
     category   := 'interface specs'.
     didInstall := true.
+    isModified := false.
 
     (mthd := specClass class compiledMethodAt:specSelector) notNil 
     ifTrue:
@@ -1170,7 +1148,11 @@
     "remove all items; restart"
 
     treeView root:(TreeItem name:'Anchor' contents:#anchor).
-    treeView selection:0
+    treeView selection:0.
+    isModified := true
+
+
+
 
 !
 
@@ -1178,7 +1160,9 @@
     "paste after current selected item"
 
     treeView selectedNodeAdd:CopyBuffer.
-    self updateChannels
+    self updateChannels.
+    isModified := true
+
 !
 
 doReload
@@ -1192,28 +1176,42 @@
     "move selected item after next item"
 
     treeView selectedNodeChangeSequenceOrder:1.
-    self updateChannels
+    self updateChannels.
+    isModified := true
+
 !
 
 doStepIn
     "lets become the selected item a child of its next sister"
 
     treeView selectedNodeBecomeChildOfNext.
-    self updateChannels
+    self updateChannels.
+    isModified := true
+
+
+
 !
 
 doStepOut
     "let selected node become a sister of its current parent"
 
     treeView selectedNodeBecomeSisterOfParent.
-    self updateChannels
+    self updateChannels.
+    isModified := true
+
+
+
 !
 
 doStepUp
     "move selected item before previous item"
 
     treeView selectedNodeChangeSequenceOrder:-1.
-    self updateChannels
+    self updateChannels.
+    isModified := true
+
+
+
 ! !
 
 !HierarchicalListEditor class methodsFor:'documentation'!