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