Variable objects: splitted `VDBFrameApplication`
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 03 Feb 2018 21:18:50 +0000
changeset 59 e7d0453109a1
parent 58 df46b9c82b38
child 60 bcdb393c956f
Variable objects: splitted `VDBFrameApplication` into more generic `VDBVariableObjectListApplication` and `GDBFrameApplication`, the latter using the former.
Make.proto
Make.spec
VDBAbstractApplication.st
VDBAbstractListApplication.st
VDBDebuggerApplication.st
VDBFrameApplication.st
VDBVariableObjectListApplication.st
abbrev.stc
bc.mak
extensions.st
jv_vdb.st
libInit.cc
--- a/Make.proto	Thu Feb 01 23:28:51 2018 +0000
+++ b/Make.proto	Sat Feb 03 21:18:50 2018 +0000
@@ -154,8 +154,9 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/Make.spec	Thu Feb 01 23:28:51 2018 +0000
+++ b/Make.spec	Sat Feb 03 21:18:50 2018 +0000
@@ -76,8 +76,9 @@
 	VDBTabbingContainer \
 	VDBUnixDebuggerConsoleApplication \
 	VDBUnixInferiorConsoleApplication \
-	VDBFrameApplication \
 	VDBStackApplication \
+	VDBVariableObjectListApplication \
+    VDBFrameApplication \
 
 
 
@@ -108,8 +109,11 @@
     $(OUTDIR)VDBTabbingContainer.$(O) \
     $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
+    $(OUTDIR)VDBStackApplication.$(O) \
+    $(OUTDIR)VDBVariableObjectListApplication.$(O) \
     $(OUTDIR)VDBFrameApplication.$(O) \
-    $(OUTDIR)VDBStackApplication.$(O) \
+    $(OUTDIR)extensions.$(O) \
 
 
 
+
--- a/VDBAbstractApplication.st	Thu Feb 01 23:28:51 2018 +0000
+++ b/VDBAbstractApplication.st	Sat Feb 03 21:18:50 2018 +0000
@@ -165,15 +165,31 @@
 !VDBAbstractApplication methodsFor:'change & update'!
 
 enqueueDelayedUpdate: selector
-    self window sensor pushUserEvent: selector for:self
+    | w |
+
+    w := self window.
+    w notNil ifTrue:[
+        self window sensor pushUserEvent: selector for:self
+    ] ifFalse:[ 
+        self perform: selector
+    ].
 
     "Created: / 17-01-2018 / 06:50:29 / jv"
+    "Modified: / 03-02-2018 / 08:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enqueueDelayedUpdate: selector with: argument
-    self window sensor pushUserEvent: selector for:self  withArgument: argument
+    | w |
+
+    w := self window.
+    w notNil ifTrue:[
+        self window sensor pushUserEvent: selector for:self withArgument: argument
+    ] ifFalse:[ 
+        self perform: selector with: argument
+    ].
 
     "Created: / 17-01-2018 / 06:50:39 / jv"
+    "Modified: / 03-02-2018 / 08:10:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 update:something with:aParameter from:changedObject
--- a/VDBAbstractListApplication.st	Thu Feb 01 23:28:51 2018 +0000
+++ b/VDBAbstractListApplication.st	Sat Feb 03 21:18:50 2018 +0000
@@ -249,6 +249,14 @@
 
 !VDBAbstractListApplication methodsFor:'change & update'!
 
+enqueueDelayedInvalidateInternalList
+    internalListView notNil ifTrue:[
+        internalListView scrolledView invalidate
+    ]
+
+    "Created: / 01-02-2018 / 23:11:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 enqueueDelayedUpdateInternalList
    self enqueueDelayedUpdate: #delayedUpdateInternalList
 
--- a/VDBDebuggerApplication.st	Thu Feb 01 23:28:51 2018 +0000
+++ b/VDBDebuggerApplication.st	Sat Feb 03 21:18:50 2018 +0000
@@ -854,6 +854,18 @@
     "Created: / 01-06-2017 / 13:42:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+onLogOutputEvent:aGDBLogOutputEvent 
+
+    Transcript nextPutAll: aGDBLogOutputEvent value.
+    Transcript isView ifTrue:[ 
+        Transcript topView raise.
+        Transcript flash.
+    ].
+
+    "Created: / 02-02-2018 / 11:46:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-02-2018 / 21:02:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 onRunningEvent: aGDBStoppedEvent
     self updateButtonEnablements
 
