/// <summary> /// Returns field strings and any config. /// </summary> /// <param name="block"></param> Input block. /// <returns></returns> Array of static text and field configs. private static JsArray <object> getFieldsJson_(Blockly.Block block) { var fields = new JsArray <object>(); while (block != null) { if (!block.disabled && !block.getInheritedDisabled()) { switch (block.type) { case "field_static": // Result: "hello" fields.Push(block.getFieldValue("TEXT")); break; case "field_input": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), text = block.getFieldValue("TEXT") }); break; case "field_number": var obj = new Dictionary <string, object>(); obj["type"] = block.type; obj["name"] = block.getFieldValue("FIELDNAME"); obj["value"] = Script.ParseFloat(block.getFieldValue("VALUE")); var min = Script.ParseFloat(block.getFieldValue("MIN")); if (min > Double.NegativeInfinity) { obj["min"] = min; } var max = Script.ParseFloat(block.getFieldValue("MAX")); if (max < Double.PositiveInfinity) { obj["max"] = max; } var precision = block.getFieldValue("PRECISION"); if (!String.IsNullOrEmpty(precision)) { obj["precision"] = Script.ParseFloat(precision); } fields.Push(obj); break; case "field_angle": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), angle = Convert.ToDouble(block.getFieldValue("ANGLE")) }); break; case "field_checkbox": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), @checked = block.getFieldValue("CHECKED") == "TRUE" }); break; case "field_colour": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), colour = block.getFieldValue("COLOUR") }); break; case "field_date": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), date = block.getFieldValue("DATE") }); break; case "field_variable": fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), variable = block.getFieldValue("TEXT") ?? null }); break; case "field_dropdown": var count = ((FieldDropdown)block).optionCount_; var options = new JsArray <DropdownItemInfo>(count); for (var i = 0; i < count; i++) { options[i] = new DropdownItemInfo( block.getFieldValue("USER" + i), block.getFieldValue("CPU" + i) ); } if (options.Length >= 0) { fields.Push(new { type = block.type, name = block.getFieldValue("FIELDNAME"), options = options }); } break; case "field_image": fields.Push(new { type = block.type, src = block.getFieldValue("SRC"), width = Convert.ToDouble(block.getFieldValue("WIDTH")), height = Convert.ToDouble(block.getFieldValue("HEIGHT")), alt = block.getFieldValue("ALT") }); break; } } block = block.nextConnection == null ? null : block.nextConnection.targetBlock(); } return(fields); }
/// <summary> /// Returns field strings and any config. /// </summary> /// <param name="block">Input block.</param> /// <returns>Field strings.</returns> private static JsArray <string> getFieldsJs_(Blockly.Block block) { var fields = new JsArray <string>(); while (block != null) { if (!block.disabled && !block.getInheritedDisabled()) { switch (block.type) { case "field_static": // Result: "hello" fields.Push(FactoryUtils.escapeString(block.getFieldValue("TEXT"))); break; case "field_input": // Result: new Blockly.FieldTextInput("Hello"), "GREET" fields.Push("new Blockly.FieldTextInput(" + FactoryUtils.escapeString(block.getFieldValue("TEXT")) + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_number": // Result: new Blockly.FieldNumber(10, 0, 100, 1), "NUMBER" var args = new JsArray <double> { Script.ParseFloat(block.getFieldValue("VALUE")), Script.ParseFloat(block.getFieldValue("MIN")), Script.ParseFloat(block.getFieldValue("MAX")), Script.ParseFloat(block.getFieldValue("PRECISION")) }; // Remove any trailing arguments that aren't needed. if (args[3] == 0) { args.Pop(); if (args[2] == Double.PositiveInfinity) { args.Pop(); if (args[1] == Double.NegativeInfinity) { args.Pop(); } } } fields.Push("new Blockly.FieldNumber(" + args.Join(", ") + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_angle": // Result: new Blockly.FieldAngle(90), "ANGLE" fields.Push("new Blockly.FieldAngle(" + Script.ParseFloat(block.getFieldValue("ANGLE")) + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_checkbox": // Result: new Blockly.FieldCheckbox("TRUE"), "CHECK" fields.Push("new Blockly.FieldCheckbox(" + FactoryUtils.escapeString(block.getFieldValue("CHECKED")) + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_colour": // Result: new Blockly.FieldColour("#ff0000"), "COLOUR" fields.Push("new Blockly.FieldColour(" + FactoryUtils.escapeString(block.getFieldValue("COLOUR")) + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_date": // Result: new Blockly.FieldDate("2015-02-04"), "DATE" fields.Push("new Blockly.FieldDate(" + FactoryUtils.escapeString(block.getFieldValue("DATE")) + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_variable": // Result: new Blockly.FieldVariable("item"), "VAR" var varname = FactoryUtils.escapeString(block.getFieldValue("TEXT") ?? null); fields.Push("new Blockly.FieldVariable(" + varname + "), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); break; case "field_dropdown": // Result: // new Blockly.FieldDropdown([["yes", "1"], ["no", "0"]]), "TOGGLE" var options = new JsArray <string>(); for (var i = 0; i < ((FieldDropdown)block).optionCount_; i++) { options[i] = "[" + FactoryUtils.escapeString(block.getFieldValue("USER" + i)) + ", " + FactoryUtils.escapeString(block.getFieldValue("CPU" + i)) + "]"; } if (options.Length > 0) { fields.Push("new Blockly.FieldDropdown([" + options.Join(", ") + "]), " + FactoryUtils.escapeString(block.getFieldValue("FIELDNAME"))); } break; case "field_image": // Result: new Blockly.FieldImage("http://...", 80, 60) var src = FactoryUtils.escapeString(block.getFieldValue("SRC")); var width = Convert.ToDouble(block.getFieldValue("WIDTH")); var height = Convert.ToDouble(block.getFieldValue("HEIGHT")); var alt = FactoryUtils.escapeString(block.getFieldValue("ALT")); fields.Push("new Blockly.FieldImage(" + src + ", " + width + ", " + height + ", " + alt + ")"); break; } } block = block.nextConnection == null ? null : block.nextConnection.targetBlock(); } return(fields); }