add block type to setter and getter

This commit is contained in:
Mario 2020-09-29 10:30:35 +02:00
parent da4c8840ea
commit 5304907fd0
7 changed files with 237 additions and 341 deletions

View File

@ -56,7 +56,7 @@ Blockly.Blocks['io_digitalread'] = {
.appendField(Blockly.Msg.ARD_DIGITALREAD) .appendField(Blockly.Msg.ARD_DIGITALREAD)
.appendField(new Blockly.FieldDropdown( .appendField(new Blockly.FieldDropdown(
selectedBoard().digitalPins), 'PIN'); selectedBoard().digitalPins), 'PIN');
this.setOutput(true, Types.BOOLEAN); this.setOutput(true, 'boolean');
this.setTooltip(Blockly.Msg.ARD_DIGITALREAD_TIP); this.setTooltip(Blockly.Msg.ARD_DIGITALREAD_TIP);
}, },
/** @return {!string} The type of return value for the block, an integer. */ /** @return {!string} The type of return value for the block, an integer. */

View File

@ -50,6 +50,8 @@ Blockly.Blocks['sensebox_display_printDisplay'] = {
.setCheck(null); .setCheck(null);
this.setPreviousStatement(true, null); this.setPreviousStatement(true, null);
this.setNextStatement(true, null); this.setNextStatement(true, null);
let variableName = this.getField('COLOR');
console.log(variableName.getValue());
this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tip); this.setTooltip(Blockly.Msg.senseBox_display_printDisplay_tip);
this.setHelpUrl('https://sensebox.de/books'); this.setHelpUrl('https://sensebox.de/books');
}, },

View File

