Browse Source

Starting to open an inspector (panes not working yet)

Sebastian Sastre 11 years ago
parent
commit
b4dde42883

+ 1 - 1
helios.html

@@ -14,7 +14,7 @@
   </head> 
   <body> 
     
-    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios-Core', 'Helios-Commands', 'Helios-Layout','Helios-KeyBindings', 'Helios-Browser', 'Helios-Workspace', 'Helios-Announcements']}) </script> 
+    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios-Core', 'Helios-Commands', 'Helios-Layout','Helios-KeyBindings', 'Helios-Browser', 'Helios-Workspace', 'Helios-Inspector', 'Helios-Announcements']}) </script> 
     
   </body> 
 </html> 

+ 47 - 2
js/Helios-Core.deploy.js

@@ -69,7 +69,18 @@ smalltalk.HLLocalEnvironment);
 
 
 
-smalltalk.addClass('HLRemoveEnvironment', smalltalk.HLEnvironment, [], 'Helios-Core');
+smalltalk.addClass('HLRemoteEnvironment', smalltalk.HLEnvironment, [], 'Helios-Core');
+smalltalk.addMethod(
+"_eval_on_",
+smalltalk.method({
+selector: "eval:on:",
+fn: function (someCode,aReceiver){
+var self=this;
+smalltalk.send(self,"_notYetImplemented",[]);
+return self}
+}),
+smalltalk.HLRemoteEnvironment);
+
 smalltalk.addMethod(
 "_packages",
 smalltalk.method({
@@ -78,7 +89,41 @@ fn: function (){
 var self=this;
 return self}
 }),
-smalltalk.HLRemoveEnvironment);
+smalltalk.HLRemoteEnvironment);
+
+
+
+smalltalk.addClass('HLRemoteObject', smalltalk.Object, [], 'Helios-Core');
+smalltalk.addMethod(
+"_doesNotUnderstand_",
+smalltalk.method({
+selector: "doesNotUnderstand:",
+fn: function (aMessage){
+var self=this;
+return self}
+}),
+smalltalk.HLRemoteObject);
+
+smalltalk.addMethod(
+"_inspectOn_",
+smalltalk.method({
+selector: "inspectOn:",
+fn: function (anInspector){
+var self=this;
+return self}
+}),
+smalltalk.HLRemoteObject);
+
+smalltalk.addMethod(
+"_printString",
+smalltalk.method({
+selector: "printString",
+fn: function (){
+var self=this;
+return "this is a remote object";
+}
+}),
+smalltalk.HLRemoteObject);
 
 
 

+ 68 - 2
js/Helios-Core.js

@@ -90,7 +90,23 @@ smalltalk.HLLocalEnvironment);
 
 
 
