save changed fixed
authorClaus Gittinger <cg@exept.de>
Fri, 19 Sep 2003 16:16:04 +0200
changeset 5197 17755f89feab
parent 5196 13f6e4eaac91
child 5198 ea3f838e1353
save changed fixed
FileApplicationNoteBook.st
--- a/FileApplicationNoteBook.st	Fri Sep 19 14:57:17 2003 +0200
+++ b/FileApplicationNoteBook.st	Fri Sep 19 16:16:04 2003 +0200
@@ -70,9 +70,10 @@
 AbstractFileApplicationNoteBookComponent subclass:#TextEditor
 	instanceVariableNames:'fileContentsModel modifiedChannel editView enableSave
 		enableReload presentation changeItemProcess closeApplication
-		semaChangeItem printAsHexDump itemChanged itemRemoved
-		enableHexToggle md5CheckSum md5HashValueComputationProcess
-		viewModifiedChannel textEditorModificationTime checkModifiedBlock'
+		semaChangeItem wantToPrintAsHexDump printAsHexDump itemChanged
+		itemRemoved enableHexToggle md5CheckSum
+		md5HashValueComputationProcess viewModifiedChannel
+		textEditorModificationTime checkModifiedBlock'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:FileApplicationNoteBook
@@ -1011,7 +1012,7 @@
 tryCloseApplications
 
     self listOfApplications do:[:appl|
-        appl doClose not ifTrue:[
+        appl doClose ifFalse:[
             ^ false.
         ].
     ].
@@ -3760,68 +3761,68 @@
     <resource: #menu>
 
     ^ 
-     #(#Menu
-        #(
-         #(#MenuItem
-            #label: 'Save'
-            #translateLabel: true
-            #isButton: true
-            #nameKey: #Save
-            #value: #accept
-            #enabled: #enableSave
-            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #saveToFile28x22Icon)
+     #(Menu
+        (
+         (MenuItem
+            enabled: enableSave
+            label: 'Save'
+            itemValue: accept
+            nameKey: Save
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary saveToFile28x22Icon)
           )
-         #(#MenuItem
-            #label: 'Reload'
-            #translateLabel: true
-            #isButton: true
-            #nameKey: #Reload
-            #value: #reload
-            #enabled: #enableReload
-            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #reloadFromFile28x22Icon)
+         (MenuItem
+            enabled: enableReload
+            label: 'Reload'
+            itemValue: reload
+            nameKey: Reload
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary reloadFromFile28x22Icon)
           )
-         #(#MenuItem
-            #label: ''
+         (MenuItem
+            label: ''
           )
-         #(#MenuItem
-            #label: 'Print'
-            #translateLabel: true
-            #isButton: true
-            #nameKey: #Print
-            #value: #doPrint
-            #enabled: #enableHexToggle
-            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #printer22x22Icon)
+         (MenuItem
+            enabled: enableHexToggle
+            label: 'Print'
+            itemValue: doPrint
+            nameKey: Print
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary printer22x22Icon)
           )
-         #(#MenuItem
-            #label: ''
+         (MenuItem
+            label: ''
           )
-         #(#MenuItem
-            #label: 'Hex'
-            #translateLabel: true
-            #isButton: true
-            #enabled: #enableHexToggle
-            #labelImage: #(#ResourceRetriever #AbstractFileBrowser #hexToggle22x22Icon)
-            #indication: #printAsHexDump
+         (MenuItem
+            enabled: enableHexToggle
+            label: 'Hex'
+            translateLabel: true
+            isButton: true
+            indication: printAsHexDump
+            labelImage: (ResourceRetriever AbstractFileBrowser hexToggle22x22Icon)
           )
-         #(#MenuItem
-            #label: ''
+         (MenuItem
+            label: ''
           )
-         #(#MenuItem
-            #label: 'Diff to Current'
-            #translateLabel: true
-            #isButton: true
-            #value: #openDiffView
-            #labelImage: #(#ResourceRetriever #AbstractFileBrowser #diffIcon)
+         (MenuItem
+            label: 'Diff to Current'
+            itemValue: openDiffView
+            translateLabel: true
+            isButton: true
+            labelImage: (ResourceRetriever AbstractFileBrowser diffIcon)
           )
