# HG changeset patch # User penk # Date 1034235370 -7200 # Node ID 09ec3349210c8edc655967b25b34a2b1a6e7d69a # Parent 498b52de9ae85bbd7d50526c93e9b13ba3ad18d8 instable state diff -r 498b52de9ae8 -r 09ec3349210c AbstractFileBrowser.st --- a/AbstractFileBrowser.st Wed Oct 09 15:45:46 2002 +0200 +++ b/AbstractFileBrowser.st Thu Oct 10 09:36:10 2002 +0200 @@ -1,13 +1,13 @@ "{ Package: 'stx:libtool' }" ApplicationModel subclass:#AbstractFileBrowser - instanceVariableNames:'aspects' - classVariableNames:'DirectoryHistory DefaultCommandPerMIME SettingsAspects - RuntimeAspects DirectoryBookmarks LastEnforcedNameSpace - CommandHistory DefaultCommandPerSuffix CommandHistorySize - LastFileDiffFile' - poolDictionaries:'' - category:'Interface-Tools-File' + instanceVariableNames:'aspects' + classVariableNames:'DirectoryHistory DefaultCommandPerMIME SettingsAspects + RuntimeAspects DirectoryBookmarks LastEnforcedNameSpace + CommandHistory DefaultCommandPerSuffix CommandHistorySize + LastFileDiffFile' + poolDictionaries:'' + category:'Interface-Tools-File' ! AbstractFileBrowser class instanceVariableNames:'DisabledCursorImage EnabledCursorImage' @@ -15,52 +15,52 @@ " The following class instance variables are inherited by this class: - ApplicationModel - ClassResources - Model - - Object - + ApplicationModel - ClassResources + Model - + Object - " ! Object subclass:#Clipboard - instanceVariableNames:'method files' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractFileBrowser + instanceVariableNames:'method files' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractFileBrowser ! Object subclass:#CodeExecutionLock - instanceVariableNames:'locked' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractFileBrowser + instanceVariableNames:'locked' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractFileBrowser ! OrderedCollection subclass:#DirectoryHistory - instanceVariableNames:'forwardList lastWasForwardAction' - classVariableNames:'HistorySize' - poolDictionaries:'' - privateIn:AbstractFileBrowser + instanceVariableNames:'forwardList lastWasForwardAction' + classVariableNames:'HistorySize' + poolDictionaries:'' + privateIn:AbstractFileBrowser ! Object subclass:#DirectoryHistoryItem - instanceVariableNames:'path position' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractFileBrowser::DirectoryHistory + instanceVariableNames:'path position' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractFileBrowser::DirectoryHistory ! OrderedSet subclass:#FilenameHistory - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractFileBrowser + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractFileBrowser ! Object subclass:#SaveAspectItem - instanceVariableNames:'value isHolder' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractFileBrowser + instanceVariableNames:'value isHolder' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractFileBrowser ! @@ -3911,10 +3911,10 @@ text add:('group: ', (OperatingSystem getGroupNameFromID:(info gid))). - ts := info accessTime. + ts := info accessed. text add:('last access: ',ts asTime printString ,' ', ts asDate printString). - ts := (info modificationTime). + ts := (info modified). text add:('last modification: ', ts asTime printString, ' ', ts asDate printString). ]. ^ text asString @@ -4660,5 +4660,5 @@ !AbstractFileBrowser class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.15 2002-10-09 12:20:26 penk Exp $' + ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.16 2002-10-10 07:35:51 penk Exp $' ! ! diff -r 498b52de9ae8 -r 09ec3349210c DirectoryContentsBrowser.st --- a/DirectoryContentsBrowser.st Wed Oct 09 15:45:46 2002 +0200 +++ b/DirectoryContentsBrowser.st Thu Oct 10 09:36:10 2002 +0200 @@ -1,26 +1,24 @@ "{ Package: 'stx:libtool' }" AbstractFileBrowser subclass:#DirectoryContentsBrowser - instanceVariableNames:'browser updateDirectoryContentsTask modificationTime directory - columnDescriptors filterBlock iconIndex fileDescriptionIndex - iconExtent tableColumns sortBlock currentSortOrder previewIndex - allItemsList updateColumnsTask currentItemList wantSelectFiles - updateToExternFileHolderLock updateTaskSema updateFromSensorTask - inDropMode draggedItem canDropItem viewBrowserMenu' - classVariableNames:'' - poolDictionaries:'' - category:'Interface-Tools-File' + instanceVariableNames:'browser updateDirectoryContentsTask modificationTime directory + columnDescriptors filterBlock iconIndex fileDescriptionIndex + iconExtent tableColumns sortBlock currentSortOrder previewIndex + allItemsList updateColumnsTask currentItemList wantSelectFiles + updateToExternFileHolderLock updateTaskSema updateFromSensorTask + inDropMode draggedItem canDropItem viewBrowserMenu' + classVariableNames:'' + poolDictionaries:'' + category:'Interface-Tools-File' ! Object subclass:#DirectoryContentsItem - instanceVariableNames:'fileName fileInfo icon fileType link linkInfo - contentsBrowserChangeModificationTime isDirectory baseName suffix - preview group owner pathName permissions size timeAndDate date - lastButOneSuffix suffixes modificationTime modifiedByMe mimeType - iconKey' - classVariableNames:'' - poolDictionaries:'' - privateIn:DirectoryContentsBrowser + instanceVariableNames:'fileName fileInfo icon fileType + contentsBrowserChangeModificationTime suffix preview group owner + timeAndDate modifiedByMe mimeType iconKey mimeTypeForContents' + classVariableNames:'LastUIDToUserNameMapping LastGIDToGroupNameMapping' + poolDictionaries:'' + privateIn:DirectoryContentsBrowser ! !DirectoryContentsBrowser class methodsFor:'documentation'! @@ -1238,8 +1236,8 @@ "/ (anItem notNil and:[anItem isDirectory]) ifTrue:[ self halt]. current := draggedItem. - Transcript showCR:'current:', (current isNil ifTrue:['nil'] ifFalse:[current fileName baseName]). - Transcript showCR:'anItem:', (anItem isNil ifTrue:['nil'] ifFalse:[anItem fileName baseName]). +"/ Transcript showCR:'current:', (current isNil ifTrue:['nil'] ifFalse:[current fileName baseName]). +"/ Transcript showCR:'anItem:', (anItem isNil ifTrue:['nil'] ifFalse:[anItem fileName baseName]). current == anItem ifTrue:[^ self]. draggedItem := anItem. @@ -1659,6 +1657,7 @@ vis := browser indexOfFirstRowShown. vis = 0 ifTrue:[vis := 1]. idx := self descriptions findFirst:aBlock startingAt:vis. + (browser isRowVisible:idx) ifFalse:[^ nil]. idx == 0 ifTrue:[ (idx := self descriptions findLast:aBlock startingAt:(vis - 1)) == 0 ifTrue:[ @@ -1774,7 +1773,7 @@ currentItemList notEmpty ifTrue:[ "/ update item if item properties are changed - desc := self findNextBuildInDescFor:[:n| n changedForDirectoryContentsBrowser ]. + desc := self findNextBuildInDescFor:[:n| n hasBeenModified ]. desc notNil ifTrue:[ browser invalidateVisibleRow:desc. @@ -1783,7 +1782,7 @@ ]. "/ update icon for visible items by suffix desc := self findNextBuildInDescFor:[:n| n icon isNil ]. - desc notNil ifTrue:[ + desc notNil ifTrue:[ icon := self getIconFor:desc. desc icon:icon. (icon notNil and:[iconIndex ~~ 0]) ifTrue:[ @@ -1792,18 +1791,18 @@ ^ true ]. "/ update icon for visible items by contents -"/ desc := self findNextBuildInDescFor:[:n| -"/ (n iconKey == #file -"/ and:[n mimeTypeForContents asSymbol ~= #unknown]) -"/ ]. -"/ desc notNil ifTrue:[ -"/ icon := self getIconForMimeTypeByContents:desc. -"/ desc icon:icon. -"/ (icon notNil and:[iconIndex ~~ 0]) ifTrue:[ -"/ browser invalidateVisibleRow:desc colAt:iconIndex -"/ ]. -"/ ^ true -"/ ]. + desc := self findNextBuildInDescFor:[:n| + (n iconKey == #file + and:[n mimeTypeForContents asSymbol ~= #unknown]) + ]. + desc notNil ifTrue:[ + icon := self getIconForMimeTypeByContents:desc. + desc icon:icon. + (icon notNil and:[iconIndex ~~ 0]) ifTrue:[ + browser invalidateVisibleRow:desc colAt:iconIndex + ]. + ^ true + ]. "/ update file info for visible items if file info column is shown fileDescriptionIndex ~~ 0 ifTrue:[ desc := self findNextBuildInDescFor:[:n| n fileType isNil ]. @@ -2085,12 +2084,19 @@ ! isDirectory - "return the value of the instance variable 'isDirectory' (automatically generated)" + self isRemoteDirectory ifTrue:[^ true]. + + self getFileInfo. + fileInfo isNil ifTrue:[^ false]. + ^ fileInfo isDirectory +! - isDirectory isNil ifTrue:[ - isDirectory := self fileName isDirectory. - ]. - ^ isDirectory +isSymbolicLink + self isRemoteDirectory ifTrue:[^ false]. + + self getFileInfo. + fileInfo isNil ifTrue:[^ false]. + ^ fileInfo isSymbolicLink ! lastButOneSuffix @@ -2110,19 +2116,15 @@ link "returns the type of the file " - link isNil ifTrue:[ - link := fileName isSymbolicLink. - ]. - ^ link + self halt. + ^ self isSymbolicLink. ! linkInfo "returns the type of the file " - linkInfo isNil ifTrue:[ - linkInfo := self fileName linkInfo. - ]. - ^ linkInfo +self halt. + ^ self fileName linkInfo. ! mimeType @@ -2176,28 +2178,32 @@ | lastSuff lastButOneSuff| + (fileName name occurrencesOf:$.) <= 1 ifTrue:[ + ^ Array with:(self suffix) with:nil. + ]. + (fileName baseName occurrencesOf:$.) <= 1 ifTrue:[ + ^ Array with:(self suffix) with:nil. + ]. - suffixes isNil ifTrue:[ - ((lastSuff := self suffix) isEmpty) ifTrue:[ - lastSuff := nil. - ] ifFalse:[ - lastSuff := lastSuff asLowercase. - ]. - ((lastButOneSuff := fileName withoutSuffix suffix) isEmpty) ifTrue:[ + ((lastSuff := self suffix) isEmpty) ifTrue:[ + lastSuff := nil. + ] ifFalse:[ + lastSuff := lastSuff asLowercase. + ]. + + ((lastButOneSuff := fileName withoutSuffix suffix) isEmpty) ifTrue:[ + lastButOneSuff := nil. + ] ifFalse:[ + lastButOneSuff := lastButOneSuff asLowercase. + ]. + + (lastSuff notNil and:[lastButOneSuff notNil]) ifTrue:[ + (lastSuff = 'bak' or:[lastSuff = 'sav']) ifTrue:[ + lastSuff := lastButOneSuff. lastButOneSuff := nil. - ] ifFalse:[ - lastButOneSuff := lastButOneSuff asLowercase. - ]. - - (lastSuff notNil and:[lastButOneSuff notNil]) ifTrue:[ - (lastSuff = 'bak' or:[lastSuff = 'sav']) ifTrue:[ - lastSuff := lastButOneSuff. - lastButOneSuff := nil. - ] - ]. - suffixes := Array with:lastSuff with:lastButOneSuff + ] ]. - ^ suffixes + ^ Array with:lastSuff with:lastButOneSuff ! type @@ -2221,38 +2227,27 @@ resetItemForChangesFromSomeOneElse " dont know what someone else is doing with the file - read all item properties new " - link := nil. - linkInfo := nil. fileInfo := nil. - size := nil. icon := nil. - link := nil. fileType := nil. preview := nil. owner := nil. - modificationTime := nil. - permissions := nil. timeAndDate := nil. - date := nil. group := nil. ! resetItemForTextEditorChange " read size and time item properties new " - size := nil. - linkInfo := nil. fileInfo := nil. timeAndDate := nil. - date := nil. - modificationTime := nil. modifiedByMe := true. "/ textEditorChangeModificationTime := nil. ! ! !DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'change queries'! -changedForDirectoryContentsBrowser +hasBeenModified "check if item modification time is changed " @@ -2260,15 +2255,18 @@ self isRemoteDirectory ifTrue:[^ false]. - info := fileName asAbsoluteFilename info. + info := fileName info. info isNil ifTrue:[ ^ false]. time := info modificationTime. + contentsBrowserChangeModificationTime isNil ifTrue:[ contentsBrowserChangeModificationTime := time. + fileInfo := nil. ^ false. ]. ((contentsBrowserChangeModificationTime = time) not) ifTrue:[ contentsBrowserChangeModificationTime := time. + fileInfo := nil. ^ true ]. ^ false @@ -2288,23 +2286,12 @@ ^ fileName hash ! ! -!DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'instance creation'! - -initialize - "initialize instance - " - contentsBrowserChangeModificationTime := (self valueAt:#modified). "/ remark modification to get changes of file in contents browser -! ! - !DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'presentation'! baseName "returns the baseName of the file " - baseName isNil ifTrue:[ - baseName := fileName baseName. - ]. - ^ baseName + ^ fileName baseName. ! baseName:aName @@ -2326,19 +2313,15 @@ ! date - "returns the date + "returns the modTimeString " | modTime | - date isNil ifTrue:[ - modTime := self valueAt:#modified. - modTime isNil ifTrue:[ - date := '???' - ] ifFalse:[ - date := modTime asDate printString. - ] + modTime := self modificationTime. + modTime isNil ifTrue:[ + ^ '???' ]. - ^ date + ^ modTime asDate printString. ! fileInfoString @@ -2355,14 +2338,31 @@ ^ afileType ! +fileSize + "returns the fileSize + " + self getFileInfo. + fileInfo isNil ifTrue:[^ nil]. + + ^ fileInfo fileSize +! + group "returns the printable group " |gid| group isNil ifTrue:[ - gid := self valueAt:#gid. - group := gid notNil ifTrue:[OperatingSystem getGroupNameFromID:gid] ifFalse:[^ '???'] + self getFileInfo. + fileInfo isNil ifTrue:[^ '???']. + + gid := fileInfo gid. + (LastGIDToGroupNameMapping notNil and:[gid == LastGIDToGroupNameMapping key]) ifTrue:[ + group := LastGIDToGroupNameMapping value + ] ifFalse:[ + group := OperatingSystem getGroupNameFromID:gid. + LastGIDToGroupNameMapping := gid -> group. + ] ]. ^ group ! @@ -2370,10 +2370,10 @@ modificationTime "returns the absolute time of modification " - modificationTime isNil ifTrue:[ - modificationTime := self valueAt:#modified. - ]. - ^ modificationTime + self getFileInfo. + fileInfo isNil ifTrue:[^ nil]. + + ^ fileInfo modificationTime ! owner @@ -2382,8 +2382,16 @@ |uid| owner isNil ifTrue:[ - uid := self valueAt:#uid. - owner := uid notNil ifTrue:[OperatingSystem getUserNameFromID:uid] ifFalse:[^ '???']. + self getFileInfo. + fileInfo isNil ifTrue:[^ '???']. + + uid := fileInfo uid. + (LastUIDToUserNameMapping notNil and:[uid == LastUIDToUserNameMapping key]) ifTrue:[ + owner := LastUIDToUserNameMapping value + ] ifFalse:[ + owner := OperatingSystem getUserNameFromID:uid. + LastUIDToUserNameMapping := uid -> owner. + ] ]. ^ owner ! @@ -2391,31 +2399,27 @@ pathName "returns the pathName of the file " - pathName isNil ifTrue:[ - pathName := fileName pathName. - ]. - ^ pathName +self halt. + ^ fileName pathName. ! permissions "returns the permissions as printable string " - |mode| + |mode permissionString| - permissions isNil ifTrue:[ - (mode := self valueAt:#mode) notNil ifTrue:[ - permissions := String new:9 withAll:$-. + self getFileInfo. + fileInfo isNil ifTrue:[^ '???'.]. - 1 to:9 by:3 do:[:i| - (mode bitAt:i ) == 1 ifTrue:[permissions at:10 - i put:$x]. - (mode bitAt:i + 1) == 1 ifTrue:[permissions at:9 - i put:$w]. - (mode bitAt:i + 2) == 1 ifTrue:[permissions at:8 - i put:$r]. - ] - ] ifFalse:[ - permissions := '???'. - ]. + mode := fileInfo mode. + permissionString := String new:9 withAll:$-. + + 1 to:9 by:3 do:[:i| + (mode bitAt:i ) == 1 ifTrue:[permissionString at:10 - i put:$x]. + (mode bitAt:i + 1) == 1 ifTrue:[permissionString at:9 - i put:$w]. + (mode bitAt:i + 2) == 1 ifTrue:[permissionString at:8 - i put:$r]. ]. - ^ permissions + ^ permissionString ! printString @@ -2425,6 +2429,7 @@ size "returns the size of the file " +self halt. ^ self valueAt:#size ! @@ -2433,88 +2438,78 @@ " | unitString n locSize| - size isNil ifTrue:[ - unitString := ''. - locSize := self valueAt:#size. - locSize notNil ifTrue:[ - locSize < (500 * 1024) ifTrue:[ - locSize < 1024 ifTrue:[ - n := locSize - ] ifFalse:[ - n := (locSize * 10 // 1024 / 10.0). - unitString := ' Kb' - ] - ] ifFalse:[ - n := (locSize * 10 // 1024 // 1024 / 10.0). - unitString := ' Mb' - ]. - locSize := (n printStringLeftPaddedTo:5) , unitString. + unitString := ''. + locSize := self fileSize. + locSize isNil ifTrue:[^ '???']. + + locSize < (500 * 1024) ifTrue:[ + locSize < 1024 ifTrue:[ + n := locSize ] ifFalse:[ - locSize := '???' - ]. - size := locSize. + n := (locSize * 10 // 1024 / 10.0). + unitString := ' Kb' + ] + ] ifFalse:[ + n := (locSize * 10 // 1024 // 1024 / 10.0). + unitString := ' Mb' ]. - ^ size + ^ (n printStringLeftPaddedTo:5) , unitString. ! timeAndDate "returns the date " - | date modTime stream| + |modTime| - timeAndDate isNil ifTrue:[ - modTime := self valueAt:#modified. - modTime isNil ifTrue:[ - timeAndDate := '???' - ] ifFalse:[ - stream := WriteStream on:''. - date := modTime asDate. - stream nextPutAll:date printString. - stream space. - modTime printOn:stream format:'%h:%m:%s'. - timeAndDate := stream contents. - stream close. - ] + modTime := self modificationTime. + modTime isNil ifTrue:[ + ^ '???' ]. - ^ timeAndDate + Smalltalk languageTerritory == #us ifTrue:[ + ^ modTime printStringFormat:'%(ShortMonthName), %(dayPadded) %(yearOrTime)'. + ]. + ^ modTime printStringFormat:'%(day)-%(ShortMonthName) %(yearOrTime)'. + +"/ ^ modTime printStringFormat:'%(year)-%(mon)-%(day) %h:%m:%s'. ! ! !DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'private'! -valueAt:aKey - - |info| - +getFileInfo fileInfo isNil ifTrue:[ - fileInfo := IdentityDictionary new. self isRemoteDirectory ifTrue:[ "/ do not access, to avoid automount ] ifFalse:[ - info := fileName linkInfo. - info notNil ifTrue:[ - link := true - ] ifFalse:[ - info := fileName info. + fileInfo := fileName linkInfo. + fileInfo isNil ifTrue:[ + fileInfo := fileName info. ]. - info notNil ifTrue:[ - fileInfo at:#size put:(info size). - fileInfo at:#mode put:(info mode). - fileInfo at:#type put:(info type). - fileInfo at:#uid put:(info uid). - fileInfo at:#gid put:(info gid). - fileInfo at:#accessed put:(info accessTime). - fileInfo at:#modified put:(info modificationTime). - ] - ] + ]. + ]. + ^ fileInfo +! + +valueAt:aKey + self getFileInfo. + fileInfo isNil ifTrue:[ + ^ nil. ]. - ^ fileInfo at:aKey ifAbsent:nil +self halt. + aKey == #size ifTrue:[^ fileInfo size]. + aKey == #mode ifTrue:[^ fileInfo mode]. + aKey == #type ifTrue:[^ fileInfo type]. + aKey == #uid ifTrue:[^ fileInfo uid]. + aKey == #gid ifTrue:[^ fileInfo gid]. + aKey == #accessed ifTrue:[^ fileInfo accessTime]. + aKey == #modified ifTrue:[^ fileInfo modificationTime]. + + ^ nil ! ! !DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'queries'! beRemoteDirectory fileType := #remoteDirectory. - isDirectory := true. ! exists @@ -2534,8 +2529,6 @@ mimeTypeForContents - |mimeTypeForContents| - mimeTypeForContents isNil ifTrue:[ mimeTypeForContents := MIMETypes mimeTypeOfContents:(self fileName). mimeTypeForContents isNil ifTrue:[ @@ -2552,5 +2545,5 @@ !DirectoryContentsBrowser class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.12 2002-10-09 12:20:55 penk Exp $' + ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.13 2002-10-10 07:36:10 penk Exp $' ! !