Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }