source: EcnlProtoTool/trunk/webapp/webmrbc/BlocklyView.cs@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csharp
File size: 22.2 KB
Line 
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text;
6using Bridge;
7using Bridge.Html5;
8using Bridge.jQuery2;
9
10namespace WebMrbc
11{
12 public class BlocklyView
13 {
14 string identifier;
15 public string Identifier {
16 get { return identifier; }
17 set {
18 if (identifier != value) {
19 identifier = value;
20 IdentifierChanged?.Invoke(this, EventArgs.Empty);
21 }
22 }
23 }
24 public Dictionary<string, FlyoutCategoryHandler> FlyoutCategoryHandlers = new Dictionary<string, FlyoutCategoryHandler>();
25 public event EventHandler<Create> BlockCreated;
26 public event EventHandler<Delete> BlockDeleted;
27 public event EventHandler<Change> BlockChanged;
28 public event EventHandler<Move> BlockMoveed;
29 public event EventHandler<Ui> UiEvent;
30 public event EventHandler<EventArgs> IdentifierChanged;
31 public bool Changed = true;
32
33 private static int No = 1;
34 private WorkspaceSvg _Workspace;
35 private string _WorkspaceElementId;
36 private int _IdNo;
37
38 static BlocklyView()
39 {
40 Script.Set(Blockly.Blocks, ColourPickerBlock.type_name, new ColourPickerBlock());
41 Script.Set(Blockly.Blocks, ColourRandomBlock.type_name, new ColourRandomBlock());
42 Script.Set(Blockly.Blocks, ColourRGBBlock.type_name, new ColourRGBBlock());
43 Script.Set(Blockly.Blocks, ColourBlendBlock.type_name, new ColourBlendBlock());
44 Script.Set(Blockly.Blocks, ListsCreateEmptyBlock.type_name, new ListsCreateEmptyBlock());
45 Script.Set(Blockly.Blocks, ListsCreateWithBlock.type_name, new ListsCreateWithBlock());
46 Script.Set(Blockly.Blocks, ListsCreateWithContainerBlock.type_name, new ListsCreateWithContainerBlock());
47 Script.Set(Blockly.Blocks, ListsCreateWithItemBlock.type_name, new ListsCreateWithItemBlock());
48 Script.Set(Blockly.Blocks, ListsRepeatBlock.type_name, new ListsRepeatBlock());
49 Script.Set(Blockly.Blocks, ListsLengthBlock.type_name, new ListsLengthBlock());
50 Script.Set(Blockly.Blocks, ListsIsEmptyBlock.type_name, new ListsIsEmptyBlock());
51 Script.Set(Blockly.Blocks, ListsIndexOfBlock.type_name, new ListsIndexOfBlock());
52 Script.Set(Blockly.Blocks, ListsGetIndexBlock.type_name, new ListsGetIndexBlock());
53 Script.Set(Blockly.Blocks, ListsSetIndexBlock.type_name, new ListsSetIndexBlock());
54 Script.Set(Blockly.Blocks, ListsGetSublistBlock.type_name, new ListsGetSublistBlock());
55 Script.Set(Blockly.Blocks, ListsSortBlock.type_name, new ListsSortBlock());
56 Script.Set(Blockly.Blocks, ListsSplitBlock.type_name, new ListsSplitBlock());
57 Script.Set(Blockly.Blocks, ControlsIfBlock.type_name, new ControlsIfBlock());
58 Script.Set(Blockly.Blocks, ControlsIfIfBlock.type_name, new ControlsIfIfBlock());
59 Script.Set(Blockly.Blocks, ControlsIfElseIfBlock.type_name, new ControlsIfElseIfBlock());
60 Script.Set(Blockly.Blocks, ControlsIfElseBlock.type_name, new ControlsIfElseBlock());
61 Script.Set(Blockly.Blocks, SwitchCaseNumberBlock.type_name, new SwitchCaseNumberBlock());
62 Script.Set(Blockly.Blocks, SwitchCaseNumberContainerBlock.type_name, new SwitchCaseNumberContainerBlock());
63 Script.Set(Blockly.Blocks, SwitchCaseNumberConstBlock.type_name, new SwitchCaseNumberConstBlock());
64 Script.Set(Blockly.Blocks, SwitchCaseNumberRangeBlock.type_name, new SwitchCaseNumberRangeBlock());
65 Script.Set(Blockly.Blocks, SwitchCaseNumberDefaultBlock.type_name, new SwitchCaseNumberDefaultBlock());
66 Script.Set(Blockly.Blocks, SwitchCaseTextBlock.type_name, new SwitchCaseTextBlock());
67 Script.Set(Blockly.Blocks, SwitchCaseTextContainerBlock.type_name, new SwitchCaseTextContainerBlock());
68 Script.Set(Blockly.Blocks, SwitchCaseTextConstBlock.type_name, new SwitchCaseTextConstBlock());
69 Script.Set(Blockly.Blocks, SwitchCaseTextRangeBlock.type_name, new SwitchCaseTextRangeBlock());
70 Script.Set(Blockly.Blocks, SwitchCaseTextDefaultBlock.type_name, new SwitchCaseTextDefaultBlock());
71 Script.Set(Blockly.Blocks, LogicCompareBlock.type_name, new LogicCompareBlock());
72 Script.Set(Blockly.Blocks, LogicOperationBlock.type_name, new LogicOperationBlock());
73 Script.Set(Blockly.Blocks, LogicNegateBlock.type_name, new LogicNegateBlock());
74 Script.Set(Blockly.Blocks, LogicBooleanBlock.type_name, new LogicBooleanBlock());
75 Script.Set(Blockly.Blocks, LogicNullBlock.type_name, new LogicNullBlock());
76 Script.Set(Blockly.Blocks, LogicTernaryBlock.type_name, new LogicTernaryBlock());
77 Script.Set(Blockly.Blocks, ControlsRepeatExtBlock.type_name, new ControlsRepeatExtBlock());
78 Script.Set(Blockly.Blocks, ControlsRepeatBlock.type_name, new ControlsRepeatBlock());
79 Script.Set(Blockly.Blocks, ControlsWhileUntilBlock.type_name, new ControlsWhileUntilBlock());
80 Script.Set(Blockly.Blocks, ControlsForBlock.type_name, new ControlsForBlock());
81 Script.Set(Blockly.Blocks, ControlsForEachBlock.type_name, new ControlsForEachBlock());
82 Script.Set(Blockly.Blocks, ControlsFlowStatementsBlock.type_name, new ControlsFlowStatementsBlock());
83 Script.Set(Blockly.Blocks, MathNumberBlock.type_name, new MathNumberBlock());
84 Script.Set(Blockly.Blocks, MathArithmeticBlock.type_name, new MathArithmeticBlock());
85 Script.Set(Blockly.Blocks, MathSingleBlock.type_name, new MathSingleBlock());
86 Script.Set(Blockly.Blocks, MathTrigBlock.type_name, new MathTrigBlock());
87 Script.Set(Blockly.Blocks, MathConstantBlock.type_name, new MathConstantBlock());
88 Script.Set(Blockly.Blocks, MathNumberPropertyBlock.type_name, new MathNumberPropertyBlock());
89 Script.Set(Blockly.Blocks, MathChangeBlock.type_name, new MathChangeBlock());
90 Script.Set(Blockly.Blocks, MathRoundBlock.type_name, new MathRoundBlock());
91 Script.Set(Blockly.Blocks, MathOnListBlock.type_name, new MathOnListBlock());
92 Script.Set(Blockly.Blocks, MathModuloBlock.type_name, new MathModuloBlock());
93 Script.Set(Blockly.Blocks, MathConstrainBlock.type_name, new MathConstrainBlock());
94 Script.Set(Blockly.Blocks, MathRandomIntBlock.type_name, new MathRandomIntBlock());
95 Script.Set(Blockly.Blocks, MathRandomFloatBlock.type_name, new MathRandomFloatBlock());
96 Script.Set(Blockly.Blocks, ProceduresDefnoreturnBlock.type_name, new ProceduresDefnoreturnBlock());
97 Script.Set(Blockly.Blocks, ProceduresDefreturnBlock.type_name, new ProceduresDefreturnBlock());
98 Script.Set(Blockly.Blocks, ProceduresMutatorcontainerBlock.type_name, new ProceduresMutatorcontainerBlock());
99 Script.Set(Blockly.Blocks, ProceduresMutatorargBlock.type_name, new ProceduresMutatorargBlock());
100 Script.Set(Blockly.Blocks, ProceduresCallnoreturnBlock.type_name, new ProceduresCallnoreturnBlock());
101 Script.Set(Blockly.Blocks, ProceduresCallreturnBlock.type_name, new ProceduresCallreturnBlock());
102 Script.Set(Blockly.Blocks, ProceduresIfreturnBlock.type_name, new ProceduresIfreturnBlock());
103 Script.Set(Blockly.Blocks, TextBlock.type_name, new TextBlock());
104 Script.Set(Blockly.Blocks, TextJoinBlock.type_name, new TextJoinBlock());
105 Script.Set(Blockly.Blocks, TextCreateJoinContainerBlock.type_name, new TextCreateJoinContainerBlock());
106 Script.Set(Blockly.Blocks, TextCreateJoinItemBlock.type_name, new TextCreateJoinItemBlock());
107 Script.Set(Blockly.Blocks, TextAppendBlock.type_name, new TextAppendBlock());
108 Script.Set(Blockly.Blocks, TextLengthBlock.type_name, new TextLengthBlock());
109 Script.Set(Blockly.Blocks, TextIsEmptyBlock.type_name, new TextIsEmptyBlock());
110 Script.Set(Blockly.Blocks, TextIndexOfBlock.type_name, new TextIndexOfBlock());
111 Script.Set(Blockly.Blocks, TextCharAtBlock.type_name, new TextCharAtBlock());
112 Script.Set(Blockly.Blocks, TextGetSubstringBlock.type_name, new TextGetSubstringBlock());
113 Script.Set(Blockly.Blocks, TextChangeCaseBlock.type_name, new TextChangeCaseBlock());
114 Script.Set(Blockly.Blocks, TextTrimBlock.type_name, new TextTrimBlock());
115 Script.Set(Blockly.Blocks, TextPrintBlock.type_name, new TextPrintBlock());
116 Script.Set(Blockly.Blocks, TextPromptExtBlock.type_name, new TextPromptExtBlock());
117 Script.Set(Blockly.Blocks, TextPromptBlock.type_name, new TextPromptBlock());
118 Script.Set(Blockly.Blocks, VariablesGetBlock.type_name, new VariablesGetBlock());
119 Script.Set(Blockly.Blocks, VariablesSetBlock.type_name, new VariablesSetBlock());
120 Script.Set(Blockly.Blocks, ENodeInitializeBlock.type_name, new ENodeInitializeBlock());
121 Script.Set(Blockly.Blocks, EObjectInitializeBlock.type_name, new EObjectInitializeBlock());
122 Script.Set(Blockly.Blocks, EPropertyFixLenBlock.type_name, new EPropertyFixLenBlock());
123 Script.Set(Blockly.Blocks, EPropertyFixLenContainerBlock.type_name, new EPropertyFixLenContainerBlock());
124 Script.Set(Blockly.Blocks, EPropertyFixLenConstBlock.type_name, new EPropertyFixLenConstBlock());
125 Script.Set(Blockly.Blocks, EPropertyFixLenRangeBlock.type_name, new EPropertyFixLenRangeBlock());
126 Script.Set(Blockly.Blocks, EPropertyFixLenDefaultBlock.type_name, new EPropertyFixLenDefaultBlock());
127 Script.Set(Blockly.Blocks, EPropertyVarLenBlock.type_name, new EPropertyVarLenBlock());
128 Script.Set(Blockly.Blocks, EcnlPropertyAttributeBlock.type_name, new EcnlPropertyAttributeBlock());
129 Script.Set(Blockly.Blocks, EcnlServiceCodeBlock.type_name, new EcnlServiceCodeBlock());
130 Script.Set(Blockly.Blocks, EcnlNodeIDBlock.type_name, new EcnlNodeIDBlock());
131 Script.Set(Blockly.Blocks, EcnlSaveReceivedPropertyBlock.type_name, new EcnlSaveReceivedPropertyBlock());
132 Script.Set(Blockly.Blocks, EcnlGetSavedPropertyBlock.type_name, new EcnlGetSavedPropertyBlock());
133 Script.Set(Blockly.Blocks, EcnlGetPropertyInfoBlock.type_name, new EcnlGetPropertyInfoBlock());
134 Script.Set(Blockly.Blocks, EcnlSetAnnounceRequestBlock.type_name, new EcnlSetAnnounceRequestBlock());
135 Script.Set(Blockly.Blocks, EcnlDataToNumberBlock.type_name, new EcnlDataToNumberBlock());
136 Script.Set(Blockly.Blocks, EcnlNumberToDataBlock.type_name, new EcnlNumberToDataBlock());
137 Script.Set(Blockly.Blocks, EcnlNoOpBlock.type_name, new EcnlNoOpBlock());
138 Script.Set(Blockly.Blocks, EcnlReceivedDataBlock.type_name, new EcnlReceivedDataBlock());
139 Script.Set(Blockly.Blocks, EcnlReceivedDataSizeBlock.type_name, new EcnlReceivedDataSizeBlock());
140 Script.Set(Blockly.Blocks, DataJoinBlock.type_name, new DataJoinBlock());
141 Script.Set(Blockly.Blocks, DataCreateJoinContainerBlock.type_name, new DataCreateJoinContainerBlock());
142 Script.Set(Blockly.Blocks, DataCreateJoinItemBlock.type_name, new DataCreateJoinItemBlock());
143 Script.Set(Blockly.Blocks, CreateEsvGetBlock.type_name, new CreateEsvGetBlock());
144 Script.Set(Blockly.Blocks, CreateEsvSetBlock.type_name, new CreateEsvSetBlock());
145 Script.Set(Blockly.Blocks, EsvAddEdtBlock.type_name, new EsvAddEdtBlock());
146 Script.Set(Blockly.Blocks, EsvAddEpcBlock.type_name, new EsvAddEpcBlock());
147 Script.Set(Blockly.Blocks, SendEsvBlock.type_name, new SendEsvBlock());
148 Script.Set(Blockly.Blocks, ReleaseEsvBlock.type_name, new ReleaseEsvBlock());
149 Script.Set(Blockly.Blocks, NotifyInitialEsvBlock.type_name, new NotifyInitialEsvBlock());
150 Script.Set(Blockly.Blocks, EsvGetEsvBlock.type_name, new EsvGetEsvBlock());
151 Script.Set(Blockly.Blocks, EsvIterateBlock.type_name, new EsvIterateBlock());
152 Script.Set(Blockly.Blocks, EsvIteratorBlock.type_name, new EsvIteratorBlock());
153 Script.Set(Blockly.Blocks, SvctaskSetTimerBlock.type_name, new SvctaskSetTimerBlock());
154 Script.Set(Blockly.Blocks, SvctaskTimerBlock.type_name, new SvctaskTimerBlock());
155 Script.Set(Blockly.Blocks, SvctaskProgressBlock.type_name, new SvctaskProgressBlock());
156 Script.Set(Blockly.Blocks, SvctaskRecvMsgBlock.type_name, new SvctaskRecvMsgBlock());
157 Script.Set(Blockly.Blocks, SvctaskCallTimeoutBlock.type_name, new SvctaskCallTimeoutBlock());
158 Script.Set(Blockly.Blocks, SvctaskIsMatchBlock.type_name, new SvctaskIsMatchBlock());
159 Script.Set(Blockly.Blocks, CallBlock.type_name, new CallBlock());
160 Script.Set(Blockly.Blocks, PinModeBlock.type_name, new PinModeBlock());
161 Script.Set(Blockly.Blocks, DigitalWriteBlock.type_name, new DigitalWriteBlock());
162 Script.Set(Blockly.Blocks, DigitalReadBlock.type_name, new DigitalReadBlock());
163 Script.Set(Blockly.Blocks, AnalogReadBlock.type_name, new AnalogReadBlock());
164 Script.Set(Blockly.Blocks, PwmBlock.type_name, new PwmBlock());
165 Script.Set(Blockly.Blocks, PwmValueBlock.type_name, new PwmValueBlock());
166 Script.Set(Blockly.Blocks, AnalogReferenceBlock.type_name, new AnalogReferenceBlock());
167 Script.Set(Blockly.Blocks, InitDacBlock.type_name, new InitDacBlock());
168 Script.Set(Blockly.Blocks, AnalogDacBlock.type_name, new AnalogDacBlock());
169 Script.Set(Blockly.Blocks, DacValueBlock.type_name, new DacValueBlock());
170 Script.Set(Blockly.Blocks, DelayBlock.type_name, new DelayBlock());
171 Script.Set(Blockly.Blocks, MillisBlock.type_name, new MillisBlock());
172 Script.Set(Blockly.Blocks, MicrosBlock.type_name, new MicrosBlock());
173 Script.Set(Blockly.Blocks, LedBlock.type_name, new LedBlock());
174 Script.Set(Blockly.Blocks, BitBlock.type_name, new BitBlock());
175 Script.Set(Blockly.Blocks, ToneBlock.type_name, new ToneBlock());
176 Script.Set(Blockly.Blocks, ToneValueBlock.type_name, new ToneValueBlock());
177 Script.Set(Blockly.Blocks, NoToneBlock.type_name, new NoToneBlock());
178 Script.Set(Blockly.Blocks, RandomSeedBlock.type_name, new RandomSeedBlock());
179 Script.Set(Blockly.Blocks, RandomBlock.type_name, new RandomBlock());
180 Script.Set(Blockly.Blocks, I2cNewBlock.type_name, new I2cNewBlock());
181 Script.Set(Blockly.Blocks, I2cWriteBlock.type_name, new I2cWriteBlock());
182 Script.Set(Blockly.Blocks, I2cReadBlock.type_name, new I2cReadBlock());
183 Script.Set(Blockly.Blocks, I2cBeginBlock.type_name, new I2cBeginBlock());
184 Script.Set(Blockly.Blocks, I2cLwriteBlock.type_name, new I2cLwriteBlock());
185 Script.Set(Blockly.Blocks, I2cEndBlock.type_name, new I2cEndBlock());
186 Script.Set(Blockly.Blocks, I2cRequestBlock.type_name, new I2cRequestBlock());
187 Script.Set(Blockly.Blocks, I2cLreadBlock.type_name, new I2cLreadBlock());
188 Script.Set(Blockly.Blocks, I2cAvailableBlock.type_name, new I2cAvailableBlock());
189 Script.Set(Blockly.Blocks, I2cFrequencyBlock.type_name, new I2cFrequencyBlock());
190 Script.Set(Blockly.Blocks, MemFileOpenBlock.type_name, new MemFileOpenBlock());
191 Script.Set(Blockly.Blocks, MemFileCloseBlock.type_name, new MemFileCloseBlock());
192 Script.Set(Blockly.Blocks, MemFileReadBlock.type_name, new MemFileReadBlock());
193 Script.Set(Blockly.Blocks, MemFileWriteBlock.type_name, new MemFileWriteBlock());
194 Script.Set(Blockly.Blocks, MemFileSeekBlock.type_name, new MemFileSeekBlock());
195 Script.Set(Blockly.Blocks, MemFileCpBlock.type_name, new MemFileCpBlock());
196 Script.Set(Blockly.Blocks, MemFileRmBlock.type_name, new MemFileRmBlock());
197 Script.Set(Blockly.Blocks, RtcYearBlock.type_name, new RtcYearBlock());
198 Script.Set(Blockly.Blocks, RtcMonthBlock.type_name, new RtcMonthBlock());
199 Script.Set(Blockly.Blocks, RtcDayBlock.type_name, new RtcDayBlock());
200 Script.Set(Blockly.Blocks, RtcHourBlock.type_name, new RtcHourBlock());
201 Script.Set(Blockly.Blocks, RtcMinuteBlock.type_name, new RtcMinuteBlock());
202 Script.Set(Blockly.Blocks, RtcSecondBlock.type_name, new RtcSecondBlock());
203 Script.Set(Blockly.Blocks, RtcWeekDayBlock.type_name, new RtcWeekDayBlock());
204 Script.Set(Blockly.Blocks, RtcDateTimeBlock.type_name, new RtcDateTimeBlock());
205 Script.Set(Blockly.Blocks, RtcDateTimeItemBlock.type_name, new RtcDateTimeItemBlock());
206 Script.Set(Blockly.Blocks, RtcSetDateTimeItemBlock.type_name, new RtcSetDateTimeItemBlock());
207 Script.Set(Blockly.Blocks, RtcGetTimeBlock.type_name, new RtcGetTimeBlock());
208 Script.Set(Blockly.Blocks, RtcSettimeBlock.type_name, new RtcSettimeBlock());
209 Script.Set(Blockly.Blocks, RtcDeinitBlock.type_name, new RtcDeinitBlock());
210 Script.Set(Blockly.Blocks, RtcInitBlock.type_name, new RtcInitBlock());
211 Script.Set(Blockly.Blocks, SdExistsBlock.type_name, new SdExistsBlock());
212 Script.Set(Blockly.Blocks, SdMkdirBlock.type_name, new SdMkdirBlock());
213 Script.Set(Blockly.Blocks, SdRemoveBlock.type_name, new SdRemoveBlock());
214 Script.Set(Blockly.Blocks, SdCopyBlock.type_name, new SdCopyBlock());
215 Script.Set(Blockly.Blocks, SdRmdirBlock.type_name, new SdRmdirBlock());
216 Script.Set(Blockly.Blocks, SdOpenBlock.type_name, new SdOpenBlock());
217 Script.Set(Blockly.Blocks, SdCloseBlock.type_name, new SdCloseBlock());
218 Script.Set(Blockly.Blocks, SdReadBlock.type_name, new SdReadBlock());
219 Script.Set(Blockly.Blocks, SdSeekBlock.type_name, new SdSeekBlock());
220 Script.Set(Blockly.Blocks, SdWriteBlock.type_name, new SdWriteBlock());
221 Script.Set(Blockly.Blocks, SdFlushBlock.type_name, new SdFlushBlock());
222 Script.Set(Blockly.Blocks, SdSizeBlock.type_name, new SdSizeBlock());
223 Script.Set(Blockly.Blocks, SdPositionBlock.type_name, new SdPositionBlock());
224 Script.Set(Blockly.Blocks, BpsValueBlock.type_name, new BpsValueBlock());
225 Script.Set(Blockly.Blocks, SerialNewBlock.type_name, new SerialNewBlock());
226 Script.Set(Blockly.Blocks, SerialBpsBlock.type_name, new SerialBpsBlock());
227 Script.Set(Blockly.Blocks, SerialPrintBlock.type_name, new SerialPrintBlock());
228 Script.Set(Blockly.Blocks, SerialPrintlnBlock.type_name, new SerialPrintlnBlock());
229 Script.Set(Blockly.Blocks, SerialAvailableBlock.type_name, new SerialAvailableBlock());
230 Script.Set(Blockly.Blocks, SerialReadBlock.type_name, new SerialReadBlock());
231 Script.Set(Blockly.Blocks, SerialWriteBlock.type_name, new SerialWriteBlock());
232 Script.Set(Blockly.Blocks, SerialFlashBlock.type_name, new SerialFlashBlock());
233 Script.Set(Blockly.Blocks, ServoAttachBlock.type_name, new ServoAttachBlock());
234 Script.Set(Blockly.Blocks, ServoWriteBlock.type_name, new ServoWriteBlock());
235 Script.Set(Blockly.Blocks, ServoAngleBlock.type_name, new ServoAngleBlock());
236 Script.Set(Blockly.Blocks, ServoUsBlock.type_name, new ServoUsBlock());
237 Script.Set(Blockly.Blocks, ServoUsValueBlock.type_name, new ServoUsValueBlock());
238 Script.Set(Blockly.Blocks, ServoReadBlock.type_name, new ServoReadBlock());
239 Script.Set(Blockly.Blocks, ServoAttachedBlock.type_name, new ServoAttachedBlock());
240 Script.Set(Blockly.Blocks, ServoDetachBlock.type_name, new ServoDetachBlock());
241 Script.Set(Blockly.Blocks, SystemExitBlock.type_name, new SystemExitBlock());
242 Script.Set(Blockly.Blocks, SystemSetRunBlock.type_name, new SystemSetRunBlock());
243 Script.Set(Blockly.Blocks, SystemVersionBlock.type_name, new SystemVersionBlock());
244 Script.Set(Blockly.Blocks, SystemPushBlock.type_name, new SystemPushBlock());
245 Script.Set(Blockly.Blocks, SystemPopBlock.type_name, new SystemPopBlock());
246 Script.Set(Blockly.Blocks, SystemFileLoadBlock.type_name, new SystemFileLoadBlock());
247 Script.Set(Blockly.Blocks, SystemResetBlock.type_name, new SystemResetBlock());
248 Script.Set(Blockly.Blocks, SystemUseSdBlock.type_name, new SystemUseSdBlock());
249 Script.Set(Blockly.Blocks, SystemUseWifiBlock.type_name, new SystemUseWifiBlock());
250 Script.Set(Blockly.Blocks, SystemGetMrbPathBlock.type_name, new SystemGetMrbPathBlock());
251 Script.Set(Blockly.Blocks, HexadecimalBlock.type_name, new HexadecimalBlock());
252 Blockly.Procedures = new Procedures();
253 Blockly.Variables = new Variables();
254 Blockly.Names = new Names("");
255 }
256
257 public BlocklyView(string identifier)
258 {
259 Identifier = identifier;
260
261 FlyoutCategoryHandlers.Add(Blockly.Procedures.NAME_TYPE, Blockly.Procedures.flyoutCategory);
262 FlyoutCategoryHandlers.Add(Blockly.Variables.NAME_TYPE, Blockly.Variables.flyoutCategory);
263 }
264
265 public Workspace Init()
266 {
267 var tab = jQuery.Select("#block-tab-right-pane");
268 // <div dir="LTR" id="blockly-div"></div>
269 var div = new jQuery("<div>");
270 div.Attr("dir", "LTR");
271 div.Attr("class", "blockly-div");
272 _IdNo = No++;
273 _WorkspaceElementId = "blockly-div" + _IdNo;
274 div.Attr("id", _WorkspaceElementId);
275 div.Attr("style", "z-index: " + _IdNo);
276 tab.Append(div);
277
278 Blockly.HSV_SATURATION = 1.0;
279 Blockly.HSV_VALUE = 0.8;
280 _Workspace = Blockly.inject(_WorkspaceElementId, new {
281 toolbox = Document.GetElementById("toolbox"),
282 collapse = true,
283 comments = true,
284 disable = true,
285 maxBlocks = Script.Infinity,
286 trashcan = true,
287 horizontalLayout = false,
288 toolboxPosition = "start",
289 css = true,
290 rtl = false,
291 scrollbars = true,
292 sounds = false,
293 oneBasedIndex = false,
294 zoom = new {
295 controls = true,
296 wheel = true,
297 startScale = 0.8,
298 maxcale = 3,
299 minScale = 0.3
300 }
301 });
302
303 if (No != 2)
304 Hide();
305 else
306 Show();
307
308 Script.Set(Script.Get(Script.Get(_Workspace, "toolbox_"), "flyout_"),
309 "flyoutCategory",
310 new Func<Union<string, Element[]>, Workspace, Element[]>(FlyoutCategory));
311
312 _Workspace.addChangeListener(Workspace_Changed);
313
314 return _Workspace;
315 }
316
317 internal void Dispose()
318 {
319 jQuery.Select("#" + _WorkspaceElementId).Remove();
320 _Workspace.clear();
321 _Workspace.dispose();
322 }
323
324 internal void Show()
325 {
326 var div = jQuery.Select("#" + _WorkspaceElementId);
327 div.Attr("style", "z-index: " + (_IdNo + 100));
328
329 Blockly.mainWorkspace = _Workspace;
330 }
331
332 internal void Hide()
333 {
334 var div = jQuery.Select("#" + _WorkspaceElementId);
335 div.Attr("style", "z-index: " + _IdNo);
336 }
337
338 private void Workspace_Changed(Abstract e)
339 {
340 Changed = true;
341
342 switch (e.type) {
343 case WebMrbc.Events.CREATE:
344 Create cre = (Create)e;
345 BlockCreated?.Invoke(this, cre);
346 break;
347 case WebMrbc.Events.DELETE:
348 Delete del = (Delete)e;
349 BlockDeleted?.Invoke(this, del);
350 break;
351 case WebMrbc.Events.CHANGE:
352 Change chg = (Change)e;
353 BlockChanged?.Invoke(this, chg);
354 break;
355 case WebMrbc.Events.MOVE:
356 Move mov = (Move)e;
357 BlockMoveed?.Invoke(this, mov);
358 break;
359 case WebMrbc.Events.UI:
360 Ui ui = (Ui)e;
361 UiEvent?.Invoke(this, ui);
362 break;
363 }
364 }
365
366 internal void ReloadToolbox(IClassWorkspace workspace)
367 {
368 if (_Workspace != workspace.Workspace)
369 throw new Exception();
370
371 Blockly.mainWorkspace = _Workspace;
372 Blockly.hideChaff();
373
374 var toolbox = Document.CreateElement<HTMLElement>("xml");
375 toolbox.InnerHTML = Document.GetElementById("toolbox").InnerHTML;
376 workspace.ReloadToolbox(toolbox);
377
378 _Workspace.updateToolbox(toolbox);
379 }
380
381 public virtual Element[] FlyoutCategory(Union<string, Element[]> name, Workspace workspace)
382 {
383 if (!name.Is<string>())
384 return name.Cast<Element[]>();
385
386 FlyoutCategoryHandler handler;
387 if (FlyoutCategoryHandlers.TryGetValue(name.Cast<string>(), out handler)) {
388 return handler(workspace);
389 }
390 return new Element[0];
391 }
392 }
393
394 public delegate Element[] FlyoutCategoryHandler(Workspace workspace);
395}
Note: See TracBrowser for help on using the repository browser.