Explorar el Código

Fixed the Workspace keyboard shortcuts and the object inspector

Nicolas Petton hace 14 años
padre
commit
b1958fada1
Se han modificado 2 ficheros con 120 adiciones y 28 borrados
  1. 52 8
      js/IDE.js
  2. 68 20
      js/Kernel.js

+ 52 - 8
js/IDE.js

@@ -470,10 +470,10 @@ selector: 'handleKeyDown:',
 category: 'actions',
 fn: function (anEvent) {
     var self = this;
-    return function () {if (anEvent.ctrlKey) {if (anEvent.keyCode === 68) {self._printIt();return false;}if (anEvent.keyCode === 80) {self._doIt();return false;}}}();
+    return function () {if (anEvent.ctrlKey) {if (anEvent.keyCode === 80) {self._printIt();anEvent.preventDefault();return false;}if (anEvent.keyCode === 68) {self._doIt();anEvent.preventDefault();return false;}if (anEvent.keyCode === 73) {self._inspectIt();anEvent.preventDefault();return false;}}}();
     return self;
 },
-source: unescape('handleKeyDown%3A%20anEvent%0A%20%20%20%20%5E%7B%27if%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2068%29%20%7B%20//ctrl+p%0A%09%09%09self._printIt%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2080%29%20%7B%20//ctrl+d%0A%09%09%09self._doIt%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%27%7D%0A')}),
+source: unescape('handleKeyDown%3A%20anEvent%0A%20%20%20%20%5E%7B%27if%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2080%29%20%7B%20//ctrl+p%0A%09%09%09self._printIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2068%29%20%7B%20//ctrl+d%0A%09%09%09self._doIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2073%29%20%7B%20//ctrl+i%0A%09%09%09self._inspectIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%27%7D%0A')}),
 smalltalk.Workspace);
 
 smalltalk.addMethod(
@@ -1517,7 +1517,7 @@ source: unescape('commitPath%0A%09%5E%27js%27')}),
 smalltalk.Browser.klass);
 
 
-smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'selectedVariable', 'variablesList', 'valueTextarea', 'workspaceTextarea'], 'IDE');
+smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'inspectStack', 'selectedVariable', 'variablesList', 'valueTextarea', 'workspaceTextarea', 'diveButton'], 'IDE');
 smalltalk.addMethod(
 '_label',
 smalltalk.method({
@@ -1548,13 +1548,15 @@ smalltalk.addMethod(
 '_inspect_',
 smalltalk.method({
 selector: 'inspect:',
-category: 'accessing',
+category: 'actions',
 fn: function (anObject) {
     var self = this;
+    self['@inspectStack']._add_(anObject);
+    self['@variables'] = [];
     anObject._inspectOn_(self);
     return self;
 },
-source: unescape('inspect%3A%20anObject%0A%09anObject%20inspectOn%3A%20self')}),
+source: unescape('inspect%3A%20anObject%0A%09inspectStack%20add%3A%20anObject.%0A%09variables%20%3A%3D%20%23%28%29.%0A%09anObject%20inspectOn%3A%20self')}),
 smalltalk.Inspector);
 
 smalltalk.addMethod(
@@ -1566,9 +1568,10 @@ fn: function () {
     var self = this;
     self.klass.superclass.fn.prototype._initialize.apply(self, []);
     self['@variables'] = [];
+    self['@inspectStack'] = [];
     return self;
 },
-source: unescape('initialize%0A%09super%20initialize.%0A%09variables%20%3A%3D%20%23%28%29')}),
+source: unescape('initialize%0A%09super%20initialize.%0A%09variables%20%3A%3D%20%23%28%29.%0A%09inspectStack%20%3A%3D%20%23%28%29')}),
 smalltalk.Inspector);
 
 smalltalk.addMethod(
@@ -1696,10 +1699,10 @@ category: 'updating',
 fn: function (aString) {
     var self = this;
     self._selectedVariable_(aString);
-    (function ($rec) {$rec._updateVariablesList();return $rec._updateValueTextarea();}(self));
+    (function ($rec) {$rec._updateVariablesList();$rec._updateValueTextarea();return $rec._updateButtons();}(self));
     return self;
 },
-source: unescape('selectVariable%3A%20aString%0A%09self%20selectedVariable%3A%20aString.%0A%09self%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea')}),
+source: unescape('selectVariable%3A%20aString%0A%09self%20selectedVariable%3A%20aString.%0A%09self%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea%3B%0A%09%09updateButtons')}),
 smalltalk.Inspector);
 
 smalltalk.addMethod(
@@ -1715,6 +1718,47 @@ fn: function () {
 source: unescape('updateValueTextarea%0A%09valueTextarea%20asJQuery%20val%3A%20%28self%20selectedVariable%20isNil%0A%09%09ifTrue%3A%20%5B%27%27%5D%0A%09%09ifFalse%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20printString%5D%29')}),
 smalltalk.Inspector);
 
