add add monitor action

This commit is contained in:
DD Liu 2017-05-10 17:00:08 -04:00
parent b1355c6b0b
commit b2e0a632e3
4 changed files with 35 additions and 9 deletions

View file

@ -292,6 +292,21 @@ class Blocks {
block.isMonitored = args.value; block.isMonitored = args.value;
if (optRuntime && wasMonitored && !block.isMonitored) { if (optRuntime && wasMonitored && !block.isMonitored) {
optRuntime.removeMonitors([{id: block.id}]); optRuntime.removeMonitors([{id: block.id}]);
} else if (optRuntime && !wasMonitored && block.isMonitored) {
optRuntime.addMonitors(
// Ensure that value is not undefined, since React requires it
[{
// @todo(dd) this will collide if multiple sprites use same block
id: block.id,
category: 'data',
// @todo(dd) how to handle translation here?
label: block.opcode,
value: '',
x: 0,
// @todo(dd) place below the last monitor instead
y: 0
}]
);
} }
break; break;
} }

View file

@ -87,7 +87,6 @@ const execute = function (sequencer, thread) {
} else { } else {
// In a non-hat, report the value visually if necessary if // In a non-hat, report the value visually if necessary if
// at the top of the thread stack. // at the top of the thread stack.
if (typeof resolvedValue !== 'undefined' && thread.atStackTop()) { if (typeof resolvedValue !== 'undefined' && thread.atStackTop()) {
if (thread.showVisualReport) { if (thread.showVisualReport) {
runtime.visualReport(currentBlockId, resolvedValue); runtime.visualReport(currentBlockId, resolvedValue);
@ -95,15 +94,8 @@ const execute = function (sequencer, thread) {
if (thread.updateMonitor) { if (thread.updateMonitor) {
runtime.updateMonitors([{ runtime.updateMonitors([{
// @todo(dd) this will collide if multiple sprites use same block
id: currentBlockId, id: currentBlockId,
category: 'data', value: String(resolvedValue)
// @todo(dd) how to handle translation here?
label: blockContainer.getOpcode(blockContainer.getBlock(currentBlockId)),
value: String(resolvedValue),
x: 0,
// @todo(dd) place below the last monitor instead
y: 0
}]); }]);
} }
} }

View file

@ -249,6 +249,14 @@ class Runtime extends EventEmitter {
return 'MONITORS_REMOVED'; return 'MONITORS_REMOVED';
} }
/**
* Event name for monitors added.
* @const {string}
*/
static get MONITORS_ADDED () {
return 'MONITORS_ADDED';
}
/** /**
* How rapidly we try to step threads by default, in ms. * How rapidly we try to step threads by default, in ms.
*/ */
@ -881,6 +889,14 @@ class Runtime extends EventEmitter {
this.emit(Runtime.MONITORS_REMOVED, monitors); this.emit(Runtime.MONITORS_REMOVED, monitors);
} }
/**
* Emit a monitor update which adds if it doesn't already exist the given monitors.
* @param {!Array} monitors Array of monitors to add.
*/
addMonitors (monitors) {
this.emit(Runtime.MONITORS_ADDED, monitors);
}
/** /**
* Get a target by its id. * Get a target by its id.
* @param {string} targetId Id of target to find. * @param {string} targetId Id of target to find.

View file

@ -61,6 +61,9 @@ class VirtualMachine extends EventEmitter {
instance.runtime.on(Runtime.MONITORS_REMOVED, monitorList => { instance.runtime.on(Runtime.MONITORS_REMOVED, monitorList => {
instance.emit(Runtime.MONITORS_REMOVED, monitorList); instance.emit(Runtime.MONITORS_REMOVED, monitorList);
}); });
instance.runtime.on(Runtime.MONITORS_ADDED, monitorList => {
instance.emit(Runtime.MONITORS_ADDED, monitorList);
});
this.blockListener = this.blockListener.bind(this); this.blockListener = this.blockListener.bind(this);
this.flyoutBlockListener = this.flyoutBlockListener.bind(this); this.flyoutBlockListener = this.flyoutBlockListener.bind(this);