now ready to use
authorpenk
Wed, 04 Sep 2002 14:23:01 +0200
changeset 1588 6dde5ad32643
parent 1587 91a7b38eb142
child 1589 e3281d70e25c
now ready to use
Copy.st
FileOperations.st
Move.st
Rename.st
--- 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'!