InspectorView.st
author claus
Sun, 16 Jan 1994 05:02:19 +0100
changeset 23 3363884b8e9f
parent 17 58c360f199be
child 29 8a72e10043f6
permissions -rw-r--r--
*** empty log message ***
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
23
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
    36
$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.7 1994-01-16 04:01:57 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
13
145a9461122e *** empty log message ***
claus
parents: 8
diff changeset
    60
                    label:('Inspector on: ' , anObject classNameWithArticle)
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"
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
    71
    topView open.
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].
23
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
    93
    listView doubleClickAction:[:lineNr | self doInspect].
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
    94
    listView ignoreReselect:false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    95
571fd5eee315 Initial revision
claus
parents:
diff changeset
    96
    workspace := CodeView origin:(0.3 @ 0.0) corner:(1.0 @ 1.0) in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    97
    nShown := 100
571fd5eee315 Initial revision
claus
parents:
diff changeset
    98
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    99
571fd5eee315 Initial revision
claus
parents:
diff changeset
   100
initEvents
571fd5eee315 Initial revision
claus
parents:
diff changeset
   101
    ^ self enableKeyEvents
571fd5eee315 Initial revision
claus
parents:
diff changeset
   102
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   103
571fd5eee315 Initial revision
claus
parents:
diff changeset
   104
create
571fd5eee315 Initial revision
claus
parents:
diff changeset
   105
    super create.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   106
    self initializeListViewMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
   107
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   108
571fd5eee315 Initial revision
claus
parents:
diff changeset
   109
initializeListViewMiddleButtonMenu
3
claus
parents: 0
diff changeset
   110
    menu1 := PopUpMenu
claus
parents: 0
diff changeset
   111
                  labels:(resources array:#('inspect'))
claus
parents: 0
diff changeset
   112
               selectors:#doInspect
claus
parents: 0
diff changeset
   113
                receiver:self
claus
parents: 0
diff changeset
   114
                     for:listView.
claus
parents: 0
diff changeset
   115
    menu2 := PopUpMenu
claus
parents: 0
diff changeset
   116
                  labels:(resources array:#(
claus
parents: 0
diff changeset
   117
                                            'inspect'
claus
parents: 0
diff changeset
   118
                                            '-'
claus
parents: 0
diff changeset
   119
                                            'show more'
claus
parents: 0
diff changeset
   120
                                           ))
claus
parents: 0
diff changeset
   121
               selectors:#(doInspect nil showMore)
claus
parents: 0
diff changeset
   122
                receiver:self
claus
parents: 0
diff changeset
   123
                     for:listView.
claus
parents: 0
diff changeset
   124
    listView setMiddleButtonMenu:menu1.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   125
    workspace acceptAction:[:theText | self doAccept:theText]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
!InspectorView methodsFor:'accessing'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   129
571fd5eee315 Initial revision
claus
parents:
diff changeset
   130
noChoice
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
    "clear name and value views"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   132
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   133
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   135
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   136
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   137
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
    inspectedObject := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   139
    inspectedValues := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   140
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   141
    listView contents:nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   142
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   143
571fd5eee315 Initial revision
claus
parents:
diff changeset
   144
listOfNames
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
    "return a list of names to show in the selectionList"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   146
3
claus
parents: 0
diff changeset
   147
    |aList n cut|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   148
