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