InspectorPanelView.st
changeset 39 03af455029eb
parent 35 6f1565819b63
child 327 0040d47658c6
--- a/InspectorPanelView.st	Wed Jan 15 14:32:46 1997 +0100
+++ b/InspectorPanelView.st	Wed Jan 15 14:33:11 1997 +0100
@@ -15,6 +15,7 @@
     example 1
     =========
 
+                                                                        [exBegin]
     |top slv|
 
     top := StandardSystemView new extent:600@400.
@@ -22,11 +23,12 @@
     slv inspect:top.
     slv action:[:el|Transcript showCR:el].
     top open.
+                                                                        [exEnd]
 
 
     example 2
     =========
-
+                                                                        [exBegin]
     |top slv edt a vvp|
 
     a := Array new:5.
@@ -44,16 +46,14 @@
     slv inspect:a.
 
     top open.
-
-
-
+                                                                        [exEnd]
 "
 ! !
 
 !InspectorPanelView class methodsFor:'constants'!
 
 minDepth
-    "returns the maximum of views
+    "returns the minimum of views assigned to a panel
     "
     ^ 4
 ! !
@@ -138,43 +138,33 @@
 inspectedObject
     "returns the current inspected object
     "
-    |i el|
-
-    rightHistory notEmpty ifTrue:[
-        el := rightHistory last
-    ] ifFalse:[
-        el := listViews findLast:[:v|v hasSelection].
-        el := listViews at:el.
-    ].
-    ^ el inspectedObject
+    ^ self findLastValidListWithSelection inspectedObject
 !
 
 selectedInstanceVar
     "returns the current selected instance var
     "
-    |el|
-
-    rightHistory notEmpty ifTrue:[
-        el := rightHistory last
-    ] ifFalse:[
-        el := listViews findLast:[:v|v hasSelection].
-        el := listViews at:el
-    ].
-    ^ el selectedInstanceVar
+    ^ self findLastValidListWithSelection selectedInstanceVar
 ! !
 
 !InspectorPanelView methodsFor:'actions'!
 
 accept:aText notifying:aView
-    self doItOrAccept:[:v|v accept:aText notifying:aView]
+    "evaluating aText on the last selected instance var. on success the views
+     are updated.
+    "
+    self doItOrAccept:[:aList|aList accept:aText notifying:aView]
 !
 
 doIt:aCode notifying:aView
-    ^ self doItOrAccept:[:v|v doIt:aCode notifying:aView]
+    "evaluating aCode on the selected instance var; on success the views
+     are updated.
+    "
+    ^ self doItOrAccept:[:aList|aList doIt:aCode notifying:aView]
 !
 
 inspect:anObject
-    "change the inspected object
+    "change the inspected object and all views
     "
     |view|
 
@@ -190,12 +180,15 @@
 !InspectorPanelView methodsFor:'event handling'!
 
 handlesKeyPress:key inView:someView
+    "all keys are handled by this instance itself
+    "
     ^ true
 
 !
 
 keyPress:key x:x y:y view:someView
-
+    "handle some special keys
+    "
     key == #CursorLeft  ifTrue:[^ self moveContentsRight:1].
     key == #CursorRight ifTrue:[^ self moveContentsLeft:1 ].
 
@@ -204,7 +197,7 @@
 !
 
 singleClickAt:anIndex
-    "the view changed its selection caused by a single click
+    "the view at an index changed its selection caused by a single click
     "
     |view start sivar|
 
@@ -486,12 +479,12 @@
     view hasSelection ifFalse:[^ nil].
     inst := view selectedInstanceVar.
 
-    menu := PopUpMenu labels:#( 'update' '-')
-                   selectors:#( #update  nil)
+    menu := PopUpMenu labels:#( 'update' )
+                   selectors:#( #update  )
                     receiver:self.
 
     menu actionAt:#update put:[
-        view updateList.
+        view update.
 
         listViews from:(anIndex + 1) do:[:v|
             (view selectedInstanceType) ~~ #directory ifTrue:[
@@ -504,12 +497,18 @@
         self update
     ].
 
+    (InspectorList isTraceable:inst) ifFalse:[
+        ^ menu
+    ].
+
     menu  addLabels:#(
+                      '-'
                       'trace'
                       'trap'
                       'untrace / untrap'
                      )
           selectors:#(
+                      nil
                       trace
                       trap
                       untrace
