# HG changeset patch # User tz # Date 887561279 -3600 # Node ID a82372d61cf81d9e3360bc19603f0c6a8ee6732c # Parent 0fac61dcb6fd40104fa6b929b4c9fba5f96c8c5c avoid rereading of file images + multiple listings of same filter matching files diff -r 0fac61dcb6fd -r a82372d61cf8 DirectoryView.st --- a/DirectoryView.st Sat Feb 14 22:51:19 1998 +0100 +++ b/DirectoryView.st Sun Feb 15 17:47:59 1998 +0100 @@ -21,7 +21,8 @@ ! Object subclass:#FileRow - instanceVariableNames:'fileName size modified iconKey group owner permissions baseName' + instanceVariableNames:'fileName size modified iconKey imageFromFile group owner + permissions baseName' classVariableNames:'' poolDictionaries:'' privateIn:DirectoryView @@ -363,14 +364,14 @@ [:file :name| list do: [:filter| - (filter match: name) + ((filter match: name) and: [(foundFiles includes: file) not]) ifTrue: [ - foundFiles add: (FileRow new fileName: file) + foundFiles add: file ]. ]. ]. - self listOfFiles contents: foundFiles + self listOfFiles contents: (foundFiles collect: [:file| FileRow new fileName: file]) ] ! @@ -665,43 +666,18 @@ iconOn:aGC - (aGC registeredImageAt:iconKey) isNil - ifTrue: + |icon| + iconKey isNil + ifTrue: [ self validateAttributes. - ((iconKey == #imageFileIcon) and: [size < 5000]) - ifTrue: - [ - Object errorSignal handle: [:ex|] - do: - [ - |image| - (image := Image fromFile: fileName name) notNil - ifTrue: - [ - image extent y > 22 - ifTrue: - [ - image := image magnifiedBy: 22/image extent y - ]. - (aGC registeredImageAt: (iconKey := fileName name asSymbol)) isNil - ifTrue: - [ - aGC registerImage: image key: iconKey - ] - ] - ] - ] - ifFalse: - [ - aGC registerImage: (self class perform: iconKey) key: iconKey - ] + (imageFromFile isNil and: [iconKey == #imageFileIcon]) + ifTrue: [icon := self retrieveImageFromFileAndRegisterOn: aGC] ]. - ^aGC registeredImageAt: iconKey - - - - + imageFromFile + ifFalse: [icon := aGC registerImage: (self class perform: iconKey) key: iconKey] + ifTrue: [icon := aGC registeredImageAt: iconKey]. + ^icon ! modified @@ -719,6 +695,39 @@ ^permissions ! +retrieveImageFromFileAndRegisterOn: aGC + + |image| + imageFromFile := false. + (image := aGC registeredImageAt: fileName name asSymbol) isNil + ifTrue: + [ + size < 5000 + ifTrue: + [ + Object errorSignal handle: [:ex|] + do: + [ + (image := Image fromFile: fileName name) notNil + ifTrue: + [ + image extent y > 22 + ifTrue: + [ + image := image magnifiedBy: 22/image extent y + ]. + image := aGC registerImage: image key: fileName name asSymbol. + ] + ] + ]. + ]. + image notNil ifTrue: [imageFromFile := true. iconKey := fileName name asSymbol]. + ^image + + + +! + size size isNumber ifFalse:[^ size]. size < 1000 ifTrue: [^ size printString]. @@ -733,7 +742,8 @@ validateAttributes - |info mode| + |info mode| + permissions := String new:9 withAll:$-. (info := fileName info) isNil