@ -2,6 +2,7 @@ import Blockly from 'blockly';
import { getColour } from '../helpers/colour' import { getColour } from '../helpers/colour'
import * as Types from '../helpers/types' import * as Types from '../helpers/types'
import { selectedBoard } from '../helpers/board' import { selectedBoard } from '../helpers/board'
import { colors } from '@material-ui/core';
/** /**
* HDC1080 Temperature and Humidity Sensor * HDC1080 Temperature and Humidity Sensor
@ -16,7 +17,7 @@ Blockly.Blocks['sensebox_sensor_temp_hum'] = {
.setAlign(Blockly.ALIGN_RIGHT) .setAlign(Blockly.ALIGN_RIGHT)
.appendField(Blockly.Msg.senseBox_value) .appendField(Blockly.Msg.senseBox_value)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_temp, "Temperature"], [Blockly.Msg.senseBox_hum, "Humidity"]]), "NAME"); .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_temp, "Temperature"], [Blockly.Msg.senseBox_hum, "Humidity"]]), "NAME");
this.setOutput(true, Types.NUMBER.typeId); this.setOutput(true, Types.DECIMAL.typeId);
this.setColour(getColour().sensebox); this.setColour(getColour().sensebox);
this.setTooltip(Blockly.Msg.senseBox_temp_hum_tip); this.setTooltip(Blockly.Msg.senseBox_temp_hum_tip);
this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html'); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/temp_und_luftfeuchte.html');
@ -124,6 +125,8 @@ Blockly.Blocks['sensebox_sensor_pressure'] = {
this.setOutput(true, Types.NUMBER.typeId); this.setOutput(true, Types.NUMBER.typeId);
this.setTooltip(Blockly.Msg.senseBox_pressure_tip); this.setTooltip(Blockly.Msg.senseBox_pressure_tip);
this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/luftdruck.html'); this.setHelpUrl('https://edu.books.sensebox.de/de/projekte/diy_umweltstation/luftdruck.html');
var input = this.getFieldValue('NAME');
console.log(input);
}, },
/** /**
* Parse XML to restore the number of pins available. * Parse XML to restore the number of pins available.
@ -231,7 +234,7 @@ Blockly.Blocks['sensebox_sensor_ultrasonic_ranger'] = {
.appendField(Blockly.Msg.senseBox_ultrasonic_echo) .appendField(Blockly.Msg.senseBox_ultrasonic_echo)
.appendField(new Blockly.FieldDropdown( .appendField(new Blockly.FieldDropdown(
selectedBoard().digitalPins), 'ultrasonic_echo'); selectedBoard().digitalPins), 'ultrasonic_echo');
this.setOutput(true, Types.NUMBER.typeId); this.setOutput(true, 'int');
this.setTooltip(Blockly.Msg.senseBox_ultrasonic_tip); this.setTooltip(Blockly.Msg.senseBox_ultrasonic_tip);
this.setHelpUrl('https://sensebox.de/books'); this.setHelpUrl('https://sensebox.de/books');
}, },
@ -283,7 +286,7 @@ Blockly.Blocks['sensebox_sensor_ultrasonic_ranger'] = {
}, },
getBlockType: function () { getBlockType: function () {
return Blockly.Types.NUMBER; return Blockly.Types.SHORT_NUMBER;
} }
}; };

View File

@ -1,167 +1,41 @@
import Blockly from 'blockly/core'; import Blockly, { FieldVariable } from 'blockly/core';
import { getColour } from '../helpers/colour'; import { getColour } from '../helpers/colour';
import { getCompatibleTypes } from '../helpers/types'
Blockly.defineBlocksWithJsonArray([
// BEGIN JSON EXTRACT Blockly.Blocks['variables_set_dynamic'] = {
{ init: function () {
type: 'variables_get_number',
message0: '= number variable %1', // const type = myVar.type;
args0: [ this.setColour(getColour().variables);
{ this.setPreviousStatement(true, null);
type: 'field_variable', this.setNextStatement(true, null);
name: 'VAR', this.appendValueInput('VALUE')
variable: null, .appendField('set', 'set')
variableTypes: ['Number'], .appendField(new Blockly.FieldVariable('VAR'), 'VAR')
defaultType: 'Number', .appendField('to');
}, },
], onchange: function (e) {
output: 'Number', let variableID = this.getFieldValue('VAR');
colour: getColour().variables, let variable = Blockly.getMainWorkspace().getVariableMap().getVariableById(variableID)
tooltip: '', this.getInput('VALUE').setCheck(getCompatibleTypes(variable.type));
helpUrl: '',
}
}
Blockly.Blocks['variables_get_dynamic'] = {
init: function () {
this.setColour(getColour().variables);
this.appendDummyInput()
.appendField('', 'type')
.appendField(new Blockly.FieldVariable('VAR'), 'VAR');
this.setOutput(true);
}, },
{ onchange: function (e) {
type: 'variables_set_number', let variableID = this.getFieldValue('VAR');
message0: 'Number variable %1 = %2', let variable = Blockly.getMainWorkspace().getVariableMap().getVariableById(variableID)
args0: [ this.getField('type').setValue(variable.type);
{
type: 'field_variable', }
name: 'VAR', }
variable: null,
variableTypes: ['Number'],
defaultType: 'Number',
createNewVariable: false,
},
{
type: 'input_value',
name: 'VALUE',
check: 'Number',
},
],
previousStatement: null,
nextStatement: null,
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_get_colour',
message0: '= color variable %1',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['Colour'],
defaultType: 'Colour',
},
],
output: 'Colour',
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_set_colour',
message0: 'Color variable %1 = %2',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['Colour'],
defaultType: 'Colour',
},
{
type: 'input_value',
name: 'VALUE',
check: 'Colour',
},
],
previousStatement: null,
nextStatement: null,
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_get_string',
message0: '= text variable %1',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['String'],
defaultType: 'String',
},
],
output: 'String',
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_set_string',
message0: 'Text variable %1 = %2',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['String'],
defaultType: 'String',
},
{
type: 'input_value',
name: 'VALUE',
check: 'String',
},
],
previousStatement: null,
nextStatement: null,
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_get_boolean',
message0: '= boolean variable %1',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['Boolean'],
defaultType: 'Boolean',
},
],
output: 'Boolean',
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
{
type: 'variables_set_boolean',
message0: 'Boolean variable %1 = %2',
args0: [
{
type: 'field_variable',
name: 'VAR',
variable: null,
variableTypes: ['Boolean'],
defaultType: 'Boolean',
},
{
type: 'input_value',
name: 'VALUE',
check: 'Boolean',
},
],
previousStatement: null,
nextStatement: null,
colour: getColour().variables,
tooltip: '',
helpUrl: '',
},
]); // END JSON EXTRACT (Do not delete this comment.)

View File

@ -15,7 +15,7 @@ const setVariableFunction = function (defaultValue) {
const allVars = Blockly.getMainWorkspace().getVariableMap().getAllVariables(); const allVars = Blockly.getMainWorkspace().getVariableMap().getAllVariables();
const myVar = allVars.filter(v => v.name === variableName)[0] const myVar = allVars.filter(v => v.name === variableName)[0]
Blockly.Arduino.setupCode_[''] = myVar.type + " " + myVar.name + ';\n'; Blockly.Arduino.variables_[myVar] = myVar.type + " " + myVar.name + ';\n';
return variableName + ' = ' + (variableValue || defaultValue) + ';\n'; return variableName + ' = ' + (variableValue || defaultValue) + ';\n';
}; };
}; };

View File

@ -12,6 +12,7 @@
/** Single character. */ /** Single character. */
export const CHARACTER = { export const CHARACTER = {
typeId: 'Character', typeId: 'Character',
typeName: 'char',
typeMsgName: 'ARD_TYPE_CHAR', typeMsgName: 'ARD_TYPE_CHAR',
compatibleTypes: [] compatibleTypes: []
} }
@ -31,14 +32,15 @@ export const TEXT = {
/** Short integer number. */ /** Short integer number. */
export const SHORT_NUMBER = { export const SHORT_NUMBER = {
typeId: 'Short Number', typeId: 'Short_Number',
typeName: 'int',
typeMsgName: 'ARD_TYPE_SHORT', typeMsgName: 'ARD_TYPE_SHORT',
compatibleTypes: [] // Circular dependencies, add after all declarations compatibleTypes: ['int', 'float',] // Circular dependencies, add after all declarations
} }
/** Integer number. */ /** Integer number. */
export const NUMBER = { export const NUMBER = {
typeId: 'Number', typeId: 'int',
typeMsgName: 'ARD_TYPE_NUMBER', typeMsgName: 'ARD_TYPE_NUMBER',
compatibleTypes: ['Number'] // Circular dependencies, add after all declarations compatibleTypes: ['Number'] // Circular dependencies, add after all declarations
} }
@ -52,12 +54,12 @@ export const LARGE_NUMBER = {
/** Decimal/floating point number. */ /** Decimal/floating point number. */
export const DECIMAL = { export const DECIMAL = {
typeId: 'Decimal', typeId: 'float',
typeMsgName: 'ARD_TYPE_DECIMAL', typeMsgName: 'ARD_TYPE_DECIMAL',
compatibleTypes: [BOOLEAN.typeId, compatibleTypes: [BOOLEAN.typeId,
NUMBER, NUMBER.typeId,
SHORT_NUMBER, SHORT_NUMBER.typeId,
LARGE_NUMBER] LARGE_NUMBER.typeId]
} }
/** Array/List of items. */ /** Array/List of items. */
@ -88,8 +90,23 @@ export const CHILD_BLOCK_MISSING = {
compatibleTypes: [] compatibleTypes: []
} }
const compatibleTypes = {
boolean: ['boolean'],
int: ['int'],
char: ['char'],
string: ['String'],
void: ['void'],
long: ['int', 'long'],
double: ['int', 'long', 'double'],
float: ['int', 'long', 'double', 'float']
export const VARIABLE_TYPES = ['Number', 'String', 'Boolean', 'Colour']; }
export const getCompatibleTypes = (type) => {
return compatibleTypes[type];
};
export const VARIABLE_TYPES = [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']];
// /** // /**
// * Some Types have circular dependencies on their compatibilities, so add them // * Some Types have circular dependencies on their compatibilities, so add them

View File

@ -15,7 +15,7 @@ class Toolbox extends React.Component {
componentDidUpdate() { componentDidUpdate() {
this.props.workspace.registerToolboxCategoryCallback('CREATE_TYPED_VARIABLE', this.createFlyout); this.props.workspace.registerToolboxCategoryCallback('CREATE_TYPED_VARIABLE', this.createFlyout);
const typedVarModal = new TypedVariableModal(this.props.workspace, 'callbackName', [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']]); const typedVarModal = new TypedVariableModal(this.props.workspace, 'callbackName', [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'float'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']]);
typedVarModal.init(); typedVarModal.init();
} }