FileBrowser.st
changeset 6282 3dd6584ffe92
parent 6250 5b0673ccff1c
child 6292 bce1479e1e2a
--- a/FileBrowser.st	Mon Apr 25 16:33:08 2005 +0200
+++ b/FileBrowser.st	Mon Apr 25 16:34:54 2005 +0200
@@ -2259,10 +2259,14 @@
 fileFileIn:fileName lazy:lazy
     "fileIn fileName"
 
-    |aStream path wasLazy prevCurrentFileName|
+    |aStream path wasLazy prevCurrentFileName dontAskSignals|
 
     path := currentDirectory filenameFor:fileName.
-    path type == #regular ifTrue:[
+    path isRegularFile ifFalse:[
+        ^ self.
+    ].
+
+    [
         prevCurrentFileName := currentFileInFileName.
         currentFileInFileName := fileName.
 
@@ -2335,6 +2339,83 @@
                 ]
             ]]]]
         ]]
+    ] on:Error, HaltInterrupt, Class packageRedefinitionNotification do:[:ex| 
+        |sig msg label labels values action proceedValue isRedef|
+
+        isRedef := false.
+        sig := ex signal.
+        sig == Class methodRedefinitionNotification ifTrue:[
+            msg := 'trying to overwrite method:\\    ' , ex oldMethod whoString , '\\in package ''' 
+                   , ex oldPackage , ''' with method from package ''' , ex newPackage , ''''.
+            label := 'Method redefinition in fileIn'.
+            isRedef := true.
+        ] ifFalse:[sig == Class classRedefinitionNotification ifTrue:[
+            msg := 'trying to redefine class: ' , ex oldClass name allBold , '\\in package ''' 
+                   , ex oldPackage , ''' with new definition from package ''' , ex newPackage , ''''.
+            label := 'Class redefinition in fileIn'.
+            isRedef := true.
+        ] ifFalse:[sig == HaltInterrupt ifTrue:[ |sender|
+            label := 'Breakpoint/Halt in fileIn'.
+            sender := ex suspendedContext.
+            msg := msg , '\\in ' , sender receiver class name , '>>' , sender selector
+        ] ifFalse:[
+            label := 'Error in fileIn'.
+            msg := 'error in fileIn: %1'
+        ]]].
+
+        msg := msg bindWith:ex description.
+
+        isRedef ifTrue:[
+              labels := #('Cancel' 'Skip' 'Debug' 'Continue' 'ContinueForAll').
+              values := #(abort     skip  debug   continue   continueForAll).
+        ] ifFalse:[
+              labels := #('Cancel' 'Skip' 'Debug' 'Continue').
+              values := #(abort    skip   debug   continue).
+        ].
+
+        AbortAllOperationRequest isHandled ifTrue:[
+              labels := #('Cancel All') , labels.
+              values := #(cancelAll) , values.
+        ].
+
+        action := OptionBox 
+                      request:(msg withCRs) 
+                      label:label
+                      image:(WarningBox iconBitmap)
+                      buttonLabels:labels
+                      values:values
+                      default:#continue
+                      onCancel:#abort.
+
+        action == #continueForAll ifTrue:[
+            dontAskSignals isNil ifTrue:[
+                dontAskSignals := IdentityDictionary new.
+            ].
+            dontAskSignals at:sig put:#continue.
+            action := #continue.
+        ].
+
+        action == #continue ifTrue:[
+            ex proceedWith:(isRedef ifTrue:[#keep] ifFalse:[#continue]).
+        ].
+        action == #abort ifTrue:[
+            AbortOperationRequest raise.
+            ex return
+        ].
+        action == #cancelAll ifTrue:[
+            AbortAllOperationRequest raise.
+            ex return
+        ].
+        action == #skip ifTrue:[
+            ex proceedWith:nil
+        ].
+        action == #debug ifTrue:[
+            Debugger enter:ex suspendedContext 
+                     withMessage:ex description 
+                     mayProceed:true.
+            ex proceedWith:nil. "skip this change"
+        ].
+        ex reject
     ].
     currentFileInFileName := prevCurrentFileName
 
@@ -7433,5 +7514,5 @@
 !FileBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.600 2005-04-14 09:12:45 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.601 2005-04-25 14:34:54 stefan Exp $'
 ! !