+smalltalk.addMethod(
+'_renderButtonsOn_',
+smalltalk.method({
+selector: 'renderButtonsOn:',
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    (function ($rec) {$rec._with_("Refresh");return $rec._onClick_(function () {return self._refresh();});}(html._button()));
+    self['@diveButton'] = function ($rec) {$rec._with_("Dive");return $rec._onClick_(function () {return self._dive();});}(html._button());
+    self._updateButtons();
+    return self;
+},
+source: unescape('renderButtonsOn%3A%20html%0A%09html%20button%0A%09%09with%3A%20%27Refresh%27%3B%0A%09%09onClick%3A%20%5Bself%20refresh%5D.%0A%09diveButton%20%3A%3D%20html%20button%20%0A%09%09with%3A%20%27Dive%27%3B%20%0A%09%09onClick%3A%20%5Bself%20dive%5D.%0A%09self%20updateButtons%0A%09')}),
+smalltalk.Inspector);
+
+smalltalk.addMethod(
+'_dive',
+smalltalk.method({
+selector: 'dive',
+category: 'actions',
+fn: function () {
+    var self = this;
+    self._variables()._at_(self._selectedVariable())._inspect();
+    return self;
+},
+source: unescape('dive%0A%09%28self%20variables%20at%3A%20self%20selectedVariable%29%20inspect')}),
+smalltalk.Inspector);
+
+smalltalk.addMethod(
+'_updateButtons',
+smalltalk.method({
+selector: 'updateButtons',
+category: 'updating',
+fn: function () {
+    var self = this;
+    self._selectedVariable()._notNil()._and_(function () {return self._variables()._at_(self._selectedVariable())._notNil();})._ifFalse_ifTrue_(function () {return self['@diveButton']._at_put_("disabled", true);}, function () {return self['@diveButton']._removeAt_("disabled");});
+    return self;
+},
+source: unescape('updateButtons%0A%09%28self%20selectedVariable%20notNil%20and%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20notNil%5D%29%0A%09%09ifFalse%3A%20%5BdiveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D%20%0A%09%09ifTrue%3A%20%5BdiveButton%20removeAt%3A%20%27disabled%27%5D%0A%09%09')}),
+smalltalk.Inspector);
+
 
 smalltalk.addMethod(
 '_on_',

+ 68 - 20
js/Kernel.js

@@ -2370,6 +2370,36 @@ fn: function () {
 source: unescape('removeLast%0A%09self%20remove%3A%20self%20last')}),
 smalltalk.Collection);
 