@@ -537,44 +536,48 @@
 !InspectorPanelView methodsFor:'private'!
 
 doItOrAccept:aBlock
-    "handle a doIt or accept action
+    "handle a doIt or accept action; on success all the folloed views are
+     updated
     "
-    |index view ivar rslt last stop|
+    |index list result instVar|
 
-    last := listViews last.
-    self moveContentsLeft:(rightHistory size).
+    list    := self findLastValidListWithSelection.
+    result  := aBlock value:list.
+    instVar := list selectedInstanceVar.
+    index   := listViews findLast:[:v|v == list].
 
-    last hasSelection ifTrue:[
-        self moveContentsLeft:1.
-        index := (listViews size) - 1
-    ] ifFalse:[
-        index := listViews findLast:[:v|v hasSelection].
+    (index ~~ 0 and:[index ~~ listViews size]) ifTrue:[
+        index := index + 1.
+        (list selectedInstanceType) == #directory ifTrue:[
+            (listViews at:index) inspect:instVar
+        ] ifFalse:[
+            (listViews at:index) inspect:nil
+        ].
+        self update
+    ].
+    valueChangedAction notNil ifTrue:[
+        valueChangedAction value:instVar
     ].
+    ^ result
+!
+
+findLastValidListWithSelection
+    "returns last valid list with a selection; if no selection exists in any
+     view, the list assigned to the inspected object is returned
+    "
+    |index|
+
+    rightHistory notEmpty ifTrue:[
+        ^ rightHistory first
+    ].
+    index := listViews findLast:[:v| v hasSelection ].
 
     index ~~ 0 ifTrue:[
-        view := listViews at:index.
-        rslt := aBlock value:view.
-        stop := listViews size.
-        ivar := view selectedInstanceVar.
-
-        index == stop ifTrue:[
-            self moveContentsLeft:1.
-        ] ifFalse:[
-            index := index + 1.
+        ^ listViews at:index
+    ].
 
-            (view selectedInstanceType) == #directory ifTrue:[
-                (listViews at:index) inspect:ivar
-            ] ifFalse:[
-                (listViews at:index) inspect:nil
-            ].
-            self update.
-        ].
-
-        valueChangedAction notNil ifTrue:[
-            valueChangedAction value:ivar
-        ]
-    ].
-    ^ rslt
+    leftHistory notEmpty ifTrue:[^ leftHistory last]
+                        ifFalse:[^ listViews at:1]
 !
 
 update
@@ -648,7 +651,7 @@
 !
 
 createViewWithoutRedraw
-    "add a new view at end
+    "add a new view at end of the panel
     "
     |view frame label index|
 
@@ -688,7 +691,7 @@
 !InspectorPanelView methodsFor:'scrolling-basic'!
 
 moveContentsLeft:nTimes
-    "move the contents of each view one position left
+    "move the contents of all views one position left
     "
     |fView stop assoc inspObj pView index|
 
@@ -702,14 +705,14 @@
     pView := listViews at:stop.
 
 
-    [   leftHistory add:fView listHolder.
+    [   leftHistory add:(fView list).
 
         1 to:stop do:[:i|
-            (listViews at:i) updateFromView:(listViews at:(i+1))
+            (listViews at:i) list:(listViews at:(i+1))
         ].
 
         rightHistory notEmpty ifTrue:[
-            (listViews last) updateFromList:(rightHistory removeLast)
+            (listViews last) list:(rightHistory removeLast)
         ] ifFalse:[
             (listViews last) inspect:(pView selectedInstanceVar)
         ].
@@ -724,7 +727,7 @@
 !
 
 moveContentsRight:nTimes
-    "move the contents of all listViews one position right
+    "move the contents of all views one position right
     "
     |view assoc size index lView fView|
 
@@ -740,12 +743,12 @@
 
         1 to:index do:[:i|
             lView hasSelection ifTrue:[
-                rightHistory add:(lView listHolder)
+                rightHistory add:(lView list)
             ].
             size to:2 by:-1 do:[:i|
-                (listViews at:i) updateFromView:(listViews at:(i-1))
+                (listViews at:i) list:(listViews at:(i-1))
             ].
-            fView updateFromList:(leftHistory removeLast)
+            fView list:(leftHistory removeLast)
         ].
         self update
     ]
@@ -753,7 +756,7 @@
 !
 
 scrollTo:nPercent
-    "set views dependant on scroll bar
+    "set views and contents dependant on scroll bar
     "
     |dY no noScr pR|