# HG changeset patch # User penk # Date 1031142181 -7200 # Node ID 6dde5ad3264392e496f26937fe1c15f372d1a4be # Parent 91a7b38eb142f2efa2807b6dee9b7cfad8e2a915 now ready to use diff -r 91a7b38eb142 -r 6dde5ad32643 Copy.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'! diff -r 91a7b38eb142 -r 6dde5ad32643 FileOperations.st --- 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 ! ! diff -r 91a7b38eb142 -r 6dde5ad32643 Move.st --- 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'! diff -r 91a7b38eb142 -r 6dde5ad32643 Rename.st --- 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'!