InspectorView.st
author claus
Wed, 13 Oct 1993 03:48:23 +0100
changeset 5 5c9b6ccfff33
parent 3 9ff3765f06d0
child 8 93b3dc7fa0a5
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
     4
571fd5eee315 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
571fd5eee315 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
571fd5eee315 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
571fd5eee315 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
571fd5eee315 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
571fd5eee315 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    11
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    12
571fd5eee315 Initial revision
claus
parents:
diff changeset
    13
View subclass:#InspectorView
571fd5eee315 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'listView workspace 
571fd5eee315 Initial revision
claus
parents:
diff changeset
    15
                              inspectedObject selectedLine
3
claus
parents: 0
diff changeset
    16
                              inspectedValues nShown menu1 menu2'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    17
       classVariableNames:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    18
       poolDictionaries:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    19
       category:'Interface-Inspector'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    20
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    21
571fd5eee315 Initial revision
claus
parents:
diff changeset
    22
InspectorView comment:'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    23
5
claus
parents: 3
diff changeset
    24
COPYRIGHT (c) 1989 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    25
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
    26
571fd5eee315 Initial revision
claus
parents:
diff changeset
    27
This class implements an graphical inspector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    28
Inspecting can be done on an object -
571fd5eee315 Initial revision
claus
parents:
diff changeset
    29
(where its instvarnames/values are inspected)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    30
or a list of objects (where a namearray/valuesarray is inspected).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    31
The later is used by the debugger to inspect method variables/args.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    32
571fd5eee315 Initial revision
claus
parents:
diff changeset
    33
The system calls the inspector through the global variable "Inspector"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    34
which is bound to this class (but could be redefined).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    35
5
claus
parents: 3
diff changeset
    36
$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.3 1993-10-13 02:48:12 claus Exp $
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    37
written winter 89 by claus
571fd5eee315 Initial revision
claus
parents:
diff changeset
    38
'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    39
571fd5eee315 Initial revision
claus
parents:
diff changeset
    40
!InspectorView class methodsFor:'instance creation'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    41
571fd5eee315 Initial revision
claus
parents:
diff changeset
    42
for:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
    43
    "create and launch a new inspector for anObject"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    44
571fd5eee315 Initial revision
claus
parents:
diff changeset
    45
    ^ self openOn:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
    46
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    47
571fd5eee315 Initial revision
claus
parents:
diff changeset
    48
inspect:anObject
3
claus
parents: 0
diff changeset
    49
    "create and launch a new inspector for anObject"
claus
parents: 0
diff changeset
    50
claus
parents: 0
diff changeset
    51
    ^ self openOn:anObject
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    52
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    53
571fd5eee315 Initial revision
claus
parents:
diff changeset
    54
openOn:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
    55
    "create and launch a new inspector for anObject"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    56
571fd5eee315 Initial revision
claus
parents:
diff changeset
    57
    |topView inspectorView|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    58
571fd5eee315 Initial revision
claus
parents:
diff changeset
    59
    topView := StandardSystemView
571fd5eee315 Initial revision
claus
parents:
diff changeset
    60
                    label:(anObject class name)
3
claus
parents: 0
diff changeset
    61
                     icon:(Form fromFile:'Inspector.xbm' resolution:100)
