123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486 |
- Smalltalk current createPackage: 'Helios-Inspector' properties: #{}!
- HLWidget subclass: #HLInspector
- instanceVariableNames: 'model variables display code label'
- package: 'Helios-Inspector'!
- !HLInspector methodsFor: 'accessing'!
- code
- ^ code ifNil:[self initializeCode]
- !
- display
- ^ display ifNil:[self initializeDisplay]
- !
- inspectee
- ^ self model inspectee
- !
- inspectee: anObject
- self model inspectee: anObject
- !
- label
-
- ^ label ifNil:[self initializeLabel]
- !
- model
- ^ model ifNil:[self initializeModel]
- !
- model: aModel
- model := aModel.
-
- self code model: aModel code.
- self observeCode.
- !
- tabLabel
-
- ^ self label
- !
- variables
- ^ variables ifNil:[self initializeVariables]
- ! !
- !HLInspector methodsFor: 'actions'!
- ensureModel
- "Sends the #model: initialization message if needed."
- self observeVariables.
-
- model ifNil:[
- self model: self model]
- !
- inspect: anObject
- self model inspect: anObject on: self.
-
- self
- refreshVariables;
- refreshDisplay;
- yourself
- !
- makeCode
- ^ HLCodeWidget new
- model: model code;
- receiver: model inspectee;
- yourself.
- !
- makeDisplay
- ^ HLInspectorDisplay new
- model: self model;
- yourself
- !
- makeVariables
- ^ HLInspectorVariables new
- model: self model;
- yourself
- !
- observeCode
- self code announcer
- on: HLDoItExecuted
- do: [self onDoneIt]
- !
- observeVariables
- self variables announcer
- on: HLRefreshRequested do:[:ann| self onRefresh];
- yourself.
- self model announcer
- on: HLInstanceVariableSelected do:[:ann| self onInstanceVariableSelected];
- yourself.
- !
- open
- HLManager current addTab: (HLTab on: self labelled: self tabLabel)
- !
- refresh
- self inspect: self inspectee
- !
- refreshDisplay
- self display refresh
- !
- refreshVariables
- self variables refresh
- !
- setLabel: aString
- label := aString
- !
- setVariables: aDictionary
- self model variables: aDictionary
- ! !
- !HLInspector methodsFor: 'initialization'!
- initializeCode
- ^ code := self makeCode.
- !
- initializeDisplay
- ^ display := self makeDisplay
- !
- initializeLabel
- ^ label := model inspectee printString
- !
- initializeModel
- ^ model := HLInspectorModel new
- !
- initializeVariables
- ^ variables := self makeVariables
- ! !
- !HLInspector methodsFor: 'reactions'!
- onDoIt
- !
- onDoneIt
- self refresh
- !
- onInspectIt
- !
- onInstanceVariableSelected
- self refreshDisplay
- !
- onPrintIt
- !
- onRefresh
- self refresh
- ! !
- !HLInspector methodsFor: 'rendering'!
- renderContentOn: html
- self ensureModel.
-
- html with: (HLContainer with: (HLHorizontalSplitter
- with: (HLVerticalSplitter
- with: self variables
- with: self display)
- with: self code))
- ! !
- !HLInspector class methodsFor: 'accessing'!
- tabLabel
- ^ 'Inspector'
- !
- tabPriority
- ^ 10
- ! !
- !HLInspector class methodsFor: 'testing'!
- canBeOpenAsTab
- ^ false
- ! !
- HLNavigationListWidget subclass: #HLInspectorDisplay
- instanceVariableNames: 'model'
- package: 'Helios-Inspector'!
- !HLInspectorDisplay methodsFor: 'accessing'!
- model
- ^ model
- !
- model: aModel
- model := aModel
- ! !
- !HLInspectorDisplay 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: [ self initializeAnnouncer ]
- !
- code
- "Answers the code model working for this workspace model"
- ^ code ifNil:[self initializeCode]
- !
- environment
- ^ environment ifNil: [ self initializeEnvironment]
- !
- environment: anEnvironment
- environment := anEnvironment
- !
- inspectee
- ^ inspectee
- !
- inspectee: anObject
- inspectee := anObject
- !
- selectedInstVarObject
- ^ self instVarObjectAt: self selection
- !
- selection
- ^ selection ifNil:[self initializeSelection]
- !
- selection: anObject
- selection := anObject.
- self announcer announce: (HLInstanceVariableSelected on: selection)
- !
- variables
- ^ variables
- !
- variables: aCollection
- variables := aCollection
- ! !
- !HLInspectorModel methodsFor: 'actions'!
- beLocal
- self initializeEnvironment
- !
- beRemoteOn: anIPAddress port: aPort
- "to-do"
-
- "environment := HLRemoteEnvironment on: anIPAddress port: aPort
-
- ...kind of stuff"
- !
- inspect: anObject on: anInspector
- inspectee := anObject.
- variables := #().
- inspectee inspectOn: anInspector
- !
- instVarObjectAt: anInstVarName
- ^ self variables at: anInstVarName
- !
- selectedInstVar: anInstVarName
- self selection: anInstVarName
- "self selection: (self variables keyAtValue: anInstVarObject)"
- !
- subscribe: aWidget
- aWidget subscribeTo: self announcer
- ! !
- !HLInspectorModel methodsFor: 'initialization'!
- initializeAnnouncer
- ^ announcer := Announcer new
- !
- initializeCode
- ^ code := HLCodeModel on: self environment
- !
- initializeEnvironment
- ^ environment := HLLocalEnvironment new
- !
- initializeSelection
- ^ selection := ''
- ! !
- !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: #HLInspectorVariables
- instanceVariableNames: 'announcer model list diveButton'
- package: 'Helios-Inspector'!
- !HLInspectorVariables methodsFor: 'accessing'!
- announcer
- ^ announcer ifNil:[self initializeAnnouncer]
- !
- model
-
- ^ model
- !
- model: aModel
-
- model := aModel
- !
- selection
- ^ model selection
- !
- variables
- ^ model variables
- ! !
- !HLInspectorVariables methodsFor: 'actions'!
- refresh
- self resetItems.
-
- super refresh
- !
- resetItems
- items := nil
- ! !
- !HLInspectorVariables methodsFor: 'initialization'!
- initializeAnnouncer
- ^ announcer := Announcer new
- !
- initializeItems
- ^ items := self model variables keys
- ! !
- !HLInspectorVariables methodsFor: 'reactions'!
- selectItem: anObject
-
- super selectItem: anObject.
-
- self model selectedInstVar: anObject
- ! !
- !HLInspectorVariables 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]
- ! !
|