InspectorList.st
changeset 1213 6cf7a4c2dfce
parent 1212 a13dafe6f9fe
child 1214 02a032b1098c
--- a/InspectorList.st	Wed Sep 08 12:00:12 1999 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,495 +0,0 @@
-"
- COPYRIGHT (c) 1997 by eXept Software AG
-              All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice.   This software may not
- be provided or otherwise made available to, or used by, any
- other person.  No title to or ownership of the software is
- hereby transferred.
-"
-
-
-"{ NameSpace: NewInspector }"
-
-Object subclass:#InspectorList
-	instanceVariableNames:'inspectedObject instanceNames instanceTypes selection'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Inspector'
-!
-
-!InspectorList class methodsFor:'documentation'!
-
-copyright
-"
- COPYRIGHT (c) 1997 by eXept Software AG
-              All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice.   This software may not
- be provided or otherwise made available to, or used by, any
- other person.  No title to or ownership of the software is
- hereby transferred.
-"
-
-! !
-
-!InspectorList class methodsFor:'instance creation'!
-
-for:anObject
-    "create a new list for an instance
-    "
-    ^ self new inspect:anObject
-
-
-!
-
-new
-    "create a new instance and set the inspected object to nil
-    "
-    ^ self basicNew initialize.
-
-! !
-
-!InspectorList class methodsFor:'helpers'!
-
-asString:aCollection
-    "converts any collection to a string seperated by spaces. If
-     the collection is empty or nil, nil is returned otherwise a
-     string.
-    "
-    |string|
-
-    aCollection isCollection ifTrue:[
-        aCollection isString ifTrue:[
-            string := aCollection
-        ] ifFalse:[
-            string := aCollection asStringWith:Character space
-                                          from:1 to:(aCollection size)
-                                  compressTabs:true 
-                                         final:nil
-        ].
-        string := string withoutSeparators.
-
-        string notEmpty ifTrue:[
-            ^ string
-        ]
-    ].
-    ^ nil
-
-
-! !
-
-!InspectorList class methodsFor:'testing'!
-
-isDirectory:anInstance
-    "returns true if the instance is a directory
-    "
-    |cls|
-
-    anInstance notNil ifTrue:[
-        cls := anInstance class.
-
-        cls == Character  ifTrue:[ ^ false ].
-        cls == Symbol     ifTrue:[ ^ false ].
-        cls == String     ifTrue:[ ^ false ].
-        cls == Float      ifTrue:[ ^ false ].
-        cls == ShortFloat ifTrue:[ ^ false ].
-
-        cls allInstVarNames notEmpty ifTrue:[
-            ^ true
-        ].
-
-        anInstance isVariable ifTrue:[
-            ^ true
-        ].
-    ].
-    ^ false
-
-    "Modified: / 4.2.1999 / 20:00:11 / cg"
-!
-
-isTraceable:anInstance
-    "returns true if the instance could be traced or traped
-    "
-    |cls|
-
-    anInstance notNil ifTrue:[
-        cls := anInstance class.
-
-      ^ (     cls ~~ True
-         and:[cls ~~ False
-         and:[cls ~~ SmallInteger]]
-        )
-    ].
-    ^ false.
-
-! !
-
-!InspectorList methodsFor:'accessing'!
-
-includesSelf:aBoolean
-    "includes 'self' dependant on the boolean
-    "
-    (self includesSelf) ~~ aBoolean ifTrue:[
-        aBoolean ifTrue:[
-            instanceNames addFirst:'self'.
-            instanceTypes addFirst:#self.
-
-            selection notNil ifTrue:[selection := selection + 1]
-                            ifFalse:[selection := 1]
-
-        ] ifFalse:[
-            instanceNames removeFirst.
-            instanceTypes removeFirst.
-
-            selection isNil ifFalse:[
-                (selection := selection - 1) == 0 ifTrue:[
-                    selection := nil
-                ]
-            ]
-        ]
-    ]
-
-
-!
-
-list
-    "returns self
-    "
-    ^ self
-!
-
-size
-    "returns size of list
-    "
-    ^ instanceNames size
-
-!
-
-update
-    "update list contents
-    "
-    |start stop size|
-
-    inspectedObject isVariable ifTrue:[
-        start := instanceNames findFirst:[:el|(el at:1) isDigit].
-        stop  := instanceTypes size.
-
-        start == 0 ifTrue:[
-            size := stop + 10.  "must be > 1: force a resize the first time"   
-        ] ifFalse:[
-            instanceTypes last ~~ #grow ifTrue:[size := stop]
-                                       ifFalse:[size := stop-1].
-
-            instanceTypes removeFromIndex:start toIndex:stop.
-            instanceNames removeFromIndex:start toIndex:stop.
-        ].
-        self resizeTo:size.
-    ]
-
-    "Modified: / 4.2.1999 / 20:00:38 / cg"
-! !
-
-!InspectorList methodsFor:'accessing contents'!
-
-inspectedObject
-    "returns current inspected object
-    "
-    ^ inspectedObject
-
-
-!
-
-instanceNames
-    "returns list of instance names
-    "
-    ^ instanceNames
-
-
-!
-
-instanceTypeAt:anIndex
-    "returns type assigned to the list entry (#directory #normal #self #grow)
-     In case of an invalid index nil is returned.
-    "
-    (anIndex isNil or:[anIndex > instanceTypes size]) ifFalse:[^ instanceTypes at:anIndex]
-                                                       ifTrue:[^ nil].
-
-
-!
-
-instanceTypes
-    "returns list of types (#directory #normal #self #grow)
-    "
-    ^ instanceTypes
-
-
-!
-
-instanceVarAt:anIndex
-    "returns the instnace variable assigned to the index or 
-     nil in case of an invalid index.
-    "
-    |nm|
-
-    (anIndex isNil or:[anIndex > instanceTypes size]) ifFalse:[
-        nm := instanceNames at:anIndex.
-
-        (nm at:1) isDigit ifFalse:[
-            self includesSelf ifFalse:[
-                ^ inspectedObject instVarAt:anIndex
-            ].
-            anIndex == 1 ifFalse:[^ inspectedObject instVarAt:(anIndex-1)]
-                          ifTrue:[^ inspectedObject]
-        ].
-      ^ inspectedObject basicAt:(Number readFrom:nm onError:0)
-    ].
-    ^ nil
-
-
-! !
-
-!InspectorList methodsFor:'initialization'!
-
-initialize
-    "initialize instance attributes
-    "
-    super initialize.
-
-    instanceNames := OrderedCollection new.
-    instanceTypes := OrderedCollection new.
-
-! !
-
-!InspectorList methodsFor:'private'!
-
-resizeTo:aNumber
-    "resize list to minimum aNumber
-    "
-    |lstVarId basicSize newLastId obj instSize|
-
-    (inspectedObject isVariable and:[self class isDirectory:inspectedObject]) ifFalse:[
-        ^ self
-    ].
-
-    instanceTypes size == 0 ifTrue:[
-        lstVarId := 0
-    ] ifFalse:[
-        instSize := inspectedObject class instSize.
-
-        instanceTypes first == #self ifTrue:[
-            instSize := instSize + 1
-        ].
-        instanceTypes last == #grow ifTrue:[
-            instanceNames removeLast.       " ..    "
-            instanceTypes removeLast.       " #grow "
-        ].
-        lstVarId := instanceTypes size - instSize.
-    ].
-
-    (basicSize := inspectedObject basicSize) == lstVarId ifTrue:[
-        ^ self
-    ].
-    newLastId := (1 bitShift:((aNumber-1) highBit)) max:128.
-
-    (newLastId + 64) > basicSize ifTrue:[
-        newLastId := basicSize
-    ].
-
-    [lstVarId ~~ newLastId] whileTrue:[
-        lstVarId := lstVarId + 1.
-        obj := inspectedObject basicAt:lstVarId.
-
-        (self class isDirectory:obj) ifTrue:[instanceTypes add:#directory]
-                                    ifFalse:[instanceTypes add:#normal].
-
-        instanceNames add:(lstVarId printString, '   ', obj class name printString).
-    ].
-
-    lstVarId ~~ basicSize ifTrue:[
-        instanceNames add:'..'.
-        instanceTypes add:#grow
-    ].
-! !
-
-!InspectorList methodsFor:'selections'!
-
-selectedInstanceType
-    "returns type assigned to the selected list entry (#directory #normal #self #grow).
-     In case of no selection nil is returned.
-    "
-    ^ self instanceTypeAt:selection
-
-
-!
-
-selectedInstanceVar
-    "returns current inspected instance variable or nil
-    "
-    ^ self instanceVarAt:selection
-
-
-!
-
-selection
-    "returns current selection number or nil
-    "
-    ^ selection
-
-
-!
-
-setSelection:aNrOrNil
-    "change current selection to a number or nil; may resize the lists
-    "
-    selection := aNrOrNil.
-
-    (selection isNil or:[instanceTypes size > selection]) ifFalse:[
-        self resizeTo:selection.
-
-        selection > instanceTypes size ifTrue:[
-            selection := nil
-        ]
-    ]    
-! !
-
-!InspectorList methodsFor:'testing'!
-
-includesSelf
-    "returns true if 'self' is included in the list
-    "
-    ^ (instanceTypes notEmpty and:[instanceTypes first == #self])
-
-
-!
-
-isEmpty
-    "returns true if the list is empty
-    "
-    ^ instanceNames isEmpty
-
-!
-
-notEmpty
-    "returns true if the list is not empty
-    "
-    ^ instanceNames notEmpty
-
-! !
-
-!InspectorList methodsFor:'user interaction'!
-
-accept:aText notifying:aView
-    "evaluating aText on the selected instance var; if an error occurs #Error
-     is returned otherwise the inspected object instance. On success the list
-     will be updated.
-    "
-    |text slNr value|
-
-    selection notNil ifTrue:[
-        text := self class asString:aText.
-
-        text notNil ifTrue:[
-            self includesSelf ifFalse:[slNr := selection]
-                               ifTrue:[slNr := selection-1].
-
-            value := inspectedObject class evaluatorClass 
-                       evaluate:text
-                       receiver:inspectedObject 
-                      notifying:aView.
-
-            slNr ~~ 0 ifTrue:[
-                (inspectedObject class isVariable) ifFalse:[
-                    inspectedObject instVarAt:slNr put:value
-                ] ifTrue:[
-                    slNr <= (inspectedObject class instSize) ifTrue:[
-                        inspectedObject instVarAt:slNr put:value
-                    ] ifFalse:[
-                        slNr := slNr - inspectedObject class instSize.
-                        inspectedObject basicAt:slNr put:value
-                    ]
-                ]
-            ].
-            inspectedObject changed.
-            self update.
-          ^ inspectedObject
-        ]
-    ].
-    ^ #Error
-!
-
-doIt:aCode notifying:aView
-    "evaluating aCode on the selected instance var; if an error occurs #Error
-     is returned otherwise the result returned from the evaluator. On success
-     the list will be updated.
-    "
-    |successFg result evaluator selInstVar code|
-
-    selInstVar := self selectedInstanceVar.
-
-    selInstVar notNil ifTrue:[
-        code := self class asString:aCode.
-
-        code notNil ifTrue:[
-            evaluator := selInstVar class evaluatorClass.
-            successFg := true.
-
-            evaluator notNil ifTrue:[
-                result := evaluator evaluate:code 
-                                          in:nil 
-                                    receiver:selInstVar 
-                                   notifying:aView 
-                                      logged:true 
-                                      ifFail:[successFg := false].
-
-                successFg ifTrue:[
-                    self update. 
-                  ^ result 
-                ]
-            ]
-        ]
-    ].
-    ^ #Error.
-
-
-!
-
-inspect:anObject
-    "inspect a new instance; update contents
-    "
-    |varNamesSize|
-
-    selection := nil.
-
-    anObject == inspectedObject ifFalse:[
-        inspectedObject := anObject.
-
-        (self class isDirectory:inspectedObject) ifFalse:[
-            instanceNames := OrderedCollection new.
-            instanceTypes := OrderedCollection new.
-        ] ifTrue:[    
-            instanceNames := inspectedObject class allInstVarNames.
-            varNamesSize  := instanceNames size.
-            instanceTypes := OrderedCollection new:varNamesSize.
-
-            1 to:varNamesSize do:[:i|
-                (self class isDirectory:(inspectedObject instVarAt:i)) ifTrue:[
-                    instanceTypes add:#directory
-                ] ifFalse:[
-                    instanceTypes add:#normal
-                ]
-            ].
-        ]
-    ].
-    self update
-! !
-
-!InspectorList class methodsFor:'documentation'!
-
-version
-    ^ '$Header$'
-! !