Variable objects: splitted `VDBFrameApplication`
into more generic `VDBVariableObjectListApplication`
and `GDBFrameApplication`, the latter using the former.
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
"{ Package: 'jv:vdb' }"
"{ NameSpace: Smalltalk }"
VDBAbstractTreeApplication subclass:#VDBVariableObjectListApplication
instanceVariableNames:'frameHolder variableObjectListHolder selectedVariableObjectHolder'
classVariableNames:''
poolDictionaries:''
category:'VDB-UI-Others'
!
!VDBVariableObjectListApplication class methodsFor:'documentation'!
copyright
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
! !
!VDBVariableObjectListApplication class methodsFor:'accessing'!
windowTitle
^ 'Variables'
"Created: / 11-07-2017 / 16:37:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication class methodsFor:'interface specs'!
columnsSpec
"This resource specification was automatically generated
by the DataSetBuilder of ST/X."
"Do not manually edit this!! If it is corrupted,
the DataSetBuilder may not be able to read the specification."
"
DataSetBuilder new openOnClass:VDBFrameApplication andSelector:#columnsSpec
"
<resource: #tableColumns>
^#(
(DataSetColumnSpec
label: 'Value'
labelAlignment: left
labelButtonType: Button
width: 1.0
height: heightOfFirstRow
menuFromApplication: false
printSelector: value
backgroundSelector: backgroundColor
showRowSeparator: false
showColSeparator: false
)
)
! !
!VDBVariableObjectListApplication 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
#variableObjectListHolder
#selectedVariableHolder
).
"Modified: / 03-02-2018 / 09:52:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication class methodsFor:'startup-web applications'!
initialPageSpec
"this is only required for web-applications"
^ self shouldImplement
!
pageSpecs
"this is only required for web-applications"
^ self shouldImplement
! !
!VDBVariableObjectListApplication methodsFor:'accessing'!
variableObjectList: aSequencableCollection
self variableObjectListHolder value: aSequencableCollection
"Created: / 03-02-2018 / 08:07:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication methodsFor:'actions'!
doDoubleClick
"Invoked when user double-clicks to list item."
| selectedVarObjPresenter |
selectedVarObjPresenter := self internalSelectionHolder value.
selectedVarObjPresenter notNil ifTrue:[
selectedVarObjPresenter varobj inspect
].
"Created: / 13-06-2017 / 17:09:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 16-01-2018 / 23:33:12 / jv"
"Modified: / 03-02-2018 / 08:03:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication methodsFor:'aspects'!
backgroundColorFor: aVDBVariableOjectPresenter
^ aVDBVariableOjectPresenter varobj hasChanged
ifTrue:[ Color yellow lighter lighter ]
ifFalse:[ nil ]
"Created: / 01-02-2018 / 09:08:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedVariableObjectHolder
"return/create the 'selectedVariableHolder' value holder (automatically generated)"
selectedVariableObjectHolder isNil ifTrue:[
selectedVariableObjectHolder := ValueHolder new.
selectedVariableObjectHolder addDependent:self.
].
^ selectedVariableObjectHolder
!
selectedVariableObjectHolder:something
"set the 'selectedVariableHolder' value holder (automatically generated)"
| oldValue newValue |
selectedVariableObjectHolder notNil ifTrue:[
oldValue := selectedVariableObjectHolder value.
selectedVariableObjectHolder removeDependent:self.
].
selectedVariableObjectHolder := something.
selectedVariableObjectHolder notNil ifTrue:[
selectedVariableObjectHolder addDependent:self.
].
newValue := selectedVariableObjectHolder value.
oldValue ~~ newValue ifTrue:[
self
update:#value
with:newValue
from:selectedVariableObjectHolder.
].
!
variableObjectListHolder
"return/create the 'variableObjectListHolder' value holder (automatically generated)"
variableObjectListHolder isNil ifTrue:[
variableObjectListHolder := ValueHolder with: #().
variableObjectListHolder addDependent:self.
].
^ variableObjectListHolder
"Modified: / 03-02-2018 / 07:33:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
variableObjectListHolder:something
"set the 'variableObjectListHolder' value holder (automatically generated)"
|oldValue newValue|
variableObjectListHolder notNil ifTrue:[
oldValue := variableObjectListHolder value.
variableObjectListHolder removeDependent:self.
].
variableObjectListHolder := something.
variableObjectListHolder notNil ifTrue:[
variableObjectListHolder addDependent:self.
].
newValue := variableObjectListHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:variableObjectListHolder.
].
! !
!VDBVariableObjectListApplication methodsFor:'change & update'!
update:aspect with:param from:sender
"Invoked when an object that I depend upon sends a change notification."
sender == variableObjectListHolder ifTrue:[
self enqueueDelayedUpdateInternalList.
^ self.
].
super update:aspect with:param from:sender
"Modified: / 03-02-2018 / 09:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication methodsFor:'change & update-delayed'!
delayedUpdateInternalList
| root |
debugger isNil ifTrue:[
self internalListHolder root children:#().
^ self.
].
root := self internalListHolder root.
root children:(self variableObjectListHolder value
collect:[:v |
(VDBVariableObjectPresenter new) setVarobj:v;
parent:root;
yourself
]).
root expand.
internalListView notNil ifTrue:[
internalListView invalidate.
]
"Created: / 27-02-2015 / 15:47:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 03-02-2018 / 07:31:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
delayedUpdateSelection
| internalSelection |
internalSelection := self internalSelectionHolder value.
internalSelection notNil ifTrue:[
self selectedVariableObjectHolder value: internalSelection varobj
] ifFalse:[
self selectedVariableObjectHolder value: nil
].
"Modified: / 28-01-2018 / 22:50:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication methodsFor:'drag & drop'!
dropObjects:aCollectionOfDropObjects
"drop manager wants to drop.
This is ony sent, if #canDrop: returned true.
Must be redefined in order for drop to work."
^ self shouldImplement
! !
!VDBVariableObjectListApplication methodsFor:'event handling'!
onStoppedEvent: aGDBStoppedEvent
self enqueueDelayedInvalidateInternalList
"Created: / 01-02-2018 / 23:14:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication methodsFor:'initialization & release'!
subscribe
"Register for debugger events. To be overrided by subclasses"
debugger announcer
when: GDBStoppedEvent send: #onStoppedEvent: to: self
"Created: / 01-02-2018 / 23:07:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVariableObjectListApplication class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !