330 lines
11 KiB
JavaScript
330 lines
11 KiB
JavaScript
import * as Blockly from "blockly/core";
|
|
import { getColour } from "../helpers/colour";
|
|
import * as Types from "../helpers/types";
|
|
import { FieldSlider } from "@blockly/field-slider";
|
|
|
|
Blockly.Blocks["sensebox_display_beginDisplay"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField(
|
|
Blockly.Msg.senseBox_display_beginDisplay
|
|
);
|
|
this.setPreviousStatement(true, null);
|
|
this.setNextStatement(true, null);
|
|
this.setColour(getColour().sensebox);
|
|
this.setTooltip(Blockly.Msg.senseBox_display_beginDisplay_tooltip);
|
|
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
|
|
},
|
|
};
|
|
|
|
Blockly.Blocks["sensebox_display_clearDisplay"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField(
|
|
Blockly.Msg.senseBox_display_clearDisplay
|
|
);
|
|
this.setPreviousStatement(true, null);
|
|
this.setNextStatement(true, null);
|
|
this.setColour(getColour().sensebox);
|
|
this.setTooltip(Blockly.Msg.senseBox_display_clearDisplay_tooltip);
|
|
this.setHelpUrl(Blockly.Msg.senseBox_display_helpurl);
|
|
},
|
|
};
|
|
|
|
Blockly.Blocks["sensebox_display_printDisplay"] = {
|
|
init: function (block) {
|
|
this.setColour(getColour().sensebox);
|
|
this.appendDummyInput().appendField(
|
|
Blockly.Msg.senseBox_display_printDisplay
|
|
);
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.senseBox_display_color)
|
|
.appendField(
|
|
new Blockly.FieldDropdown([
|
|
[Blockly.Msg.senseBox_display_white, "WHITE,BLACK"],
|
|
[Blockly.Msg.senseBox_display_black, "BLACK,WHITE"],
|
|
]),
|
|
"COLOR"
|
|
);
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.senseBox_display_setSize)
|
|
.appendField(new FieldSlider(1, 1, 4), "SIZE");
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.senseBox_display_printDisplay_x)
|
|
.appendField(new FieldSlider(0, 0, 127), "X");
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.senseBox_display_printDisplay_y)
|
|
.appendField(new FieldSlider(0, 0, 63), "Y");
|
|
this.appendValueInput("printDisplay")
|
|
.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_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.
|
|
* 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_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);
|
|
},
|
|
};
|
|
|
|
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"],
|
|
};
|