-smalltalk.addClass('HLRemoveEnvironment', smalltalk.HLEnvironment, [], 'Helios-Core');
+smalltalk.addClass('HLRemoteEnvironment', smalltalk.HLEnvironment, [], 'Helios-Core');
+smalltalk.addMethod(
+"_eval_on_",
+smalltalk.method({
+selector: "eval:on:",
+category: 'actions',
+fn: function (someCode,aReceiver){
+var self=this;
+smalltalk.send(self,"_notYetImplemented",[]);
+return self},
+args: ["someCode", "aReceiver"],
+source: "eval: someCode on: aReceiver\x0a\x0a\x09\x22Note for future self and friends:\x0a    whatever way this compilation happens on the other side, \x0a    it should return a proxy to the remote resulting object\x22\x0a    \x0a    self notYetImplemented",
+messageSends: ["notYetImplemented"],
+referencedClasses: []
+}),
+smalltalk.HLRemoteEnvironment);
+
 smalltalk.addMethod(
 "_packages",
 smalltalk.method({
@@ -104,7 +120,57 @@ source: "packages\x0a\x09\x22Answer the remote environment's packages\x22\x0a  \
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.HLRemoveEnvironment);
+smalltalk.HLRemoteEnvironment);
+
+
+
+smalltalk.addClass('HLRemoteObject', smalltalk.Object, [], 'Helios-Core');
+smalltalk.HLRemoteObject.comment="This is a local proxy to a remote object.\x0aTipically useful for evaluating and inspecting and interacting with instances of a remote VM.\x0a"
+smalltalk.addMethod(
+"_doesNotUnderstand_",
+smalltalk.method({
+selector: "doesNotUnderstand:",
+category: 'actions',
+fn: function (aMessage){
+var self=this;
+return self},
+args: ["aMessage"],
+source: "doesNotUnderstand: aMessage\x0a\x0a\x09\x22to-do\x0a\x0a\x09aham, blah blah\x0a\x0a\x09super doesNotUnderstand: aMessage\x22",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLRemoteObject);
+
+smalltalk.addMethod(
+"_inspectOn_",
+smalltalk.method({
+selector: "inspectOn:",
+category: 'actions',
+fn: function (anInspector){
+var self=this;
+return self},
+args: ["anInspector"],
+source: "inspectOn: anInspector\x0a\x0a\x09\x22to-do\x22\x0a\x0a\x09\x22this is a source of so much fun...\x22\x0a",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLRemoteObject);
+
+smalltalk.addMethod(
+"_printString",
+smalltalk.method({
+selector: "printString",
+category: 'actions',
+fn: function (){
+var self=this;
+return "this is a remote object";
+},
+args: [],
+source: "printString\x0a\x09^ 'this is a remote object'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLRemoteObject);
 
 
 

+ 684 - 0
js/Helios-Inspector.deploy.js

@@ -0,0 +1,684 @@
+smalltalk.addPackage('Helios-Inspector', {});
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, ['model', 'variables', 'display', 'code'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_code",
+smalltalk.method({
+selector: "code",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@code"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeCode",[]);
+} else {
+$1=self["@code"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_display",
+smalltalk.method({
+selector: "display",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@display"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeDisplay",[]);
+} else {
+$1=self["@display"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_ensureModel",
+smalltalk.method({
+selector: "ensureModel",
+fn: function (){
+var self=this;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+smalltalk.send(self,"_model_",[smalltalk.send(self,"_model",[])]);
+} else {
+self["@model"];
+};
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeCode",
+smalltalk.method({
+selector: "initializeCode",
+fn: function (){
+var self=this;
+var $1;
+self["@code"]=smalltalk.send(self,"_makeCode",[]);
+$1=self["@code"];
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeDisplay",
+smalltalk.method({
+selector: "initializeDisplay",
+fn: function (){
+var self=this;
+var $1;
+self["@display"]=smalltalk.send(self,"_makeDisplay",[]);
+$1=self["@display"];
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeModel",
+smalltalk.method({
+selector: "initializeModel",
+fn: function (){
+var self=this;
+var $1;
+self["@model"]=smalltalk.send((smalltalk.HLInspectorModel || HLInspectorModel),"_new",[]);
+$1=self["@model"];
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeVariables",
+smalltalk.method({
+selector: "initializeVariables",
+fn: function (){
+var self=this;
+var $1;
+self["@variables"]=smalltalk.send(self,"_makeVariables",[]);
+$1=self["@variables"];
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspect_",
+smalltalk.method({
+selector: "inspect:",
+fn: function (anObject){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee_",[anObject]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspectee",
+smalltalk.method({
+selector: "inspectee",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee",[]);
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspectee_",
+smalltalk.method({
+selector: "inspectee:",
+fn: function (anObject){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee_",[anObject]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeCode",
+smalltalk.method({
+selector: "makeCode",
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLCodeWidget || HLCodeWidget),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self["@model"],"_code",[])]);
+smalltalk.send($2,"_doItReaction_",[(function(){
+return smalltalk.send(self,"_refresh",[]);
+})]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeDisplay",
+smalltalk.method({
+selector: "makeDisplay",
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspectorDisplay || HLInspectorDisplay),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self,"_model",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeVariables",
+smalltalk.method({
+selector: "makeVariables",
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspectorVariables || HLInspectorVariables),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self,"_model",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeModel",[]);
+} else {
+$1=self["@model"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+smalltalk.send(smalltalk.send(self,"_code",[]),"_model_",[smalltalk.send(aModel,"_code",[])]);
+smalltalk.send(self,"_observeCode",[]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_observeCode",
+smalltalk.method({
+selector: "observeCode",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onDoIt",
+smalltalk.method({
+selector: "onDoIt",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onInspectIt",
+smalltalk.method({
+selector: "onInspectIt",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onPrintIt",
+smalltalk.method({
+selector: "onPrintIt",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_open",
+smalltalk.method({
+selector: "open",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send((smalltalk.HLManager || HLManager),"_current",[]),"_addTab_",[smalltalk.send((smalltalk.HLTab || HLTab),"_on_labelled_",[self,smalltalk.send(self,"_tabLabel",[])])]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+fn: function (){
+var self=this;
+var $1;
+smalltalk.send(self,"_inspect_",[smalltalk.send(self,"_inspectee",[])]);
+smalltalk.send(self,"_updateVariablesList",[]);
+$1=smalltalk.send(self,"_updateValueTextarea",[]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(self,"_ensureModel",[]);
+smalltalk.send(html,"_with_",[smalltalk.send((smalltalk.HLContainer || HLContainer),"_with_",[smalltalk.send((smalltalk.HLHorizontalSplitter || HLHorizontalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send(self,"_variables",[]),smalltalk.send(self,"_display",[])]),smalltalk.send(self,"_code",[])])])]);
+return self}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@model"],"_inspectee",[]),"_printString",[]);
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_variables",
+smalltalk.method({
+selector: "variables",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@variables"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeVariables",[]);
+} else {
+$1=self["@variables"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspector);
+
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function (){
+var self=this;
+return false;
+}
+}),
+smalltalk.HLInspector.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function (){
+var self=this;
+return "Inspector";
+}
+}),
+smalltalk.HLInspector.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function (){
+var self=this;
+return (10);
+}
+}),
+smalltalk.HLInspector.klass);
+
+
+smalltalk.addClass('HLInspectorDisplay', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+return self["@model"];
+}
+}),
+smalltalk.HLInspectorDisplay);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+return self}
+}),
+smalltalk.HLInspectorDisplay);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",["display"]);
+return self}
+}),
+smalltalk.HLInspectorDisplay);
+
+
+
+smalltalk.addClass('HLInspectorModel', smalltalk.Object, ['announcer', 'environment', 'inspectee', 'code', 'variables', 'selection'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@announcer"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeAnnouncer",[]);
+} else {
+$1=self["@announcer"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_beLocal",
+smalltalk.method({
+selector: "beLocal",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initializeEnvironment",[]);
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_beRemoteOn_port_",
+smalltalk.method({
+selector: "beRemoteOn:port:",
+fn: function (anIPAddress,aPort){
+var self=this;
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_code",
+smalltalk.method({
+selector: "code",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@code"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeCode",[]);
+} else {
+$1=self["@code"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@environment"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeEnvironment",[]);
+} else {
+$1=self["@environment"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_environment_",
+smalltalk.method({
+selector: "environment:",
+fn: function (anEnvironment){
+var self=this;
+self["@environment"]=anEnvironment;
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeAnnouncer",
+smalltalk.method({
+selector: "initializeAnnouncer",
+fn: function (){
+var self=this;
+var $1;
+self["@announcer"]=smalltalk.send((smalltalk.Announcer || Announcer),"_new",[]);
+$1=self["@announcer"];
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeCode",
+smalltalk.method({
+selector: "initializeCode",
+fn: function (){
+var self=this;
+var $1;
+self["@code"]=smalltalk.send((smalltalk.HLCodeModel || HLCodeModel),"_on_",[smalltalk.send(self,"_environment",[])]);
+$1=self["@code"];
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeEnvironment",
+smalltalk.method({
+selector: "initializeEnvironment",
+fn: function (){
+var self=this;
+var $1;
+self["@environment"]=smalltalk.send((smalltalk.HLLocalEnvironment || HLLocalEnvironment),"_new",[]);
+$1=self["@environment"];
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeSelection",
+smalltalk.method({
+selector: "initializeSelection",
+fn: function (){
+var self=this;
+var $1;
+self["@selection"]=smalltalk.send(self,"_inspectee",[]);
+$1=self["@selection"];
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_inspectee",
+smalltalk.method({
+selector: "inspectee",
+fn: function (){
+var self=this;
+return self["@inspectee"];
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_inspectee_",
+smalltalk.method({
+selector: "inspectee:",
+fn: function (anObject){
+var self=this;
+self["@inspectee"]=anObject;
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_onKeyDown_",
+smalltalk.method({
+selector: "onKeyDown:",
+fn: function (anEvent){
+var self=this;
+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;
+		}
+	};
+;
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_selection",
+smalltalk.method({
+selector: "selection",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@selection"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeSelection",[]);
+} else {
+$1=self["@selection"];
+};
+return $1;
+}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_selection_",
+smalltalk.method({
+selector: "selection:",
+fn: function (anObject){
+var self=this;
+self["@selection"]=anObject;
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_subscribe_",
+smalltalk.method({
+selector: "subscribe:",
+fn: function (aWidget){
+var self=this;
+smalltalk.send(aWidget,"_subscribeTo_",[smalltalk.send(self,"_announcer",[])]);
+return self}
+}),
+smalltalk.HLInspectorModel);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (anEnvironment){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_environment_",[anEnvironment]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLInspectorModel.klass);
+
+
+smalltalk.addClass('HLInspectorVariables', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+return self["@model"];
+}
+}),
+smalltalk.HLInspectorVariables);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+return self}
+}),
+smalltalk.HLInspectorVariables);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",["variables"]);
+return self}
+}),
+smalltalk.HLInspectorVariables);
+
+
+

+ 934 - 0
js/Helios-Inspector.js

@@ -0,0 +1,934 @@
+smalltalk.addPackage('Helios-Inspector', {});
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, ['model', 'variables', 'display', 'code'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_code",
+smalltalk.method({
+selector: "code",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@code"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeCode",[]);
+} else {
+$1=self["@code"];
+};
+return $1;
+},
+args: [],
+source: "code\x0a\x0a\x09^ code ifNil:[self initializeCode]",
+messageSends: ["ifNil:", "initializeCode"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_display",
+smalltalk.method({
+selector: "display",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@display"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeDisplay",[]);
+} else {
+$1=self["@display"];
+};
+return $1;
+},
+args: [],
+source: "display\x0a\x0a\x09^ display ifNil:[self initializeDisplay]",
+messageSends: ["ifNil:", "initializeDisplay"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_ensureModel",
+smalltalk.method({
+selector: "ensureModel",
+category: 'actions',
+fn: function (){
+var self=this;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+smalltalk.send(self,"_model_",[smalltalk.send(self,"_model",[])]);
+} else {
+self["@model"];
+};
+return self},
+args: [],
+source: "ensureModel\x0a\x09\x22Sends the #model: initialization message if needed.\x22\x0a\x0a\x09model ifNil:[\x0a\x09\x09self model: self model]\x0a\x09",
+messageSends: ["ifNil:", "model:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeCode",
+smalltalk.method({
+selector: "initializeCode",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@code"]=smalltalk.send(self,"_makeCode",[]);
+$1=self["@code"];
+return $1;
+},
+args: [],
+source: "initializeCode\x0a\x0a\x09^ code := self makeCode.",
+messageSends: ["makeCode"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeDisplay",
+smalltalk.method({
+selector: "initializeDisplay",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@display"]=smalltalk.send(self,"_makeDisplay",[]);
+$1=self["@display"];
+return $1;
+},
+args: [],
+source: "initializeDisplay\x0a\x09^ display := self makeDisplay",
+messageSends: ["makeDisplay"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeModel",
+smalltalk.method({
+selector: "initializeModel",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@model"]=smalltalk.send((smalltalk.HLInspectorModel || HLInspectorModel),"_new",[]);
+$1=self["@model"];
+return $1;
+},
+args: [],
+source: "initializeModel\x0a\x0a\x09^ model := HLInspectorModel new",
+messageSends: ["new"],
+referencedClasses: ["HLInspectorModel"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_initializeVariables",
+smalltalk.method({
+selector: "initializeVariables",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@variables"]=smalltalk.send(self,"_makeVariables",[]);
+$1=self["@variables"];
+return $1;
+},
+args: [],
+source: "initializeVariables\x0a\x09^ variables := self makeVariables",
+messageSends: ["makeVariables"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspect_",
+smalltalk.method({
+selector: "inspect:",
+category: 'actions',
+fn: function (anObject){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee_",[anObject]);
+return self},
+args: ["anObject"],
+source: "inspect: anObject\x0a\x0a\x09self model inspectee: anObject",
+messageSends: ["inspectee:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspectee",
+smalltalk.method({
+selector: "inspectee",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee",[]);
+return $1;
+},
+args: [],
+source: "inspectee\x0a\x0a\x09^ self model inspectee",
+messageSends: ["inspectee", "model"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_inspectee_",
+smalltalk.method({
+selector: "inspectee:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_model",[]),"_inspectee_",[anObject]);
+return self},
+args: ["anObject"],
+source: "inspectee: anObject\x0a\x0a\x09self model inspectee: anObject",
+messageSends: ["inspectee:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeCode",
+smalltalk.method({
+selector: "makeCode",
+category: 'actions',
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLCodeWidget || HLCodeWidget),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self["@model"],"_code",[])]);
+smalltalk.send($2,"_doItReaction_",[(function(){
+return smalltalk.send(self,"_refresh",[]);
+})]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: [],
+source: "makeCode\x0a\x0a\x09^ HLCodeWidget new\x0a    \x09model: model code;\x0a\x09\x09doItReaction: [self refresh];\x0a        yourself.\x0a        \x0a",
+messageSends: ["model:", "code", "new", "doItReaction:", "refresh", "yourself"],
+referencedClasses: ["HLCodeWidget"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeDisplay",
+smalltalk.method({
+selector: "makeDisplay",
+category: 'actions',
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspectorDisplay || HLInspectorDisplay),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self,"_model",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: [],
+source: "makeDisplay\x0a\x0a\x09^ HLInspectorDisplay new\x0a    \x09model: self model;\x0a        yourself\x0a",
+messageSends: ["model:", "model", "new", "yourself"],
+referencedClasses: ["HLInspectorDisplay"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_makeVariables",
+smalltalk.method({
+selector: "makeVariables",
+category: 'actions',
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspectorVariables || HLInspectorVariables),"_new",[]);
+smalltalk.send($2,"_model_",[smalltalk.send(self,"_model",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: [],
+source: "makeVariables\x0a\x0a\x09^ HLInspectorVariables new\x0a    \x09model: self model;\x0a        yourself\x0a",
+messageSends: ["model:", "model", "new", "yourself"],
+referencedClasses: ["HLInspectorVariables"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeModel",[]);
+} else {
+$1=self["@model"];
+};
+return $1;
+},
+args: [],
+source: "model\x0a\x0a\x09^ model ifNil:[self initializeModel]",
+messageSends: ["ifNil:", "initializeModel"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+smalltalk.send(smalltalk.send(self,"_code",[]),"_model_",[smalltalk.send(aModel,"_code",[])]);
+smalltalk.send(self,"_observeCode",[]);
+return self},
+args: ["aModel"],
+source: "model: aModel\x0a\x0a\x09model := aModel.\x0a     \x0a    self code model: aModel code.\x0a    self observeCode.\x0a    ",
+messageSends: ["model:", "code", "observeCode"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_observeCode",
+smalltalk.method({
+selector: "observeCode",
+category: 'actions',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "observeCode\x0a\x0a",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onDoIt",
+smalltalk.method({
+selector: "onDoIt",
+category: 'reactions',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "onDoIt",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onInspectIt",
+smalltalk.method({
+selector: "onInspectIt",
+category: 'reactions',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "onInspectIt",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_onPrintIt",
+smalltalk.method({
+selector: "onPrintIt",
+category: 'reactions',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "onPrintIt",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_open",
+smalltalk.method({
+selector: "open",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send((smalltalk.HLManager || HLManager),"_current",[]),"_addTab_",[smalltalk.send((smalltalk.HLTab || HLTab),"_on_labelled_",[self,smalltalk.send(self,"_tabLabel",[])])]);
+return self},
+args: [],
+source: "open\x0a\x0a\x09HLManager current addTab: (HLTab on: self labelled: self tabLabel)\x0a",
+messageSends: ["addTab:", "on:labelled:", "tabLabel", "current"],
+referencedClasses: ["HLTab", "HLManager"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+category: 'actions',
+fn: function (){
+var self=this;
+var $1;
+smalltalk.send(self,"_inspect_",[smalltalk.send(self,"_inspectee",[])]);
+smalltalk.send(self,"_updateVariablesList",[]);
+$1=smalltalk.send(self,"_updateValueTextarea",[]);
+return self},
+args: [],
+source: "refresh\x0a\x0a\x09self \x0a\x09\x09inspect: self inspectee; \x0a\x09\x09updateVariablesList;\x0a\x09\x09updateValueTextarea",
+messageSends: ["inspect:", "inspectee", "updateVariablesList", "updateValueTextarea"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(self,"_ensureModel",[]);
+smalltalk.send(html,"_with_",[smalltalk.send((smalltalk.HLContainer || HLContainer),"_with_",[smalltalk.send((smalltalk.HLHorizontalSplitter || HLHorizontalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send(self,"_variables",[]),smalltalk.send(self,"_display",[])]),smalltalk.send(self,"_code",[])])])]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x0a\x09self ensureModel.\x0a    \x0a   \x09html with: (HLContainer with: (HLHorizontalSplitter\x0a    \x09with: (HLVerticalSplitter \x0a            \x09\x09with: self variables\x0a            \x09    with: self display)\x0a        with: self code))\x0a ",
+messageSends: ["ensureModel", "with:", "with:with:", "variables", "display", "code"],
+referencedClasses: ["HLVerticalSplitter", "HLHorizontalSplitter", "HLContainer"]
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@model"],"_inspectee",[]),"_printString",[]);
+return $1;
+},
+args: [],
+source: "tabLabel\x0a\x09\x0a    ^ model inspectee printString",
+messageSends: ["printString", "inspectee"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+smalltalk.addMethod(
+"_variables",
+smalltalk.method({
+selector: "variables",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@variables"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeVariables",[]);
+} else {
+$1=self["@variables"];
+};
+return $1;
+},
+args: [],
+source: "variables\x0a\x0a\x09^ variables ifNil:[self initializeVariables]",
+messageSends: ["ifNil:", "initializeVariables"],
+referencedClasses: []
+}),
+smalltalk.HLInspector);
+
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function (){
+var self=this;
+return "Inspector";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'Inspector'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function (){
+var self=this;
+return (10);
+},
+args: [],
+source: "tabPriority\x0a\x09^ 10",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspector.klass);
+
+
+smalltalk.addClass('HLInspectorDisplay', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@model"];
+},
+args: [],
+source: "model\x0a\x0a\x09^ model",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorDisplay);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+return self},
+args: ["aModel"],
+source: "model: aModel\x0a\x0a\x09model := aModel",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorDisplay);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",["display"]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09\x0a    html div with: 'display'\x0a    ",
+messageSends: ["with:", "div"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorDisplay);
+
+
+
+smalltalk.addClass('HLInspectorModel', smalltalk.Object, ['announcer', 'environment', 'inspectee', 'code', 'variables', 'selection'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@announcer"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeAnnouncer",[]);
+} else {
+$1=self["@announcer"];
+};
+return $1;
+},
+args: [],
+source: "announcer\x0a\x09^ announcer ifNil: [ self initializeAnnouncer ]",
+messageSends: ["ifNil:", "initializeAnnouncer"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_beLocal",
+smalltalk.method({
+selector: "beLocal",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initializeEnvironment",[]);
+return self},
+args: [],
+source: "beLocal\x0a\x0a\x09self initializeEnvironment\x0a",
+messageSends: ["initializeEnvironment"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_beRemoteOn_port_",
+smalltalk.method({
+selector: "beRemoteOn:port:",
+category: 'actions',
+fn: function (anIPAddress,aPort){
+var self=this;
+return self},
+args: ["anIPAddress", "aPort"],
+source: "beRemoteOn: anIPAddress port: aPort\x0a\x0a\x09\x22to-do\x22\x0a    \x0a    \x22environment := HLRemoteEnvironment on: anIPAddress port: aPort\x0a    \x0a    ...kind of stuff\x22\x0a    \x0a",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_code",
+smalltalk.method({
+selector: "code",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@code"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeCode",[]);
+} else {
+$1=self["@code"];
+};
+return $1;
+},
+args: [],
+source: "code\x0a\x09\x22Answers the code model working for this workspace model\x22\x0a\x09^ code ifNil:[self initializeCode]",
+messageSends: ["ifNil:", "initializeCode"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@environment"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeEnvironment",[]);
+} else {
+$1=self["@environment"];
+};
+return $1;
+},
+args: [],
+source: "environment\x0a\x09^ environment ifNil: [ self initializeEnvironment]",
+messageSends: ["ifNil:", "initializeEnvironment"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_environment_",
+smalltalk.method({
+selector: "environment:",
+category: 'accessing',
+fn: function (anEnvironment){
+var self=this;
+self["@environment"]=anEnvironment;
+return self},
+args: ["anEnvironment"],
+source: "environment: anEnvironment\x0a\x09environment := anEnvironment",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeAnnouncer",
+smalltalk.method({
+selector: "initializeAnnouncer",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@announcer"]=smalltalk.send((smalltalk.Announcer || Announcer),"_new",[]);
+$1=self["@announcer"];
+return $1;
+},
+args: [],
+source: "initializeAnnouncer\x0a\x09^ announcer := Announcer new",
+messageSends: ["new"],
+referencedClasses: ["Announcer"]
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeCode",
+smalltalk.method({
+selector: "initializeCode",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@code"]=smalltalk.send((smalltalk.HLCodeModel || HLCodeModel),"_on_",[smalltalk.send(self,"_environment",[])]);
+$1=self["@code"];
+return $1;
+},
+args: [],
+source: "initializeCode\x0a\x0a\x09^ code := HLCodeModel on: self environment",
+messageSends: ["on:", "environment"],
+referencedClasses: ["HLCodeModel"]
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeEnvironment",
+smalltalk.method({
+selector: "initializeEnvironment",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@environment"]=smalltalk.send((smalltalk.HLLocalEnvironment || HLLocalEnvironment),"_new",[]);
+$1=self["@environment"];
+return $1;
+},
+args: [],
+source: "initializeEnvironment\x0a\x09^ environment := HLLocalEnvironment new",
+messageSends: ["new"],
+referencedClasses: ["HLLocalEnvironment"]
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_initializeSelection",
+smalltalk.method({
+selector: "initializeSelection",
+category: 'initialization',
+fn: function (){
+var self=this;
+var $1;
+self["@selection"]=smalltalk.send(self,"_inspectee",[]);
+$1=self["@selection"];
+return $1;
+},
+args: [],
+source: "initializeSelection\x0a\x0a\x09^ selection := self inspectee",
+messageSends: ["inspectee"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_inspectee",
+smalltalk.method({
+selector: "inspectee",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@inspectee"];
+},
+args: [],
+source: "inspectee \x0a\x0a\x09^ inspectee ",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_inspectee_",
+smalltalk.method({
+selector: "inspectee:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+self["@inspectee"]=anObject;
+return self},
+args: ["anObject"],
+source: "inspectee: anObject \x0a\x0a\x09inspectee := anObject\x0a    ",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_onKeyDown_",
+smalltalk.method({
+selector: "onKeyDown:",
+category: 'reactions',
+fn: function (anEvent){
+var self=this;
+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;
+		}
+	};
+;
+return self},
+args: ["anEvent"],
+source: "onKeyDown: anEvent\x0a\x0a\x09<if(anEvent.ctrlKey) {\x0a\x09\x09if(anEvent.keyCode === 80) { //ctrl+p\x0a\x09\x09\x09self._printIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09\x09if(anEvent.keyCode === 68) { //ctrl+d\x0a\x09\x09\x09self._doIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09\x09if(anEvent.keyCode === 73) { //ctrl+i\x0a\x09\x09\x09self._inspectIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09}>",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_selection",
+smalltalk.method({
+selector: "selection",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@selection"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_initializeSelection",[]);
+} else {
+$1=self["@selection"];
+};
+return $1;
+},
+args: [],
+source: "selection\x0a\x0a\x09^ selection ifNil:[self initializeSelection] ",
+messageSends: ["ifNil:", "initializeSelection"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_selection_",
+smalltalk.method({
+selector: "selection:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+self["@selection"]=anObject;
+return self},
+args: ["anObject"],
+source: "selection: anObject\x0a\x0a\x09selection := anObject",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+smalltalk.addMethod(
+"_subscribe_",
+smalltalk.method({
+selector: "subscribe:",
+category: 'actions',
+fn: function (aWidget){
+var self=this;
+smalltalk.send(aWidget,"_subscribeTo_",[smalltalk.send(self,"_announcer",[])]);
+return self},
+args: ["aWidget"],
+source: "subscribe: aWidget\x0a\x09aWidget subscribeTo: self announcer",
+messageSends: ["subscribeTo:", "announcer"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'actions',
+fn: function (anEnvironment){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_environment_",[anEnvironment]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["anEnvironment"],
+source: "on: anEnvironment\x0a\x0a\x09^ self new\x0a    \x09environment: anEnvironment;\x0a        yourself",
+messageSends: ["environment:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorModel.klass);
+
+
+smalltalk.addClass('HLInspectorVariables', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Inspector');
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@model"];
+},
+args: [],
+source: "model\x0a\x09\x0a    ^ model\x0a        ",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorVariables);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+return self},
+args: ["aModel"],
+source: "model: aModel\x0a\x09\x0a    model := aModel\x0a        ",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLInspectorVariables);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",["variables"]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09\x0a    html div with: 'variables'\x0a    ",
+messageSends: ["with:", "div"],
+referencedClasses: []
+}),
+smalltalk.HLInspectorVariables);
+
+
+

+ 65 - 10
js/Helios-Workspace.deploy.js

@@ -208,6 +208,20 @@ return $1;
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_doIt",
+smalltalk.method({
+selector: "doIt",
+fn: function (){
+var self=this;
+var result;
+result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLDoItRequested || HLDoItRequested),"_on_",[self["@model"]])]);
+return result;
+}
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_doItReaction",
 smalltalk.method({
@@ -273,6 +287,38 @@ return $1;
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_inspectIt",
+smalltalk.method({
+selector: "inspectIt",
+fn: function (){
+var self=this;
+var result;
+var newInspector;
+result=smalltalk.send(self,"_doIt",[]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLInspectItRequested || HLInspectItRequested),"_on_",[self["@model"]])]);
+newInspector=smalltalk.send(self,"_makeInspectorOn_",[result]);
+smalltalk.send(newInspector,"_open",[]);
+return self}
+}),
+smalltalk.HLCodeWidget);
+
+smalltalk.addMethod(
+"_makeInspectorOn_",
+smalltalk.method({
+selector: "makeInspectorOn:",
+fn: function (anObject){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspector || HLInspector),"_new",[]);
+smalltalk.send($2,"_inspect_",[self]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_model",
 smalltalk.method({
@@ -314,11 +360,8 @@ smalltalk.method({
 selector: "onDoIt",
 fn: function (){
 var self=this;
-var result;
-result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
-smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLDoItRequested || HLDoItRequested),"_on_",[self["@model"]])]);
-return result;
-}
+smalltalk.send(self,"_doIt",[]);
+return self}
 }),
 smalltalk.HLCodeWidget);
 
@@ -328,6 +371,7 @@ smalltalk.method({
 selector: "onInspectIt",
 fn: function (){
 var self=this;
+smalltalk.send(self,"_inspectIt",[]);
 return self}
 }),
 smalltalk.HLCodeWidget);
@@ -366,11 +410,7 @@ smalltalk.method({
 selector: "onPrintIt",
 fn: function (){
 var self=this;
-var result;
-result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
-smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPrintItRequested || HLPrintItRequested),"_on_",[self["@model"]])]);
-smalltalk.send(self,"_print_",[smalltalk.send(result,"_printString",[])]);
-smalltalk.send(self,"_focus",[]);
+smalltalk.send(self,"_printIt",[]);
 return self}
 }),
 smalltalk.HLCodeWidget);
@@ -396,6 +436,21 @@ return self}
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_printIt",
+smalltalk.method({
+selector: "printIt",
+fn: function (){
+var self=this;
+var result;
+result=smalltalk.send(self,"_doIt",[]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPrintItRequested || HLPrintItRequested),"_on_",[self["@model"]])]);
+smalltalk.send(self,"_print_",[smalltalk.send(result,"_printString",[])]);
+smalltalk.send(self,"_focus",[]);
+return self}
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_receiver",
 smalltalk.method({

+ 93 - 18
js/Helios-Workspace.js

@@ -283,6 +283,25 @@ referencedClasses: []
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_doIt",
+smalltalk.method({
+selector: "doIt",
+category: 'actions',
+fn: function (){
+var self=this;
+var result;
+result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLDoItRequested || HLDoItRequested),"_on_",[self["@model"]])]);
+return result;
+},
+args: [],
+source: "doIt\x0a\x09| result |\x0a\x0a\x09result:=  model \x0a    \x09\x09\x09\x09doIt: self currentLineOrSelection \x0a        \x09\x09\x09do: self doItReaction.\x0a        \x0a\x09self announcer announce: (HLDoItRequested on: model).\x0a\x09^ result        ",
+messageSends: ["doIt:do:", "currentLineOrSelection", "doItReaction", "announce:", "on:", "announcer"],
+referencedClasses: ["HLDoItRequested"]
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_doItReaction",
 smalltalk.method({
@@ -373,6 +392,48 @@ referencedClasses: []
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_inspectIt",
+smalltalk.method({
+selector: "inspectIt",
+category: 'actions',
+fn: function (){
+var self=this;
+var result;
+var newInspector;
+result=smalltalk.send(self,"_doIt",[]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLInspectItRequested || HLInspectItRequested),"_on_",[self["@model"]])]);
+newInspector=smalltalk.send(self,"_makeInspectorOn_",[result]);
+smalltalk.send(newInspector,"_open",[]);
+return self},
+args: [],
+source: "inspectIt\x0a\x0a\x09| result newInspector |\x0a\x0a\x09result:=  self doIt.\x0a       \x0a\x09self announcer announce: (HLInspectItRequested on: model).\x0a\x09newInspector := self makeInspectorOn: result.\x0a\x09newInspector open",
+messageSends: ["doIt", "announce:", "on:", "announcer", "makeInspectorOn:", "open"],
+referencedClasses: ["HLInspectItRequested"]
+}),
+smalltalk.HLCodeWidget);
+
+smalltalk.addMethod(
+"_makeInspectorOn_",
+smalltalk.method({
+selector: "makeInspectorOn:",
+category: 'actions',
+fn: function (anObject){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send((smalltalk.HLInspector || HLInspector),"_new",[]);
+smalltalk.send($2,"_inspect_",[self]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["anObject"],
+source: "makeInspectorOn: anObject\x0a\x0a\x09^ HLInspector new \x0a\x09\x09inspect: self;\x0a\x09\x09yourself",
+messageSends: ["inspect:", "new", "yourself"],
+referencedClasses: ["HLInspector"]
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_model",
 smalltalk.method({
@@ -430,15 +491,12 @@ selector: "onDoIt",
 category: 'reactions',
 fn: function (){
 var self=this;
-var result;
-result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
-smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLDoItRequested || HLDoItRequested),"_on_",[self["@model"]])]);
-return result;
-},
+smalltalk.send(self,"_doIt",[]);
+return self},
 args: [],
-source: "onDoIt\x0a\x09| result |\x0a\x0a\x09result:=  model \x0a    \x09\x09\x09\x09doIt: self currentLineOrSelection \x0a        \x09\x09\x09do: self doItReaction.\x0a        \x0a\x09self announcer announce: (HLDoItRequested on: model).\x0a\x09^ result        ",
-messageSends: ["doIt:do:", "currentLineOrSelection", "doItReaction", "announce:", "on:", "announcer"],
-referencedClasses: ["HLDoItRequested"]
+source: "onDoIt\x0a\x09\x0a    self doIt",
+messageSends: ["doIt"],
+referencedClasses: []
 }),
 smalltalk.HLCodeWidget);
 
@@ -449,10 +507,11 @@ selector: "onInspectIt",
 category: 'reactions',
 fn: function (){
 var self=this;
+smalltalk.send(self,"_inspectIt",[]);
 return self},
 args: [],
-source: "onInspectIt",
-messageSends: [],
+source: "onInspectIt\x0a\x0a\x09self inspectIt",
+messageSends: ["inspectIt"],
 referencedClasses: []
 }),
 smalltalk.HLCodeWidget);
@@ -497,16 +556,12 @@ selector: "onPrintIt",
 category: 'reactions',
 fn: function (){
 var self=this;
-var result;
-result=smalltalk.send(self["@model"],"_doIt_do_",[smalltalk.send(self,"_currentLineOrSelection",[]),smalltalk.send(self,"_doItReaction",[])]);
-smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPrintItRequested || HLPrintItRequested),"_on_",[self["@model"]])]);
-smalltalk.send(self,"_print_",[smalltalk.send(result,"_printString",[])]);
-smalltalk.send(self,"_focus",[]);
+smalltalk.send(self,"_printIt",[]);
 return self},
 args: [],
-source: "onPrintIt\x0a\x0a\x09| result |\x0a\x0a\x09result:=  model \x0a    \x09\x09\x09\x09doIt: self currentLineOrSelection \x0a        \x09\x09\x09do: self doItReaction.\x0a        \x0a\x09self announcer announce: (HLPrintItRequested on: model).\x0a\x0a    self print: result printString.\x0a\x09self focus.",
-messageSends: ["doIt:do:", "currentLineOrSelection", "doItReaction", "announce:", "on:", "announcer", "print:", "printString", "focus"],
-referencedClasses: ["HLPrintItRequested"]
+source: "onPrintIt\x0a\x0a\x09self printIt",
+messageSends: ["printIt"],
+referencedClasses: []
 }),
 smalltalk.HLCodeWidget);
 
@@ -536,6 +591,26 @@ referencedClasses: ["HashedCollection"]
 }),
 smalltalk.HLCodeWidget);
 
+smalltalk.addMethod(
+"_printIt",
+smalltalk.method({
+selector: "printIt",
+category: 'actions',
+fn: function (){
+var self=this;
+var result;
+result=smalltalk.send(self,"_doIt",[]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPrintItRequested || HLPrintItRequested),"_on_",[self["@model"]])]);
+smalltalk.send(self,"_print_",[smalltalk.send(result,"_printString",[])]);
+smalltalk.send(self,"_focus",[]);
+return self},
+args: [],
+source: "printIt\x0a\x0a\x09| result |\x0a\x0a\x09result:=  self doIt.\x0a       \x0a\x09self announcer announce: (HLPrintItRequested on: model).\x0a\x0a    self print: result printString.\x0a\x09self focus.",
+messageSends: ["doIt", "announce:", "on:", "announcer", "print:", "printString", "focus"],
+referencedClasses: ["HLPrintItRequested"]
+}),
+smalltalk.HLCodeWidget);
+
 smalltalk.addMethod(
 "_receiver",
 smalltalk.method({

+ 42 - 2
st/Helios-Core.st

@@ -40,11 +40,11 @@ eval: someCode on: aReceiver
 	^(compiler eval: (compiler compile: 'doIt ^[', someCode, '] value' forClass: DoIt)) fn applyTo: aReceiver arguments: #()
 ! !
 
-HLEnvironment subclass: #HLRemoveEnvironment
+HLEnvironment subclass: #HLRemoteEnvironment
 	instanceVariableNames: ''
 	package: 'Helios-Core'!
 
-!HLRemoveEnvironment methodsFor: 'accessing'!
+!HLRemoteEnvironment methodsFor: 'accessing'!
 
 packages
 	"Answer the remote environment's packages"
@@ -56,6 +56,46 @@ packages
     received in a syncrhonous fashion. Everything network is asyc, so you *are going to deal with callbacks* here"
 ! !
 
+!HLRemoteEnvironment methodsFor: 'actions'!
+
+eval: someCode on: aReceiver
+
+	"Note for future self and friends:
+    whatever way this compilation happens on the other side, 
+    it should return a proxy to the remote resulting object"
+    
+    self notYetImplemented
+! !
+
+Object subclass: #HLRemoteObject
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+!HLRemoteObject commentStamp!
+This is a local proxy to a remote object.
+Tipically useful for evaluating and inspecting and interacting with instances of a remote VM.!
+
+!HLRemoteObject methodsFor: 'actions'!
+
+doesNotUnderstand: aMessage
+
+	"to-do
+
+	aham, blah blah
+
+	super doesNotUnderstand: aMessage"
+!
+
+inspectOn: anInspector
+
+	"to-do"
+
+	"this is a source of so much fun..."
+!
+
+printString
+	^ 'this is a remote object'
+! !
+
 Widget subclass: #HLSourceArea
 	instanceVariableNames: 'editor textarea div receiver onDoIt'
 	package: 'Helios-Core'!

+ 323 - 0
st/Helios-Inspector.st

@@ -0,0 +1,323 @@
+Smalltalk current createPackage: 'Helios-Inspector' properties: #{}!
+HLWidget subclass: #HLInspector
+	instanceVariableNames: 'model variables display code'
+	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
+!
+
+model
+
+	^ model ifNil:[self initializeModel]
+!
+
+model: aModel
+
+	model := aModel.
+     
+    self code model: aModel code.
+    self observeCode.
+!
+
+tabLabel
+	
+    ^ model inspectee printString
+!
+
+variables
+
+	^ variables ifNil:[self initializeVariables]
+! !
+
+!HLInspector methodsFor: 'actions'!
+
+ensureModel
+	"Sends the #model: initialization message if needed."
+
+	model ifNil:[
+		self model: self model]
+!
+
+inspect: anObject
+
+	self model inspectee: anObject
+!
+
+makeCode
+
+	^ HLCodeWidget new
+    	model: model code;
+		doItReaction: [self refresh];
+        yourself.
+!
+
+makeDisplay
+
+	^ HLInspectorDisplay new
+    	model: self model;
+        yourself
+!
+
+makeVariables
+
+	^ HLInspectorVariables new
+    	model: self model;
+        yourself
+!
+
+observeCode
+!
+
+open
+
+	HLManager current addTab: (HLTab on: self labelled: self tabLabel)
+!
+
+refresh
+
+	self 
+		inspect: self inspectee; 
+		updateVariablesList;
+		updateValueTextarea
+! !
+
+!HLInspector methodsFor: 'initialization'!
+
+initializeCode
+
+	^ code := self makeCode.
+!
+
+initializeDisplay
+	^ display := self makeDisplay
+!
+
+initializeModel
+
+	^ model := HLInspectorModel new
+!
+
+initializeVariables
+	^ variables := self makeVariables
+! !
+
+!HLInspector methodsFor: 'reactions'!
+
+onDoIt
+!
+
+onInspectIt
+!
+
+onPrintIt
+! !
+
+!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: 'display'
+! !
+
+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
+!
+
+selection
+
+	^ selection ifNil:[self initializeSelection]
+!
+
+selection: anObject
+
+	selection := anObject
+! !
+
+!HLInspectorModel methodsFor: 'actions'!
+
+beLocal
+
+	self initializeEnvironment
+!
+
+beRemoteOn: anIPAddress port: aPort
+
+	"to-do"
+    
+    "environment := HLRemoteEnvironment on: anIPAddress port: aPort
+    
+    ...kind of stuff"
+!
+
+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 := self inspectee
+! !
+
+!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: 'model'
+	package: 'Helios-Inspector'!
+
+!HLInspectorVariables methodsFor: 'accessing'!
+
+model
+	
+    ^ model
+!
+
+model: aModel
+	
+    model := aModel
+! !
+
+!HLInspectorVariables methodsFor: 'rendering'!
+
+renderContentOn: html
+	
+    html div with: 'variables'
+! !
+

+ 46 - 18
st/Helios-Workspace.st

@@ -149,6 +149,17 @@ clear
       self val: ''
 !
 
+doIt
+	| result |
+
+	result:=  model 
+    				doIt: self currentLineOrSelection 
+        			do: self doItReaction.
+        
+	self announcer announce: (HLDoItRequested on: model).
+	^ result
+!
+
 editor
 	^editor
 !
@@ -157,6 +168,24 @@ focus
       self editor focus
 !
 
+inspectIt
+
+	| result newInspector |
+
+	result:=  self doIt.
+       
+	self announcer announce: (HLInspectItRequested on: model).
+	newInspector := self makeInspectorOn: result.
+	newInspector open
+!
+
+makeInspectorOn: anObject
+
+	^ HLInspector new 
+		inspect: self;
+		yourself
+!
+
 observeWrapper
 
     wrapper onKeyDown: [:e | self onKeyDown: e]
@@ -175,6 +204,18 @@ print: aString
 	editor setSelection: stop end: start
 !
 
+printIt
+
+	| result |
+
+	result:=  self doIt.
+       
+	self announcer announce: (HLPrintItRequested on: model).
+
+    self print: result printString.
+	self focus.
+!
+
 setEditorOn: aTextarea
 	<self['@editor'] = CodeMirror.fromTextArea(aTextarea, {
 		theme: 'amber',
@@ -195,17 +236,13 @@ initializeDoItReaction
 !HLCodeWidget methodsFor: 'reactions'!
 
 onDoIt
-	| result |
-
-	result:=  model 
-    				doIt: self currentLineOrSelection 
-        			do: self doItReaction.
-        
-	self announcer announce: (HLDoItRequested on: model).
-	^ result
+	
+    self doIt
 !
 
 onInspectIt
+
+	self inspectIt
 !
 
 onKeyDown: anEvent
@@ -231,16 +268,7 @@ onKeyDown: anEvent
 
 onPrintIt
 
-	| result |
-
-	result:=  model 
-    				doIt: self currentLineOrSelection 
-        			do: self doItReaction.
-        
-	self announcer announce: (HLPrintItRequested on: model).
-
-    self print: result printString.
-	self focus.
+	self printIt
 ! !
 
 !HLCodeWidget methodsFor: 'rendering'!