diff --git a/src/components/Blockly/blocks/procedures.js b/src/components/Blockly/blocks/procedures.js index 237e4da..c334f8f 100644 --- a/src/components/Blockly/blocks/procedures.js +++ b/src/components/Blockly/blocks/procedures.js @@ -48,7 +48,7 @@ Blockly.Blocks['procedures_defnoreturn'] = { const nameField = new Blockly.FieldTextInput('', Blockly.Procedures.rename); nameField.setSpellcheck(false); this.appendDummyInput() - .appendField('Create block') + .appendField(Blockly.Msg.PROCEDURES_DEFNORETURN) .appendField(nameField, 'NAME') .appendField('', 'PARAMS'); this.setMutator(new Blockly.Mutator(['procedures_mutatorarg'])); @@ -127,7 +127,6 @@ Blockly.Blocks['procedures_defnoreturn'] = { paramString = Blockly.Msg['PROCEDURES_BEFORE_PARAMS'] + paramStringArgs.join(', '); } - console.log(paramString); // The params field is deterministic based on the mutation, // no need to fire a change event. Blockly.Events.disable(); @@ -454,24 +453,17 @@ Blockly.Blocks['procedures_defreturn'] = { */ init: function () { const returnTypeField = new Blockly.FieldDropdown( - [ - ['Number', 'Number'], - ['String', 'String'], - ['Boolean', 'Boolean'], - ['List Number', 'List Number'], - ['List String', 'List String'], - ['List Boolean', 'List Boolean'] - ], + [['NUMBER', 'int'], ['DECIMAL', 'float'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean']], this.updateReturnType.bind(this) ); const nameField = new Blockly.FieldTextInput('', Blockly.Procedures.rename); nameField.setSpellcheck(false); this.appendDummyInput() - .appendField('Create block') + .appendField(Blockly.Msg.PROCEDURES_DEFNORETURN) .appendField(nameField, 'NAME') .appendField('', 'PARAMS') - .appendField('that returns: ') + .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN_TYPE) .appendField(returnTypeField, 'RETURN TYPE'); this.appendValueInput('RETURN') @@ -590,16 +582,17 @@ Blockly.Blocks['procedures_mutatorcontainer'] = { } }; -let parameterCounter = 1; + Blockly.Blocks['procedures_mutatorarg'] = { + /** * Mutator block for procedure argument. * @this Blockly.Block */ init: function () { - const paramName = 'param' + parameterCounter.toString(); - + // let parameterCounter = 1; + const paramName = 'x';//'param' + parameterCounter.toString(); // This is for dialog box that get's opened // It has a flyout menu with the default variable // This will set the name of that default variable @@ -610,14 +603,7 @@ Blockly.Blocks['procedures_mutatorarg'] = { } const typeField = new Blockly.FieldDropdown( - [ - ['Number', 'Number'], - ['String', 'String'], - ['Boolean', 'Boolean'], - ['List Number', 'List Number'], - ['List String', 'List String'], - ['List Boolean', 'List Boolean'] - ], + [['NUMBER', 'int'], ['DECIMAL', 'float'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean']], this.validatorType_.bind(this) ); const nameField = new Blockly.FieldTextInput( @@ -651,7 +637,8 @@ Blockly.Blocks['procedures_mutatorarg'] = { // though the editor was never opened. this.createdVariables_ = []; nameField.onFinishEditing_(paramName); - parameterCounter += 1; + + // parameterCounter = 1; }, /** * Obtain a valid name for the procedure argument. Create a variable if @@ -725,6 +712,18 @@ Blockly.Blocks['procedures_mutatorarg'] = { this.createdVariables_.push(model); } } + + + + + // for (let i = 0; i < this.createdVariables_.length; i++) { + // const model = this.createdVariables_[i]; + // if (model.name !== varName || model.type !== varType) { + // // DELETE CRITERIA NEEDS TO CHANGE + + // } + // } + }, /** @@ -736,11 +735,11 @@ Blockly.Blocks['procedures_mutatorarg'] = { deleteIntermediateVars_: function (varName, varType) { varName = varName || this.getFieldValue('NAME'); varType = varType || this.getFieldValue('TYPE'); - const outerWs = Blockly.mainWorkspace; if (!outerWs) { return; } + for (let i = 0; i < this.createdVariables_.length; i++) { const model = this.createdVariables_[i]; if (model.name !== varName || model.type !== varType) { @@ -757,7 +756,10 @@ Blockly.Blocks['procedures_callnoreturn'] = { * @this Blockly.Block */ init: function () { - this.appendDummyInput('TOPROW').appendField(this.id, 'NAME'); + this.appendDummyInput('TOPROW') + .appendField(Blockly.Msg.PROCEDURES_CALL) + .appendField(this.id, 'NAME') + .appendField(Blockly.Msg.PROCEDURES_CALL_END); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(getColour().procedures); @@ -939,7 +941,7 @@ Blockly.Blocks['procedures_callnoreturn'] = { Blockly.Events.disable(); try { field.setValue(labelString); - this.getInput('ARG' + i).setCheck([this.argumentVarModels_[i].type]); + this.getInput('ARG' + i).setCheck(Types.getCompatibleTypes([this.argumentVarModels_[i].type])); } finally { Blockly.Events.enable(); } @@ -949,7 +951,7 @@ Blockly.Blocks['procedures_callnoreturn'] = { const input = this.appendValueInput('ARG' + i) .setAlign(Blockly.ALIGN_RIGHT) .appendField(field, 'ARGNAME' + i) - .setCheck([this.argumentVarModels_[i].type]); // TESTING CHECK TYPES GOES HERE + .setCheck(Types.getCompatibleTypes([this.argumentVarModels_[i].type])); // TESTING CHECK TYPES GOES HERE input.init(); } } @@ -1012,6 +1014,7 @@ Blockly.Blocks['procedures_callnoreturn'] = { for (let i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) { if (childNode.nodeName.toLowerCase() === 'arg') { var variables = Blockly.mainWorkspace.getAllVariables(); + var varName = childNode.getAttribute('name'); for (let y = 0; variables.length; y++) { if (variables[y].name === varName) { diff --git a/src/components/Blockly/generator/procedures.js b/src/components/Blockly/generator/procedures.js index 963594f..a695a0a 100644 --- a/src/components/Blockly/generator/procedures.js +++ b/src/components/Blockly/generator/procedures.js @@ -68,15 +68,19 @@ Blockly.Arduino['procedures_defreturn'] = function (block: Block | any) { }; function translateType(type) { + console.log(type); switch (type) { - case 'Number': - return 'double'; + + case 'int': + return 'int'; case 'String': return 'String'; - case 'Boolean': - return 'boolean'; case 'void': return 'void'; + case 'boolean': + return 'boolean'; + case 'float': + return 'float' default: throw new Error('Invalid Parameter Type'); } diff --git a/src/components/Blockly/helpers/types.js b/src/components/Blockly/helpers/types.js index 407f31a..7a663d5 100644 --- a/src/components/Blockly/helpers/types.js +++ b/src/components/Blockly/helpers/types.js @@ -95,7 +95,8 @@ const compatibleTypes = { void: ['void'], long: ['int', 'long'], double: ['int', 'long', 'double'], - float: ['int', 'long', 'double', 'float'] + float: ['int', 'long', 'double', 'float'], + null: ['null'] } diff --git a/src/components/Blockly/msg/de.js b/src/components/Blockly/msg/de.js index 3012065..bba098d 100644 --- a/src/components/Blockly/msg/de.js +++ b/src/components/Blockly/msg/de.js @@ -272,6 +272,11 @@ Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL = "https://de.wikipedia.org/wiki/Pro Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "Rufe einen Funktionsblock ohne Rückgabewert auf."; Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL = "https://de.wikipedia.org/wiki/Prozedur_%28Programmierung%29"; Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "Rufe einen Funktionsblock mit Rückgabewert auf."; +Blockly.Msg.PROCEDURES_CALL = "Rufe"; +Blockly.Msg.PROCEDURES_CALL_END = "auf"; +Blockly.Msg.PROCEDURES_DEFNORETURN = "Erstelle Funktion"; +Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "mit Eingabeparameter:"; +Blockly.Msg.PROCEDURES_DEFRETURN_RETURN_TYPE = "Rückgabetype"; Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS = "mit:"; Blockly.Msg.PROCEDURES_CREATE_DO = "Erzeuge \"Aufruf %1\""; Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = "Beschreibe diese Funktion …"; diff --git a/src/components/Blockly/msg/en.js b/src/components/Blockly/msg/en.js index 82cc519..cc35bc9 100644 --- a/src/components/Blockly/msg/en.js +++ b/src/components/Blockly/msg/en.js @@ -267,20 +267,24 @@ Blockly.Msg.NEW_VARIABLE = "New variable..."; Blockly.Msg.NEW_VARIABLE_TITLE = "New variable name:"; Blockly.Msg.ORDINAL_NUMBER_SUFFIX = ""; Blockly.Msg.PROCEDURES_ALLOW_STATEMENTS = "allow statements"; -Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "with:"; +Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "with inputs:"; Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29"; Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "Run the user-defined function '%1'."; Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29"; Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "Run the user-defined function '%1' and use its output."; -Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS = "with:"; +Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS = "with Inputs:"; +Blockly.Msg.PROCEDURES_CALL = "Call"; +Blockly.Msg.PROCEDURES_CALL_END = ''; Blockly.Msg.PROCEDURES_CREATE_DO = "Create '%1'"; Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = "Describe this function..."; +Blockly.Msg.PROCEDURES_DEFNORETURN = "Create Function"; Blockly.Msg.PROCEDURES_DEFNORETURN_DO = ""; Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29"; Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "do something"; Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "to"; Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP = "Creates a function with no output."; Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29"; +Blockly.Msg.PROCEDURES_DEFRETURN_RETURN_TYPE = "return Type"; Blockly.Msg.PROCEDURES_DEFRETURN_RETURN = "return"; Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP = "Creates a function with an output."; Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING = "Warning: This function has duplicate parameters."; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 286715d..f09b931 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -379,7 +379,7 @@ class Toolbox extends React.Component { - +