@@ -904,10 +916,11 @@
         when: GDBRunningEvent       send: #onRunningEvent:  to: self;
         when: GDBExitEvent          send: #onExitEvent:     to: self;
         when: GDBCommandResultEvent send: #onCommandResultEvent: to: self;
-        when: GDBThreadGroupExitedEvent send: #onThreadGroupExitedEvent:  to: self.
+        when: GDBThreadGroupExitedEvent send: #onThreadGroupExitedEvent:  to: self;
+        when: GDBLogOutputEvent             send: #onLogOutputEvent:          to: self.
 
     "Created: / 21-09-2014 / 22:43:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 01-06-2017 / 23:42:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-02-2018 / 21:02:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBDebuggerApplication methodsFor:'menu actions'!
--- a/VDBFrameApplication.st	Thu Feb 01 23:28:51 2018 +0000
+++ b/VDBFrameApplication.st	Sat Feb 03 21:18:50 2018 +0000
@@ -10,8 +10,8 @@
 
 "{ NameSpace: Smalltalk }"
 
-VDBAbstractTreeApplication subclass:#VDBFrameApplication
-	instanceVariableNames:'frameHolder selectedVariableHolder'
+VDBAbstractApplication subclass:#VDBFrameApplication
+	instanceVariableNames:'frameHolder variableObjectListHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'VDB-UI-Others'
@@ -30,44 +30,65 @@
 "
 ! !
 
-!VDBFrameApplication class methodsFor:'accessing'!
-
-windowTitle
-    ^ 'Variables'
-
-    "Created: / 11-07-2017 / 16:37:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !VDBFrameApplication class methodsFor:'interface specs'!
 
-columnsSpec
+windowSpec
     "This resource specification was automatically generated
-     by the DataSetBuilder of ST/X."
+     by the UIPainter of ST/X."
 
     "Do not manually edit this!! If it is corrupted,
-     the DataSetBuilder may not be able to read the specification."
+     the UIPainter may not be able to read the specification."
 
     "
-     DataSetBuilder new openOnClass:VDBFrameApplication andSelector:#columnsSpec
+     UIPainter new openOnClass:VDBFrameApplication andSelector:#windowSpec
+     VDBFrameApplication new openInterface:#windowSpec
+     VDBFrameApplication open
     "
 
-    <resource: #tableColumns>
+    <resource: #canvas>
 
-    ^#(
-      (DataSetColumnSpec
-         label: 'Value'
-         labelAlignment: left
-         labelButtonType: Button
-         width: 1.0
-         height: heightOfFirstRow
-         menuFromApplication: false
-         printSelector: value
-         backgroundSelector: backgroundColor
-         showRowSeparator: false
-         showColSeparator: false
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       uuid: 'aa3ebd80-08c8-11e8-bb5a-0021ccd5e3d3'
+       window: 
+      (WindowSpec
+         label: 'Frame'
+         name: 'Frame'
+         uuid: '8a56b5e1-08c8-11e8-bb5a-0021ccd5e3d3'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 300)
        )
-      )
-    
+       component: 
+      (SpecCollection
+         collection: (
+          (SubCanvasSpec
+             name: 'VariableObjectList'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             uuid: '8a56dcf0-08c8-11e8-bb5a-0021ccd5e3d3'
+             hasHorizontalScrollBar: false
+             hasVerticalScrollBar: false
+             miniScrollerVertical: false
+             majorKey: VDBVariableObjectListApplication
+             subAspectHolders: 
+            (Array
+               
+              (SubChannelInfoSpec
+                 subAspect: debuggerHolder
+                 aspect: debuggerHolder
+               ) 
+              (SubChannelInfoSpec
+                 subAspect: variableObjectListHolder
+                 aspect: variableObjectListHolder
+               )
+             )
+             createNewApplication: true
+             createNewBuilder: false
+           )
+          )
+        
+       )
+     )
 ! !
 
 !VDBFrameApplication class methodsFor:'plugIn spec'!
@@ -86,52 +107,12 @@
     ^ #(
         #debuggerHolder
         #frameHolder
-        #selectedVariableHolder
       ).
 
-    "Modified: / 27-02-2015 / 16:04:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!VDBFrameApplication 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
-! !
-
-!VDBFrameApplication methodsFor:'actions'!
-
-doDoubleClick
-    "Invoked when user double-clicks to list item."
-
-    | selectedVariablePresenter |
-    
-    selectedVariablePresenter := self internalSelectionHolder value. 
-    selectedVariablePresenter notNil ifTrue:[
-        selectedVariablePresenter doCopyValue
-    ].
-
-    "Created: / 13-06-2017 / 17:09:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 16-01-2018 / 23:33:12 / jv"
 ! !
 
 !VDBFrameApplication 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>"
