This commit is contained in:
Mario Pesch 2021-10-13 09:57:09 +02:00
parent 5a07197290
commit b18b56ab68

View File

@ -1,304 +1,329 @@
import * as Blockly from 'blockly/core'; import * as Blockly from "blockly/core";
import { getColour } from '../helpers/colour'; import { getColour } from "../helpers/colour";
import * as Types from '../helpers/types' import * as Types from "../helpers/types";
import { FieldSlider } from '@blockly/field-slider'; import { FieldSlider } from "@blockly/field-slider";
Blockly.Blocks["sensebox_display_beginDisplay"] = {
Blockly.Blocks['sensebox_display_beginDisplay'] = { init: function () {
init: function () { this.appendDummyInput().appendField(
this.appendDummyInput() Blockly.Msg.senseBox_display_beginDisplay
.appendField(Blockly.Msg.senseBox_display_beginDisplay) );
this.setPreviousStatement(true, null); this.setPreviousStatement(true, null);
this.setNextStatement(true, null); this.setNextStatement(true, null);
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.setTooltip(Blockly.Msg.senseBox_display_beginDisplay_tooltip); this.setTooltip(Blockly.Msg.senseBox_display_beginDisplay_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl); this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
} },
}; };
Blockly.Blocks['sensebox_display_clearDisplay'] = { Blockly.Blocks["sensebox_display_clearDisplay"] = {
init: function () { init: function () {
this.appendDummyInput() this.appendDummyInput().appendField(
.appendField(Blockly.Msg.senseBox_display_clearDisplay) Blockly.Msg.senseBox_display_clearDisplay
this.setPreviousStatement(true, null); );
this.setNextStatement(true, null); this.setPreviousStatement(true, null);
this.setColour(getColour().sensebox); this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.senseBox_display_clearDisplay_tooltip); this.setColour(getColour().sensebox);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl); this.setTooltip(Blockly.Msg.senseBox_display_clearDisplay_tooltip);
} this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
},
}; };
Blockly.Blocks['sensebox_display_printDisplay'] = { Blockly.Blocks["sensebox_display_printDisplay"] = {
init: function (block) { init: function (block) {
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendDummyInput().appendField(
.appendField(Blockly.Msg.senseBox_display_printDisplay); Blockly.Msg.senseBox_display_printDisplay
this.appendDummyInput() );
.appendField(Blockly.Msg.senseBox_display_color) this.appendDummyInput()
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_display_white, "WHITE,BLACK"], [Blockly.Msg.senseBox_display_black, "BLACK,WHITE"]]), "COLOR"); .appendField(Blockly.Msg.senseBox_display_color)
this.appendDummyInput() .appendField(
.appendField(Blockly.Msg.senseBox_display_setSize) new Blockly.FieldDropdown([
.appendField(new FieldSlider(1, 1, 4), "SIZE"); [Blockly.Msg.senseBox_display_white, "WHITE,BLACK"],
this.appendDummyInput() [Blockly.Msg.senseBox_display_black, "BLACK,WHITE"],
.appendField(Blockly.Msg.senseBox_display_printDisplay_x) ]),
.appendField(new FieldSlider(0, 0, 64), "X"); "COLOR"
this.appendDummyInput() );
.appendField(Blockly.Msg.senseBox_display_printDisplay_y) this.appendDummyInput()
.appendField(new FieldSlider(0, 0, 128), "Y"); .appendField(Blockly.Msg.senseBox_display_setSize)
this.appendValueInput('printDisplay') .appendField(new FieldSlider(1, 1, 4), "SIZE");
.appendField(Blockly.Msg.senseBox_display_printDisplay_value) this.appendDummyInput()
.setCheck(null); .appendField(Blockly.Msg.senseBox_display_printDisplay_x)
this.setPreviousStatement(true, null); .appendField(new FieldSlider(0, 0, 128), "X");
this.setNextStatement(true, null); this.appendDummyInput()
this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tooltip); .appendField(Blockly.Msg.senseBox_display_printDisplay_y)
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl); .appendField(new FieldSlider(0, 0, 64), "Y");
}, this.appendValueInput("printDisplay")
/** .appendField(Blockly.Msg.senseBox_display_printDisplay_value)
* Called whenever anything on the workspace changes. .setCheck(null);
* Add warning if block is not nested inside a the correct loop. this.setPreviousStatement(true, null);
* @param {!Blockly.Events.Abstract} e Change event. this.setNextStatement(true, null);
* @this Blockly.Block this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tooltip);
*/ this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
onchange: function (e) { },
var legal = false; /**
// Is the block nested in a loop?
var block = this;
do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true;
break;
}
block = block.getSurroundParent();
} while (block);
if (legal) {
this.setWarningText(null);
} else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ['sensebox_display_show'],
};
Blockly.Blocks['sensebox_display_fastPrint'] = {
init: function (block) {
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_display_fastPrint_show);
this.appendValueInput("Title1", 'Title1')
.appendField(Blockly.Msg.senseBox_display_fastPrint_title);
this.appendValueInput("Value1", 'Value1')
.appendField(Blockly.Msg.senseBox_display_fastPrint_value);
this.appendValueInput("Dimension1", 'Dimension1')
.appendField(Blockly.Msg.senseBox_display_fastPrint_dimension);
this.appendValueInput("Title2", 'Title2')
.appendField(Blockly.Msg.senseBox_display_fastPrint_title);
this.appendValueInput("Value2", 'Value2')
.appendField(Blockly.Msg.senseBox_display_fastPrint_value);
this.appendValueInput("Dimension2", 'Dimension2')
.appendField(Blockly.Msg.senseBox_display_fastPrint_dimension);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.sensebox_display_fastPrint_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
},
/**
* Called whenever anything on the workspace changes. * Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop. * Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event. * @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block * @this Blockly.Block
*/ */
onchange: function (e) { onchange: function (e) {
var legal = false; var legal = false;
// Is the block nested in a loop? // Is the block nested in a loop?
var block = this; var block = this;
do { do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) { if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true; legal = true;
break; break;
} }
block = block.getSurroundParent(); block = block.getSurroundParent();
} while (block); } while (block);
if (legal) { if (legal) {
this.setWarningText(null); this.setWarningText(null);
} else { } else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ['sensebox_display_show'],
};
Blockly.Blocks['sensebox_display_plotDisplay'] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_display_plotDisplay)
this.appendValueInput("Title", 'Text')
.appendField(Blockly.Msg.senseBox_display_plotTitle);
this.appendValueInput("YLabel", 'Text')
.appendField(Blockly.Msg.senseBox_display_plotYLabel);
this.appendValueInput("XLabel", 'Text')
.appendField(Blockly.Msg.senseBox_display_plotXLabel);
this.appendValueInput("XRange1", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotXRange1);
this.appendValueInput("XRange2", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotXRange2)
this.appendValueInput("YRange1", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotYRange1);
this.appendValueInput("YRange2", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotYRange2);
this.setInputsInline(false);
this.appendValueInput("XTick", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotXTick);
this.appendValueInput("YTick", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotYTick);
this.appendValueInput("TimeFrame", 'Number')
.appendField(Blockly.Msg.senseBox_display_plotTimeFrame);
this.appendValueInput('plotDisplay')
.appendField(Blockly.Msg.senseBox_display_printDisplay_value)
.setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
},
/**
* Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block
*/
onchange: function (e) {
var legal = false;
// Is the block nested in a loop?
var block = this;
do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true;
break;
}
block = block.getSurroundParent();
} while (block);
if (legal) {
this.setWarningText(null);
} else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ['sensebox_display_show'],
};
Blockly.Blocks['sensebox_display_show'] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.sensebox_display_show);
this.appendStatementInput('SHOW');
this.setTooltip(Blockly.Msg.sensebox_display_show_tip);
this.setHelpUrl('');
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
} }
},
LOOP_TYPES: ["sensebox_display_show"],
}; };
Blockly.Blocks['sensebox_display_fillCircle'] = { Blockly.Blocks["sensebox_display_fastPrint"] = {
init: function () { init: function (block) {
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendDummyInput().appendField(
.appendField(Blockly.Msg.sensebox_display_fillCircle); Blockly.Msg.senseBox_display_fastPrint_show
this.appendValueInput('X') );
.appendField(Blockly.Msg.senseBox_display_printDisplay_x) this.appendValueInput("Title1", "Title1").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_fastPrint_title
this.appendValueInput('Y') );
.appendField(Blockly.Msg.senseBox_display_printDisplay_y) this.appendValueInput("Value1", "Value1").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_fastPrint_value
this.appendValueInput('Radius') );
.appendField(Blockly.Msg.sensebox_display_fillCircle_radius) this.appendValueInput("Dimension1", "Dimension1").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_fastPrint_dimension
this.appendDummyInput('fill') );
.appendField(Blockly.Msg.senseBox_display_filled) this.appendValueInput("Title2", "Title2").appendField(
.appendField(new Blockly.FieldCheckbox("TRUE"), "FILL"); Blockly.Msg.senseBox_display_fastPrint_title
this.setInputsInline(false); );
this.setTooltip(Blockly.Msg.senseBox_display_fillCircle_tooltip) this.appendValueInput("Value2", "Value2").appendField(
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl) Blockly.Msg.senseBox_display_fastPrint_value
this.setPreviousStatement(true, null); );
this.setNextStatement(true, null); this.appendValueInput("Dimension2", "Dimension2").appendField(
}, Blockly.Msg.senseBox_display_fastPrint_dimension
/** );
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.sensebox_display_fastPrint_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
},
/**
* Called whenever anything on the workspace changes. * Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop. * Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event. * @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block * @this Blockly.Block
*/ */
onchange: function (e) { onchange: function (e) {
var legal = false; var legal = false;
// Is the block nested in a loop? // Is the block nested in a loop?
var block = this; var block = this;
do { do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) { if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true; legal = true;
break; break;
} }
block = block.getSurroundParent(); block = block.getSurroundParent();
} while (block); } while (block);
if (legal) { if (legal) {
this.setWarningText(null); this.setWarningText(null);
} else { } else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
} }
}, },
LOOP_TYPES: ['sensebox_display_show'], LOOP_TYPES: ["sensebox_display_show"],
}; };
Blockly.Blocks['sensebox_display_drawRectangle'] = { Blockly.Blocks["sensebox_display_plotDisplay"] = {
init: function () { init: function () {
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.appendDummyInput() this.appendDummyInput().appendField(
.appendField(Blockly.Msg.sensebox_display_drawRectangle); Blockly.Msg.senseBox_display_plotDisplay
this.appendValueInput('X') );
.appendField(Blockly.Msg.senseBox_display_printDisplay_x) this.appendValueInput("Title", "Text").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_plotTitle
this.appendValueInput('Y') );
.appendField(Blockly.Msg.senseBox_display_printDisplay_y) this.appendValueInput("YLabel", "Text").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_plotYLabel
this.appendValueInput('width') );
.appendField(Blockly.Msg.sensebox_display_drawRectangle_width) this.appendValueInput("XLabel", "Text").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_plotXLabel
this.appendValueInput('height') );
.appendField(Blockly.Msg.sensebox_display_drawRectangle_height) this.appendValueInput("XRange1", "Number").appendField(
.setCheck(Types.NUMBER.compatibleTypes); Blockly.Msg.senseBox_display_plotXRange1
this.appendDummyInput('fill') );
.appendField(Blockly.Msg.senseBox_display_filled) this.appendValueInput("XRange2", "Number").appendField(
.appendField(new Blockly.FieldCheckbox("TRUE"), "FILL"); Blockly.Msg.senseBox_display_plotXRange2
this.setInputsInline(false); );
this.setTooltip(Blockly.Msg.senseBox_display_drawRectangle_tooltip) this.appendValueInput("YRange1", "Number").appendField(
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl) Blockly.Msg.senseBox_display_plotYRange1
this.setPreviousStatement(true, null); );
this.setNextStatement(true, null); this.appendValueInput("YRange2", "Number").appendField(
}, Blockly.Msg.senseBox_display_plotYRange2
/** );
this.setInputsInline(false);
this.appendValueInput("XTick", "Number").appendField(
Blockly.Msg.senseBox_display_plotXTick
);
this.appendValueInput("YTick", "Number").appendField(
Blockly.Msg.senseBox_display_plotYTick
);
this.appendValueInput("TimeFrame", "Number").appendField(
Blockly.Msg.senseBox_display_plotTimeFrame
);
this.appendValueInput("plotDisplay")
.appendField(Blockly.Msg.senseBox_display_printDisplay_value)
.setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
},
/**
* Called whenever anything on the workspace changes. * Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop. * Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event. * @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block * @this Blockly.Block
*/ */
onchange: function (e) { onchange: function (e) {
var legal = false; var legal = false;
// Is the block nested in a loop? // Is the block nested in a loop?
var block = this; var block = this;
do { do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) { if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true; legal = true;
break; break;
} }
block = block.getSurroundParent(); block = block.getSurroundParent();
} while (block); } while (block);
if (legal) { if (legal) {
this.setWarningText(null); this.setWarningText(null);
} else { } else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING); this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
} }
}, },
LOOP_TYPES: ['sensebox_display_show'], LOOP_TYPES: ["sensebox_display_show"],
};
Blockly.Blocks["sensebox_display_show"] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput().appendField(Blockly.Msg.sensebox_display_show);
this.appendStatementInput("SHOW");
this.setTooltip(Blockly.Msg.sensebox_display_show_tip);
this.setHelpUrl("");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
};
Blockly.Blocks["sensebox_display_fillCircle"] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput().appendField(
Blockly.Msg.sensebox_display_fillCircle
);
this.appendValueInput("X")
.appendField(Blockly.Msg.senseBox_display_printDisplay_x)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendValueInput("Y")
.appendField(Blockly.Msg.senseBox_display_printDisplay_y)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendValueInput("Radius")
.appendField(Blockly.Msg.sensebox_display_fillCircle_radius)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendDummyInput("fill")
.appendField(Blockly.Msg.senseBox_display_filled)
.appendField(new Blockly.FieldCheckbox("TRUE"), "FILL");
this.setInputsInline(false);
this.setTooltip(Blockly.Msg.senseBox_display_fillCircle_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
/**
* Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block
*/
onchange: function (e) {
var legal = false;
// Is the block nested in a loop?
var block = this;
do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true;
break;
}
block = block.getSurroundParent();
} while (block);
if (legal) {
this.setWarningText(null);
} else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ["sensebox_display_show"],
};
Blockly.Blocks["sensebox_display_drawRectangle"] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput().appendField(
Blockly.Msg.sensebox_display_drawRectangle
);
this.appendValueInput("X")
.appendField(Blockly.Msg.senseBox_display_printDisplay_x)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendValueInput("Y")
.appendField(Blockly.Msg.senseBox_display_printDisplay_y)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendValueInput("width")
.appendField(Blockly.Msg.sensebox_display_drawRectangle_width)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendValueInput("height")
.appendField(Blockly.Msg.sensebox_display_drawRectangle_height)
.setCheck(Types.NUMBER.compatibleTypes);
this.appendDummyInput("fill")
.appendField(Blockly.Msg.senseBox_display_filled)
.appendField(new Blockly.FieldCheckbox("TRUE"), "FILL");
this.setInputsInline(false);
this.setTooltip(Blockly.Msg.senseBox_display_drawRectangle_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
},
/**
* Called whenever anything on the workspace changes.
* Add warning if block is not nested inside a the correct loop.
* @param {!Blockly.Events.Abstract} e Change event.
* @this Blockly.Block
*/
onchange: function (e) {
var legal = false;
// Is the block nested in a loop?
var block = this;
do {
if (this.LOOP_TYPES.indexOf(block.type) !== -1) {
legal = true;
break;
}
block = block.getSurroundParent();
} while (block);
if (legal) {
this.setWarningText(null);
} else {
this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
}
},
LOOP_TYPES: ["sensebox_display_show"],
}; };