class: Tools::BrowserListWithFilter
changed: #commonPostBuild
forgot super commonPostBuild?
"{ Package: 'stx:libtool' }"
"{ NameSpace: Tools }"
BrowserList subclass:#BrowserListWithFilter
instanceVariableNames:'listView filterView filterPatternHolder showFilterHolder'
classVariableNames:''
poolDictionaries:''
category:'Interface-Browsers-New'
!
!BrowserListWithFilter class methodsFor:'documentation'!
documentation
"
Abstract superclass for a browser list with user filter.
Currently used only ChangeList and ChangeSetDiffList, but
user filter may be usefull for class/category lists as well.
[author:]
Jan Vrany <jan.vrany@fit.cvut.cz>
[instance variables:]
[class variables:]
[see also:]
"
! !
!BrowserListWithFilter methodsFor:'accessing'!
filterPattern
| p |
p := filterPatternHolder value.
^p isEmptyOrNil ifTrue:[
nil
] ifFalse:[
StringPattern fromString: p
]
"Created: / 29-11-2011 / 15:23:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showFilter
^self showFilterHolder value
"Created: / 29-11-2011 / 15:27:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!BrowserListWithFilter methodsFor:'aspects'!
filterPatternHolder
"return/create the 'filterPatternHolder' value holder (automatically generated)"
filterPatternHolder isNil ifTrue:[
filterPatternHolder := ValueHolder new.
filterPatternHolder addDependent:self.
].
^ filterPatternHolder
!
menuHolderWithShowFilter
^[
| menu |
menu := self menuHolder value copy.
menu isArray ifTrue:[menu := Menu decodeFromLiteralArray: menu].
menu addSeparator.
menu addItem:
((MenuItem label:(self resources at: 'Show filter'))
indication: self showFilterHolder;
yourself).
menu
]
"Created: / 29-11-2011 / 15:40:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showFilterHolder
"return/create the 'showFilterHolder' value holder (automatically generated)"
showFilterHolder isNil ifTrue:[
showFilterHolder := ValueHolder with: false.
showFilterHolder addDependent:self.
].
^ showFilterHolder
"Modified: / 29-11-2011 / 15:43:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showFilterHolder:something
"set the 'showFilterHolder' value holder (automatically generated)"
|oldValue newValue|
showFilterHolder notNil ifTrue:[
oldValue := showFilterHolder value.
showFilterHolder removeDependent:self.
].
showFilterHolder := something.
showFilterHolder notNil ifTrue:[
showFilterHolder addDependent:self.
].
newValue := showFilterHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:showFilterHolder.
].
! !
!BrowserListWithFilter methodsFor:'change & update'!
update:something with:aParameter from:changedObject
"Invoked when an object that I depend upon sends a change notification."
changedObject == showFilterHolder ifTrue:[
self showFilter: showFilterHolder value.
^self.
].
changedObject == filterPatternHolder ifTrue:[
self enqueueDelayedUpdateList.
^self
].
super update:something with:aParameter from:changedObject
"Modified: / 29-11-2011 / 15:51:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified (format): / 06-06-2012 / 00:01:37 / cg"
! !
!BrowserListWithFilter methodsFor:'hooks'!
commonPostBuild
super commonPostBuild.
listView isNil ifTrue:[listView := builder componentAt:#List].
listView isNil ifTrue:[self breakPoint: #jv].
filterView isNil ifTrue:[self breakPoint: #jv].
"Created: / 29-11-2011 / 14:47:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
postBuildFilterView: aView
filterView := aView
"Created: / 29-11-2011 / 14:47:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
postBuildListView: aView
listView := aView
"Created: / 29-11-2011 / 14:47:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!BrowserListWithFilter methodsFor:'private'!
filterList: list
| pattern filteredList |
self showFilter ifFalse:[ ^ list ].
pattern := self filterPattern.
pattern isNil ifTrue:[ ^ list ].
filteredList := list value select:[:each|pattern matchObject: each relax: 1].
filteredList isEmpty ifTrue:[
filteredList := list value select:[:each|pattern matchObject: each relax: 2].
filteredList isEmpty ifTrue:[
filteredList := list value select:[:each|pattern matchObject: each relax: 3].
]].
^filteredList
"Created: / 29-11-2011 / 15:31:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
showFilter: aBoolean
| offset |
aBoolean ifTrue:[
offset := filterView height.
] ifFalse:[
offset := 0
].
listView layout: (listView layout copy topOffset: offset) .
filterView isVisible: aBoolean
"Created: / 29-11-2011 / 14:55:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!BrowserListWithFilter class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/Tools__BrowserListWithFilter.st,v 1.5 2013-02-08 14:10:27 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/libtool/Tools__BrowserListWithFilter.st,v 1.5 2013-02-08 14:10:27 cg Exp $'
! !