Move.st
changeset 1588 6dde5ad32643
parent 1585 91ec771207a2
--- 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'!