[squeak-dev] The Trunk: Tools-rkrk.111.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Aug 24 03:57:38 UTC 2009
Andreas Raab uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-rkrk.111.mcz
==================== Summary ====================
Name: Tools-rkrk.111
Author: rkrk
Time: 24 August 2009, 1:57:55 am
UUID: c7257f3c-6157-453d-b484-f15f0dd55c77
Ancestors: Tools-rss.110
Optionally order and indent classes by hierarchy in the Browser.
Enable with:
Preferences enable: #listClassesHierarchically.
=============== Diff against Tools-rss.110 ===============
Item was changed:
----- Method: Browser>>defineTrait:notifying: (in category 'traits') -----
defineTrait: defString notifying: aController
| defTokens keywdIx envt oldTrait newTraitName trait |
oldTrait := self selectedClassOrMetaClass.
defTokens := defString findTokens: Character separators.
keywdIx := defTokens findFirst: [:x | x = 'category'].
envt := self selectedEnvironment.
keywdIx := defTokens findFirst: [:x | x = 'named:'].
newTraitName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'.
((oldTrait isNil or: [oldTrait baseTrait name asString ~= newTraitName])
and: [envt includesKey: newTraitName asSymbol]) ifTrue:
["Attempting to define new class/trait over existing one when
not looking at the original one in this browser..."
(self confirm: ((newTraitName , ' is an existing class/trait in this system.
Redefining it might cause serious problems.
Is this really what you want to do?') asText makeBoldFrom: 1 to: newTraitName size))
ifFalse: [^ false]].
trait := Compiler evaluate: defString notifying: aController logged: true.
^(trait isKindOf: TraitBehavior)
ifTrue: [
self changed: #classList.
+ self classListIndex: (self classListIndexOf: trait baseTrait name).
- self classListIndex: (self classList indexOf: trait baseTrait name).
self clearUserEditFlag; editClass.
true]
ifFalse: [ false ]
!
Item was added:
+ ----- Method: Browser>>classListIndexOf: (in category 'class list') -----
+ classListIndexOf: className
+
+ | classList |
+ classList := self classList.
+ Preferences listClassesHierarchically
+ ifTrue: [classList := classList collect: [:ea | ea withoutLeadingBlanks asSymbol]].
+ ^ classList indexOf: className.!
Item was changed:
CodeHolder subclass: #Browser
instanceVariableNames: 'systemOrganizer classOrganizer metaClassOrganizer systemCategoryListIndex classListIndex messageCategoryListIndex messageListIndex editSelection metaClassIndicated'
+ classVariableNames: 'ListClassesHierarchically RecentClasses'
- classVariableNames: 'RecentClasses'
poolDictionaries: ''
category: 'Tools-Browser'!
!Browser commentStamp: '<historical>' prior: 0!
I represent a query path into the class descriptions, the software of the system.!
Item was changed:
----- Method: HierarchyBrowser>>selectedClassName (in category 'initialization') -----
selectedClassName
"Answer the name of the class currently selected. di
bug fix for the case where name cannot be found -- return nil rather than halt"
| aName |
+ aName := self classList at: classListIndex ifAbsent: [^ nil].
+ ^ (aName copyWithout: Character space) asSymbol!
- aName := super selectedClassName.
- ^ aName == nil
- ifTrue:
- [aName]
- ifFalse:
- [(aName copyWithout: $ ) asSymbol]!
Item was added:
+ ----- Method: Browser>>flattenHierarchyTree:on:indent: (in category 'class list') -----
+ flattenHierarchyTree: classHierarchy on: col indent: indent
+
+ | class childs plusIndent |
+ plusIndent := String space.
+ classHierarchy do: [:assoc |
+ class := assoc key.
+ col add: indent , class name.
+ childs := assoc value.
+ self
+ flattenHierarchyTree: childs
+ on: col
+ indent: indent , plusIndent].
+ ^ col!
Item was changed:
----- Method: Browser>>setClass:selector: (in category 'initialize-release') -----
setClass: aBehavior selector: aSymbol
"Set the state of a new, uninitialized Browser."
| isMeta aClass messageCatIndex |
aBehavior ifNil: [^ self].
(aBehavior isKindOf: Metaclass)
ifTrue: [
isMeta := true.
aClass := aBehavior soleInstance]
ifFalse: [
isMeta := false.
aClass := aBehavior].
self selectCategoryForClass: aClass.
+ self classListIndex: (self classListIndexOf: aClass name).
- self classListIndex: (
- (systemOrganizer listAtCategoryNamed: self selectedSystemCategoryName)
- indexOf: aClass name).
self metaClassIndicated: isMeta.
aSymbol ifNil: [^ self].
messageCatIndex := aBehavior organization numberOfCategoryOfElement: aSymbol.
self messageCategoryListIndex: (messageCatIndex > 0
ifTrue: [messageCatIndex + 1]
ifFalse: [0]).
messageCatIndex = 0 ifTrue: [^ self].
self messageListIndex: (
(aBehavior organization listAtCategoryNumber: messageCatIndex)
indexOf: aSymbol).!
Item was changed:
----- Method: Browser>>recent (in category 'class list') -----
recent
"Let the user select from a list of recently visited classes. 11/96 stp.
12/96 di: use class name, not classes themselves.
: dont fall into debugger in empty case"
| className class recentList |
recentList := RecentClasses select: [:n | Smalltalk includesKey: n].
recentList size == 0 ifTrue: [^ Beeper beep].
className := UIManager default chooseFrom: recentList values: recentList.
className == nil ifTrue: [^ self].
class := Smalltalk at: className.
self selectCategoryForClass: class.
+ self classListIndex: (self classListIndexOf: class name)!
- self classListIndex: (self classList indexOf: class name)!
Item was changed:
----- Method: Browser>>renameClass (in category 'class functions') -----
renameClass
| oldName newName obs |
classListIndex = 0
ifTrue: [^ self].
self okToChange
ifFalse: [^ self].
oldName := self selectedClass name.
newName := self request: 'Please type new class name' initialAnswer: oldName.
newName = ''
ifTrue: [^ self].
"Cancel returns ''"
newName := newName asSymbol.
newName = oldName
ifTrue: [^ self].
(Smalltalk includesKey: newName)
ifTrue: [^ self error: newName , ' already exists'].
self selectedClass rename: newName.
self changed: #classList.
+ self classListIndex: (self classListIndexOf: newName).
- self
- classListIndex: ((systemOrganizer listAtCategoryNamed: self selectedSystemCategoryName)
- indexOf: newName).
obs := self systemNavigation
allCallsOn: (Smalltalk associationAt: newName).
obs isEmpty
ifFalse: [self systemNavigation
browseMessageList: obs
name: 'Obsolete References to ' , oldName
autoSelect: oldName]!
Item was added:
+ ----- Method: Browser class>>listClassesHierarchically: (in category 'preferences') -----
+ listClassesHierarchically: aBool
+
+ ListClassesHierarchically := aBool!
Item was changed:
----- Method: Browser>>classList (in category 'class list') -----
classList
- "Answer an array of the class names of the selected category. Answer an
- empty array if no selection exists."
+ ^ Preferences listClassesHierarchically
+ ifTrue: [self hierarchicalClassList]
+ ifFalse: [self defaultClassList].!
- systemCategoryListIndex = 0
- ifTrue: [^Array new]
- ifFalse: [^systemOrganizer listAtCategoryNumber: systemCategoryListIndex]!
Item was added:
+ ----- Method: Browser>>defaultClassList (in category 'class list') -----
+ defaultClassList
+ "Answer an array of the class names of the selected category. Answer an
+ empty array if no selection exists."
+
+ ^ systemCategoryListIndex = 0
+ ifTrue: [Array new]
+ ifFalse: [systemOrganizer listAtCategoryNumber: systemCategoryListIndex]!
Item was added:
+ ----- Method: Browser class>>listClassesHierarchically (in category 'preferences') -----
+ listClassesHierarchically
+ <preference: 'List classes hierarchically'
+ category: 'browsing'
+ description: 'When enabled, the class list in the browser is arranged and indented with regard to the class hierarchy.'
+ type: #Boolean>
+ ^ListClassesHierarchically ifNil: [false]
+ !
Item was added:
+ ----- Method: Browser>>createHierarchyTreeOf: (in category 'class list') -----
+ createHierarchyTreeOf: col
+
+ "Create a tree from a flat collection of classes"
+ | childs transformed val indexes |
+ transformed := col collect: [:ea |
+ childs := col select: [:class | class superclass = ea].
+ indexes := childs collect: [:child | col indexOf: child].
+ ea -> indexes].
+ transformed copy do: [:ea |
+ ea value: (ea value collect: [:idx |
+ val := transformed at: idx.
+ transformed at: idx put: nil.
+ val])].
+ ^ transformed select: [:ea | ea notNil].
+ !
Item was changed:
----- Method: Browser>>selectedClassName (in category 'class list') -----
selectedClassName
- | aClassList |
- "Answer the name of the current class. Answer nil if no selection exists."
+ | className |
+ className := self classList
+ at: classListIndex
+ ifAbsent: [^ nil].
+ Preferences listClassesHierarchically ifTrue: [
+ className := className withoutLeadingBlanks asSymbol].
+ ^ className.!
- (classListIndex = 0 or: [classListIndex > (aClassList := self classList) size]) ifTrue: [^ nil].
- ^ aClassList at: classListIndex!
Item was added:
+ ----- Method: Browser>>hierarchicalClassList (in category 'class list') -----
+ hierarchicalClassList
+
+ "classNames are an arbitrary collection of classNames of the system.
+ Reorder those class names so that they are sorted and indended by inheritance"
+ | classes |
+ classes := self defaultClassList collect: [:sym | Smalltalk classNamed: sym].
+ ^ self
+ flattenHierarchyTree: (self createHierarchyTreeOf: classes)
+ on: OrderedCollection new
+ indent: ''.!
Item was changed:
----- Method: Browser>>selectClass: (in category 'class list') -----
selectClass: classNotMeta
+
+ self classListIndex: (self classListIndexOf: classNotMeta name)!
- self classListIndex: (self classList indexOf: classNotMeta name)!
More information about the Squeak-dev
mailing list
|