--- a/Copy.st Wed Sep 04 12:29:17 2002 +0200
+++ b/Copy.st Wed Sep 04 14:23:01 2002 +0200
@@ -1,7 +1,7 @@
"{ Package: 'stx:libtool2' }"
FileOperations subclass:#Copy
- instanceVariableNames:''
+ instanceVariableNames:'colOfCopiedFiles'
classVariableNames:''
poolDictionaries:''
category:'Interface-Support'
@@ -41,6 +41,50 @@
instance := self new.
instance copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance copyFiles:aColOfSourceFiles to:aDirectory.
+ ^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning.
+ ^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
+ ^ instance
+! !
+
+!Copy methodsFor:'accessing'!
+
+colOfCopiedFiles
+ "return the value of the instance variable 'colOfCopiedFiles' (automatically generated)"
+
+ colOfCopiedFiles isNil ifTrue:[
+ colOfCopiedFiles := OrderedCollection new.
+ ].
+ ^ colOfCopiedFiles
! !
!Copy methodsFor:'actions'!
@@ -56,27 +100,36 @@
"copy to
"
- self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:false
+ self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:true
!
copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
"copy to
"
- |newFile fileString|
+ |newFile fileString targetDirectory targetIsDirectory sourceIsDirectory suffix|
- aDestFile exists not ifTrue:[
- DialogBox warn:'cant copy to:', aDestFile asString.
+ sourceIsDirectory := aSourceFile isDirectory.
+ targetIsDirectory := aDestFile isDirectory.
+ targetIsDirectory ifTrue:[
+ targetDirectory := aDestFile.
+ newFile := aDestFile construct:(aSourceFile baseName).
+ ] ifFalse:[
+ targetDirectory := aDestFile directory.
+ newFile := aDestFile.
+ ].
+ "/ do not copy if destination directory doest exist.
+ (targetDirectory exists not) ifTrue:[
+ DialogBox warn:'cant copy to not existing directory ', targetDirectory asString.
result := false.
^ self
].
- newFile := (aDestFile pathName asFilename) construct:(aSourceFile baseName).
- (newFile exists) ifTrue:[
+ (newFile exists) ifTrue:[
((newFile asString = aSourceFile asString) and:[copy]) ifTrue:[
[newFile exists] whileTrue:[
- fileString := newFile baseName.
- fileString := 'CopyOf', fileString.
- newFile := (aDestFile pathName asFilename) construct:fileString.
+ suffix := newFile suffix.
+ fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ newFile := targetDirectory construct:fileString.
].
] ifFalse:[
overWriteWarning ifTrue:[
@@ -96,15 +149,88 @@
self errorString:('on copy file - ', ex description asString).
result := false.
] do:[
- aSourceFile isDirectory ifFalse:[
- aSourceFile copyTo:newFile.
- ] ifTrue:[
+ sourceIsDirectory ifTrue:[
OperatingSystem recursiveCopyDirectory:(aSourceFile pathName)
to:newFile.
+ ] ifFalse:[
+ aSourceFile copyTo:newFile.
].
DirectoryContents flushCachedDirectory:(aSourceFile directory).
result := true.
].
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory
+
+ ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:true.
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
+
+ ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:true.
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
+
+
+ |newFile suffix fileString sourceIsDirectory askResult|
+
+ (aDirectory exists not) ifTrue:[
+ DialogBox warn:'cant copy to not existing directory ', aDirectory asString.
+ result := false.
+ ^ self
+ ].
+ (aDirectory isDirectory not) ifTrue:[
+ DialogBox warn:'destination ', aDirectory asString, ' is not a directory'.
+ result := false.
+ ^ self
+ ].
+ aColOfSourceFiles do:[: filename |
+ newFile := aDirectory construct:(filename baseName).
+ sourceIsDirectory := filename isDirectory.
+ (newFile exists) ifTrue:[
+ askResult := true.
+ ((newFile asString = filename asString) and:[copy]) ifTrue:[
+ [newFile exists] whileTrue:[
+ suffix := newFile suffix.
+ fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ newFile := aDirectory construct:fileString.
+ ].
+ ] ifFalse:[
+ overWriteWarning ifTrue:[
+ askResult := (self fileExistDialogFor:newFile withCancel:true).
+ askResult isNil ifTrue:[
+ result := false.
+ ^ self.
+ ]
+ ]
+ ].
+ ].
+ askResult ifTrue:[
+ Error handle:[:ex|
+ "was not able to copy it"
+ result := false.
+ self errorString:('on copy file - ', ex description asString).
+ ( Dialog
+ confirm:('error on copy file - ', ex description asString)
+ title:'Copy'
+ yesLabel:'Continue'
+ noLabel:'Abort') ifFalse:[
+ ^ self.
+ ].
+ ] do:[
+ sourceIsDirectory ifTrue:[
+ OperatingSystem recursiveCopyDirectory:(filename asString)
+ to:(newFile asString).
+ ] ifFalse:[
+ filename copyTo:newFile.
+ ].
+ ].
+ self colOfCopiedFiles add:filename
+ ]
+ ].
+ DirectoryContents flushCachedDirectory:aDirectory.
+ result := true.
! !
!Copy class methodsFor:'documentation'!
--- a/FileOperations.st Wed Sep 04 12:29:17 2002 +0200
+++ b/FileOperations.st Wed Sep 04 14:23:01 2002 +0200
@@ -8,6 +8,13 @@
!
+!FileOperations class methodsFor:'defaults'!
+
+copyMoveIfExistSuffixString
+
+ ^ '.copy'
+! !
+
!FileOperations methodsFor:'accessing'!
errorString
@@ -37,6 +44,11 @@
!FileOperations methodsFor:'dialogs'!
fileExistDialogFor:aFile
+
+ ^ self fileExistDialogFor:aFile withCancel:false.
+!
+
+fileExistDialogFor:aFile withCancel:aBoolean
| stream string|
aFile exists ifTrue:[
@@ -56,7 +68,11 @@
stream nextPutAll:aFile fileSize asString.
string := stream contents.
stream close.
- ^ (Dialog confirm:(string)).
+ aBoolean ifTrue:[
+ ^ (Dialog confirmWithCancel:(string)).
+ ] ifFalse:[
+ ^ (Dialog confirm:(string)).
+ ].
].
^ true
! !
--- a/Move.st Wed Sep 04 12:29:17 2002 +0200
+++ b/Move.st Wed Sep 04 14:23:01 2002 +0200
@@ -1,7 +1,7 @@
"{ Package: 'stx:libtool2' }"
FileOperations subclass:#Move
- instanceVariableNames:''
+ instanceVariableNames:'colOfMovedFiles'
classVariableNames:''
poolDictionaries:''
category:'Interface-Support'
@@ -11,7 +11,7 @@
!Move class methodsFor:'actions'!
moveFile:aSourceFile to:aDestFile
- "move from to
+ "delete current selected files/directories
"
|instance|
@@ -19,33 +19,199 @@
instance := self new.
instance moveFile:aSourceFile to:aDestFile.
^ instance
+!
+
+moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning.
+ ^ instance
+!
+
+moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning moveFileIfSame:move
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning moveFileIfSame:move.
+ ^ instance
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance moveFiles:aColOfSourceFiles to:aDirectory.
+ ^ instance
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning.
+ ^ instance
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning moveFileIfSame:move
+ "delete current selected files/directories
+ "
+
+ |instance|
+
+ instance := self new.
+ instance moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning moveFileIfSame:move.
+ ^ instance
+! !
+
+!Move methodsFor:'accessing'!
+
+colOfMovedFiles
+ "return the value of the instance variable 'colOfMovedFiles' (automatically generated)"
+
+ colOfMovedFiles isNil ifTrue:[
+ colOfMovedFiles := OrderedCollection new.
+ ].
+ ^ colOfMovedFiles
! !
!Move methodsFor:'actions'!
moveFile:aSourceFile to:aDestFile
- "defete current selected files/directories
- "
+
+ ^ self moveFile:aSourceFile to:aDestFile withOverWriteWarning:true.
+!
+
+moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
+
+ ^ self moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning moveFileIfSame:true
+!
+
+moveFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning moveFileIfSame:move
- |newFile|
+ |newFile fileString targetDirectory targetIsDirectory suffix|
- aDestFile exists not ifTrue:[
- DialogBox warn:'cant move to:', aDestFile asString.
+ targetIsDirectory := aDestFile isDirectory.
+ targetIsDirectory ifTrue:[
+ targetDirectory := aDestFile.
+ newFile := aDestFile construct:(aSourceFile baseName).
+ ] ifFalse:[
+ targetDirectory := aDestFile directory.
+ newFile := aDestFile.
+ ].
+ "/ do not copy if destination directory doest exist.
+ (targetDirectory exists not) ifTrue:[
+ DialogBox warn:'cant move to not existing directory ', targetDirectory asString.
result := false.
^ self
].
- newFile := (aDestFile pathName asFilename) construct:(aSourceFile baseName).
- (self fileExistDialogFor:newFile) ifFalse:[
- result := false.
- ^ self.
+ (newFile exists) ifTrue:[
+ ((newFile asString = aSourceFile asString) and:[move]) ifTrue:[
+ [newFile exists] whileTrue:[
+ suffix := newFile suffix.
+ fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ newFile := targetDirectory construct:fileString.
+ ].
+ ] ifFalse:[
+ overWriteWarning ifTrue:[
+ (self fileExistDialogFor:newFile) ifFalse:[
+ result := false.
+ ^ self.
+ ]
+ ] ifFalse:[
+ result := false.
+ ^ self.
+ ]
+ ].
].
Error handle:[:ex|
- DialogBox warn:ex errorString.
+ "was not able to copy it"
+ WarningBox warn:'on copy file - ', ex errorString.
+ self errorString:('on copy file - ', ex description asString).
result := false.
] do:[
- aSourceFile renameTo:(aDestFile construct:(aSourceFile baseName)).
+ aSourceFile moveTo:newFile.
+ DirectoryContents flushCachedDirectory:(aSourceFile directory).
result := true.
].
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory
+
+ ^ self moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:true
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
+
+ ^ self moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning moveFileIfSame:true
+!
+
+moveFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning moveFileIfSame:move
+
+ |newFile suffix fileString askResult|
+
+ (aDirectory exists not) ifTrue:[
+ DialogBox warn:'cant move to not existing directory ', aDirectory asString.
+ result := false.
+ ^ self
+ ].
+ (aDirectory isDirectory not) ifTrue:[
+ DialogBox warn:'destination ', aDirectory asString, ' is not a directory'.
+ result := false.
+ ^ self
+ ].
+ aColOfSourceFiles do:[: filename |
+ newFile := aDirectory construct:filename baseName.
+ (newFile exists) ifTrue:[
+ askResult := true.
+ ((newFile asString = filename asString) and:[move]) ifTrue:[
+ [newFile exists] whileTrue:[
+ suffix := newFile suffix.
+ fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+ newFile := aDirectory construct:fileString.
+ ].
+ ] ifFalse:[
+ overWriteWarning ifTrue:[
+ askResult := (self fileExistDialogFor:newFile withCancel:true).
+ askResult isNil ifTrue:[
+ result := false.
+ ^ self.
+ ]
+ ]
+ ].
+ ].
+ askResult ifTrue:[
+ Error handle:[:ex|
+ "was not able to copy it"
+ result := false.
+ self errorString:('on move file - ', ex description asString).
+ ( Dialog
+ confirm:('error on move file - ', ex description asString)
+ title:'Move'
+ yesLabel:'Continue'
+ noLabel:'Abort') ifFalse:[
+ ^ self.
+ ].
+ ] do:[
+ filename moveTo:newFile.
+ ].
+ self colOfMovedFiles add:filename
+ ]
+ ].
+ DirectoryContents flushCachedDirectory:aDirectory.
+ result := true.
! !
!Move class methodsFor:'documentation'!
--- a/Rename.st Wed Sep 04 12:29:17 2002 +0200
+++ b/Rename.st Wed Sep 04 14:23:01 2002 +0200
@@ -10,25 +10,25 @@
!Rename class methodsFor:'actions'!
-filesRename:aColOfFiles
+renameFile:oldFile to:newName
"move from to
"
|instance|
instance := self new.
- instance filesRename:aColOfFiles.
+ instance renameFile:oldFile to:newName.
^ instance
!
-renameFrom:oldFile to:newName
+renameFiles:aColOfFiles
"move from to
"
|instance|
instance := self new.
- instance renameFrom:oldFile to:newName.
+ instance renameFiles:aColOfFiles.
^ instance
! !
@@ -113,44 +113,7 @@
!Rename methodsFor:'actions'!
-filesRename:aColOfFiles
- "rename the selected file(s)"
-
- |queryBox b lastNewName lastOldName initialText oldName|
-
- queryBox := FilenameEnterBox new.
- queryBox okText:'Rename'.
- aColOfFiles size > 1 ifTrue:[
- b := queryBox addAbortButtonLabelled:'Cancel All'.
- b action:[^ self ].
- ].
-
- aColOfFiles do:[:oldFile |
- oldName := oldFile baseName asString.
- queryBox title:('Rename ', oldName, ' to:').
-
- lastNewName notNil ifTrue:[
- "/ intelligent default ...
- initialText := self class goodRenameDefaultFor:oldName lastOld:lastOldName lastNew:lastNewName
- ].
- initialText notNil ifTrue:[
- queryBox initialText:initialText.
- ] ifFalse:[
- queryBox initialText:oldName.
- ].
- queryBox action:[:newName |
- (self renameFrom:oldFile to:newName asString) ifTrue:[
- result := true.
- ].
- lastOldName := oldName.
- lastNewName := newName.
- ].
-
- queryBox showAtPointer
- ].
-!
-
-renameFrom:oldFile to:newName
+renameFile:oldFile to:newName
"rename a file (or directory)"
|old new msg|
@@ -184,6 +147,43 @@
self renamedFiles add:new.
].
result := true.
+!
+
+renameFiles:aColOfFiles
+ "rename the selected file(s)"
+
+ |queryBox b lastNewName lastOldName initialText oldName|
+
+ queryBox := FilenameEnterBox new.
+ queryBox okText:'Rename'.
+ aColOfFiles size > 1 ifTrue:[
+ b := queryBox addAbortButtonLabelled:'Cancel All'.
+ b action:[^ self]
+ ].
+ aColOfFiles do:[:oldFile |
+ oldName := oldFile baseName asString.
+ queryBox title:('Rename ' , oldName , ' to:').
+ lastNewName notNil ifTrue:[
+ initialText := self class
+ goodRenameDefaultFor:oldName
+ lastOld:lastOldName
+ lastNew:lastNewName
+ ].
+ initialText notNil ifTrue:[
+ queryBox initialText:initialText
+ ] ifFalse:[
+ queryBox initialText:oldName
+ ].
+ queryBox
+ action:[:newName |
+ (self renameFile:oldFile to:newName asString) ifTrue:[
+ result := true
+ ].
+ lastOldName := oldName.
+ lastNewName := newName
+ ].
+ queryBox showAtPointer
+ ]
! !
!Rename class methodsFor:'documentation'!