123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- Smalltalk current createPackage: 'Helios-Inspector'!
- HLWidget subclass: #HLInspector
- instanceVariableNames: 'model variablesWidget displayWidget codeWidget label'
- package: 'Helios-Inspector'!
- !HLInspector methodsFor: 'accessing'!
- codeWidget
- ^ codeWidget ifNil: [
- codeWidget := HLCodeWidget new
- model: model code;
- receiver: model inspectee;
- yourself ]
- !
- displayWidget
- ^ displayWidget ifNil: [
- displayWidget := HLInspectorDisplayWidget new
- model: self model;
- yourself ]
- !
- inspectee
- ^ self model inspectee
- !
- inspectee: anObject
- self model inspectee: anObject
- !
- label
- ^ label ifNil: [ model inspectee printString ]
- !
- model
- ^ model ifNil: [
- self model: HLInspectorModel new.
- model ]
- !
- model: aModel
- model := aModel.
- self codeWidget model: aModel code.
-
- self
- observeCodeWidget;
- observeVariablesWidget;
- observeModel
- !
- tabLabel
- ^ 'Inspector'
- !
- variablesWidget
- ^ variablesWidget ifNil: [
- variablesWidget := HLInspectorVariablesWidget new
- model: self model;
- yourself ]
- ! !
- !HLInspector methodsFor: 'actions'!
- inspect: anObject
- self model inspect: anObject on: self.
-
- self
- refreshVariablesWidget;
- refreshDisplayWidget
- !
- observeCodeWidget
- self codeWidget announcer
- on: HLDoItExecuted
- do: [ self onDoneIt ]
- !
- observeModel
- self model announcer
- on: HLInstanceVariableSelected
- send: #onInstanceVariableSelected
- to: self
- !
- observeVariablesWidget
- self variablesWidget announcer
- on: HLRefreshRequested do: [ :ann | self onRefresh ];
- on: HLDiveRequested do:[ self onDive ]
- !
- open
- HLManager current addTab: (HLTab on: self labelled: self tabLabel)
- !
- refresh
- self inspect: self inspectee
- !
- refreshDisplayWidget
- self displayWidget refresh
- !
- refreshVariablesWidget
- self variablesWidget refresh
- !
- setLabel: aString
- label := aString
- !
- setVariables: aDictionary
- self model variables: aDictionary
- ! !
- !HLInspector methodsFor: 'reactions'!
- onDive
- self inspect: self model selectedInstVarObject
- !
- onDoneIt
- self refresh
- !
- onInspectIt
- !
- onInstanceVariableSelected
- self codeWidget receiver: self model selectedInstVarObject.
- self refreshDisplayWidget
- !
- onPrintIt
- !
- onRefresh
- self refresh
- ! !
- !HLInspector methodsFor: 'rendering'!
- renderContentOn: html
- html with: (HLContainer with: (HLHorizontalSplitter
- with: (HLVerticalSplitter
- with: self variablesWidget
- with: self displayWidget)
- with: self codeWidget)).
-
- self variablesWidget focus
- ! !
- !HLInspector class methodsFor: 'accessing'!
- tabLabel
- ^ 'Inspector'
- !
- tabPriority
- ^ 10
- ! !
- !HLInspector class methodsFor: 'testing'!
- canBeOpenAsTab
- ^ false
- ! !
- HLNavigationListWidget subclass: #HLInspectorDisplayWidget
- instanceVariableNames: 'model'
- package: 'Helios-Inspector'!
- !HLInspectorDisplayWidget methodsFor: 'accessing'!
- model
- ^ model
- !
- model: aModel
- model := aModel
- ! !
- !HLInspectorDisplayWidget methodsFor: 'rendering'!
- renderContentOn: html
-
- html div with: self selectionDisplayString
- !
- selectionDisplayString
- |selection|
- selection := model selection.
- ^ (model variables keys includes: selection)
- ifTrue:[(model instVarObjectAt: selection) printString]
- ifFalse:['']
- ! !
- Object subclass: #HLInspectorModel
- instanceVariableNames: 'announcer environment inspectee code variables selection'
- package: 'Helios-Inspector'!
- !HLInspectorModel methodsFor: 'accessing'!
- announcer
- ^ announcer ifNil: [announcer := Announcer new ]
- !
- code
- "Answers the code model working for this workspace model"
- ^ code ifNil:[ code := HLCodeModel on: self environment ]
- !
- environment
- ^ environment ifNil: [ HLManager current environment ]
- !
- environment: anEnvironment
- environment := anEnvironment
- !
- inspectee
- ^ inspectee
- !
- inspectee: anObject
- inspectee := anObject
- !
- selectedInstVarObject
- ^ self instVarObjectAt: self selection
- !
- selection
- ^ selection ifNil:[ '' ]
- !
- selection: anObject
- selection := anObject.
- self announcer announce: (HLInstanceVariableSelected on: selection)
- !
- variables
- ^ variables
- !
- variables: aCollection
- variables := aCollection
- ! !
- !HLInspectorModel methodsFor: 'actions'!
- inspect: anObject on: anInspector
- inspectee := anObject.
- variables := #().
- inspectee inspectOn: anInspector
- !
- instVarObjectAt: anInstVarName
- ^ self variables at: anInstVarName
- !
- selectedInstVar: anInstVarName
- self selection: anInstVarName
- !
- subscribe: aWidget
- aWidget subscribeTo: self announcer
- ! !
- !HLInspectorModel methodsFor: 'reactions'!
- onKeyDown: anEvent
- <if(anEvent.ctrlKey) {
- if(anEvent.keyCode === 80) { //ctrl+p
- self._printIt();
- anEvent.preventDefault();
- return false;
- }
- if(anEvent.keyCode === 68) { //ctrl+d
- self._doIt();
- anEvent.preventDefault();
- return false;
- }
- if(anEvent.keyCode === 73) { //ctrl+i
- self._inspectIt();
- anEvent.preventDefault();
- return false;
- }
- }>
- ! !
- !HLInspectorModel class methodsFor: 'actions'!
- on: anEnvironment
- ^ self new
- environment: anEnvironment;
- yourself
- ! !
- HLNavigationListWidget subclass: #HLInspectorVariablesWidget
- instanceVariableNames: 'announcer model list diveButton'
- package: 'Helios-Inspector'!
- !HLInspectorVariablesWidget methodsFor: 'accessing'!
- announcer
- ^ announcer ifNil:[ announcer := Announcer new ]
- !
- label
- ^ self model inspectee class name
- !
- model
- ^ model
- !
- model: aModel
- model := aModel
- !
- selection
- ^ model selection
- !
- variables
- ^ model variables
- ! !
- !HLInspectorVariablesWidget methodsFor: 'actions'!
- refresh
- self resetItems.
- super refresh
- !
- resetItems
- items := nil
- ! !
- !HLInspectorVariablesWidget methodsFor: 'defaults'!
- defaultItems
- ^ self model variables keys
- ! !
- !HLInspectorVariablesWidget methodsFor: 'reactions'!
- selectItem: anObject
- super selectItem: anObject.
- self model selectedInstVar: anObject
- ! !
- !HLInspectorVariablesWidget methodsFor: 'rendering'!
- renderButtonsOn: html
- html button
- class: 'btn';
- with: 'Refresh';
- onClick: [ self announcer announce: HLRefreshRequested new ].
- diveButton := html button
- class: 'btn';
- with: 'Dive';
- onClick: [ self announcer announce: HLDiveRequested new ]
- !
- renderContentOn: html
- self renderHeadOn: html.
- super renderContentOn: html
- !
- renderHeadOn: html
- html div
- class: 'list-label';
- with: self label
- ! !
|