[Pkg] The Trunk: Tools-mt.542.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Mar 7 11:19:24 UTC 2015
Marcel Taeumel uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-mt.542.mcz
==================== Summary ====================
Name: Tools-mt.542
Author: mt
Time: 7 March 2015, 12:19:04.957 pm
UUID: 2474c709-2040-f040-99eb-6144e9acd707
Ancestors: Tools-mt.541
Object explorer now uses tool builder. Includes code clean-up and some fixes. Monitoring entries works again.
=============== Diff against Tools-mt.541 ===============
Item was added:
+ ----- Method: IndentingListItemMorph>>refresh (in category 'initialization') -----
+ refresh
+
+ self contents: complexContents asString.
+ icon := complexContents icon.!
Item was changed:
AbstractHierarchicalList subclass: #ObjectExplorer
+ instanceVariableNames: 'root currentParent inspector monitorList'
- instanceVariableNames: 'rootObject inspector monitorList'
classVariableNames: ''
poolDictionaries: ''
category: 'Tools-Explorer'!
!ObjectExplorer commentStamp: '<historical>' prior: 0!
ObjectExplorer provides a hierarchical alternative to #inspect. Simply evaluate an expression like:
World explore
and enjoy.!
Item was added:
+ ----- Method: ObjectExplorer class>>nodeClass (in category 'as yet unclassified') -----
+ nodeClass
+
+ ^ ObjectExplorerWrapper!
Item was added:
+ ----- Method: ObjectExplorer>>buildWith: (in category 'toolbuilder') -----
+ buildWith: builder
+
+ | windowSpec treeSpec textSpec |
+ windowSpec := builder pluggableWindowSpec new.
+ windowSpec
+ model: self;
+ children: OrderedCollection new;
+ label: #label.
+
+ treeSpec := builder pluggableTreeSpec new.
+ treeSpec
+ model: self;
+ nodeClass: self class nodeClass;
+ roots: #getList;
+ keyPress: #explorerKey:from:;
+ getSelected: #currentSelection;
+ setSelected: #currentSelection:;
+ setSelectedParent: #currentParent:;
+ menu: #genericMenu:;
+ autoDeselect: false;
+ columns: (ObjectExplorerWrapper showContentsInColumns
+ ifTrue: [{
+ [:listMorph | (listMorph scroller submorphs collect: [:item |
+ item preferredWidthOfColumn: 1]) max].
+ nil "take all the space"}]
+ ifFalse: []);
+ frame: (0 at 0 corner: 1 at 0.85).
+ windowSpec children add: treeSpec.
+
+ textSpec := builder pluggableTextSpec new.
+ textSpec
+ model: self;
+ menu: #codePaneMenu:shifted:;
+ frame: (0 at 0.85 corner: 1 at 1).
+ windowSpec children add: textSpec.
+
+ ^ builder build: windowSpec!
Item was changed:
+ ----- Method: ObjectExplorer>>chasePointers (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>chasePointers (in category 'menus') -----
chasePointers
"Open a PointerFinder on the selected item"
| path sel savedRoot saved |
path := OrderedCollection new.
sel := currentSelection.
[ sel isNil ] whileFalse: [ path addFirst: sel asString. sel := sel parent ].
path addFirst: #openPath.
path := path asArray.
savedRoot := rootObject.
saved := self object.
[ rootObject := nil.
self changed: #getList.
(Smalltalk includesKey: #PointerFinder)
ifTrue: [PointerFinder on: saved]
ifFalse: [self objectReferencesToSelection ]]
ensure: [ rootObject := savedRoot.
self changed: #getList.
self changed: path.
]!
Item was removed:
- ----- Method: ObjectExplorer>>contentsSelection (in category 'accessing') -----
- contentsSelection
- "Return the interval of text in the code pane to select when I set the pane's contents"
-
- ^ 1 to: 0 "null selection"!
Item was added:
+ ----- Method: ObjectExplorer>>currentParent (in category 'accessing') -----
+ currentParent
+ ^ currentParent!
Item was added:
+ ----- Method: ObjectExplorer>>currentParent: (in category 'accessing') -----
+ currentParent: anObject
+ currentParent := anObject.!
Item was added:
+ ----- Method: ObjectExplorer>>currentSelection (in category 'accessing') -----
+ currentSelection
+
+ ^ currentSelection!
Item was added:
+ ----- Method: ObjectExplorer>>currentSelection: (in category 'accessing') -----
+ currentSelection: anObject
+
+ self currentSelection == anObject ifTrue: [^ self].
+ currentSelection := anObject.
+ self changed: #currentSelection.!
Item was changed:
+ ----- Method: ObjectExplorer>>defsOfSelection (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>defsOfSelection (in category 'menus') -----
defsOfSelection
"Open a browser on all defining references to the selected instance variable, if that's what's currently selected."
| aClass sel |
(aClass := self parentObject class) isVariable ifTrue: [^ self changed: #flash].
sel := self selector.
self systemNavigation browseAllStoresInto: sel from: aClass!
Item was changed:
----- Method: ObjectExplorer>>doItReceiver (in category 'accessing') -----
doItReceiver
"Answer the object that should be informed of the result of evaluating a
text selection."
+ ^ self object!
- currentSelection ifNil: [^rootObject].
- ^currentSelection withoutListWrapper
- !
Item was changed:
+ ----- Method: ObjectExplorer>>explorePointers (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>explorePointers (in category 'menus') -----
explorePointers
"Open a PointerExplorer on the current selection"
PointerExplorer new openExplorerFor: self object!
Item was changed:
+ ----- Method: ObjectExplorer>>exploreSelection (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>exploreSelection (in category 'menus') -----
exploreSelection
"Open an ObjectExplorer on the current selection"
self object explore!
Item was removed:
- ----- Method: ObjectExplorer>>explorerFor: (in category 'user interface') -----
- explorerFor: anObject
- | window view |
- rootObject := anObject.
- window := (SystemWindow labelled: self label) model: self.
- window addMorph: (view := (SimpleHierarchicalListMorph
- on: self
- list: #getList
- selected: #getCurrentSelection
- changeSelected: #noteNewSelection:
- menu: #genericMenu:
- keystroke: #explorerKey:from:)
- columns: (ObjectExplorerWrapper showContentsInColumns
- ifTrue: [{
- [:listMorph | (listMorph scroller submorphs collect: [:item |
- item preferredWidthOfColumn: 1]) max].
- nil "take all the space"}]
- ifFalse: []);
- yourself)
- frame: (0 at 0 corner: 1 at 0.8).
- window addMorph: ((PluggableTextMorph on: self text: #trash accept: #trash:
- readSelection: #contentsSelection menu: #codePaneMenu:shifted:)
- askBeforeDiscardingEdits: false)
- frame: (0 at 0.8 corner: 1 at 1).
- view
- autoDeselect: false.
- ^ window!
Item was removed:
- ----- Method: ObjectExplorer>>explorerFor:withLabel: (in category 'user interface') -----
- explorerFor: anObject withLabel: label
- | window view |
- rootObject := anObject.
- window := (SystemWindow labelled: label)
- model: self.
-
- window
- addMorph: (view := (SimpleHierarchicalListMorph
- on: self
- list: #getList
- selected: #getCurrentSelection
- changeSelected: #noteNewSelection:
- menu: #genericMenu:
- keystroke: nil)
- columns: (ObjectExplorerWrapper showContentsInColumns
- ifTrue: [{
- [:listMorph | (listMorph scroller submorphs collect: [:item |
- item preferredWidthOfColumn: 1]) max].
- nil "take all the space"}]
- ifFalse: []);
- yourself)
- frame: (0 @ 0 corner: 1 @ 0.8).
- window
- addMorph: ((PluggableTextMorph
- on: self
- text: #trash
- accept: #trash:
- readSelection: #contentsSelection
- menu: #codePaneMenu:shifted:)
- askBeforeDiscardingEdits: false)
- frame: (0 @ 0.8 corner: 1 @ 1).
- view autoDeselect: false.
- ^ window!
Item was changed:
----- Method: ObjectExplorer>>explorerKey:from: (in category 'menus') -----
explorerKey: aChar from: view
"Similar to #genericMenu:..."
| insideObject parentObject |
currentSelection ifNotNil: [
insideObject := self object.
parentObject := self parentObject.
inspector ifNil: [inspector := Inspector new].
inspector
inspect: parentObject;
object: insideObject.
aChar == $i ifTrue: [^ self inspectSelection].
aChar == $I ifTrue: [^ self exploreSelection].
aChar == $b ifTrue: [^ inspector browseMethodFull].
aChar == $h ifTrue: [^ inspector classHierarchy].
+ aChar == $c ifTrue: [^ Clipboard clipboardText: self currentSelection key].
- aChar == $c ifTrue: [^ inspector copyName].
aChar == $p ifTrue: [^ inspector browseFullProtocol].
aChar == $N ifTrue: [^ inspector browseClassRefs].
aChar == $t ifTrue: [^ inspector tearOffTile].
aChar == $v ifTrue: [^ inspector viewerForValue]].
^ self arrowKey: aChar from: view!
Item was changed:
----- Method: ObjectExplorer>>getList (in category 'accessing') -----
getList
+ "This explorer shows bindings in a tree structure. Create the root binding here."
+
+ ^ {self root}!
-
- ^Array with: (ObjectExplorerWrapper with: rootObject name: 'root' model: self parent: nil)
- !
Item was changed:
----- Method: ObjectExplorer>>initialExtent (in category 'user interface') -----
initialExtent
+ ^400 at 400!
- ^300 at 500!
Item was changed:
+ ----- Method: ObjectExplorer>>inspectSelection (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>inspectSelection (in category 'menus') -----
inspectSelection
"Open an Inspector on the current selection"
self object inspect!
Item was changed:
----- Method: ObjectExplorer>>label (in category 'accessing') -----
label
+ ^ self rootObject printStringLimitedTo: 32!
- ^ rootObject printStringLimitedTo: 32!
Item was changed:
+ ----- Method: ObjectExplorer>>monitor: (in category 'menus - callbacks') -----
+ monitor: aBinding
+ "Start stepping and watching the given binding for changes."
+
+ aBinding ifNil: [ ^self ].
- ----- Method: ObjectExplorer>>monitor: (in category 'monitoring') -----
- monitor: anObjectExplorerWrapper
- "Start stepping and watching the given wrapper for changes."
- anObjectExplorerWrapper ifNil: [ ^self ].
self world ifNil: [ ^self ].
+ self monitorList add: aBinding.
+
+ self world startStepping: self at: Time millisecondClockValue selector: #step arguments: #() stepTime: 2000.!
- self monitorList at: anObjectExplorerWrapper put: anObjectExplorerWrapper asString.
- self world startStepping: self at: Time millisecondClockValue selector: #step arguments: #() stepTime: 200.!
Item was changed:
----- Method: ObjectExplorer>>monitorList (in category 'monitoring') -----
monitorList
+ ^monitorList ifNil: [ monitorList := WeakOrderedCollection new ].!
- ^monitorList ifNil: [ monitorList := WeakIdentityKeyDictionary new ].!
Item was changed:
+ ----- Method: ObjectExplorer>>object (in category 'accessing - objects') -----
- ----- Method: ObjectExplorer>>object (in category 'accessing') -----
object
+
+ ^ self currentSelection value!
- ^currentSelection ifNotNil: [ :cs | cs withoutListWrapper ]!
Item was changed:
+ ----- Method: ObjectExplorer>>objectReferencesToSelection (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>objectReferencesToSelection (in category 'menus') -----
objectReferencesToSelection
"Open a browser on all references to the selected instance variable, if that's what currently selected. "
self systemNavigation
browseAllObjectReferencesTo: self object
except: (Array with: self parentObject with: currentSelection with: inspector)
ifNone: [:obj | self changed: #flash].
!
Item was removed:
- ----- Method: ObjectExplorer>>openBrowser: (in category 'user interface') -----
- openBrowser: aClass
-
- ^ToolSet browseClass: aClass!
Item was changed:
----- Method: ObjectExplorer>>openExplorerFor: (in category 'user interface') -----
openExplorerFor: anObject
+ "ObjectExplorer new openExplorerFor: Smalltalk."
- "
- ObjectExplorer new openExplorerFor: Smalltalk
- "
+ ^ self openExplorerFor: anObject withLabel: nil!
- | win |
- win := (self explorerFor: anObject) openInWorld.
- Cursor wait showWhile:
- [win submorphs do:
- [:sm|
- (sm respondsTo: #expandRoots) ifTrue:
- [sm expandRoots]]].
- ^self
- !
Item was changed:
----- Method: ObjectExplorer>>openExplorerFor:withLabel: (in category 'user interface') -----
openExplorerFor: anObject withLabel: label
"ObjectExplorer new openExplorerFor: Smalltalk withLabel: 'Smalltalk'"
+ ToolBuilder open: self label: label.
+ self rootObject: anObject.!
- (self explorerFor: anObject withLabel: label)
- openInWorld!
Item was changed:
+ ----- Method: ObjectExplorer>>parentObject (in category 'accessing - objects') -----
- ----- Method: ObjectExplorer>>parentObject (in category 'accessing') -----
parentObject
+
+ ^ self currentParent value!
- currentSelection ifNil: [ ^nil ].
- currentSelection parent ifNil: [ ^rootObject ].
- ^currentSelection parent withoutListWrapper!
Item was changed:
+ ----- Method: ObjectExplorer>>referencesToSelection (in category 'menus - callbacks') -----
- ----- Method: ObjectExplorer>>referencesToSelection (in category 'menus') -----
referencesToSelection
"Open a browser on all references to the selected instance variable, if that's what's currently selected."
| aClass sel |
(aClass := self parentObject class) isVariable ifTrue: [^ self changed: #flash].
sel := self selector.
self systemNavigation browseAllAccessesTo: sel from: aClass!
Item was added:
+ ----- Method: ObjectExplorer>>root (in category 'accessing') -----
+ root
+
+ ^ root ifNil: [root := 'root' -> nil]!
Item was changed:
+ ----- Method: ObjectExplorer>>rootObject (in category 'accessing - objects') -----
- ----- Method: ObjectExplorer>>rootObject (in category 'accessing') -----
rootObject
+
+ ^ self root value!
- ^ rootObject!
Item was added:
+ ----- Method: ObjectExplorer>>rootObject: (in category 'accessing - objects') -----
+ rootObject: anObject
+
+ self root value: anObject.
+
+ self changed: #label.
+ self changed: #getList.
+ self changed: #expandRootsRequested.
+
+ self currentSelection: self getList first.!
Item was changed:
+ ----- Method: ObjectExplorer>>selectedClass (in category 'accessing - other') -----
- ----- Method: ObjectExplorer>>selectedClass (in category 'menus') -----
selectedClass
"Answer the class of the receiver's current selection"
^self doItReceiver class
!
Item was changed:
+ ----- Method: ObjectExplorer>>selector (in category 'accessing - other') -----
- ----- Method: ObjectExplorer>>selector (in category 'accessing') -----
selector
+
+ self flag: #deprecated. "mt: Who uses this? And why?"
+ self parentObject ifNil: [^ nil].
+ (self parentObject class allInstVarNames includes: self currentSelection key)
+ ifTrue: [^ self currentSelection key asSymbol].
+ ^ nil!
- ^currentSelection ifNotNil: [ :cs | cs selector ]!
Item was changed:
----- Method: ObjectExplorer>>step (in category 'monitoring') -----
step
+ "Let all views know that some of my objects need to be updated."
+
+ self monitorList do: [ :object |
+ object ifNotNil: [self changed: #objectChanged with: object]].
+ self monitorList ifEmpty: [
+ ActiveWorld stopStepping: self selector: #step ].!
- "If there's anything in my monitor list, see if the strings have changed."
- | changes |
- changes := false.
- self monitorList keysAndValuesDo: [ :k :v |
- k ifNotNil: [
- | string |
- k refresh.
- (string := k asString) ~= v ifTrue: [ self monitorList at: k put: string. changes := true ].
- ]
- ].
- changes ifTrue: [ | sel |
- sel := currentSelection.
- self changed: #getList.
- self noteNewSelection: sel.
- ].
- self monitorList isEmpty ifTrue: [ ActiveWorld stopStepping: self selector: #step ].!
Item was removed:
- ----- Method: ObjectExplorer>>trash (in category 'menus') -----
- trash
- "What goes in the bottom pane"
- ^ ''!
Item was removed:
- ----- Method: ObjectExplorer>>trash: (in category 'menus') -----
- trash: newText
- "Don't save it"
- ^ true!
Item was added:
+ ----- Method: PointerExplorer class>>nodeClass (in category 'as yet unclassified') -----
+ nodeClass
+
+ ^ PointerExplorerWrapper!
Item was removed:
- ----- Method: PointerExplorer>>getList (in category 'accessing') -----
- getList
- ^Array with: (PointerExplorerWrapper with: rootObject name: rootObject identityHash asString model: self)
- !
Item was added:
+ ----- Method: PointerExplorer>>rootObject: (in category 'accessing') -----
+ rootObject: anObject
+
+ self root key: anObject identityHash asString.
+ super rootObject: anObject.!
More information about the Packages
mailing list