-!
-
 frameHolder
     "return/create the 'frameHolder' value holder (automatically generated)"
 
@@ -161,125 +142,74 @@
     ].
 !
 
-selectedVariableHolder
-    "return/create the 'selectedVariableHolder' value holder (automatically generated)"
+variableObjectListHolder
+    "return/create the 'variableObjectListHolder' value holder (automatically generated)"
 
-    selectedVariableHolder isNil ifTrue:[
-        selectedVariableHolder := ValueHolder new.
-        selectedVariableHolder addDependent:self.
+    variableObjectListHolder isNil ifTrue:[
+        variableObjectListHolder := ValueHolder with: #().
+        variableObjectListHolder addDependent:self.
     ].
-    ^ selectedVariableHolder
+    ^ variableObjectListHolder
+
+    "Modified: / 03-02-2018 / 07:33:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-selectedVariableHolder:something
-    "set the 'selectedVariableHolder' value holder (automatically generated)"
+variableObjectListHolder:something
+    "set the 'variableObjectListHolder' value holder (automatically generated)"
 
     |oldValue newValue|
 
-    selectedVariableHolder notNil ifTrue:[
-        oldValue := selectedVariableHolder value.
-        selectedVariableHolder removeDependent:self.
+    variableObjectListHolder notNil ifTrue:[
+        oldValue := variableObjectListHolder value.
+        variableObjectListHolder removeDependent:self.
     ].
-    selectedVariableHolder := something.
-    selectedVariableHolder notNil ifTrue:[
-        selectedVariableHolder addDependent:self.
+    variableObjectListHolder := something.
+    variableObjectListHolder notNil ifTrue:[
+        variableObjectListHolder addDependent:self.
     ].
-    newValue := selectedVariableHolder value.
+    newValue := variableObjectListHolder value.
     oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:selectedVariableHolder.
+        self update:#value with:newValue from:variableObjectListHolder.
     ].
 ! !
 
 !VDBFrameApplication methodsFor:'change & update'!
 
+enqueueDelayedUpdateVariableObjectList
+    self enqueueDelayedUpdate:#delayedUpdateVariableObjectList
+
+    "Created: / 03-02-2018 / 07:28:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 update:aspect with:param from:sender
     "Invoked when an object that I depend upon sends a change notification."
 
-    sender == frameHolder ifTrue:[
-         self enqueueDelayedUpdateInternalList.
+    sender == frameHolder ifTrue:[ 
+         self enqueueDelayedUpdateVariableObjectList.
          ^ self.
     ].
     super update:aspect with:param from:sender
 
-    "Modified: / 27-02-2015 / 15:45:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 03-02-2018 / 09:48:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBFrameApplication methodsFor:'change & update-delayed'!
 
-delayedUpdateInternalList
-    | frame  root |
+delayedUpdateVariableObjectList
+    | frame  list |
 
     debugger isNil ifTrue:[
-        self internalListHolder root children:#().
+        self variableObjectListHolder value:#().
         ^ self.
     ].
     frame := frameHolder value.
     frame isNil ifTrue:[
-        self internalListHolder root children:#().
+        self variableObjectListHolder value:#().
         ^ self.
     ].
-    root := self internalListHolder root.
-    root children:(frame variables 
-                collect:[:v | 
-                    (VDBVariableObjectPresenter new) setVarobj:v varobj;
-                        parent:root;
-                        yourself
-                ]).
-    root expand.
-    internalListView notNil ifTrue:[
-        internalListView invalidate.
-    ]
+    list := frame variables collect:[:v | v varobj ].
+    self variableObjectListHolder value:list.
 
-    "Created: / 27-02-2015 / 15:47:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 28-01-2018 / 22:43:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-delayedUpdateSelection
-    | internalSelection |
-
-    internalSelection := self internalSelectionHolder value.
-    internalSelection notNil ifTrue:[
-        self selectedVariableHolder value: internalSelection varobj
-    ] ifFalse:[ 
-        self selectedVariableHolder value: nil
-    ].
-
-    "Modified: / 28-01-2018 / 22:50:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 03-02-2018 / 07:30:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!VDBFrameApplication 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
-! !
-
-!VDBFrameApplication methodsFor:'event handling'!
-
-onStoppedEvent: aGDBStoppedEvent
-    self enqueueDelayedInvalidateInternalList
-
-    "Created: / 01-02-2018 / 23:14:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!VDBFrameApplication 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>"
-! !
-
-!VDBFrameApplication class methodsFor:'documentation'!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
-! !
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBVariableObjectListApplication.st	Sat Feb 03 21:18:50 2018 +0000
@@ -0,0 +1,294 @@
+"
+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> $'
+! !
+
--- a/abbrev.stc	Thu Feb 01 23:28:51 2018 +0000
+++ b/abbrev.stc	Sat Feb 03 21:18:50 2018 +0000
@@ -26,5 +26,5 @@
 VDBTabbingContainer VDBTabbingContainer jv:vdb 'VDB-UI-Containers' 2
 VDBUnixDebuggerConsoleApplication VDBUnixDebuggerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBUnixInferiorConsoleApplication VDBUnixInferiorConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
-VDBFrameApplication VDBFrameApplication jv:vdb 'VDB-UI-Others' 2
 VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
+VDBVariableObjectListApplication VDBVariableObjectListApplication jv:vdb 'VDB-UI-Others' 2
--- a/bc.mak	Thu Feb 01 23:28:51 2018 +0000
+++ b/bc.mak	Sat Feb 03 21:18:50 2018 +0000
@@ -101,8 +101,9 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extensions.st	Sat Feb 03 21:18:50 2018 +0000
@@ -0,0 +1,27 @@
+"{ Package: 'jv:vdb' }"!
+
+!GDBVariableObject methodsFor:'inspecting'!
+
+inspector2TabVariable
+    <inspector2Tab>
+
+    | varObjApp |
+
+    varObjApp := Smalltalk at: #VDBVariableObjectListApplication ifAbsent:[ ^ nil ].
+    ^ (self newInspector2Tab)
+        label:'Variable';
+        priority:95;
+        "/ view: [ ... ];
+        application: [ varObjApp new debugger: debugger; variableObjectList: (Array with: self); yourself ];
+        "/ text: [ ... ];
+        yourself
+
+    "Modified: / 03-02-2018 / 09:58:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!jv_vdb class methodsFor:'documentation'!
+
+extensionsVersion_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
--- a/jv_vdb.st	Thu Feb 01 23:28:51 2018 +0000
+++ b/jv_vdb.st	Sat Feb 03 21:18:50 2018 +0000
@@ -51,7 +51,7 @@
      Please take a look at the #referencedPreRequisites method as well."
 
     ^ #(
-        #'jv:libgdbs'    "GDBOutputFormats - shared pool used by VDBMemoryApplication"
+        #'jv:libgdbs'    "GDBDebuggerObject - extended"
         #'stx:libbasic'    "LibraryDefinition - superclass of jv_vdb"
         #'stx:libview2'    "ApplicationModel - superclass of VDBAbstractApplication"
         #'stx:libwidg2'    "AbstractHierarchicalItem - superclass of VDBBreakpointPresenter"
@@ -124,8 +124,9 @@
         VDBTabbingContainer
         VDBUnixDebuggerConsoleApplication
         VDBUnixInferiorConsoleApplication
+        VDBStackApplication
+        VDBVariableObjectListApplication
         VDBFrameApplication
-        VDBStackApplication
     )
 !
 
@@ -136,6 +137,7 @@
      if it has extensions."
 
     ^ #(
+        GDBVariableObject inspector2TabVariable
     )
 ! !
 
--- a/libInit.cc	Thu Feb 01 23:28:51 2018 +0000
+++ b/libInit.cc	Sat Feb 03 21:18:50 2018 +0000
@@ -41,10 +41,11 @@
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBVariableObjectListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 
-
+extern void _jv_137vdb_extensions_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 
 void _libjv_vdb_InitDefinition(int pass, struct __vmData__ *__pRT__, OBJ snd)
 {
@@ -82,9 +83,10 @@
     _VDBTabbingContainer_Init(pass,__pRT__,snd);
     _VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
+    _VDBStackApplication_Init(pass,__pRT__,snd);
+    _VDBVariableObjectListApplication_Init(pass,__pRT__,snd);
     _VDBFrameApplication_Init(pass,__pRT__,snd);
-    _VDBStackApplication_Init(pass,__pRT__,snd);
 
-
+    _jv_137vdb_extensions_Init(pass,__pRT__,snd);
   __END_PACKAGE__();
 }