[270] | 1 | /**
|
---|
| 2 | * @license
|
---|
| 3 | * Visual Blocks Editor
|
---|
| 4 | *
|
---|
| 5 | * Copyright 2012 Google Inc.
|
---|
| 6 | * https://developers.google.com/blockly/
|
---|
| 7 | *
|
---|
| 8 | * Licensed under the Apache License, Version 2.0 (the "License");
|
---|
| 9 | * you may not use this file except in compliance with the License.
|
---|
| 10 | * You may obtain a copy of the License at
|
---|
| 11 | *
|
---|
| 12 | * http://www.apache.org/licenses/LICENSE-2.0
|
---|
| 13 | *
|
---|
| 14 | * Unless required by applicable law or agreed to in writing, software
|
---|
| 15 | * distributed under the License is distributed on an "AS IS" BASIS,
|
---|
| 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
---|
| 17 | * See the License for the specific language governing permissions and
|
---|
| 18 | * limitations under the License.
|
---|
| 19 | */
|
---|
| 20 |
|
---|
| 21 | /**
|
---|
| 22 | * @fileoverview Variable blocks for Blockly.
|
---|
| 23 | * @author fraser@google.com (Neil Fraser)
|
---|
| 24 | */
|
---|
| 25 | using System;
|
---|
| 26 | using System.Linq;
|
---|
| 27 | using System.Text;
|
---|
| 28 | using Bridge;
|
---|
| 29 | using Bridge.Html5;
|
---|
| 30 | using Bridge.jQuery2;
|
---|
| 31 |
|
---|
| 32 | namespace WebMrbc
|
---|
| 33 | {
|
---|
| 34 | public class VariablesGetBlock : Block
|
---|
| 35 | {
|
---|
| 36 | public const string type_name = "variables_get";
|
---|
| 37 | string contextMenuType_ = VariablesSetBlock.type_name;
|
---|
| 38 |
|
---|
| 39 | public VariablesGetBlock()
|
---|
| 40 | : base(type_name)
|
---|
| 41 | {
|
---|
| 42 | }
|
---|
| 43 |
|
---|
| 44 | /**
|
---|
| 45 | * Block for variable getter.
|
---|
| 46 | * @this Blockly.Block
|
---|
| 47 | */
|
---|
| 48 | public void init()
|
---|
| 49 | {
|
---|
| 50 | this.setHelpUrl(Msg.VARIABLES_GET_HELPURL);
|
---|
| 51 | this.setColour(Blockly.Variables.HUE);
|
---|
| 52 | this.appendDummyInput()
|
---|
| 53 | .appendField(new FieldVariable(
|
---|
| 54 | Msg.VARIABLES_DEFAULT_NAME), "VAR");
|
---|
| 55 | this.setOutput(true);
|
---|
| 56 | this.setTooltip(Msg.VARIABLES_GET_TOOLTIP);
|
---|
| 57 | this.contextMenuMsg_ = Msg.VARIABLES_GET_CREATE_SET;
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | /**
|
---|
| 61 | * Add menu option to create getter/setter block for this setter/getter.
|
---|
| 62 | * @param {!Array} options List of menu options to add to.
|
---|
| 63 | * @this Blockly.Block
|
---|
| 64 | */
|
---|
| 65 | public void customContextMenu(object[] options)
|
---|
| 66 | {
|
---|
| 67 | var option = new ContextMenuOption() { enabled = true };
|
---|
| 68 | var name = this.getFieldValue("VAR");
|
---|
| 69 | option.text = this.contextMenuMsg_.Replace("%1", name);
|
---|
| 70 | var xmlField = goog.dom.createDom("field", null, name);
|
---|
| 71 | xmlField.SetAttribute("name", "VAR");
|
---|
| 72 | var xmlBlock = goog.dom.createDom("block", null, xmlField);
|
---|
| 73 | xmlBlock.SetAttribute("type", this.contextMenuType_);
|
---|
| 74 | option.callback = ContextMenu.callbackFactory(this, xmlBlock);
|
---|
| 75 | options.Push(option);
|
---|
| 76 | }
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | public class VariablesSetBlock : Block
|
---|
| 80 | {
|
---|
| 81 | public const string type_name = "variables_set";
|
---|
| 82 | string contextMenuType_ = VariablesGetBlock.type_name;
|
---|
| 83 |
|
---|
| 84 | public VariablesSetBlock()
|
---|
| 85 | : base(type_name)
|
---|
| 86 | {
|
---|
| 87 | }
|
---|
| 88 |
|
---|
| 89 | /**
|
---|
| 90 | * Block for variable setter.
|
---|
| 91 | * @this Blockly.Block
|
---|
| 92 | */
|
---|
| 93 | public void init()
|
---|
| 94 | {
|
---|
| 95 | this.jsonInit(new {
|
---|
| 96 | message0 = Msg.VARIABLES_SET,
|
---|
| 97 | args0 = new object[] {
|
---|
| 98 | new {
|
---|
| 99 | type = "field_variable",
|
---|
| 100 | name = "VAR",
|
---|
| 101 | variable = Msg.VARIABLES_DEFAULT_NAME
|
---|
| 102 | },
|
---|
| 103 | new {
|
---|
| 104 | type = "input_value",
|
---|
| 105 | name = "VALUE"
|
---|
| 106 | }
|
---|
| 107 | },
|
---|
| 108 | previousStatement = (Union<string, string[]>)null,
|
---|
| 109 | nextStatement = (Union<string, string[]>)null,
|
---|
| 110 | colour = Blockly.Variables.HUE,
|
---|
| 111 | tooltip = Msg.VARIABLES_SET_TOOLTIP,
|
---|
| 112 | helpUrl = Msg.VARIABLES_SET_HELPURL
|
---|
| 113 |
|
---|
| 114 | });
|
---|
| 115 | this.contextMenuMsg_ = Msg.VARIABLES_SET_CREATE_GET;
|
---|
| 116 | }
|
---|
| 117 |
|
---|
| 118 | /**
|
---|
| 119 | * Add menu option to create getter/setter block for this setter/getter.
|
---|
| 120 | * @param {!Array} options List of menu options to add to.
|
---|
| 121 | * @this Blockly.Block
|
---|
| 122 | */
|
---|
| 123 | public void customContextMenu(object[] options)
|
---|
| 124 | {
|
---|
| 125 | var option = new ContextMenuOption() { enabled = true };
|
---|
| 126 | var name = this.getFieldValue("VAR");
|
---|
| 127 | option.text = this.contextMenuMsg_.Replace("%1", name);
|
---|
| 128 | var xmlField = goog.dom.createDom("field", null, name);
|
---|
| 129 | xmlField.SetAttribute("name", "VAR");
|
---|
| 130 | var xmlBlock = goog.dom.createDom("block", null, xmlField);
|
---|
| 131 | xmlBlock.SetAttribute("type", this.contextMenuType_);
|
---|
| 132 | option.callback = ContextMenu.callbackFactory(this, xmlBlock);
|
---|
| 133 | options.Push(option);
|
---|
| 134 | }
|
---|
| 135 | }
|
---|
| 136 | }
|
---|