'From Squeak3.5 of ''11 April 2003'' [latest update: #5180] on 27 April 2003 at 6:13:05 pm'! "Change Set: BrowserPaneVars-sbw Date: 4 February 2003 Author: Stephan B. Wessels SM Name: Variables Pane for Browsers Adds variables pane to several of the Browsers, similar to old Smalltalk/V browsers. NOTE: No longer adds an instance variable to the Browser class. The variables pane is controlled by Preferences in the 'browsing' category. Two options exist: #showVarsInBrowser - toggles if variables pane is included in the browsers or not #showInheritedVars - if the vars are enabled by the above option, this one controls if inherited variables are shown or not. This option can be disabled by a menu in the variables pane itself. The variables pane includes menu items for searching for accesses and references to a selected variable from the list too. This code was tested for the full system browser and the class hierarchy browser. It was verified to behave correctly both with the alternativeWindowLook or the standard look. Aside from the inclusion of this new optional browser pane, this change set makes no changes to other existing Browser code. It does have conflicts with the Refactoring Browser. Date Update ------------- ----------------------------------------------------------------------- 15-apr-2003 Updated for Squeak 3.5 08-feb-2003 Modified to work in MVC. Vars list menu in Browser is not working yet in MVC. 05-feb-2003 Added vars pane menu item to copy selected variable name to the clipboard. Added class pane menu item to copy selected class name to the clipboard. 04-feb-2003 initial file release. " ! !Browser methodsFor: 'class functions' stamp: 'sbw 2/5/2003 06:14'! classListMenu: aMenu shifted: shifted "Set up the menu to apply to the receiver's class list, honoring the #shifted boolean" shifted ifTrue: [^ self shiftedClassListMenu: aMenu]. aMenu addList: #(#- #('browse full (b)' #browseMethodFull) #('browse hierarchy (h)' #spawnHierarchy) #('browse protocol (p)' #browseFullProtocol) #- #('printOut' #printOutClass) #('fileOut' #fileOutClass) #- #('show hierarchy' #hierarchy) #('show definition' #editClass) #('show comment' #editComment) #- #('inst var refs...' #browseInstVarRefs) #('inst var defs...' #browseInstVarDefs) #- #('class var refs...' #browseClassVarRefs) #('class vars' #browseClassVariables) #('class refs (N)' #browseClassRefs) #- #('rename class ...' #renameClass) #('copy class' #copyClass) #('copy name' #copyClassNameToClipboard) #('remove class (x)' #removeClass) #- #('find method...' #findMethod) #- #('more...' #offerShiftedClassListMenu) ). ^ aMenu! ! !Browser methodsFor: 'class functions' stamp: 'sbw 2/5/2003 05:59'! copyClassNameToClipboard Clipboard clipboardText: self selectedClass name asString! ! !Browser methodsFor: 'class list' stamp: 'sbw 2/4/2003 05:17'! classListIndex: anInteger "Set anInteger to be the index of the current class selection." | className | classListIndex _ anInteger. self setClassOrganizer. messageCategoryListIndex _ 1. messageListIndex _ 0. self varsListIndex: 0. self classCommentIndicated ifFalse: [editSelection _ anInteger = 0 ifTrue: [metaClassIndicated | (systemCategoryListIndex == 0) ifTrue: [#none] ifFalse: [#newClass]] ifFalse: [#editClass]]. contents _ nil. self selectedClass isNil ifFalse: [className _ self selectedClass name. (RecentClasses includes: className) ifTrue: [RecentClasses remove: className]. RecentClasses addFirst: className. RecentClasses size > 16 ifTrue: [RecentClasses removeLast]]. self changed: #classSelectionChanged. self changed: #classListIndex. self changed: #varsList. "update my selection" self changed: #messageCategoryList. self changed: #messageList. self changed: #relabel. self contentsChanged! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 8/21/2001 16:29'! addMsgCatListPaneTo: window at: nominalFractions plus: verticalOffset | row innerFractions msgCatList varsPane divider dividerDelta | row _ AlignmentMorph newColumn hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: 0; borderWidth: 1; layoutPolicy: ProportionalLayout new. innerFractions _ self showVarsInBrowser ifTrue: [0 @ 0 extent: 1 @ 0.5] ifFalse: [0 @ 0 extent: 1 @ 1]. msgCatList _ self buildMorphicMessageCatList. Preferences alternativeWindowLook ifTrue: [msgCatList borderWidth: 0] ifFalse: [msgCatList borderWidth: 1]. row addMorph: msgCatList fullFrame: (LayoutFrame fractions: innerFractions offsets: (0 @ 0 corner: 0 @ 0)). self showVarsInBrowser ifTrue: [varsPane _ self buildVarsListMorph. Preferences alternativeWindowLook ifTrue: [varsPane borderWidth: 0] ifFalse: [varsPane borderWidth: 1]. innerFractions _ 0 @ 0.5 extent: 1 @ 0.5. divider _ BorderedSubpaneDividerMorph forTopEdge. dividerDelta _ 0. Preferences alternativeWindowLook ifTrue: [divider extent: 4 @ 4; color: Color transparent; borderColor: #raised; borderWidth: 2. dividerDelta _ 3]. row addMorph: divider fullFrame: (LayoutFrame fractions: (0 @ 0.5 extent: 1 @ 0) offsets: (0 @ 0 corner: 0 @ dividerDelta)). row addMorph: varsPane fullFrame: (LayoutFrame fractions: innerFractions offsets: (0 @ dividerDelta corner: 0 @ 0))]. window addMorph: row fullFrame: (LayoutFrame fractions: nominalFractions offsets: (0 @ verticalOffset corner: 0 @ 0)). Preferences alternativeWindowLook ifTrue: [row borderWidth: 2] ifFalse: [row borderWidth: 0]. row on: #mouseEnter send: #paneTransition: to: window. row on: #mouseLeave send: #paneTransition: to: window! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 1/26/2001 19:10'! buildVarsListMorph ^ PluggableListMorph on: self list: #varsList selected: #varsListIndex changeSelected: #varsListIndex: menu: #varsListMenu:! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 1/26/2001 19:11'! buildVarsListView ^ PluggableListView on: self list: #varsList selected: #varsListIndex changeSelected: #varsListIndex: menu: #varsListMenu:! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 3/11/2002 12:50'! openAsMorphEditing: editString "Create a pluggable version of all the morphs for a Browser in Morphic" | window hSepFrac | hSepFrac _ 0.4. window _ (SystemWindow labelled: 'later') model: self. window addMorph: self buildMorphicSystemCatList frame: (0 @ 0 corner: 0.25 @ hSepFrac). self addClassAndSwitchesTo: window at: (0.25 @ 0 corner: 0.5 @ hSepFrac) plus: 0. self addMsgCatListPaneTo: window at: (0.5 @ 0 corner: 0.75 @ hSepFrac) plus: 0. window addMorph: self buildMorphicMessageList frame: (0.75 @ 0 extent: 0.25 @ hSepFrac). self addLowerPanesTo: window at: (0 @ hSepFrac corner: 1 @ 1) with: editString. window setUpdatablePanesFrom: #(#systemCategoryList #classList #messageCategoryList #messageList ). ^ window! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 2/4/2003 19:05'! openAsMorphSysCatEditing: editString "Create a pluggable version of all the views for a Browser, including views and controllers." | window hSepFrac switchHeight mySingletonList nextOffsets | window _ (SystemWindow labelled: 'later') model: self. hSepFrac _ 0.3. switchHeight _ 25. mySingletonList _ PluggableListMorph on: self list: #systemCategorySingleton selected: #indexIsOne changeSelected: #indexIsOne: menu: #systemCatSingletonMenu: keystroke: #systemCatSingletonKey:from:. mySingletonList enableDragNDrop: Preferences browseWithDragNDrop. mySingletonList hideScrollBarIndefinitely. window addMorph: mySingletonList fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 0.3333 @ 0) offsets: (0 @ 0 corner: 0 @ switchHeight)). self addClassAndSwitchesTo: window at: (0 @ 0 corner: 0.3333 @ hSepFrac) plus: switchHeight. nextOffsets _ 0 @ 0 corner: 0 @ 0. self addMsgCatListPaneTo: window at: (0.3333 @ 0 corner: 0.6666 @ hSepFrac) plus: 0. window addMorph: self buildMorphicMessageList fullFrame: (LayoutFrame fractions: (0.6666 @ 0 corner: 1 @ hSepFrac) offsets: nextOffsets). self addLowerPanesTo: window at: (0 @ hSepFrac corner: 1 @ 1) with: editString. window setUpdatablePanesFrom: #(#classList #messageCategoryList #messageList ). ^ window! ! !Browser methodsFor: 'initialize-release' stamp: 'sbw 2/8/2003 16:52'! openEditString: aString "Create a pluggable version of all the views for a Browser, including views and controllers." | systemCategoryListView classListView messageCategoryListView messageListView browserCodeView topView switchView underPane y optionalButtonsView annotationPane varsListView | self couldOpenInMorphic ifTrue: [^ self openAsMorphEditing: aString]. "Sensor leftShiftDown ifTrue: [^ self openAsMorphEditing: aString]. uncomment-out for testing morphic browser embedded in mvc project" topView _ StandardSystemView new model: self. topView borderWidth: 1. "label and minSize taken care of by caller" systemCategoryListView _ PluggableListView on: self list: #systemCategoryList selected: #systemCategoryListIndex changeSelected: #systemCategoryListIndex: menu: #systemCategoryMenu: keystroke: #systemCatListKey:from:. systemCategoryListView window: (0 @ 0 extent: 50 @ 70). topView addSubView: systemCategoryListView. classListView _ PluggableListView on: self list: #classList selected: #classListIndex changeSelected: #classListIndex: menu: #classListMenu:shifted: keystroke: #classListKey:from:. classListView window: (0 @ 0 extent: 50 @ 62). topView addSubView: classListView toRightOf: systemCategoryListView. switchView _ self buildInstanceClassSwitchView. switchView borderWidth: 1. topView addSubView: switchView below: classListView. messageCategoryListView _ PluggableListView on: self list: #messageCategoryList selected: #messageCategoryListIndex changeSelected: #messageCategoryListIndex: menu: #messageCategoryMenu:. messageCategoryListView controller terminateDuringSelect: true. messageCategoryListView window: (0 @ 0 extent: 50 @ (self showVarsInBrowser ifTrue: [35] ifFalse: [70])). topView addSubView: messageCategoryListView toRightOf: classListView. self showVarsInBrowser ifTrue: [ varsListView _ self buildVarsListView. varsListView window: (0@0 extent: 50@35). topView addSubView: varsListView below: messageCategoryListView ]. messageListView _ PluggableListView on: self list: #messageList selected: #messageListIndex changeSelected: #messageListIndex: menu: #messageListMenu:shifted: keystroke: #messageListKey:from:. messageListView window: (0 @ 0 extent: 50 @ 70). messageListView menuTitleSelector: #messageListSelectorTitle. topView addSubView: messageListView toRightOf: messageCategoryListView. self wantsAnnotationPane ifTrue: [annotationPane _ PluggableTextView on: self text: #annotation accept: nil readSelection: nil menu: nil. annotationPane window: (0 @ 0 extent: 200 @ self optionalAnnotationHeight). topView addSubView: annotationPane below: systemCategoryListView. underPane _ annotationPane. y _ 110 - self optionalAnnotationHeight] ifFalse: [underPane _ systemCategoryListView. y _ 110]. self wantsOptionalButtons ifTrue: [optionalButtonsView _ self buildOptionalButtonsView. optionalButtonsView borderWidth: 1. topView addSubView: optionalButtonsView below: underPane. underPane _ optionalButtonsView. y _ y - self optionalButtonHeight]. browserCodeView _ PluggableTextView on: self text: #contents accept: #contents:notifying: readSelection: #contentsSelection menu: #codePaneMenu:shifted:. browserCodeView window: (0 @ 0 extent: 200 @ y). topView addSubView: browserCodeView below: underPane. aString ifNotNil: [browserCodeView editString: aString. browserCodeView hasUnacceptedEdits: true]. topView setUpdatablePanesFrom: #(#systemCategoryList #classList #messageCategoryList #messageList ). ^ topView! ! !Browser methodsFor: 'metaclass' stamp: 'sbw 2/4/2003 05:19'! metaClassIndicated: trueOrFalse "Indicate whether browsing instance or class messages." metaClassIndicated _ trueOrFalse. self setClassOrganizer. systemCategoryListIndex > 0 ifTrue: [editSelection _ classListIndex = 0 ifTrue: [metaClassIndicated ifTrue: [#none] ifFalse: [#newClass]] ifFalse: [#editClass]]. messageCategoryListIndex _ 1. messageListIndex _ 0. self varsListIndex: 0. contents _ nil. self changed: #classSelectionChanged. self changed: #messageCategoryList. self changed: #varsList. self changed: #messageList. self changed: #contents. self decorateButtons! ! !Browser methodsFor: 'system category list' stamp: 'sbw 2/4/2003 05:20'! systemCategoryListIndex: anInteger "Set the selected system category index to be anInteger. Update all other selections to be deselected." systemCategoryListIndex _ anInteger. classListIndex _ 0. messageCategoryListIndex _ 0. messageListIndex _ 0. self varsListIndex: 0. editSelection _ anInteger = 0 ifTrue: [#none] ifFalse: [#newClass]. metaClassIndicated _ false. self setClassOrganizer. contents _ nil. self changed: #systemCategorySelectionChanged. self changed: #systemCategoryListIndex. "update my selection" self changed: #classList. self changed: #messageCategoryList. self changed: #varsList. self changed: #messageList. self changed: #relabel. self contentsChanged! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:04'! browseDefsForSelectedInstanceVar | varName cls | varName _ self selectedVarName. varName == nil ifTrue: [^ nil]. cls _ self selectedClassOrMetaClass. cls == nil ifTrue: [^ nil]. cls browseAllStoresInto: varName! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:04'! browseRefsForSelectedClassVar | varName cls | varName _ self selectedVarName. varName == nil ifTrue: [^ nil]. cls _ self selectedClass. cls == nil ifTrue: [^ nil]. cls _ cls classThatIncludesClassVar: varName. Smalltalk browseAllCallsOn: (cls classPool associationAt: varName)! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:03'! browseRefsForSelectedInstanceVar | varName cls | varName _ self selectedVarName. varName == nil ifTrue: [^ nil]. cls _ self selectedClassOrMetaClass. cls == nil ifTrue: [^ nil]. cls browseAllAccessesTo: varName! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/5/2003 05:39'! copySelectedVarNameToClipboard "We only get here if there is a selected variable." | selected | selected _ self selectedVarName. Clipboard clipboardText: selected asString! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/4/2003 05:21'! selectedVarName | entry | self varsListIndex = 0 ifTrue: [^ nil]. entry _ self varsList at: self varsListIndex. entry isText ifTrue: [^ nil]. ^ entry! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 18:58'! showInheritedVars "Answers true/false if the vars list should show inherited values too." ^ Preferences valueOfFlag: #showInheritedVars! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 18:58'! showVarsInBrowser ^ Preferences valueOfFlag: #showVarsInBrowser! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:42'! showingInheritedVariablesString | string | string _ 'show inherited variables'. ^ self showInheritedVars ifTrue: ['' , string] ifFalse: ['' , string]! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:01'! toggleShowInheritedVars Preferences togglePreference: #showInheritedVars. self changed: #varsList! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:00'! variableListForClass: cls into: aCollection meta: meta | classVarList instVarList classNameString headerString | classVarList _ cls classVarNames. instVarList _ meta ifTrue: [OrderedCollection new] ifFalse: [cls instVarNames]. classNameString _ Text string: cls name emphasis: (Array with: TextEmphasis bold). classVarList isEmpty ifFalse: [headerString _ classNameString , (Text string: ' class variables' emphasis: (Array with: TextEmphasis italic)). aCollection add: headerString]. classVarList do: [:each | aCollection add: each]. instVarList isEmpty ifFalse: [headerString _ classNameString , (Text string: ' instance variables' emphasis: (Array with: TextEmphasis italic)). aCollection add: headerString]. instVarList do: [:each | aCollection add: each]. ^ aCollection! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 1/26/2001 19:00'! varsList | variables cls meta | variables _ OrderedCollection new. cls _ self selectedClass. meta _ self metaClassIndicated. cls isNil ifFalse: [self showInheritedVars ifTrue: [cls withAllSuperclasses do: [:eachClass | self variableListForClass: eachClass into: variables meta: meta]] ifFalse: [self variableListForClass: cls into: variables meta: meta]]. ^ variables! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/8/2003 17:17'! varsListIndex | m | m _ World isNil ifTrue: [self varsListView] ifFalse: [self varsListMorph]. m isNil ifTrue: [^ 0]. ^ World isNil ifTrue: [m selection] ifFalse: [self varsList indexOf: m selection]! ]style[(13 3 2 4 1 3 5 20 4 29 4 18 1 20 1 6 5 43 4 19 1 11)f1b,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/8/2003 16:40'! varsListIndex: anInteger | m item | World isNil ifTrue: [^nil]. m _ self varsListMorph. m isNil ifTrue: [^ nil]. item _ self varsList at: anInteger ifAbsent: []. item isNil ifTrue: [^ nil]. m selection: item. self changed: #varsListIndex! ]style[(15 9 4 7 33 1 3 4 17 1 20 3 4 4 3 4 18 9 20 4 20 3 4 1 12 4 3 4 10 14)f1b,f1cblue;b,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1c000184027! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/8/2003 17:39'! varsListMenu: aMenu | selected | World isNil ifTrue: [^aMenu]. selected _ self selectedVarName. self metaClassIndicated ifFalse: [aMenu addUpdating: #showingInheritedVariablesString action: #toggleShowInheritedVars. aMenu addLine. aMenu add: 'inst var refs...' action: #browseInstVarRefs. aMenu add: 'inst var defs...' action: #browseInstVarDefs. (selected ~~ nil and: [(selected isKindOf: Symbol) not]) ifTrue: [aMenu addLine. aMenu add: 'refs to ' , selected action: #browseRefsForSelectedInstanceVar. aMenu add: 'defs for ' , selected action: #browseDefsForSelectedInstanceVar]]. aMenu addLine. aMenu add: 'class var refs...' action: #browseClassVarRefs. aMenu add: 'class vars' action: #browseClassVariables. (selected ~~ nil and: [selected isKindOf: Symbol]) ifTrue: [aMenu addLine. aMenu add: 'refs to ' , selected action: #browseRefsForSelectedClassVar]. selected ~~ nil ifTrue: [aMenu addLine. aMenu add: 'copy name' action: #copySelectedVarNameToClipboard]. ^ aMenu! ]style[(14 5 4 9 35 8 3 4 19 4 32 5 14 32 9 24 5 5 13 5 6 18 9 18 5 5 6 18 9 18 6 8 4 3 13 8 11 6 21 5 15 5 6 10 3 8 9 33 7 5 6 11 3 8 9 33 5 5 11 5 6 19 9 19 3 5 6 12 9 21 4 8 4 3 10 8 11 6 14 5 13 5 6 10 3 8 9 30 4 8 4 3 12 5 13 5 6 11 9 31 6 5)f1b,f1cblue;b,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/4/2003 08:55'! varsListMorph | coll tv | coll _ OrderedCollection new. tv _ self topView. tv isNil ifTrue: [^nil]. tv allMorphsDo: [:m | (m class = PluggableListMorph and: [m getListSelector = #varsList]) ifTrue: [coll add: m]]. coll isEmpty ifTrue: [^ nil]. ^ coll first! ! !Browser methodsFor: 'vars pane' stamp: 'sbw 2/8/2003 17:08'! varsListView | tv | tv _ self topView. tv isNil ifTrue: [^ nil]. ^tv subViewSatisfying: [:v | v class = PluggableListView and: [v getListSelector = #varsList]] ! ! !ClassDescription methodsFor: 'instance variables' stamp: 'sbw 1/27/2001 09:30'! classThatIncludesClassVar: classVarName | coll | coll _ self withAllSuperclasses select: [:class | class classVarNames includes: classVarName]. ^coll isEmpty ifTrue: [nil] ifFalse: [coll first] "Can only be one."! ! !PackagePaneBrowser methodsFor: 'initialize-release' stamp: 'sbw 8/21/2001 20:39'! openAsMorphEditing: editString "Create a pluggable version of all the views for a Browser, including views and controllers." "PackagePaneBrowser openBrowser" | listHeight window | listHeight _ 0.4. (window _ SystemWindow labelled: 'later') model: self. window addMorph: (PluggableListMorph on: self list: #packageList selected: #packageListIndex changeSelected: #packageListIndex: menu: #packageMenu: keystroke: #packageListKey:from:) frame: (0 @ 0 extent: 0.15 @ listHeight). window addMorph: self buildMorphicSystemCatList frame: (0.15 @ 0 extent: 0.2 @ listHeight). self addClassAndSwitchesTo: window at: (0.35 @ 0 extent: 0.25 @ listHeight) plus: 0. self addMsgCatListPaneTo: window at: (0.6 @ 0 extent: 0.15 @ listHeight) plus: 0. window addMorph: self buildMorphicMessageList frame: (0.75 @ 0 extent: 0.25 @ listHeight). self addLowerPanesTo: window at: (0 @ listHeight corner: 1 @ 1) with: editString. window setUpdatablePanesFrom: #(#packageList #systemCategoryList #classList #messageCategoryList #messageList ). ^ window! ! !Preferences class methodsFor: 'initialization' stamp: 'sbw 6/30/2001 13:53'! addPreferenceForInheritedVarsInBrowser self preferenceAt: #showInheritedVars ifAbsent: [self addPreference: #showInheritedVars category: #browsing default: false balloonHelp: 'If true, and if showVarsInBrowser is true then the variables shown will include those from inhertited classes. If false, then only those in the immediate class are shown.']! ! !Preferences class methodsFor: 'initialization' stamp: 'sbw 6/30/2001 13:55'! addPreferenceForShowVarsInBrowser self preferenceAt: #showVarsInBrowser ifAbsent: [self addPreference: #showVarsInBrowser category: #browsing default: true balloonHelp: 'If true, uses Steve''s browser extension to include the variables pane. If false, back to standard browser.']! ! !Preferences class methodsFor: 'initialization' stamp: 'sbw 6/30/2001 13:56'! addPreferencesForBrowserVarsPanes "Preferences addPreferencesForBrowserVarsPanes" self addPreferenceForShowVarsInBrowser; addPreferenceForInheritedVarsInBrowser! ! "Postscript: Create the entry in Preferences to control the vars panes in Browsers." Preferences addPreferencesForBrowserVarsPanes.!