From 9c6b2a3e6f152d8f2cc67f450b267ddca358a788 Mon Sep 17 00:00:00 2001 From: jmoenig Date: Tue, 25 Jun 2013 09:46:21 +0200 Subject: [PATCH] code mapping: dialog input is now multi-line monospaced --- blocks.js | 8 +++---- history.txt | 4 ++++ widgets.js | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/blocks.js b/blocks.js index 46a7e7e3..ce2a7141 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 77f996c6..be076094 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 7fc79787..7d125491 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,