DirectoryView.st
changeset 638 a82372d61cf8
parent 620 03e969ddd336
child 644 3a1a1cae7428
--- 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