'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 9 June 2005 at 2:42:18 pm'! "Change Set: PlayerExplorer Date: 9 June 2005 Author: Takashi Yamamiya Open from morphic open menu or Tools menu in Tweak. "! ObjectExplorerPlus subclass: #MultiExplorer instanceVariableNames: 'contentsSelector' classVariableNames: '' poolDictionaries: '' category: 'PlayerExplorer'! !MultiExplorer commentStamp: 'tak 5/18/2005 14:36' prior: 0! self open! !CObject methodsFor: '*PlayerExplorer' stamp: 'tak 5/18/2005 14:56'! cexplore ^ MultiExplorer openOn: self for: #CObject! ! !MultiExplorer methodsFor: 'tree handling' stamp: 'tak 6/9/2005 14:28'! cobjectContentsOf: assoc | item fields | item := assoc value. (item isKindOf: CObject) ifFalse: [^ #()]. fields := item definedFields select: [:f | f isRegularField]. ^ fields collect: [:f | f name -> (item perform: f toGet)]! ! !MultiExplorer methodsFor: 'tree handling' stamp: 'tak 5/18/2005 14:36'! explorerContentsOf: assoc ^ self perform: contentsSelector with: assoc! ! !MultiExplorer methodsFor: 'tree handling' stamp: 'tak 6/9/2005 12:45'! playerContentsOf: assoc | item elements player | item := assoc value. player := item player. elements := ((item respondsTo: #myProject) ifTrue: [item myProject world] ifFalse: [item]) elements collect: [:each | each printString -> each]. player ifNil: [^ elements] ifNotNil: [^ {'(player)' -> player} , elements]! ! !MultiExplorer methodsFor: 'initialization' stamp: 'tak 5/18/2005 14:37'! initialize contentsSelector := #playerContentsOf:! ! !MultiExplorer methodsFor: 'accessing' stamp: 'tak 5/18/2005 14:52'! contentsSelector: selector contentsSelector := selector! ! !MultiExplorer methodsFor: 'tree menu' stamp: 'tak 6/9/2005 14:12'! cexplore selection cexplore.! ! !MultiExplorer methodsFor: 'tree menu' stamp: 'tak 6/9/2005 14:37'! eventWatcher | watcher | watcher := SptEventWatcher open. watcher targetPlayer: selection! ! !MultiExplorer methodsFor: 'tree menu' stamp: 'tak 6/9/2005 14:36'! explorerMenu: aMenu super explorerMenu: aMenu. (selection isKindOf: CObject) ifTrue: [ aMenu addList: #( ('CObject explore' cexplore) )]. (selection isKindOf: CPlayer) ifTrue: [ aMenu addList: #( ('CPlayer explore' playerExplore) ('Event watcher' eventWatcher) )]. ^aMenu! ! !MultiExplorer methodsFor: 'tree menu' stamp: 'tak 6/9/2005 14:17'! exploreSelection ^ selection explore! ! !MultiExplorer methodsFor: 'tree menu' stamp: 'tak 6/9/2005 14:32'! playerExplore self class openOn: selection.! ! !MultiExplorer class methodsFor: 'instance creation' stamp: 'tak 6/9/2005 13:36'! open | crootWindow | ^ self openOn: (Processor activeProcess hand isTweaked ifTrue: [Processor activeProcess hand root] ifFalse: [crootWindow := ActiveWorld submorphs detect: [:morph | morph class = SystemWindow and: [morph model class = CProjectMorph]]. crootWindow model project world])! ! !MultiExplorer class methodsFor: 'instance creation' stamp: 'tak 5/18/2005 14:37'! openOn: root ^ToolBuilder open: (self on: root) label: 'MultiExplorer'! ! !MultiExplorer class methodsFor: 'instance creation' stamp: 'tak 5/18/2005 14:53'! openOn: root for: aSymbol | explore | explore := self on: root. aSymbol = #CObject ifTrue: [explore contentsSelector: #cobjectContentsOf:]. ^ ToolBuilder open: explore label: 'MultiExplorer'! ! !MultiExplorer class methodsFor: 'class initialization' stamp: 'tak 5/18/2005 15:13'! initialize "MultiExplorer initialize" TheWorldMenu registerOpenCommand: { 'PlayerExplorer' . { MultiExplorer . #open }. 'A player Explorer' }. Smalltalk at: #CProjectBuilder ifPresent: [:pb | pb registerOpenCommand: {'PlayerExplorer'. {self. #open}. 'A player Explorer'}] ! ! MultiExplorer initialize! !MultiExplorer reorganize! ('tree handling' cobjectContentsOf: explorerContentsOf: playerContentsOf:) ('initialization' initialize) ('accessing' contentsSelector:) ('tree menu' cexplore eventWatcher explorerMenu: exploreSelection playerExplore) !