571fd5eee315 Initial revision
claus
parents:
diff changeset
   149
    aList := Text new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   150
    aList add:'self'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   151
    (inspectedObject class allInstVarNames) do:[:instVarName |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   152
        aList add:instVarName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   153
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   154
    (inspectedObject class isVariable) ifTrue:[
3
claus
parents: 0
diff changeset
   155
        n := inspectedObject basicSize.
claus
parents: 0
diff changeset
   156
        (n > nShown) ifTrue:[
claus
parents: 0
diff changeset
   157
            n := nShown.
claus
parents: 0
diff changeset
   158
            cut := true.
claus
parents: 0
diff changeset
   159
            listView setMiddleButtonMenu:menu2.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   160
        ] ifFalse:[
3
claus
parents: 0
diff changeset
   161
            cut := false.
claus
parents: 0
diff changeset
   162
            listView setMiddleButtonMenu:menu1.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   163
        ].
3
claus
parents: 0
diff changeset
   164
        1 to:n do:[:index |
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   165
            aList add:(index printString)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   166
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   167
        cut ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   168
            aList add:' ... '
571fd5eee315 Initial revision
claus
parents:
diff changeset
   169
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   170
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   171
    ^ aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   172
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   173
3
claus
parents: 0
diff changeset
   174
showMore
claus
parents: 0
diff changeset
   175
    nShown := nShown * 2.
claus
parents: 0
diff changeset
   176
    self inspect:inspectedObject
claus
parents: 0
diff changeset
   177
!
claus
parents: 0
diff changeset
   178
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   179
inspect:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   180
    "define the object to be inspected"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   181
3
claus
parents: 0
diff changeset
   182
    |aList sameObject|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   183
571fd5eee315 Initial revision
claus
parents:
diff changeset
   184
    sameObject := anObject == inspectedObject.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   185
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   186
    sameObject ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   187
        inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   188
            inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   189
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   190
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   191
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   192
    inspectedObject := anObject.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   193
571fd5eee315 Initial revision
claus
parents:
diff changeset
   194
    aList := self listOfNames.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   195
    sameObject ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   196
        listView setContents:aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
        listView contents:aList
571fd5eee315 Initial revision
claus
parents:
diff changeset
   199
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   200
571fd5eee315 Initial revision
claus
parents:
diff changeset
   201
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   202
    workspace doItAction:[:theCode |
23
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
   203
        inspectedObject class compiler evaluate:theCode
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
   204
                                       receiver:inspectedObject 
3363884b8e9f *** empty log message ***
claus
parents: 17
diff changeset
   205
                                      notifying:workspace
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   208
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   209
    sameObject ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   210
        inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   211
            inspectedObject addDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   212
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   213
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   214
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   215
    inspectedValues := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   216
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   217
571fd5eee315 Initial revision
claus
parents:
diff changeset
   218
inspect:anObject values:valueArray names:nameArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   219
    listView contents:nameArray.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   220
    workspace contents:nil.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   221
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   222
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   223
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   224
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   225
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   226
    inspectedObject := anObject.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   227
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   228
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   229
        inspectedObject addDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   230
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   231
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   232
    inspectedValues := valueArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   233
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   234
571fd5eee315 Initial revision
claus
parents:
diff changeset
   235
inspectValues:valueArray names:nameArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   236
    listView contents:nameArray.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   237
    workspace contents:nil.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   238
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   239
    inspectedObject notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
        inspectedObject removeDependent:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   241
    ].
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   242
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   243
    inspectedObject := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   244
    inspectedValues := valueArray
571fd5eee315 Initial revision
claus
parents:
diff changeset
   245
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   246
571fd5eee315 Initial revision
claus
parents:
diff changeset
   247
!InspectorView methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
571fd5eee315 Initial revision
claus
parents:
diff changeset
   249
keyPress:aKey x:x y:y
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
    "all my input is passed on to the workspace-field"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
    workspace keyPress:aKey x:0 y:0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
update:something
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
    "handle updates from other inspectors"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
    |oldSelection|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   259
571fd5eee315 Initial revision
claus
parents:
diff changeset
   260
    something == inspectedObject ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   261
        oldSelection := listView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   262
        self inspect:inspectedObject.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   263
        oldSelection notNil ifTrue:[
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   264
            self showSelection:oldSelection
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   265
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   266
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   267
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   268
571fd5eee315 Initial revision
claus
parents:
diff changeset
   269
destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   270
    inspectedObject notNil ifTrue:[
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   271
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   272
        inspectedObject removeDependent:self.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   273
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
        inspectedObject := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
    ].
3
claus
parents: 0
diff changeset
   276
    menu1 notNil ifTrue:[
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   277
        menu1 destroy. menu1 := nil.
3
claus
parents: 0
diff changeset
   278
    ].
claus
parents: 0
diff changeset
   279
    menu2 notNil ifTrue:[
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   280
        menu2 destroy. menu2 := nil.
3
claus
parents: 0
diff changeset
   281
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
    inspectedValues := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
    super destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   284
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   285
571fd5eee315 Initial revision
claus
parents:
diff changeset
   286
showSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   287
    "user clicked on an instvar - show value in workspace"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   288
571fd5eee315 Initial revision
claus
parents:
diff changeset
   289
    |val string index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
    workspace contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
    inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
        lineNr == 1 ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
            val := inspectedObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   296
            index := lineNr - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
            (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   298
                val := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   299
            ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
                index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   301
                    val := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   302
                ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   303
                    index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   304
                    val := inspectedObject basicAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   305
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   309
        val := inspectedValues at:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   310
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   311
    string := val displayString.
8
93b3dc7fa0a5 *** empty log message ***
claus
parents: 5
diff changeset
   312
    workspace cursorToTop.
17
58c360f199be *** empty log message ***
claus
parents: 13
diff changeset
   313
"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   314
    workspace show:string.
17
58c360f199be *** empty log message ***
claus
parents: 13
diff changeset
   315
"
58c360f199be *** empty log message ***
claus
parents: 13
diff changeset
   316
    workspace paste:string.
58c360f199be *** empty log message ***
claus
parents: 13
diff changeset
   317
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
    selectedLine := lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
571fd5eee315 Initial revision
claus
parents:
diff changeset
   321
doAccept:theText
571fd5eee315 Initial revision
claus
parents:
diff changeset
   322
    |value index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   323
571fd5eee315 Initial revision
claus
parents:
diff changeset
   324
    value := Compiler evaluate:theText
571fd5eee315 Initial revision
claus
parents:
diff changeset
   325
                      receiver:inspectedObject 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   326
                     notifying:workspace.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   327
    inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   328
        selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   329
            selectedLine == 1 ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   330
                index := selectedLine - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   331
                (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   332
                    inspectedObject instVarAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   333
                ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   334
                    index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   335
                        inspectedObject instVarAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   336
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   337
                        index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   338
                        inspectedObject basicAt:index put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   339
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   340
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   341
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   342
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   344
        selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   345
            inspectedValues at:selectedLine put:value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   346
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   347
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   348
    inspectedObject changed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   349
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   350
571fd5eee315 Initial revision
claus
parents:
diff changeset
   351
doInspect
571fd5eee315 Initial revision
claus
parents:
diff changeset
   352
    "user selected inspect-menu entry"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   353
    |index objectToInspect|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   354
571fd5eee315 Initial revision
claus
parents:
diff changeset
   355
    selectedLine notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
        inspectedValues isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   357
            (selectedLine == 1) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   358
                objectToInspect := inspectedObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   359
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   360
                index := selectedLine - 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   361
                (inspectedObject class isVariable) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   362
                    objectToInspect := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   363
                ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   364
                    index <= (inspectedObject class instSize) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   365
                        objectToInspect := inspectedObject instVarAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   366
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   367
                        index := index - inspectedObject class instSize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   368
                        objectToInspect := inspectedObject basicAt:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   369
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   370
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   371
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   372
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   373
            objectToInspect := inspectedValues at:selectedLine
571fd5eee315 Initial revision
claus
parents:
diff changeset
   374
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   375
        objectToInspect inspect
571fd5eee315 Initial revision
claus
parents:
diff changeset
   376
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   377
! !