--- a/DebugView.st Mon Oct 08 13:04:56 2001 +0200
+++ b/DebugView.st Mon Oct 08 16:16:22 2001 +0200
@@ -25,7 +25,8 @@
stackInspector steppedContext wrapperContext verboseBacktrace
firstContext stepHow cachable currentMethod ignoreBreakpoints
stepUntilEntering lastStepUntilEntering
- lastSelectionInReceiverInspector lastSelectionInContextInspector'
+ lastSelectionInReceiverInspector lastSelectionInContextInspector
+ canShowMore'
classVariableNames:'CachedDebugger CachedExclusive OpenDebuggers MoreDebuggingDetail
DebuggingDebugger VerboseBacktraceDefault DefaultIcon
InitialNCHAINShown'
@@ -432,6 +433,209 @@
"Created: 11.1.1997 / 12:14:44 / cg"
! !
+!DebugView class methodsFor:'menu specs'!
+
+menuSpec
+ "This resource specification was automatically generated
+ by the MenuEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the MenuEditor may not be able to read the specification."
+
+ "
+ MenuEditor new openOnClass:DebugView andSelector:#menuSpec
+ (Menu new fromLiteralArrayEncoding:(DebugView menuSpec)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Process'
+ #translateLabel: true
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Continue'
+ #translateLabel: true
+ #value: #doContinue
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Abort'
+ #translateLabel: true
+ #value: #doAbort
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Terminate'
+ #translateLabel: true
+ #value: #doTerminate
+ )
+ )
+ nil
+ nil
+ )
+ )
+ #(#MenuItem
+ #label: 'Class'
+ #translateLabel: true
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Browse Implementing Class'
+ #translateLabel: true
+ #value: #browseImplementingClass
+ #enabled: #canBrowseImplementingClass
+ )
+ #(#MenuItem
+ #label: 'Browse Receivers Class'
+ #translateLabel: true
+ #value: #browseReceiversClass
+ #enabled: #canBrowseReceiversClass
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Browse Receivers Class Hierarchy'
+ #translateLabel: true
+ #value: #browseClassHierarchy
+ #enabled: #canBrowseClassHierarchy
+ )
+ #(#MenuItem
+ #label: 'Browse Receivers Full Protocol'
+ #translateLabel: true
+ #value: #browseFullClassProtocol
+ #enabled: #canBrowseFullClassProtocol
+ )
+ )
+ nil
+ nil
+ )
+ )
+ #(#MenuItem
+ #label: 'Selector'
+ #translateLabel: true
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Browse Implementors...'
+ #translateLabel: true
+ #value: #browseImplementorsOf
+ )
+ #(#MenuItem
+ #label: 'Browse Senders...'
+ #translateLabel: true
+ #value: #browseSendersOf
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Define'
+ #translateLabel: true
+ #value: #doDefineMethod
+ #enabled: #canDefineMethod
+ )
+ )
+ nil
+ nil
+ )
+ )
+ #(#MenuItem
+ #label: 'View'
+ #translateLabel: true
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Show More'
+ #translateLabel: true
+ #value: #doShowMore
+ #enabled: #canShowMore
+ )
+ #(#MenuItem
+ #label: 'Show Verbose'
+ #translateLabel: true
+ #value: #doSHowVerbose
+ )
+ )
+ nil
+ nil
+ )
+ )
+ #(#MenuItem
+ #label: 'Breakpoint'
+ #translateLabel: true
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Remove'
+ #translateLabel: true
+ #value: #doRemoveBreakPoint
+ #enabled: #canRemoveBreakpoint
+ )
+ #(#MenuItem
+ #label: 'Remove All Breakpoints'
+ #translateLabel: true
+ #value: #doRemoveAllBreakPoint
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Allow Breakpoints in Debugger'
+ #translateLabel: true
+ #indication: #allowBreakPointsInDebugger
+ )
+ )
+ nil
+ nil
+ )
+ )
+ #(#MenuItem
+ #label: 'Help'
+ #translateLabel: true
+ #startGroup: #right
+ #submenu:
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'Debuggers Documentation'
+ #translateLabel: true
+ #value: #openHTMLDocument:
+ #argument: 'tools/debugView/TOP.html'
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'About DebugView...'
+ #translateLabel: true
+ #value: #openAboutThisApplication
+ )
+ )
+ nil
+ nil
+ )
+ )
+ )
+ nil
+ nil
+ )
+! !
+
!DebugView class methodsFor:'misc'!
interestingContextFrom:aContext
@@ -795,6 +999,8 @@
m := contextView middleButtonMenu.
m notNil ifTrue:[
+ self updateMenuItems.
+
(inspecting or:[Object abortSignal isHandled]) ifTrue:[
abortButton enable.
m enable:#doAbort.
@@ -1352,7 +1558,7 @@
!
initialize
- |v panel hpanel bpanel separator img|
+ |menuPanel mH panel bpanel bH bpanel1 bH1 bpanel2 bH2 codePanel oldLayout v|
super initialize.
@@ -1370,49 +1576,158 @@
stepHow := nil.
canContinue := false.
- bpanel := HorizontalPanelView in:self.
+"/ menuPanel := MenuPanel in:self.
+"/ menuPanel verticalLayout:false.
+"/ menuPanel receiver:self.
+"/ menuPanel menu:(self pullDownMenu).
+"/
+"/ mH := menuPanel preferredExtent y.
+"/ menuPanel origin:(0.0 @ 0.0) corner:(1.0 @ (mH)).
+ mH := 0.
+
+ "/ oldLayout := false.
+ oldLayout := true.
+ oldLayout ifTrue:[
+ bpanel := HorizontalPanelView in:self.
+ self initializeButtonsIn:bpanel.
+
+ bH := bpanel preferredExtent y.
+ bpanel origin:(0.0 @ mH)
+ extent:(1.0 @ bH).
+ panel := VariableVerticalPanel
+ origin:(0.0 @ (mH + bH))
+ corner:(1.0 @ 1.0)
+ in:self.
+
+ v := self initializeContextListViewIn:panel.
+ v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
+
+ codePanel := View in:panel.
+ v := self initializeCodeViewIn:codePanel.
+ v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+ codePanel origin:(0.0 @ 0.25) corner:(1.0 @ 0.75).
+
+ v := self initializeInspectorViewsIn:panel.
+ v origin:(0.0 @ 0.75) corner:(1.0 @ 1.0).
+
+ ] ifFalse:[
+ bpanel1 := HorizontalPanelView in:self.
+ self initializeButtons1In:bpanel1.
+
+ bH1 := bpanel1 preferredExtent y.
+ bpanel1 origin:(0.0 @ mH)
+ extent:(1.0 @ bH1).
+ panel := VariableVerticalPanel
+ origin:(0.0 @ (mH + bH1))
+ corner:(1.0 @ 1.0)
+ in:self.
+
+ v := self initializeContextListViewIn:panel.
+ v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
+
+ codePanel := View in:panel.
+ bpanel2 := HorizontalPanelView in:codePanel.
+ self initializeButtons2In:bpanel2.
+
+ bH2 := bpanel2 preferredExtent y.
+ bpanel2 origin:(0.0 @ 0.0)
+ extent:(1.0 @ bH2).
+
+ v := self initializeCodeViewIn:codePanel.
+ v origin:(0.0 @ bH2) corner:(1.0 @ 1.0).
+ codePanel origin:(0.0 @ 0.25) corner:(1.0 @ 0.75).
+
+ v := self initializeInspectorViewsIn:panel.
+ v origin:(0.0 @ 0.75) corner:(1.0 @ 1.0).
+ ].
+
+ "
+ Debugger newDebugger
+ "
+!
+
+initializeButtons1In:bpanel
+ |separator|
+
bpanel horizontalLayout:#left.
bpanel verticalLayout:#centerMax.
bpanel verticalSpace:ViewSpacing // 2.
- abortButton := Button
- label:(resources at:'abort')
- action:[abortButton turnOffWithoutRedraw. self doAbort]
- in:bpanel.
-
+ abortButton := Button
+ label:(resources at:'abort')
+ action:[
+ abortButton turnOffWithoutRedraw.
+ self doAbort
+ ]
+ in:bpanel.
separator := View extent:(10 @ 5) in:bpanel.
separator borderWidth:0; level:0.
- continueButton := Button
- label:(resources at:'continue')
- action:[continueButton turnOffWithoutRedraw. self doContinue]
- in:bpanel.
+
+ continueButton := Button
+ label:(resources at:'continue')
+ action:[
+ continueButton turnOffWithoutRedraw.
+ self doContinue
+ ]
+ in:bpanel.
separator := View extent:(10 @ 5) in:bpanel.
separator borderWidth:0; level:0.
- returnButton := Button
- label:(resources at:'return')
- action:[returnButton turnOff. self doReturn]
- in:bpanel.
-
- restartButton := Button
- label:(resources at:'restart')
- action:[restartButton turnOff. self doRestart]
- in:bpanel.
-
+
+ terminateButton := Button
+ label:(resources at:'terminate')
+ action:[
+ terminateButton turnOffWithoutRedraw.
+ self doTerminate
+ ]
+ in:bpanel.
+!
+
+initializeButtons2In:bpanel
+ |separator|
+
+ bpanel horizontalLayout:#left.
+ bpanel verticalLayout:#centerMax.
+ bpanel verticalSpace:ViewSpacing // 2.
+
+ returnButton := Button
+ label:(resources at:'return')
+ action:[
+ returnButton turnOff.
+ self doReturn
+ ]
+ in:bpanel.
+ restartButton := Button
+ label:(resources at:'restart')
+ action:[
+ restartButton turnOff.
+ self doRestart
+ ]
+ in:bpanel.
separator := View extent:(10 @ 5) in:bpanel.
separator borderWidth:0; level:0.
- nextButton := Button
- label:(resources at:'next')
- action:[stepButton turnOff. self doNext]
- in:bpanel.
-
+ nextButton := Button
+ label:(resources at:'next')
+ action:[
+ stepButton turnOff.
+ self doNext
+ ]
+ in:bpanel.
+ stepButton := Button
+ label:(resources at:'step')
+ action:[
+ stepButton turnOff.
+ self doStep
+ ]
+ in:bpanel.
"/ cg:
"/ I disabled the stepIn / stepOut buttons - for now.
"/ they do not work relyable with inlined blocks yet.
"/
+
"/ img := Image fromFile:'bitmaps/stepIn.xpm'.
"/ img isNil ifTrue:[
"/ img := (resources at:'next')
@@ -1440,38 +1755,166 @@
"/ action:[stepButton turnOff. self doNextOut]
"/ in:bpanel.
- stepButton := Button
- label:(resources at:'step')
- action:[stepButton turnOff. self doStep]
- in:bpanel.
- sendButton := Button
- label:(resources at:'send')
- action:[sendButton turnOff. self doSend]
- in:bpanel.
-
+ sendButton := Button
+ label:(resources at:'send')
+ action:[
+ sendButton turnOff.
+ self doSend
+ ]
+ in:bpanel.
separator := View extent:(30 @ 5) in:bpanel.
separator borderWidth:0; level:0.
- terminateButton := Button
- label:(resources at:'terminate')
- action:[terminateButton turnOffWithoutRedraw. self doTerminate]
- in:bpanel.
-
-
+
+ defineButton := Button
+ label:(resources at:'define')
+ action:[
+ defineButton turnOffWithoutRedraw.
+ self doDefine
+ ]
+ in:bpanel.
+ defineButton beInvisible
+!
+
+initializeButtonsIn:bpanel
+ |separator|
+
+ bpanel horizontalLayout:#left.
+ bpanel verticalLayout:#centerMax.
+ bpanel verticalSpace:ViewSpacing // 2.
+
+ abortButton := Button
+ label:(resources at:'abort')
+ action:[
+ abortButton turnOffWithoutRedraw.
+ self doAbort
+ ]
+ in:bpanel.
+ separator := View extent:(10 @ 5) in:bpanel.
+ separator borderWidth:0; level:0.
+
+ continueButton := Button
+ label:(resources at:'continue')
+ action:[
+ continueButton turnOffWithoutRedraw.
+ self doContinue
+ ]
+ in:bpanel.
+
+ separator := View extent:(10 @ 5) in:bpanel.
+ separator borderWidth:0; level:0.
+
+ returnButton := Button
+ label:(resources at:'return')
+ action:[
+ returnButton turnOff.
+ self doReturn
+ ]
+ in:bpanel.
+ restartButton := Button
+ label:(resources at:'restart')
+ action:[
+ restartButton turnOff.
+ self doRestart
+ ]
+ in:bpanel.
+
+ separator := View extent:(10 @ 5) in:bpanel.
+ separator borderWidth:0; level:0.
+
+ nextButton := Button
+ label:(resources at:'next')
+ action:[
+ stepButton turnOff.
+ self doNext
+ ]
+ in:bpanel.
+ stepButton := Button
+ label:(resources at:'step')
+ action:[
+ stepButton turnOff.
+ self doStep
+ ]
+ in:bpanel.
+"/ cg:
+"/ I disabled the stepIn / stepOut buttons - for now.
+"/ they do not work relyable with inlined blocks yet.
+"/
+
+
+"/ img := Image fromFile:'bitmaps/stepIn.xpm'.
+"/ img isNil ifTrue:[
+"/ img := (resources at:'next')
+"/ ].
+"/ nextButton := Button
+"/ label:img
+"/ action:[stepButton turnOff. self doNext]
+"/ in:bpanel.
+"/
+"/ img := Image fromFile:'bitmaps/stepOver.xpm'.
+"/ img isNil ifTrue:[
+"/ img := (resources at:'over')
+"/ ].
+"/ nextOverButton := Button
+"/ label:img
+"/ action:[stepButton turnOff. self doNextOver]
+"/ in:bpanel.
+"/
+"/ img := Image fromFile:'bitmaps/stepOut.xpm'.
+"/ img isNil ifTrue:[
+"/ img := (resources at:'out')
+"/ ].
+"/ nextOutButton := Button
+"/ label:img
+"/ action:[stepButton turnOff. self doNextOut]
+"/ in:bpanel.
+
+ sendButton := Button
+ label:(resources at:'send')
+ action:[
+ sendButton turnOff.
+ self doSend
+ ]
+ in:bpanel.
separator := View extent:(30 @ 5) in:bpanel.
separator borderWidth:0; level:0.
- defineButton := Button
- label:(resources at:'define')
- action:[defineButton turnOffWithoutRedraw. self doDefine]
- in:bpanel.
- defineButton beInvisible.
-
- bpanel origin:(0.0 @ 0.0)
- extent:(1.0 @ (bpanel preferredExtent y)).
-
- panel := VariableVerticalPanel
- origin:(0.0 @ bpanel height)
- corner:(1.0 @ 1.0)
- in:self.
+
+ terminateButton := Button
+ label:(resources at:'terminate')
+ action:[
+ terminateButton turnOffWithoutRedraw.
+ self doTerminate
+ ]
+ in:bpanel.
+ separator := View extent:(30 @ 5) in:bpanel.
+ separator borderWidth:0; level:0.
+
+ defineButton := Button
+ label:(resources at:'define')
+ action:[
+ defineButton turnOffWithoutRedraw.
+ self doDefine
+ ]
+ in:bpanel.
+ defineButton beInvisible
+!
+
+initializeCodeViewIn:panel
+ |v|
+
+ v := HVScrollableView
+ for:CodeView
+ miniScrollerH:true
+ miniScrollerV:false
+ in:panel.
+
+"/ v autoHideScrollBars:true.
+ codeView := v scrolledView.
+
+ ^ v
+!
+
+initializeContextListViewIn:panel
+ |v|
v := HVScrollableView
for:SelectionInListView
@@ -1479,24 +1922,19 @@
miniScrollerV:false
in:panel.
v autoHideHorizontalScrollBar:true.
- v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
contextView := v scrolledView.
contextView action:[:lineNr | self showSelection:lineNr].
- contextView doubleClickAction:[:line | self browse].
+ contextView doubleClickAction:[:line | self browseImplementingClass].
contextView selectConditionBlock:[:line | self checkSelectionChangeAllowed:line].
- v := HVScrollableView
- for:CodeView
- miniScrollerH:true
- miniScrollerV:false
- in:panel.
- v origin:(0.0 @ 0.25) corner:(1.0 @ 0.75).
-"/ v autoHideScrollBars:true.
- codeView := v scrolledView.
+ ^ v
+!
+
+initializeInspectorViewsIn:panel
+ |hpanel|
hpanel := VariableHorizontalPanel in:panel.
- hpanel origin:(0.0 @ 0.75) corner:(1.0 @ 1.0).
receiverInspector := InspectorView
origin:(0.0 @ 0.0) corner:(0.5 @ 1.0)
@@ -1508,7 +1946,7 @@
in:hpanel.
contextInspector label:'context'.
- "Modified: / 29.7.1998 / 21:56:51 / cg"
+ ^ hpanel
!
initializeMiddleButtonMenu
@@ -1567,8 +2005,8 @@
items := items , #(
('-' )
- ('Browse (implementing class)' browse )
- ('Browse (receivers class)' browseClass )
+ ('Browse (implementing class)' browseImplementingClass )
+ ('Browse (receivers class)' browseReceiversClass )
('Browse class hierarchy' browseClassHierarchy )
('Browse full class protocol' browseFullClassProtocol )
('Implementors' browseImplementors )
@@ -1601,11 +2039,12 @@
inspecting ifTrue:[
m notNil ifTrue:[
- m disableAll:#(doTraceStep removeBreakpoint browse browseClass
+ m disableAll:#(doTraceStep removeBreakpoint browseImplementingClass browseReceiversClass
browseClassHierarchy browseFullClassProtocol
browseImplementors browseSenders inspectContext skip doStepOut).
].
- ]
+ ].
+ self updateMenuItems
"Modified: / 29.10.1997 / 03:40:16 / cg"
!
@@ -1627,6 +2066,20 @@
"Created: 24.7.1997 / 18:17:44 / cg"
!
+pullDownMenu
+ "return the top (pullDown) menu"
+
+ <resource: #programMenu>
+
+ |m|
+
+ m := self class menuSpec.
+ m := m decodeAsLiteralArray.
+ m receiver:self.
+ m findGuiResourcesIn:self.
+ ^ m.
+!
+
reinitialize
"/ redefined - since the debugView runs on top of
"/ the debuggee, there would be no event loop for me.
@@ -2266,7 +2719,62 @@
!
-browse
+browseClass
+ "browse the reveivers class (of the selected contexts message)"
+
+ |cls sel|
+
+ selectedContext isNil ifTrue:[^ self].
+
+ cls := selectedContext receiver class.
+ sel := selectedContext selector.
+ (cls implements:sel) ifFalse:[
+ sel := nil
+ ].
+ cls browserClass openInClass:cls selector:sel.
+
+ "Modified: / 3.2.1998 / 20:23:36 / cg"
+!
+
+browseClassHierarchy
+ "browse the reveivers classHierarchy (of the selected contexts message)"
+
+ |cls mthd|
+
+ selectedContext isNil ifTrue:[^ self].
+
+ mthd := selectedContext method.
+ mthd isNil ifTrue:[
+ cls := selectedContext receiver class
+ ] ifFalse:[
+ cls := mthd containingClass.
+ ].
+ cls browserClass browseClassHierarchy:cls.
+
+ "Modified: / 3.2.1998 / 20:23:40 / cg"
+!
+
+browseFullClassProtocol
+ "browse the reveivers full protocol (of the selected contexts message)"
+
+ |cls mthd|
+
+ selectedContext isNil ifTrue:[^ self].
+
+ mthd := selectedContext method.
+ mthd isNil ifTrue:[
+ cls := selectedContext receiver class
+ ] ifFalse:[
+ cls := mthd containingClass.
+ ].
+ cls browserClass browseFullClassProtocol:cls.
+
+ "Modified: / 3.2.1998 / 20:23:44 / cg"
+!
+
+browseImplementingClass
+ "browse the implementing class (of the selected contexts message)"
+
|mthd who sel cls|
selectedContext isNil ifTrue:[^ self].
@@ -2290,49 +2798,6 @@
"Modified: / 3.2.1998 / 19:46:40 / cg"
!
-browseClass
- |cls|
-
- selectedContext isNil ifTrue:[^ self].
-
- cls := selectedContext receiver class.
- cls browserClass openInClass:cls selector:nil.
-
- "Modified: / 3.2.1998 / 20:23:36 / cg"
-!
-
-browseClassHierarchy
- |cls mthd|
-
- selectedContext isNil ifTrue:[^ self].
-
- mthd := selectedContext method.
- mthd isNil ifTrue:[
- cls := selectedContext receiver class
- ] ifFalse:[
- cls := mthd containingClass.
- ].
- cls browserClass browseClassHierarchy:cls.
-
- "Modified: / 3.2.1998 / 20:23:40 / cg"
-!
-
-browseFullClassProtocol
- |cls mthd|
-
- selectedContext isNil ifTrue:[^ self].
-
- mthd := selectedContext method.
- mthd isNil ifTrue:[
- cls := selectedContext receiver class
- ] ifFalse:[
- cls := mthd containingClass.
- ].
- cls browserClass browseFullClassProtocol:cls.
-
- "Modified: / 3.2.1998 / 20:23:44 / cg"
-!
-
browseImplementors
"open a browser on the implementors of the selected methods selector"
@@ -2368,6 +2833,23 @@
"Modified: / 6.2.2000 / 01:05:14 / cg"
!
+browseReceiversClass
+ "browse the reveivers class (of the selected contexts message)"
+
+ |cls sel|
+
+ selectedContext isNil ifTrue:[^ self].
+
+ cls := selectedContext receiver class.
+ sel := selectedContext selector.
+ (cls implements:sel) ifFalse:[
+ sel := nil
+ ].
+ cls browserClass openInClass:cls selector:sel.
+
+ "Modified: / 3.2.1998 / 20:23:36 / cg"
+!
+
browseSenders
"open a browser on the senders of the selected methods selector"
@@ -2528,9 +3010,16 @@
!
doDefine
+ |sel|
+
+ sel := contextView selection.
+
self
codeAccept:('%1\ self halt:''%1 is not yet implemented''.' bindWith:actualContext selector) withCRs
unwind:false.
+
+ self doShowSelection:sel.
+ self doRestart
!
doIgnoreBreakpoints
@@ -3021,6 +3510,49 @@
^ busy
!
+canBrowseClassHierarchy
+ |m|
+
+ m := contextView middleButtonMenu.
+ ^ m notNil and:[m isEnabled:#browseClassHierarchy]
+!
+
+canBrowseFullClassProtocol
+ |m|
+
+ m := contextView middleButtonMenu.
+ ^ m notNil and:[m isEnabled:#browseFullClassProtocol]
+!
+
+canBrowseImplementingClass
+ |m|
+
+ m := contextView middleButtonMenu.
+ ^ m notNil and:[m isEnabled:#browseImplementingClass]
+!
+
+canBrowseReceiversClass
+ |m|
+
+ m := contextView middleButtonMenu.
+ ^ m notNil and:[m isEnabled:#browseReceiversClass]
+!
+
+canDefineMethod
+ ^ defineButton isVisible
+!
+
+canRemoveBreakpoint
+ |m|
+
+ m := contextView middleButtonMenu.
+ ^ m notNil and:[m isEnabled:#removeBreakpoint]
+!
+
+canShowMore
+ ^ canShowMore
+!
+
exclusive:aBoolean
exclusive := aBoolean
!
@@ -3140,6 +3672,7 @@
m notNil ifTrue:[
m disable:#showMore.
].
+ canShowMore := false.
aContext isNil ifTrue:[
text := Array with:'** no context **'.
@@ -3327,6 +3860,7 @@
m notNil ifTrue:[
m enable:#showMore.
].
+ canShowMore := true.
text add:(resources string:'*** more walkback follows - click here to see them ***')
].
].
@@ -3342,7 +3876,7 @@
m disable:#removeBreakpoint.
m disable:#browseImplementors.
m disable:#browseSenders.
- m disable:#browseClass.
+ m disable:#browseReceiversClass.
].
^ true
@@ -4006,7 +4540,8 @@
].
] ifFalse:[
self updateForContext:lineNr
- ]
+ ].
+ self updateMenuItems
!
showSelection:lineNr
@@ -4055,7 +4590,7 @@
|con homeContext sel method code canAccept
implementorClass lineNrInMethod rec m line
sender selSender tryVars possibleBlocks errMsg
- mthd cls mCls rCls codeSet highlighter evaluatorClass
+ codeSet highlighter evaluatorClass
canDefine|
canDefine := false.
@@ -4394,45 +4929,60 @@
"
enable/disable some menu items
"
- m := contextView middleButtonMenu.
- (m notNil and:[selectedContext notNil]) ifTrue:[
- m enableAll:#(browseImplementors browseSenders inspectContext skip skipForReturn).
-
- (method notNil and:[method isWrapped]) ifTrue:[
- m enable:#removeBreakpoint.
- ] ifFalse:[
- m disable:#removeBreakpoint.
- ].
-
- mthd := selectedContext method.
- mthd notNil ifTrue:[
- cls := mCls := mthd containingClass.
- ].
- rCls := selectedContext receiver class.
- cls isNil ifTrue:[
- cls := rCls
- ].
- cls notNil ifTrue:[
- m enableAll:#(browse browseClass browseClassHierarchy browseFullClassProtocol).
- rCls == mCls ifTrue:[
- m disable:#browseClass
- ].
- mCls isNil ifTrue:[
- m disable:#browse
- ]
-
- ] ifFalse:[
- m disableAll:#(browse browseClass browseClassHierarchy browseFullClassProtocol).
- ].
- ]
+ self updateMenuItems
"Created: / 14.8.1997 / 20:15:00 / cg"
"Modified: / 13.11.1998 / 23:19:35 / cg"
+!
+
+updateMenuItems
+ |m mthd cls mCls rCls|
+
+ "
+ enable/disable some menu items
+ "
+ m := contextView middleButtonMenu.
+ m notNil ifTrue:[
+ m disable:#removeBreakpoint.
+ canShowMore ifFalse:[
+ m disable:#showMore
+ ].
+
+ selectedContext notNil ifTrue:[
+ m enableAll:#(browseImplementors browseSenders inspectContext skip skipForReturn).
+
+ mthd := selectedContext method.
+ mthd notNil ifTrue:[
+ cls := mCls := mthd containingClass.
+ mthd isBreakpointed ifTrue:[
+ m enable:#removeBreakpoint.
+ ]
+ ].
+ rCls := selectedContext receiver class.
+ cls isNil ifTrue:[
+ cls := rCls
+ ].
+ cls notNil ifTrue:[
+ m enableAll:#(browseImplementingClass browseReceiversClass browseClassHierarchy browseFullClassProtocol).
+ rCls == mCls ifTrue:[
+ m disable:#browseReceiversClass
+ ].
+ mCls isNil ifTrue:[
+ m disable:#browseImplementingClass
+ ]
+
+ ] ifFalse:[
+ m disableAll:#(browseImplementingClass browseReceiversClass browseClassHierarchy browseFullClassProtocol).
+ ].
+ ] ifFalse:[
+ m disableAll:#(browseImplementingClass browseReceiversClass browseClassHierarchy browseFullClassProtocol).
+ ]
+ ]
! !
!DebugView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/DebugView.st,v 1.283 2001-09-26 09:57:05 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/DebugView.st,v 1.284 2001-10-08 14:16:22 cg Exp $'
! !
DebugView initialize!