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