Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.97.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.97 Author: mt Time: 9 March 2015, 8:05:51.922 am UUID: 9b1ed5c3-36b8-a94a-ac38-8e3166b88aa4 Ancestors: ToolBuilder-Morphic-mt.96 Tree filter added to pluggable tree morphs. =============== Diff against ToolBuilder-Morphic-mt.96 =============== Item was changed: SimpleHierarchicalListMorph subclass: #PluggableTreeMorph + instanceVariableNames: 'rootWrappers selectedWrapper getRootsSelector getChildrenSelector hasChildrenSelector getLabelSelector getIconSelector getSelectedPathSelector setSelectedParentSelector getHelpSelector dropItemSelector wantsDropSelector dragItemSelector nodeClass lastKeystrokeTime lastKeystrokes' + classVariableNames: 'MaximumSearchDepth' - instanceVariableNames: 'rootWrappers selectedWrapper getRootsSelector getChildrenSelector hasChildrenSelector getLabelSelector getIconSelector getSelectedPathSelector setSelectedParentSelector getHelpSelector dropItemSelector wantsDropSelector dragItemSelector nodeClass' - classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Morphic'! !PluggableTreeMorph commentStamp: 'ar 2/12/2005 04:38' prior: 0! A pluggable tree morph.! Item was added: + ----- Method: PluggableTreeMorph class>>maximumSearchDepth (in category 'preferences') ----- + maximumSearchDepth + + <preference: 'Maximum tree search depth' + category: 'scrolling' + description: 'When list filtering is active, this will determine the maximum depth where items should be searched for in a tree.' + type: #Number> + ^ MaximumSearchDepth ifNil: [ 3 ]! Item was added: + ----- Method: PluggableTreeMorph class>>maximumSearchDepth: (in category 'preferences') ----- + maximumSearchDepth: anInteger + MaximumSearchDepth := anInteger.! Item was added: + ----- Method: PluggableTreeMorph>>basicKeyPressed: (in category 'event handling') ----- + basicKeyPressed: aChar + + self updateLastKeystrokes: aChar. + + model okToChange ifFalse: [^ false]. + + PluggableListMorph filterableLists + ifTrue: [self filterTree] + ifFalse: [self selectNextMorphByFilter]. + + ^ true! Item was added: + ----- Method: PluggableTreeMorph>>filterTree (in category 'filtering') ----- + filterTree + + self hasFilter ifFalse: [ + self removeFilter. + ^ self]. + + self indicateFiltered. + + "Clean up the tree." + self roots do: [:root | + root applyFilter: lastKeystrokes]. + + self adjustSubmorphPositions.! Item was added: + ----- Method: PluggableTreeMorph>>hasFilter (in category 'filtering') ----- + hasFilter + ^ lastKeystrokes isEmptyOrNil not! Item was added: + ----- Method: PluggableTreeMorph>>indicateFiltered (in category 'filtering') ----- + indicateFiltered + "self color: (Color gray: 0.95)."! Item was added: + ----- Method: PluggableTreeMorph>>indicateUnfiltered (in category 'filtering') ----- + indicateUnfiltered + self color: Color white. + scroller submorphsDo: [:m | + m visible: true; backgroundColor: nil]. + self adjustSubmorphPositions.! Item was added: + ----- Method: PluggableTreeMorph>>initialize (in category 'initialization') ----- + initialize + + super initialize. + + "Filter" + lastKeystrokeTime := 0. + lastKeystrokes := ''! Item was added: + ----- Method: PluggableTreeMorph>>keyStroke: (in category 'event handling') ----- + keyStroke: event + + ^ (super keyStroke: event) + ifTrue: [true] + ifFalse: [self basicKeyPressed: event keyCharacter].! Item was added: + ----- Method: PluggableTreeMorph>>removeFilter (in category 'filtering') ----- + removeFilter + lastKeystrokes := String empty. + self indicateUnfiltered.! Item was added: + ----- Method: PluggableTreeMorph>>selectNextMorphByFilter (in category 'filtering') ----- + selectNextMorphByFilter! Item was added: + ----- Method: PluggableTreeMorph>>specialKeyPressed: (in category 'event handling') ----- + specialKeyPressed: asciiValue + + (super specialKeyPressed: asciiValue) + ifTrue: [^ true]. + + (#(8 13) includes: asciiValue) ifTrue: [ + "backspace key" + self removeFilter. + ^ true]. + + ^ false! Item was added: + ----- Method: PluggableTreeMorph>>updateLastKeystrokes: (in category 'event handling') ----- + updateLastKeystrokes: aChar + + | milliseconds slowKeyStroke | + milliseconds := Time millisecondClockValue. + slowKeyStroke := (Time milliseconds: milliseconds since: lastKeystrokeTime) + > (PluggableListMorph filterableLists ifTrue: [ 500 ] ifFalse: [ 300 ]). + lastKeystrokeTime := milliseconds. + + slowKeyStroke + ifTrue: [lastKeystrokes := aChar asLowercase asString] + ifFalse: [lastKeystrokes := lastKeystrokes , aChar asLowercase asString.].! Item was added: + ----- Method: PluggableTreeMorph>>vUnadjustedScrollRange (in category 'scrolling') ----- + vUnadjustedScrollRange + + | range | + range := 0. + scroller submorphsDo: [:m | m visible ifTrue: [range := range + m height]]. + ^ range! |
Free forum by Nabble | Edit this page |