--- 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 $'
! !