summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmoenig <jens@moenig.org>2013-06-25 09:46:21 +0200
committerjmoenig <jens@moenig.org>2013-06-25 09:46:21 +0200
commit9c6b2a3e6f152d8f2cc67f450b267ddca358a788 (patch)
tree27d7def94e2bd7cd7ed5de6465ff8a80c65ba565
parent416d92d78b4e72fc9c3ccbc41c1ef98874d7e500 (diff)
downloadsnap-byow-9c6b2a3e6f152d8f2cc67f450b267ddca358a788.tar.gz
snap-byow-9c6b2a3e6f152d8f2cc67f450b267ddca358a788.zip
code mapping: dialog input is now multi-line monospaced
-rw-r--r--blocks.js8
-rwxr-xr-xhistory.txt4
-rw-r--r--widgets.js63
3 files changed, 69 insertions, 6 deletions
diff --git a/blocks.js b/blocks.js
index 46a7e7e..ce2a714 100644
--- a/blocks.js
+++ b/blocks.js
@@ -155,7 +155,7 @@ DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph*/
// Global stuff ////////////////////////////////////////////////////////
-modules.blocks = '2013-June-24';
+modules.blocks = '2013-June-25';
var SyntaxElementMorph;
var BlockMorph;
@@ -2201,7 +2201,7 @@ BlockMorph.prototype.mapToCode = function () {
}
},
this
- ).prompt(
+ ).promptCode(
'Code mapping',
key === 'evaluateCustomBlock' ? this.definition.codeMapping || ''
: StageMorph.prototype.codeMappings[key] || '',
@@ -6388,7 +6388,7 @@ InputSlotMorph.prototype.mapToCode = function () {
StageMorph.prototype.codeMappings.string = code;
},
this
- ).prompt(
+ ).promptCode(
'Code mapping - String <#1>',
StageMorph.prototype.codeMappings.string || '',
this.world()
@@ -8534,7 +8534,7 @@ MultiArgMorph.prototype.mapToCode = function (key, label) {
StageMorph.prototype.codeMappings[key] = code;
},
this
- ).prompt(
+ ).promptCode(
'Code mapping - ' + label,
StageMorph.prototype.codeMappings[key] || '',
this.world()
diff --git a/history.txt b/history.txt
index 77f996c..be07609 100755
--- a/history.txt
+++ b/history.txt
@@ -1757,3 +1757,7 @@ ______
130624
------
* Objects, Blocks: pretty printing for mapped code, now supporting Python mappings
+
+130625
+------
+* Widgets, Blocks: code mapping dialog input is now multi-line monospaced
diff --git a/widgets.js b/widgets.js
index 7fc7978..7d12549 100644
--- a/widgets.js
+++ b/widgets.js
@@ -71,9 +71,10 @@
/*global TriggerMorph, modules, Color, Point, BoxMorph, radians,
newCanvas, StringMorph, Morph, TextMorph, nop, detect, StringFieldMorph,
HTMLCanvasElement, fontHeight, SymbolMorph, localize, SpeechBubbleMorph,
-ArrowMorph, MenuMorph, isString, isNil, SliderMorph, MorphicPreferences*/
+ArrowMorph, MenuMorph, isString, isNil, SliderMorph, MorphicPreferences,
+ScrollFrameMorph*/
-modules.widgets = '2013-May-16';
+modules.widgets = '2013-June-25';
var PushButtonMorph;
var ToggleButtonMorph;
@@ -1675,6 +1676,64 @@ DialogBoxMorph.prototype.prompt = function (
this.popUp(world);
};
+DialogBoxMorph.prototype.promptCode = function (
+ title,
+ defaultString,
+ world,
+ pic
+) {
+ var frame = new ScrollFrameMorph(),
+ text = new TextMorph(defaultString || ''),
+ size = pic ? Math.max(pic.width, 400) : 400;
+
+ this.getInput = function () {
+ return text.text;
+ };
+
+ frame.padding = 6;
+ frame.setWidth(size);
+ frame.acceptsDrops = false;
+ frame.contents.acceptsDrops = false;
+
+ text.fontName = 'monospace';
+ text.fontStyle = 'monospace';
+ text.fontSize = 11;
+ text.setPosition(frame.topLeft().add(frame.padding));
+ text.enableSelecting();
+ text.isEditable = true;
+
+ frame.setHeight(size / 4);
+ frame.fixLayout = nop;
+ frame.edge = InputFieldMorph.prototype.edge;
+ frame.fontSize = InputFieldMorph.prototype.fontSize;
+ frame.typeInPadding = InputFieldMorph.prototype.typeInPadding;
+ frame.contrast = InputFieldMorph.prototype.contrast;
+ frame.drawNew = InputFieldMorph.prototype.drawNew;
+ frame.drawRectBorder = InputFieldMorph.prototype.drawRectBorder;
+
+ frame.addContents(text);
+ text.drawNew();
+
+ if (pic) {this.setPicture(pic); }
+
+ this.labelString = title;
+ this.createLabel();
+
+ if (!this.key) {
+ this.key = 'promptCode' + title + defaultString;
+ }
+
+ this.addBody(frame);
+ frame.drawNew();
+ this.addButton('ok', 'OK');
+ this.addButton('cancel', 'Cancel');
+ this.fixLayout();
+ this.drawNew();
+ this.fixLayout();
+ this.popUp(world);
+ text.edit();
+};
+
DialogBoxMorph.prototype.promptCredentials = function (
title,
purpose,