claus
parents: 0
diff changeset
    62
                minExtent:(100 @ 100).
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    63
571fd5eee315 Initial revision
claus
parents:
diff changeset
    64
    topView extent:(Display width // 3) @ (Display height // 3).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    65
571fd5eee315 Initial revision
claus
parents:
diff changeset
    66
    inspectorView := self origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    67
                          corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    68
                             in:topView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    69
3
claus
parents: 0
diff changeset
    70
    "kludge: must realize first, to be able to set menu again"
claus
parents: 0
diff changeset
    71
    topView realize.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    72
    inspectorView inspect:anObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    73
571fd5eee315 Initial revision
claus
parents:
diff changeset
    74
    "InspectorView openOn:(5 @ 7)"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    75
    "DictionaryInspectorView openOn:(IdentityDictionary new)"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    76
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
!InspectorView methodsFor:'initialization'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    79
571fd5eee315 Initial revision
claus
parents:
diff changeset
    80
initialize
571fd5eee315 Initial revision
claus
parents:
diff changeset
    81
    |v panel|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    82
571fd5eee315 Initial revision
claus
parents:
diff changeset
    83
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    84
571fd5eee315 Initial revision
claus
parents:
diff changeset
    85
    panel := VariableHorizontalPanel origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    86
                                     corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    87
                                         in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    88
571fd5eee315 Initial revision
claus
parents:
diff changeset
    89
    v := ScrollableView for:SelectionInListView in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    90
    v origin:(0.0 @ 0.0) corner:(0.3 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    91
    listView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    92
    listView action:[:lineNr | self showSelection:lineNr].
571fd5eee315 Initial revision
claus
parents:
diff changeset
    93
571fd5eee315 Initial revision
claus
parents:
diff changeset
    94
    workspace := CodeView origin:(0.3 @ 0.0) corner:(1.0 @ 1.0) in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    95
    nShown := 100
571fd5eee315 Initial revision
claus
parents:
diff changeset
    96
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    97
571fd5eee315 Initial revision
claus
parents:
diff changeset
    98
initEvents
571fd5eee315 Initial revision
claus
parents:
diff changeset
    99
    ^ self enableKeyEvents
571fd5eee315 Initial revision
claus
parents:
diff changeset
   100
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   101
571fd5eee315 Initial revision
claus
parents:
diff changeset
   102
create
571fd5eee315 Initial revision
claus
parents:
diff changeset
   103
    super create.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   104
    self initializeListViewMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
   105
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   106
571fd5eee315 Initial revision
claus
parents:
diff changeset
   107
initializeListViewMiddleButtonMenu
3
claus
parents: 0
diff changeset
   108
    menu1 := PopUpMenu
claus
parents: 0
diff changeset
   109
                  labels:(resources array:#('inspect'))
claus
parents: 0
diff changeset
   110
               selectors:#doInspect
claus
parents: 0
diff changeset
   111
                receiver:self
claus
parents: 0
diff changeset
   112
                     for:listView.
claus
parents: 0
diff changeset
   113
    menu2 := PopUpMenu
claus
parents: 0
diff changeset
   114
                  labels:(resources array:#(
claus
parents: 0
diff changeset
   115
                                            'inspect'
claus
parents: 0
diff changeset
   116
                                            '-'
claus
parents: 0
diff changeset
   117
                                            'show more'
claus
parents: 0
diff changeset
   118
                                           ))
claus
parents: 0
diff changeset
   119
               selectors:#(doInspect nil showMore)
claus
parents: 0
diff changeset
   120
                receiver:self
claus
parents: 0
diff changeset
   121
                     for:listView.
claus
parents: 0
diff changeset
   122
    listView setMiddleButtonMenu:menu1.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   123
    workspace acceptAction:[:theText | self doAccept:theText]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   124
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   125
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
!InspectorView methodsFor:'accessing'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
noChoice
571fd5eee315 Initial revision
claus
parents:
diff changeset
   129
    "clear name and value views"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   130
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   132
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   133
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
    inspectedObject := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   135
    inspectedValues := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   136
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   137
    listView contents:nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   139
571fd5eee315 Initial revision
claus
parents:
diff changeset
   140
listOfNames
571fd5eee315 Initial revision
claus
parents:
diff changeset
   141
    "return a list of names to show in the selectionList"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   142
3
claus
parents: 0
diff changeset
   143
    |aList n cut|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   144
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
    aList := Text new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   146
    aList add:'self'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   147
    (inspectedObject class allInstVarNames) do:[:instVarName |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   148
        aList add:instVarName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   149
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   150
    (inspectedObject class isVariable) ifTrue:[
3
claus
parents: 0
diff changeset
   151
        n := inspectedObject basicSize.
claus
parents: 0
diff changeset
   152
        (n > nShown) ifTrue:[
claus
parents: 0
diff changeset
   153
            n := nShown.
claus
parents: 0
diff changeset
   154
            cut := true.
claus
parents: 0
diff changeset
   155
            listView setMiddleButtonMenu:menu2.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   156
        ] ifFalse:[
3
claus
parents: 0
diff changeset
   157
            cut := false.
claus
parents: 0
diff changeset
   158
            listView setMiddleButtonMenu:menu1.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   159
        ].
3
claus
parents: 0
diff changeset
   160
        1 to:n do:[:index |
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   161
            aList add:(index printString)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   162
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   163
        cut ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   164
            aList add:' ... '
571fd5eee315 Initial revision
claus
parents:
diff changeset
   165
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   166
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   167
    ^ aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   168
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   169
3
claus
parents: 0
diff changeset
   170
showMore
claus
parents: 0
diff changeset
   171
    nShown := nShown * 2.
claus
parents: 0
diff changeset
   172
    self inspect:inspectedObject
claus
parents: 0
diff changeset
   173
!
claus
parents: 0
diff changeset
   174
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   175
inspect:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   176
    "define the object to be inspected"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   177
3
claus
parents: 0
diff changeset
   178
    |aList sameObject|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   179
571fd5eee315 Initial revision
claus
parents:
diff changeset
   180
    sameObject := anObject == inspectedObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   181
    sameObject ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   182
        inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   183
            inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   184
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   185
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   186
    inspectedObject := anObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   187
571fd5eee315 Initial revision
claus
parents:
diff changeset
   188
    aList := self listOfNames.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   189
    sameObject ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   190
        listView setContents:aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   191
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   192
        listView contents:aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   193
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   194
571fd5eee315 Initial revision
claus
parents:
diff changeset
   195
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   196
    workspace doItAction:[:theCode |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
        Compiler evaluate:theCode
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
                 receiver:inspectedObject 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   199
                notifying:workspace
571fd5eee315 Initial revision
claus
parents:
diff changeset
   200
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   201
571fd5eee315 Initial revision
claus
parents:
diff changeset
   202
    sameObject ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   203
        inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   204
            inspectedObject addDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   205
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
    inspectedValues := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   208
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   209
571fd5eee315 Initial revision
claus
parents:
diff changeset
   210
inspect:anObject values:valueArray names:nameArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   211
    listView contents:nameArray.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   212
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   213
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   214
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   215
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   216
    inspectedObject := anObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   217
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   218
        inspectedObject addDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   219
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   220
    inspectedValues := valueArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   221
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   222
571fd5eee315 Initial revision
claus
parents:
diff changeset
   223
inspectValues:valueArray names:nameArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   224
    listView contents:nameArray.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   225
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   226
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   227
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   228
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   229
    inspectedObject := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   230
    inspectedValues := valueArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   231
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   232
571fd5eee315 Initial revision
claus
parents:
diff changeset
   233
!InspectorView methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   234
571fd5eee315 Initial revision
claus
parents:
diff changeset
   235
keyPress:aKey x:x y:y
571fd5eee315 Initial revision
claus
parents:
diff changeset
   236
    "all my input is passed on to the workspace-field"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   237
571fd5eee315 Initial revision
claus
parents:
diff changeset
   238
    workspace keyPress:aKey x:0 y:0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   239
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
571fd5eee315 Initial revision
claus
parents:
diff changeset
   241
update:something
571fd5eee315 Initial revision
claus
parents:
diff changeset
   242
    "handle updates from other inspectors"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   243
571fd5eee315 Initial revision
claus
parents:
diff changeset
   244
    |oldSelection|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   245
571fd5eee315 Initial revision
claus
parents:
diff changeset
   246
    something == inspectedObject ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   247
        oldSelection := listView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
        self inspect:inspectedObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   249
        listView selection notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
            self showSelection:(listView selection)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
        inspectedObject removeDependent:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
        inspectedObject := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   259
    ].
3
claus
parents: 0
diff changeset
   260
    menu1 notNil ifTrue:[
claus
parents: 0
diff changeset
   261
        menu1 destroy.
claus
parents: 0
diff changeset
   262
    ].
claus
parents: 0
diff changeset
   263
    menu2 notNil ifTrue:[
claus
parents: 0
diff changeset
   264
        menu2 destroy.
claus
parents: 0
diff changeset
   265
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   266
    inspectedValues := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   267
    super destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   268
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   269
571fd5eee315 Initial revision
claus
parents:
diff changeset
   270
showSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   271
    "user clicked on an instvar - show value in workspace"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   272
571fd5eee315 Initial revision
claus
parents:
diff changeset
   273
    |val string index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   276
    inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   277
        lineNr == 1 ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   278
            val := inspectedObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   279
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   280
            index := lineNr - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   281
            (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
                val := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
            ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   284
                index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   285
                    val := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   286
                ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   287
                    index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   288
                    val := inspectedObject basicAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   289
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
        val := inspectedValues at:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
    string := val displayString.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   296
    workspace show:string.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
    selectedLine := lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   298
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   299
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
doAccept:theText
571fd5eee315 Initial revision
claus
parents:
diff changeset
   301
    |value index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   302
571fd5eee315 Initial revision
claus
parents:
diff changeset
   303
    value := Compiler evaluate:theText
571fd5eee315 Initial revision
claus
parents:
diff changeset
   304
                      receiver:inspectedObject 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   305
                     notifying:workspace.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
    inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
        selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
            selectedLine == 1 ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   309
                index := selectedLine - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   310
                (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   311
                    inspectedObject instVarAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   312
                ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   313
                    index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   314
                        inspectedObject instVarAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   315
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   316
                        index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   317
                        inspectedObject basicAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   321
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   322
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   323
        selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   324
            inspectedValues at:selectedLine put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   325
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   326
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   327
    inspectedObject changed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   328
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   329
571fd5eee315 Initial revision
claus
parents:
diff changeset
   330
doInspect
571fd5eee315 Initial revision
claus
parents:
diff changeset
   331
    "user selected inspect-menu entry"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   332
    |index objectToInspect|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   333
571fd5eee315 Initial revision
claus
parents:
diff changeset
   334
    selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   335
        inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   336
            (selectedLine == 1) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   337
                objectToInspect := inspectedObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   338
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   339
                index := selectedLine - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   340
                (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   341
                    objectToInspect := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   342
                ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
                    index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   344
                        objectToInspect := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   345
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   346
                        index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   347
                        objectToInspect := inspectedObject basicAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   348
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   349
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   350
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   351
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   352
            objectToInspect := inspectedValues at:selectedLine
571fd5eee315 Initial revision
claus
parents:
diff changeset
   353
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   354
        objectToInspect inspect
571fd5eee315 Initial revision
claus
parents:
diff changeset
   355
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
! !