Added icons from Eclipse.
"{ Package: 'jv:vdb' }"
VDBAbstractApplication subclass:#VDBStackApplication
instanceVariableNames:'selectedThreadGroupHolder selectedThreadHolder
selectedFrameHolder internalListHolder internalSelectionHolder'
classVariableNames:''
poolDictionaries:''
category:'VDB-UI-Others'
!
!VDBStackApplication class methodsFor:'interface specs'!
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:VDBStackApplication andSelector:#windowSpec
VDBStackApplication new openInterface:#windowSpec
VDBStackApplication open
"
<resource: #canvas>
^
#(FullSpec
name: windowSpec
window:
(WindowSpec
label: 'Execution Stack'
name: 'Execution Stack'
min: (Point 10 10)
bounds: (Rectangle 0 0 300 300)
)
component:
(SpecCollection
collection: (
(HierarchicalListViewSpec
name: 'Stack'
layout: (LayoutFrame 0 0 0 0 0 1 0 1)
model: internalSelectionHolder
menu: contextMenu
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
listModel: internalListHolder
useIndex: false
highlightMode: line
showLines: false
useDefaultIcons: false
showRoot: false
)
)
)
)
! !
!VDBStackApplication class methodsFor:'menu specs'!
contextMenu
"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:VDBStackApplication andSelector:#contextMenu
(Menu new fromLiteralArrayEncoding:(VDBStackApplication contextMenu)) startUp
"
<resource: #menu>
^
#(Menu
(
(MenuItem
enabled: hasSelection
label: 'Inspect Model'
itemValue: doInspectModel
)
(MenuItem
label: 'Inspect Presenter'
itemValue: doInspectPresenter
)
)
nil
nil
)
! !
!VDBStackApplication class methodsFor:'plugIn spec'!
aspectSelectors
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this. If it is corrupted,
the UIPainter may not be able to read the specification."
"Return a description of exported aspects;
these can be connected to aspects of an embedding application
(if this app is embedded in a subCanvas)."
^ #(
#debuggerHolder
#selectedFrameHolder
#selectedThreadGroupHolder
#selectedThreadHolder
).
! !
!VDBStackApplication methodsFor:'aspects'!
selectedFrameHolder
"return/create the 'selectionHolder' value holder (automatically generated)"
selectedFrameHolder isNil ifTrue:[
selectedFrameHolder := ValueHolder new.
selectedFrameHolder addDependent:self.
].
^ selectedFrameHolder
"Created: / 21-09-2014 / 23:51:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedFrameHolder:aValueModel
"set the 'selectionHolder' value holder (automatically generated)"
|oldValue newValue|
selectedFrameHolder notNil ifTrue:[
oldValue := selectedFrameHolder value.
selectedFrameHolder removeDependent:self.
].
selectedFrameHolder := aValueModel.
selectedFrameHolder notNil ifTrue:[
selectedFrameHolder addDependent:self.
].
newValue := selectedFrameHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedFrameHolder.
].
"Created: / 21-09-2014 / 23:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedThreadGroupHolder
"return/create the 'selectedThreadGroupHolder' value holder (automatically generated)"
selectedThreadGroupHolder isNil ifTrue:[
selectedThreadGroupHolder := ValueHolder new.
selectedThreadGroupHolder addDependent:self.
].
^ selectedThreadGroupHolder
!
selectedThreadGroupHolder:something
"set the 'selectedThreadGroupHolder' value holder (automatically generated)"
|oldValue newValue|
selectedThreadGroupHolder notNil ifTrue:[
oldValue := selectedThreadGroupHolder value.
selectedThreadGroupHolder removeDependent:self.
].
selectedThreadGroupHolder := something.
selectedThreadGroupHolder notNil ifTrue:[
selectedThreadGroupHolder addDependent:self.
].
newValue := selectedThreadGroupHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedThreadGroupHolder.
].
!
selectedThreadHolder
"return/create the 'selectedThreadHolder' value holder (automatically generated)"
selectedThreadHolder isNil ifTrue:[
selectedThreadHolder := ValueHolder new.
selectedThreadHolder addDependent:self.
].
^ selectedThreadHolder
!
selectedThreadHolder:something
"set the 'selectedThreadHolder' value holder (automatically generated)"
|oldValue newValue|
selectedThreadHolder notNil ifTrue:[
oldValue := selectedThreadHolder value.
selectedThreadHolder removeDependent:self.
].
selectedThreadHolder := something.
selectedThreadHolder notNil ifTrue:[
selectedThreadHolder addDependent:self.
].
newValue := selectedThreadHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedThreadHolder.
].
! !
!VDBStackApplication methodsFor:'aspects-private'!
internalListHolder
"return/create the 'listHolder' value holder (automatically generated)"
internalListHolder isNil ifTrue:[
internalListHolder := HierarchicalList new.
internalListHolder showRoot: false.
internalListHolder root: HierarchicalItem new.
].
^ internalListHolder
"Created: / 20-09-2014 / 23:03:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
internalSelectionHolder
"return/create the 'internalSelectionHolder' value holder (automatically generated)"
internalSelectionHolder isNil ifTrue:[
internalSelectionHolder := ValueHolder new.
internalSelectionHolder addDependent:self.
].
^ internalSelectionHolder
! !
!VDBStackApplication methodsFor:'change & update'!
update:aspect with:param from:sender
"Invoked when an object that I depend upon sends a change notification."
"stub code automatically generated - please change as required"
sender == selectedFrameHolder ifTrue:[
self updateInternalSelection.
^ self.
].
sender == internalSelectionHolder ifTrue:[
self updateSelection.
].
super update:aspect with:param from:sender
"Modified: / 20-09-2014 / 23:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateInternalList
| root list |
debugger isNil ifTrue:[
self internalListHolder root children:#().
^ self.
].
root := self internalListHolder root.
list := debugger inferiors collect:[ :inferior | VDBThreadGroupPresenter new setThreadGroup: inferior; parent: root ].
root children: list.
root expand.
root children size == 1 ifTrue:[
root children anElement expand.
root children anElement children size == 1 ifTrue:[
root children anElement children anElement expand.
]
].
"Created: / 20-09-2014 / 23:05:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 22-09-2014 / 00:04:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateInternalSelection
"/ | selection internalSelection |
"/
"/ selection := self selectionHolder value.
"/ internalSelection := self internalListHolder value
"/ detect:[:e | e value == selection ] ifNone:[ nil ].
"/ self internalSelectionHolder
"/ value: internalSelection
"/ withoutNotifying: self.
"Created: / 20-09-2014 / 23:05:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 21-09-2014 / 23:52:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateSelection
| internalSelection frame thread group |
internalSelection := self internalSelectionHolder value.
internalSelection notNil ifTrue:[
internalSelection isFramePresenter ifTrue:[
frame := internalSelection frame.
thread := frame thread.
group := thread group.
] ifFalse:[
internalSelection isThreadPresenter ifTrue:[
thread := internalSelection thread.
group := thread group.
] ifFalse:[
group := internalSelection threadGroup.
]
].
].
self selectedThreadGroupHolder value: group withoutNotifying: self.
self selectedThreadHolder value: thread withoutNotifying: self.
self selectedFrameHolder value: frame withoutNotifying: self.
"Created: / 20-09-2014 / 23:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 22-09-2014 / 00:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'change & update-dekayed'!
delayedUpdateInternalList
self window sensor pushUserEvent: #updateInternalList for: self
"Created: / 20-09-2014 / 23:05:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'event handling'!
onStoppedEvent: event
self delayedUpdateInternalList.
"Created: / 17-09-2014 / 23:04:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 20-09-2014 / 23:08:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onThreadExitedEvent: event
self delayedUpdateInternalList.
"Created: / 18-09-2014 / 23:30:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 20-09-2014 / 23:08:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onThreadGroupExitedEvent: event
self delayedUpdateInternalList.
"Created: / 18-09-2014 / 23:30:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 20-09-2014 / 23:08:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'hooks'!
commonPostOpen
"a common hook for postOpenWith:, postOpenAsSubcanvasWith: and postOpenAsDialogWith:."
self delayedUpdateInternalList
"Created: / 18-09-2014 / 00:29:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 20-09-2014 / 23:50:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'initialization & release'!
subscribe
"Register for debugger events. To be overrided by subclasses"
debugger announcer
when: GDBStoppedEvent send: #onStoppedEvent: to: self;
when: GDBThreadExitedEvent send: #onThreadExitedEvent: to: self;
when: GDBThreadGroupExitedEvent send: #onThreadGroupExitedEvent: to: self
"Created: / 07-06-2014 / 14:33:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 18-09-2014 / 23:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'menu actions'!
doInspectModel
| selection |
selection := self internalSelectionHolder value.
selection notEmptyOrNil ifTrue:[
selection isThreadGroupPresenter ifTrue: [ selection threadGroup inspect ].
selection isThreadPresenter ifTrue: [ selection thread inspect ].
selection isFramePresenter ifTrue: [ selection frame inspect ].
].
"Modified: / 22-09-2014 / 01:17:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doInspectPresenter
self internalSelectionHolder value inspect
"Modified: / 22-09-2014 / 01:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'queries'!
hasSelection
^ self internalSelectionHolder value notEmptyOrNil
"Modified: / 22-09-2014 / 01:13:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !