| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 | 
							- Smalltalk current createPackage: 'Helios-Inspector'!
 
- 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 label 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
 
- !
 
- label
 
-     ^ label ifNil: [ self inspectee printString ]
 
- !
 
- label: aString
 
-     label := aString
 
- !
 
- selectedInstVarObject
 
- 	^ self instVarObjectAt: self selection
 
- !
 
- selection
 
- 	^ selection ifNil:[ '' ]
 
- !
 
- selection: anObject
 
- 	selection := anObject.
 
- 	self announcer announce: (HLInstanceVariableSelected on: selection)
 
- !
 
- variables
 
- 	^ variables ifNil: [ Dictionary new ]
 
- !
 
- 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 label
 
- !
 
- 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
 
- 	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
 
- ! !
 
- HLWidget subclass: #HLInspectorWidget
 
- 	instanceVariableNames: 'model variablesWidget displayWidget codeWidget'
 
- 	package: 'Helios-Inspector'!
 
- !HLInspectorWidget 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 ]
 
- !
 
- initialize
 
- 	super initialize.
 
- 	self register
 
- !
 
- inspectee
 
- 	^ self model inspectee
 
- !
 
- inspectee: anObject
 
- 	self model inspectee: anObject
 
- !
 
- label
 
-     ^ self model label
 
- !
 
- 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 ]
 
- ! !
 
- !HLInspectorWidget 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: 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
 
- 	self model label: aString
 
- !
 
- setVariables: aDictionary
 
- 	self model variables: aDictionary
 
- ! !
 
- !HLInspectorWidget methodsFor: 'reactions'!
 
- onDive
 
- 	HLInspector new 
 
- 		inspect: self model selectedInstVarObject;
 
- 		open
 
- !
 
- onDoneIt
 
- 	self refresh
 
- !
 
- onInspectIt
 
- !
 
- onInstanceVariableSelected
 
- 	self codeWidget receiver: self model selectedInstVarObject.
 
- 	self refreshDisplayWidget
 
- !
 
- onPrintIt
 
- ! !
 
- !HLInspectorWidget methodsFor: 'registration'!
 
- register
 
- 	HLInspector register: self
 
- !
 
- unregister
 
- 	super unregister.
 
- 	HLInspector unregister: self
 
- ! !
 
- !HLInspectorWidget methodsFor: 'rendering'!
 
- renderContentOn: html
 
-    	html with: (HLHorizontalSplitter
 
-     	with: (HLVerticalSplitter 
 
-             with: self variablesWidget
 
-             with: self displayWidget)
 
-         with: self codeWidget)
 
- ! !
 
- HLInspectorWidget subclass: #HLInspector
 
- 	instanceVariableNames: ''
 
- 	package: 'Helios-Inspector'!
 
- !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 instanceVariableNames: 'inspectors'!
 
- !HLInspector class methodsFor: 'accessing'!
 
- inspectors
 
- 	^ inspectors ifNil: [ inspectors := OrderedCollection new ]
 
- !
 
- tabClass
 
- 	^ 'inspector'
 
- !
 
- tabLabel
 
- 	^ 'Inspector'
 
- !
 
- tabPriority
 
- 	^ 10
 
- ! !
 
- !HLInspector class methodsFor: 'actions'!
 
- inspect: anObject
 
- 	self new
 
- 		inspect: anObject;
 
- 		open
 
- ! !
 
- !HLInspector class methodsFor: 'initialization'!
 
- initialize
 
- 	super initialize.
 
- 	self watchChanges
 
- !
 
- watchChanges
 
- 	[ self inspectors do: [ :each | each refresh ] ]
 
- 		valueWithInterval: 500
 
- ! !
 
- !HLInspector class methodsFor: 'registration'!
 
- register: anInspector
 
- 	self inspectors add: anInspector
 
- !
 
- unregister: anInspector
 
- 	self inspectors remove: anInspector
 
- ! !
 
- !HLInspector class methodsFor: 'testing'!
 
- canBeOpenAsTab
 
- 	^ false
 
- ! !
 
 
  |