AbstractFileBrowser.st
changeset 12760 4416657efa36
parent 12707 6e9276c4fc95
child 12777 0221a2b95d8c
--- a/AbstractFileBrowser.st	Fri May 17 01:51:49 2013 +0200
+++ b/AbstractFileBrowser.st	Tue May 21 22:06:34 2013 +0200
@@ -336,15 +336,17 @@
     DefaultFilters isNil ifTrue:[
         DefaultFilters := #(        '*'
                                     '*.st' 
-                                    '*.htm*' 
-                                    '*.txt' 
-                                    '*.gif' 
-                                    '*.xpm' 
-                                    '*.jpg' 
                                     '*.[h,c]*' 
+                                    '*.txt; *.htm*' 
+                                    '*.gif; *.xpm; *.jpg; *.png' 
+                                    '~*o; ~*.obj; ~*.dll;' 
                                 )
     ].
     ^ DefaultFilters.
+
+    "
+     DefaultFilters := nil
+    "
 !
 
 initialCommandFor:fileName in:aDirectory intoBox:aBox
@@ -3850,34 +3852,57 @@
     "return a two-arg filterblock on the files path- and base-name. This block should return true for files
      to be shown"
 
-    | filterString filterStrings filters showHidden yesOrNo filterBlock ignoreCase|
+    | filterString filterStrings filters notFilters showHidden filterBlock ignoreCase|
 
     filterString := self filterModel value.
     filterString = '' ifTrue:[filterString := '*'].
     ignoreCase := "ignoreCaseInPattern ? "(Filename isCaseSensitive not).
 
     filterStrings := filterString asCollectionOfSubstringsSeparatedBy:$;.
+    filterStrings := filterStrings
+                select:[:eachFilter | eachFilter withoutSeparators notEmpty].
+
     filters := filterStrings
-                collect:[:eachPattern |
+                reject:[:eachFilter | eachFilter withoutSeparators startsWith:'~']
+                thenCollect:
+                    [:eachPattern |
+                        |pattern|
+
+                        pattern := eachPattern withoutSeparators.
+                        [:name :baseName | pattern match:baseName ignoreCase:ignoreCase]
+                    ].
+
+    notFilters := filterStrings
+                select:[:eachFilter | eachFilter withoutSeparators startsWith:'~']
+                thenCollect:
+                    [:eachPattern |
                         |pattern|
 
                         pattern := eachPattern withoutSeparators.
-                        yesOrNo := true.
-                        (pattern startsWith:'~') ifTrue:[
-                            yesOrNo := false.
-                            pattern := pattern copyFrom:2.
-                        ].
-                        yesOrNo ifTrue:[
-                            [:name :baseName | pattern match:baseName ignoreCase:ignoreCase]
-                        ] ifFalse:[
-                            [:name :baseName | (pattern match:baseName ignoreCase:ignoreCase) not]
-                        ].
+                        pattern := (pattern copyFrom:2) withoutSeparators.
+                        [:name :baseName | pattern match:baseName ignoreCase:ignoreCase]
                     ].
 
-    filters size == 1 ifTrue:[ 
+
+    (filters size == 1 and:[notFilters isEmpty]) ifTrue:[ 
         filterBlock := filters first 
     ] ifFalse:[
-        filterBlock := [:name :baseName | filters contains:[:aFilter | aFilter value:name value:baseName ]].
+        filters isEmpty ifTrue:[
+            filterBlock := [:name :baseName | 
+                               (notFilters contains:[:aFilter | aFilter value:name value:baseName ]) not
+                           ].
+        ] ifFalse:[
+            notFilters isEmpty ifTrue:[
+                filterBlock := [:name :baseName | 
+                                   (filters contains:[:aFilter | aFilter value:name value:baseName ])
+                               ].
+            ] ifFalse:[
+                filterBlock := [:name :baseName | 
+                                   (filters contains:[:aFilter | aFilter value:name value:baseName ])
+                                   and:[ (notFilters contains:[:aFilter | aFilter value:name value:baseName ]) not ]
+                               ].
+            ]
+        ]
     ].
 
     showHidden := self showHiddenFiles value.
@@ -9176,10 +9201,10 @@
 !AbstractFileBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.519 2013-04-25 13:10:49 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.520 2013-05-21 20:06:34 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.519 2013-04-25 13:10:49 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.520 2013-05-21 20:06:34 cg Exp $'
 ! !