diff options
| author | jmoenig <jens@moenig.org> | 2013-07-30 13:48:12 +0200 |
|---|---|---|
| committer | jmoenig <jens@moenig.org> | 2013-07-30 13:48:12 +0200 |
| commit | 15914663173d092dba5498a693c921d94e1aa562 (patch) | |
| tree | f7afd57f52544775d4ffd7dd8591a6bc0b64d9a2 | |
| parent | 20c1d4d14f3dfb6a50d6d1be3dc47a4ca9cf5921 (diff) | |
| download | snap-15914663173d092dba5498a693c921d94e1aa562.tar.gz snap-15914663173d092dba5498a693c921d94e1aa562.zip | |
PAUSE primitive command block
| -rw-r--r-- | blocks.js | 10 | ||||
| -rwxr-xr-x | history.txt | 2 | ||||
| -rw-r--r-- | objects.js | 19 | ||||
| -rw-r--r-- | threads.js | 20 |
4 files changed, 46 insertions, 5 deletions
@@ -1196,6 +1196,16 @@ SyntaxElementMorph.prototype.labelPart = function (spec) { new Point() : this.embossing; part.drawNew(); break; + case '%pause': + part = new SymbolMorph('pause'); + part.size = this.fontSize; + part.color = new Color(160, 80, 0); + part.isProtectedLabel = true; // doesn't participate in zebraing + part.shadowColor = this.color.darker(this.labelContrast); + part.shadowOffset = MorphicPreferences.isFlat ? + new Point() : this.embossing; + part.drawNew(); + break; default: // nop(); } diff --git a/history.txt b/history.txt index 593c1cd..bd9b0fc 100755 --- a/history.txt +++ b/history.txt @@ -1827,4 +1827,4 @@ ______ 130730 ------ * Blocks: Made it harder to drop reporters on the variadic input per se (as opposed to into one of its slots) in (default) "prefer empty slot drops" setting - +* Blocks, Threads, Objects: PAUSE primitive command block @@ -123,7 +123,7 @@ PrototypeHatBlockMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.objects = '2013-July-15'; +modules.objects = '2013-July-30'; var SpriteMorph; var StageMorph; @@ -662,6 +662,14 @@ SpriteMorph.prototype.initBlocks = function () { spec: 'delete this clone' }, + // Debugging - pausing + + doPauseAll: { + type: 'command', + category: 'control', + spec: 'pause all %pause' + }, + // Sensing reportTouchingObject: { @@ -1613,6 +1621,8 @@ SpriteMorph.prototype.blockTemplates = function (category) { blocks.push(block('receiveOnClone')); blocks.push(block('createClone')); blocks.push(block('removeClone')); + blocks.push('-'); + blocks.push(block('doPauseAll')); } else if (cat === 'sensing') { @@ -3701,7 +3711,10 @@ StageMorph.prototype.fireStopAllEvent = function () { }); this.removeAllClones(); if (ide) { - ide.controlBar.pauseButton.refresh(); + ide.nextSteps([ + nop, + function () {ide.controlBar.pauseButton.refresh(); } + ]); } }; @@ -3878,6 +3891,8 @@ StageMorph.prototype.blockTemplates = function (category) { blocks.push(block('reportCallCC')); blocks.push('-'); blocks.push(block('createClone')); + blocks.push('-'); + blocks.push(block('doPauseAll')); } else if (cat === 'sensing') { @@ -83,7 +83,7 @@ ArgLabelMorph, localize, XML_Element, hex_sha512*/ // Global stuff //////////////////////////////////////////////////////// -modules.threads = '2013-July-15'; +modules.threads = '2013-July-30'; var ThreadManager; var Process; @@ -339,7 +339,7 @@ Process.prototype.runStep = function () { a step is an an uninterruptable 'atom', it can consist of several contexts, even of several blocks */ - if (this.isPaused) { + if (this.isPaused) { // allow pausing in between atomic steps: return this.pauseStep(); } this.readyToYield = false; @@ -348,6 +348,10 @@ Process.prototype.runStep = function () { && (this.isAtomic ? (Date.now() - this.lastYield < this.timeout) : true) ) { + // also allow pausing inside atomic steps - for PAUSE block primitive: + if (this.isPaused) { + return this.pauseStep(); + } this.evaluateContext(); } this.lastYield = Date.now(); @@ -1433,6 +1437,18 @@ Process.prototype.doSetFastTracking = function (bool) { } }; +Process.prototype.doPauseAll = function () { + var stage, ide; + if (this.homeContext.receiver) { + stage = this.homeContext.receiver.parentThatIsA(StageMorph); + if (stage) { + stage.threads.pauseAll(stage); + } + ide = stage.parentThatIsA(IDE_Morph); + if (ide) {ide.controlBar.pauseButton.refresh(); } + } +}; + // Process loop primitives Process.prototype.doForever = function (body) { |