-         #(#MenuItem
-            #label: 'Close'
-            #translateLabel: true
-            #isButton: true
-            #hideMenuOnActivated: false
-            #isVisible: #isEmbeddedApplication
-            #startGroup: #right
-            #value: #doClose
-            #labelImage: #(#ResourceRetriever #AbstractFileBrowser #closeIcon)
+         (MenuItem
+            label: 'Close'
+            itemValue: doClose
+            translateLabel: true
+            isButton: true
+            startGroup: right
+            isVisible: isEmbeddedApplication
+            hideMenuOnActivated: false
+            labelImage: (ResourceRetriever AbstractFileBrowser closeIcon)
           )
          )
         nil
@@ -3835,9 +3836,10 @@
 
     self releaseCheckModify.
     (self item = aDirContentsItem and:[(self presentation == #hexDump) == self printAsHexDump value]) ifTrue:[^ true].
+    self askForChange.
+
     super item:aDirContentsItem.
     self printAsHexDump value:(self presentation == #hexDump) withoutNotifying:self.
-    (self askForChange) isNil ifTrue:[ ^ false].
     self setContents ifFalse:[ ^ false].
     checkModifiedBlock isNil ifTrue:[
         checkModifiedBlock := [
@@ -3903,33 +3905,33 @@
 !
 
 askForChange
-    "ask for save changes
+    "ask for save changes; 
+     if modified and answered true, the current contents is written back (accepted)
     "
 
     |answer string arg|
 
-    answer := false.
-    self modifiedChannel value ifTrue:[
-        arg := self fileName baseName allBold.
-
-        self itemChanged value ifTrue:[
-            string := '%1 was changed by someone else.\Save your changes (overwrite someones changes) ?' 
-        ].
+    self modifiedChannel value ifFalse:[ ^ false].
+
+    arg := self fileName baseName allBold.
+
+    self itemChanged value ifTrue:[
+        string := '%1 was changed by someone else.\Save your changes anyway (overwrite someones changes) ?' 
+    ] ifFalse:[
         self itemRemoved value ifTrue:[
             string := '%1 was removed by someone else.\Save your changes anyway (recreate the removed file) ?' 
-        ].
-        string isNil ifTrue:[
+        ] ifFalse:[
             string := 'Save changed file %1 ?'.
-        ].
+        ]
     ].
-    string notNil ifTrue:[
-        answer := (Dialog confirmWithCancel:(resources string:string with:arg) withCRs).
-        answer isNil ifTrue:[^ nil].
-        answer ifTrue:[
-            self accept
-        ] ifFalse:[
-            self setContents.
-        ]
+
+    answer := (Dialog confirmWithCancel:(resources string:string with:arg) withCRs).
+    answer isNil ifTrue:[^ AbortOperationRequest raise ].
+
+    answer ifTrue:[
+        self accept
+    ] ifFalse:[
+        self setContents.
     ].
     ^ answer
 !
@@ -3959,7 +3961,7 @@
 
 doClose
 
-    (self askForChange) isNil ifTrue:[ ^ false].
+    self askForChange.
     self masterApplication notNil ifTrue:[
         ^ super doClose
     ].
@@ -4317,24 +4319,19 @@
         self itemModified.
         ^ self
     ].
+
     changedObject == self printAsHexDump ifTrue:[
-        (self askForChange) isNil ifTrue:[ 
-            self printAsHexDump value:changedObject value not withoutNotifying:self.
-            ^ self
+        AbortOperationRequest handle:[:ex |
+            self printAsHexDump value:false withoutNotifying:self.
+            ^ self.
+        ] do:[
+            self askForChange. 
         ].
-        changedObject value ifTrue:[
-            self presentation:#hexDump.
-        ] ifFalse:[
-            self presentation:#asText.
-        ].
+        self presentation:(changedObject value ifTrue:[#hexDump] ifFalse:[#asText]).
         self changeInformation.
         self setContents.
         editView notNil ifTrue:[
-            (self presentation == #hexDump) ifTrue:[
-                editView readOnly:true.   
-            ] ifFalse:[
-                editView readOnly:false.   
-            ].
+            editView readOnly:(self presentation == #hexDump).   
         ].
         ^ self
     ].
@@ -4952,5 +4949,5 @@
 !FileApplicationNoteBook class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/FileApplicationNoteBook.st,v 1.106 2003-09-17 08:43:17 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/FileApplicationNoteBook.st,v 1.107 2003-09-19 14:16:04 cg Exp $'
 ! !