+smalltalk.addMethod(
+'_inspectOn_',
+smalltalk.method({
+selector: 'inspectOn:',
+category: '*IDE',
+fn: function (anInspector) {
+    var self = this;
+    var variables = nil;
+    variables = smalltalk.Dictionary._new();
+    variables._at_put_(unescape("%23self"), self);
+    self._withIndexDo_(function (each, i) {return variables._at_put_(i, each);});
+    (function ($rec) {$rec._setLabel_(self._printString());return $rec._setVariables_(variables);}(anInspector));
+    return self;
+},
+source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%09%09variables%20at%3A%20i%20put%3A%20each%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables')}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_withIndexDo_',
+smalltalk.method({
+selector: 'withIndexDo:',
+category: 'enumerating',
+fn: function (aBlock) {
+    var self = this;
+    (function () {for (var i = 0; i < self.length; i++) {aBlock(self[i], i + 1);}}());
+    return self;
+},
+source: unescape('withIndexDo%3A%20aBlock%0A%09%7B%27for%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%2C%20i+1%29%3B%7D%27%7D%0A')}),
+smalltalk.Collection);
+
 
 smalltalk.addMethod(
 '_streamClass',
@@ -3198,10 +3228,11 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: 'sort',
 category: 'enumerating',
-fn: function (){
-var self=this;
-return self._basicPerform_("sort");
-return self;},
+fn: function () {
+    var self = this;
+    return self._basicPerform_("sort");
+    return self;
+},
 source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27%0A')}),
 smalltalk.Array);
 
@@ -3210,14 +3241,11 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: 'sort:',
 category: 'enumerating',
-fn: function (aBlock){
-var self=this;
-return (function(){
-		return self.sort(function(a, b) {
-			if(aBlock(a,b)) {return 1} else {return -1}
-		})
-	})();
-return self;},
+fn: function (aBlock) {
+    var self = this;
+    return function () {return self.sort(function (a, b) {if (aBlock(a, b)) {return 1;} else {return - 1;}});}();
+    return self;
+},
 source: unescape('sort%3A%20aBlock%0A%09%5E%7B%27%0A%09%09return%20self.sort%28function%28a%2C%20b%29%20%7B%0A%09%09%09if%28aBlock%28a%2Cb%29%29%20%7Breturn%201%7D%20else%20%7Breturn%20-1%7D%0A%09%09%7D%29%0A%09%27%7D')}),
 smalltalk.Array);
 
@@ -3239,10 +3267,11 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: 'sorted',
 category: 'enumerating',
-fn: function (){
-var self=this;
-return self._copy()._sort();
-return self;},
+fn: function () {
+    var self = this;
+    return self._copy()._sort();
+    return self;
+},
 source: unescape('sorted%0A%09%5Eself%20copy%20sort')}),
 smalltalk.Array);
 
@@ -3251,10 +3280,11 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: 'sorted:',
 category: 'enumerating',
-fn: function (aBlock){
-var self=this;
-return self._copy()._sorted_(aBlock);
-return self;},
+fn: function (aBlock) {
+    var self = this;
+    return self._copy()._sorted_(aBlock);
+    return self;
+},
 source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sorted%3A%20aBlock')}),
 smalltalk.Array);
 
@@ -3746,6 +3776,24 @@ fn: function (aKey) {
 source: unescape('removeKey%3A%20aKey%0A%20%20%20%20keys%20remove%3A%20aKey%0A')}),
 smalltalk.Dictionary);
 
+smalltalk.addMethod(
+'_inspectOn_',
+smalltalk.method({
+selector: 'inspectOn:',
+category: '*IDE',
+fn: function (anInspector) {
+    var self = this;
+    var variables = nil;
+    variables = smalltalk.Dictionary._new();
+    variables._at_put_(unescape("%23self"), self);
+    variables._at_put_(unescape("%23keys"), self._keys());
+    self._keysAndValuesDo_(function (key, value) {return variables._at_put_(key, value);});
+    (function ($rec) {$rec._setLabel_(self._printString());return $rec._setVariables_(variables);}(anInspector));
+    return self;
+},
+source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23keys%27%20put%3A%20self%20keys.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09variables%20at%3A%20key%20put%3A%20value%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables')}),
+smalltalk.Dictionary);
+
 
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel');